diff options
Diffstat (limited to 'build/gen_def.py')
-rwxr-xr-x | build/gen_def.py | 68 |
1 files changed, 68 insertions, 0 deletions
diff --git a/build/gen_def.py b/build/gen_def.py new file mode 100755 index 0000000..c76b9a4 --- /dev/null +++ b/build/gen_def.py @@ -0,0 +1,68 @@ +#!/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) |