0
0
mirror of https://github.com/nodejs/node.git synced 2024-11-30 07:27:22 +01:00
nodejs/tools/mkssldef.py
Alex Hultman 359352c9e9
build: export zlib symbols on Windows
Base the generated openssl.def on existing zlib.def. We cannot specify
more than one DEF file per executable so we need to merge the two DEF
files to expose both OpenSSL and Zlib functionality to addons.

If OpenSSL is not used, link against zlib.def itself.

PR-URL: https://github.com/nodejs/node/pull/7983
Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl>
Reviewed-By: James M Snell <jasnell@gmail.com>
2016-08-08 15:15:48 +02:00

54 lines
1.7 KiB
Python
Executable File

#!/usr/bin/env python
from __future__ import print_function
import re
import sys
categories = []
defines = []
excludes = []
bases = []
if __name__ == '__main__':
out = sys.stdout
filenames = sys.argv[1:]
while filenames and filenames[0].startswith('-'):
option = filenames.pop(0)
if option == '-o': out = open(filenames.pop(0), 'w')
elif option.startswith('-C'): categories += option[2:].split(',')
elif option.startswith('-D'): defines += option[2:].split(',')
elif option.startswith('-X'): excludes += option[2:].split(',')
elif option.startswith('-B'): bases += option[2:].split(',')
excludes = map(re.compile, excludes)
exported = []
for filename in filenames:
for line in open(filename).readlines():
name, _, meta, _ = re.split('\s+', line)
if any(map(lambda p: p.match(name), excludes)): continue
meta = meta.split(':')
assert meta[0] in ('EXIST', 'NOEXIST')
assert meta[2] in ('FUNCTION', 'VARIABLE')
if meta[0] != 'EXIST': continue
if meta[2] != 'FUNCTION': continue
def satisfy(expr, rules):
def test(expr):
if expr.startswith('!'): return not expr[1:] in rules
return expr == '' or expr in rules
return all(map(test, expr.split(',')))
if not satisfy(meta[1], defines): continue
if not satisfy(meta[3], categories): continue
exported.append(name)
for filename in bases:
for line in open(filename).readlines():
line = line.strip()
if line == 'EXPORTS': continue
if line[0] == ';': continue
exported.append(line)
print('EXPORTS', file=out)
for name in sorted(exported): print(' ', name, file=out)