#!/usr/bin/env python # # gen_def.py : Generate the .DEF file for Windows builds # # ==================================================================== # Copyright 2002-2010 Justin Erenkrantz and Greg Stein # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # ==================================================================== # # # Typically, this script is used like: # # C:\PATH> python build/gen_def.py serf.h serf_bucket_types.h serf_bucket_util.h > build/serf.def # import re import sys # This regex parses function declarations that look like: # # return_type serf_func1(... # return_type *serf_func2(... # # Where return_type is a combination of words and "*" each separated by a # SINGLE space. If the function returns a pointer type (like serf_func2), # then a space may exist between the "*" and the function name. Thus, # a more complicated example might be: # const type * const * serf_func3(... # _funcs = re.compile(r'^(?:(?:\w+|\*) )+\*?(serf_[a-z][a-z_0-9]*)\(', re.MULTILINE) # This regex parses the bucket type definitions which look like: # # extern const serf_bucket_type_t serf_bucket_type_FOO; # _types = re.compile(r'^extern const serf_bucket_type_t (serf_[a-z_]*);', re.MULTILINE) def extract_exports(fname): content = open(fname).read() exports = [ ] for name in _funcs.findall(content): exports.append(name) for name in _types.findall(content): exports.append(name) return exports if __name__ == '__main__': # run the extraction over each file mentioned import sys print("EXPORTS") for fname in sys.argv[1:]: for func in extract_exports(fname): print(func)