mirror of
https://github.com/nodejs/node.git
synced 2024-11-29 23:16:30 +01:00
359352c9e9
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>
54 lines
1.7 KiB
Python
Executable File
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)
|