diff --git a/node.gyp b/node.gyp index a14aa5813243ba..4cb368a8c6f334 100644 --- a/node.gyp +++ b/node.gyp @@ -372,9 +372,14 @@ '-Wl,--no-whole-archive', ], }], + # openssl.def is based on zlib.def, zlib symbols + # are always exported. ['use_openssl_def==1', { 'sources': ['<(SHARED_INTERMEDIATE_DIR)/openssl.def'], }], + ['OS=="win" and use_openssl_def==0', { + 'sources': ['deps/zlib/win32/zlib.def'], + }], ], }], ], @@ -570,6 +575,8 @@ '-X^DSO', '-X^_', '-X^private_', + # Base generated DEF on zlib.def + '-Bdeps/zlib/win32/zlib.def' ], }, 'conditions': [ diff --git a/tools/mkssldef.py b/tools/mkssldef.py index 8cbdbabd976ba9..8354e5712ef099 100755 --- a/tools/mkssldef.py +++ b/tools/mkssldef.py @@ -7,6 +7,7 @@ categories = [] defines = [] excludes = [] +bases = [] if __name__ == '__main__': out = sys.stdout @@ -18,6 +19,7 @@ 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 = [] @@ -40,5 +42,12 @@ def test(expr): 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)