4c3d5e8e58
Approved by: re (rgrimes)
79 lines
2.6 KiB
Python
Executable File
79 lines
2.6 KiB
Python
Executable File
#!/usr/bin/env python
|
|
#
|
|
# gen_def.py : Generate the .DEF file for Windows builds
|
|
#
|
|
# ===================================================================
|
|
# Licensed to the Apache Software Foundation (ASF) under one
|
|
# or more contributor license agreements. See the NOTICE file
|
|
# distributed with this work for additional information
|
|
# regarding copyright ownership. The ASF licenses this file
|
|
# to you 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-zA-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
|
|
|
|
# Blacklist the serf v2 API for now
|
|
blacklist = ['serf_connection_switch_protocol',
|
|
'serf_http_protocol_create',
|
|
'serf_http_request_create',
|
|
'serf_https_protocol_create']
|
|
|
|
if __name__ == '__main__':
|
|
# run the extraction over each file mentioned
|
|
import sys
|
|
print("EXPORTS")
|
|
|
|
for fname in sys.argv[1:]:
|
|
funclist = extract_exports(fname)
|
|
funclist = set(funclist) - set(blacklist)
|
|
for func in funclist:
|
|
print(func)
|