summaryrefslogtreecommitdiff
path: root/build/gen_def.py
diff options
context:
space:
mode:
Diffstat (limited to 'build/gen_def.py')
-rwxr-xr-xbuild/gen_def.py68
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)