--- a/py2exe_setuptools.py +++ b/py2exe_setuptools.py @@ -109,6 +109,13 @@ else: ext_path += ".dll" + if 'GCC' in sys.version: + if ext.name == "py2exe.run_ctypes_dll": + ext.export_symbols = [s.replace(",", " ") for s in ext.export_symbols] + ext.extra_link_args.append("-Wl,--enable-stdcall-fixup") + else: + ext.export_symbols = None + depends = sources + ext.depends if not (self.force or newer_group(depends, ext_path, 'newer')): log.debug("skipping '%s' extension (up-to-date)", ext.name) @@ -130,7 +137,7 @@ # The environment variable should take precedence, and # any sensible compiler will give precedence to later # command line args. Hence we combine them in order: - extra_args = ext.extra_compile_args or [] + extra_compile_args = ext.extra_compile_args or [] macros = ext.define_macros[:] for undef in ext.undef_macros: @@ -141,7 +148,7 @@ macros=macros, include_dirs=ext.include_dirs, debug=self.debug, - extra_postargs=extra_args, + extra_postargs=extra_compile_args, depends=ext.depends) # XXX -- this is a Vile HACK! @@ -160,7 +167,7 @@ # that go into the mix. if ext.extra_objects: objects.extend(ext.extra_objects) - extra_args = ext.extra_link_args or [] + extra_link_args = ext.extra_link_args or [] # Detect target language, if not provided ## language = ext.language or self.compiler.detect_language(sources) @@ -187,7 +194,7 @@ library_dirs=ext.library_dirs, runtime_library_dirs=ext.runtime_library_dirs, export_symbols=ext.export_symbols, - extra_postargs=extra_args, + extra_postargs=extra_link_args, debug=self.debug) @@ -204,7 +211,7 @@ fnm = os.path.join(*ext_path) if ext_path[-1] == "resources": return fnm - return '%s-py%s.%s-%s' % (fnm, sys.version_info[0], sys.version_info[1], get_platform()) + return '%s-py%s%s-%s' % (fnm, sys.version_info[0], sys.version_info[1], get_platform()) def InstallSubCommands(): --- a/setup.py +++ b/setup.py @@ -21,8 +21,8 @@ ############################################################################ -python_dll_name = '\"python%d%d.dll\"' % sys.version_info[:2] -python_dll_name_debug = '\"python%d%d_d.dll\"' % sys.version_info[:2] +python_dll_name = '\"libpython%d.%d.dll\"' % sys.version_info[:2] +python_dll_name_debug = '\"libpython%d.%d_d.dll\"' % sys.version_info[:2] def _is_debug_build(): for ext in machinery.all_suffixes(): @@ -45,16 +45,11 @@ extra_compile_args = [] extra_link_args = [] -extra_compile_args.append("-IC:\\Program Files\\Microsoft SDKs\\Windows\\v7.0\\Include") -extra_compile_args.append("-IC:\\Program Files (x86)\\Microsoft Visual Studio 14.0\\VC\\include") -extra_compile_args.append("-IC:\\Program Files (x86)\\Windows Kits\\10\\Include\\10.0.10586.0\\ucrt") - -if 0: - # enable this to debug a release build - extra_compile_args.append("/Od") - extra_compile_args.append("/Z7") - extra_link_args.append("/DEBUG") - macros.append(("VERBOSE", "1")) +platname = [] +if '64 bit' in sys.version: + platname = ["-m64"] +else: + platname = ["-m32"] run_ctypes_dll = Interpreter("py2exe.run_ctypes_dll", ["source/run_ctypes_dll.c", @@ -77,7 +71,7 @@ target_desc = "shared_library", define_macros=macros, extra_compile_args=extra_compile_args, - extra_link_args=extra_link_args + ["/DLL"], + extra_link_args=extra_link_args + platname + ["-mwindows"], ) run = Interpreter("py2exe.run", @@ -95,7 +89,7 @@ libraries=["user32", "shell32"], define_macros=macros, extra_compile_args=extra_compile_args, - extra_link_args=extra_link_args, + extra_link_args=extra_link_args + platname + ["-mconsole", "-municode"], ) run_w = Interpreter("py2exe.run_w", @@ -113,7 +107,7 @@ libraries=["user32", "shell32"], define_macros=macros, extra_compile_args=extra_compile_args, - extra_link_args=extra_link_args, + extra_link_args=extra_link_args + platname + ["-mwindows"], ) # The py2exe.resources name is special handled in BuildInterpreters; @@ -129,7 +123,7 @@ ["source/dll.c", "source/icon.rc"], target_desc = "shared_library", - extra_link_args=["/DLL"], + extra_link_args=platname, ) interpreters = [run, run_w, resource_dll, --- a/setup_zipextimporter.py +++ b/setup_zipextimporter.py @@ -23,8 +23,8 @@ ############################################################################ -python_dll_name = '\"python%d%d.dll\"' % sys.version_info[:2] -python_dll_name_debug = '\"python%d%d_d.dll\"' % sys.version_info[:2] +python_dll_name = '\"libpython%d.%d.dll\"' % sys.version_info[:2] +python_dll_name_debug = '\"libpython%d.%d_d.dll\"' % sys.version_info[:2] def _is_debug_build(): for ext in machinery.all_suffixes(): @@ -46,11 +46,6 @@ extra_compile_args = [] extra_link_args = [] -extra_compile_args.append("-IC:\\Program Files\\Microsoft SDKs\\Windows\\v7.0\\Include") -extra_compile_args.append("-IC:\\Program Files (x86)\\Microsoft Visual Studio 14.0\\VC\\include") -extra_compile_args.append("-IC:\\Program Files (x86)\\Windows Kits\\10\\Include\\10.0.10586.0\\ucrt") -extra_compile_args.append("/DSTANDALONE") - if 0: # enable this to debug a release build extra_compile_args.append("/Od")