Mercurial > hg > mercurial-source
changeset 33565:9a4adc76c88a
setup: avoid linker warnings on Windows about multiple export specifications
The PyMODINIT_FUNC macro contains __declspec(dllexport), and then the build
process adds an "/EXPORT func" to the command line. The 64-bit linker flags
this [1].
Everything except zstd.c and bser.c are covered by redefining the macro in
util.h [2]. These modules aren't built with util.h in the #include path, so the
redefining hack would have to be open coded two more times.
After seeing that extra_linker_flags didn't work, I couldn't find anything
authoritative indicating why, though I did see an offhand comment on SO that
CFLAGS is also ignored on Windows. I also don't fully understand the
interaction between msvccompiler and msvc9compiler- I first subclassed the
latter, but it isn't used when building with VS2008.
I know the camelcase naming isn't the standard, but the HackedMingw32CCompiler
class above it was introduced 5 years ago (and I think the current style was
in place by then), so I assume that there's some reason for it.
[1] https://support.microsoft.com/en-us/help/835326/you-receive-an-lnk4197-error-in-the-64-bit-version-of-the-visual-c-compiler
[2] https://bugs.python.org/issue9709#msg120859
author | Matt Harbison <matt_harbison@yahoo.com> |
---|---|
date | Fri, 09 Jun 2017 22:15:53 -0400 |
parents | 448fc659a430 |
children | 4483696dacee |
files | setup.py |
diffstat | 1 files changed, 17 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/setup.py +++ b/setup.py @@ -704,6 +704,23 @@ class HackedMingw32CCompiler(object): pass +if os.name == 'nt': + # Allow compiler/linker flags to be added to Visual Studio builds. Passing + # extra_link_args to distutils.extensions.Extension() doesn't have any + # effect. + from distutils import msvccompiler + + compiler = msvccompiler.MSVCCompiler + + class HackedMSVCCompiler(msvccompiler.MSVCCompiler): + def initialize(self): + compiler.initialize(self) + # "warning LNK4197: export 'func' specified multiple times" + self.ldflags_shared.append('/ignore:4197') + self.ldflags_shared_debug.append('/ignore:4197') + + msvccompiler.MSVCCompiler = HackedMSVCCompiler + packagedata = {'mercurial': ['locale/*/LC_MESSAGES/hg.mo', 'help/*.txt', 'help/internals/*.txt',