diff --git a/cx_Freeze/hooks.py b/cx_Freeze/hooks.py index 3474f3e..cd04a2a 100644 --- a/cx_Freeze/hooks.py +++ b/cx_Freeze/hooks.py @@ -97,6 +97,8 @@ def load_cryptography_hazmat_bindings__padding(finder, module): def load__ctypes(finder, module): """In Windows, the _ctypes module in Python >= 3.8 requires an additional dll libffi-7.dll to be present in the build directory.""" + # but not for PawPaw + return if sys.platform == "win32" and sys.version_info >= (3, 8): dll_name = "libffi-7.dll" dll_path = os.path.join(sys.base_prefix, "DLLs", dll_name) diff --git a/setup.py b/setup.py index af6689f..d7c84a1 100755 --- a/setup.py +++ b/setup.py @@ -8,6 +8,7 @@ import distutils.command.install_data import distutils.sysconfig import os import sys +from subprocess import getoutput if sys.version_info < (3, 5): sys.exit("Sorry, Python < 3.5 is not supported. Use cx_Freeze 5 for " @@ -22,11 +23,6 @@ except ImportError: class build_ext(distutils.command.build_ext.build_ext): def build_extension(self, ext): - if "bases" not in ext.name: - distutils.command.build_ext.build_ext.build_extension(self, ext) - return - if sys.platform == "win32" and self.compiler.compiler_type == "mingw32": - ext.sources.append("source/bases/manifest.rc") os.environ["LD_RUN_PATH"] = "${ORIGIN}/../lib:${ORIGIN}/lib" objects = self.compiler.compile(ext.sources, output_dir = self.build_temp, @@ -41,34 +37,15 @@ class build_ext(distutils.command.build_ext.build_ext): libraryDirs = ext.library_dirs or [] libraries = self.get_libraries(ext) extraArgs = ext.extra_link_args or [] - if sys.platform == "win32": - compiler_type = self.compiler.compiler_type - if compiler_type == "msvc": - extraArgs.append("/MANIFEST") - elif compiler_type == "mingw32": - if "Win32GUI" in ext.name: - extraArgs.append("-mwindows") - else: - extraArgs.append("-mconsole") - if sys.version_info[0] == 3: - extraArgs.append("-municode") + compiler_type = self.compiler.compiler_type + if "Win32GUI" in ext.name: + extraArgs.append("-mwindows") else: - vars = distutils.sysconfig.get_config_vars() - libraryDirs.append(vars["LIBPL"]) - abiflags = getattr(sys, "abiflags", "") - libraries.append("python%s.%s%s" % \ - (sys.version_info[0], sys.version_info[1], abiflags)) - if vars["LINKFORSHARED"] and sys.platform != "darwin": - extraArgs.extend(vars["LINKFORSHARED"].split()) - if vars["LIBS"]: - extraArgs.extend(vars["LIBS"].split()) - if vars["LIBM"]: - extraArgs.append(vars["LIBM"]) - if vars["BASEMODLIBS"]: - extraArgs.extend(vars["BASEMODLIBS"].split()) - if vars["LOCALMODLIBS"]: - extraArgs.extend(vars["LOCALMODLIBS"].split()) - extraArgs.append("-s") + extraArgs.append("-mconsole") + if sys.version_info[0] == 3: + extraArgs.append("-municode") + extraArgs += getoutput("pkg-config --libs python3").split() + extraArgs += os.getenv("LDFLAGS", "").split() self.compiler.link_executable(objects, fullName, libraries = libraries, library_dirs = libraryDirs, @@ -103,10 +80,7 @@ def find_cx_Logging(): commandClasses = dict(build_ext=build_ext) # build utility module -if sys.platform == "win32": - libraries = ["imagehlp", "Shlwapi"] -else: - libraries = [] +libraries = ["imagehlp", "shlwapi"] utilModule = Extension("cx_Freeze.util", ["source/util.c"], libraries = libraries) @@ -117,7 +91,7 @@ depends = ["source/bases/Common.c"] console = Extension("cx_Freeze.bases.Console", ["source/bases/Console.c"], depends = depends, libraries = libraries) extensions = [utilModule, console] -if sys.platform == "win32": +if sys.platform == "win32" or True: gui = Extension("cx_Freeze.bases.Win32GUI", ["source/bases/Win32GUI.c"], depends = depends, libraries = libraries + ["user32"]) extensions.append(gui) diff --git a/setup.py b/setup.py index d7c84a1..e0fdcfc 100755 --- a/setup.py +++ b/setup.py @@ -27,6 +27,7 @@ class build_ext(distutils.command.build_ext.build_ext): objects = self.compiler.compile(ext.sources, output_dir = self.build_temp, include_dirs = ext.include_dirs, + extra_preargs = getoutput("pkg-config --cflags python3").split() + os.getenv("CFLAGS", "").split(), debug = self.debug, depends = ext.depends) fileName = os.path.splitext(self.get_ext_filename(ext.name))[0] @@ -37,13 +38,18 @@ class build_ext(distutils.command.build_ext.build_ext): libraryDirs = ext.library_dirs or [] libraries = self.get_libraries(ext) extraArgs = ext.extra_link_args or [] - compiler_type = self.compiler.compiler_type - if "Win32GUI" in ext.name: - extraArgs.append("-mwindows") + if "bases" in ext.name: + if "Win32GUI" in ext.name: + extraArgs.append("-mwindows") + else: + extraArgs.append("-mconsole") + if sys.version_info[0] == 3: + extraArgs.append("-municode") + if not os.path.exists("build/manifest.o"): + os.system(os.getenv("WINDRES") + " source/bases/manifest.rc build/manifest.o") + extraArgs.append("build/manifest.o") else: - extraArgs.append("-mconsole") - if sys.version_info[0] == 3: - extraArgs.append("-municode") + extraArgs.append("-shared") extraArgs += getoutput("pkg-config --libs python3").split() extraArgs += os.getenv("LDFLAGS", "").split() self.compiler.link_executable(objects, fullName,