[pygobject] setup.py: Make the test command work under MSYS2



commit f59ba1ae65876df786458f785558f96d8b400c9a
Author: Christoph Reiter <reiter christoph gmail com>
Date:   Mon Jan 22 23:09:10 2018 +0100

    setup.py: Make the test command work under MSYS2
    
    gobject-introspection requires an import lib (.dll.a) on Windows,
    so build that as well.
    
    Disable the dbus tests until we have a temp bus like with autotools.
    Unset MSYSTEM to disable the os.sep hackery.
    
    This hit a bug in GI for the mingw+no-libtool case, see
    https://bugzilla.gnome.org/show_bug.cgi?id=791902
    The fix has been applied to MSYS2 in the meantime, see
    https://github.com/Alexpux/MINGW-packages/pull/3308

 .gitignore |  2 ++
 setup.py   | 57 +++++++++++++++++++++++++++++++++++++++++++--------------
 2 files changed, 45 insertions(+), 14 deletions(-)
---
diff --git a/.gitignore b/.gitignore
index 8dfaeaf6..2c676a9c 100644
--- a/.gitignore
+++ b/.gitignore
@@ -79,3 +79,5 @@ Makefile.in
 /MANIFEST
 /docs/_build
 /PyGObject.egg-info/
+*.pyd
+*.dll.a
diff --git a/setup.py b/setup.py
index a85e1672..ea0d25f3 100644
--- a/setup.py
+++ b/setup.py
@@ -240,13 +240,18 @@ class build_tests(Command):
             'build_ext',
             ('build_temp', 'build_temp'))
 
-    def _newer_group(self, sources, target):
+    def _newer_group(self, sources, *targets):
+        assert targets
+
         from distutils.dep_util import newer_group
 
         if self.force:
             return True
         else:
-            return newer_group(sources, target)
+            for target in targets:
+                if not newer_group(sources, target):
+                    return False
+            return True
 
     def run(self):
         from distutils.ccompiler import new_compiler
@@ -274,24 +279,41 @@ class build_tests(Command):
 
         compiler = new_compiler()
         customize_compiler(compiler)
+        if os.name == "nt":
+            # XXX: something broken with mingw python2
+            compiler.shared_lib_extension = ".dll"
 
         def build_ext(ext):
-            ext_path = os.path.join(
-                tests_dir,
-                compiler.shared_object_filename(ext.name))
+            if compiler.compiler_type == "msvc":
+                raise Exception("MSVC support not implemented")
+
+            libname = compiler.shared_object_filename(ext.name)
+            ext_paths = [os.path.join(tests_dir, libname)]
+            if os.name == "nt":
+                implibname = libname + ".a"
+                ext_paths.append(os.path.join(tests_dir, implibname))
 
-            if self._newer_group(ext.sources + ext.depends, ext_path):
+            if self._newer_group(ext.sources + ext.depends, *ext_paths):
                 objects = compiler.compile(
                     ext.sources,
                     output_dir=self.build_temp,
                     include_dirs=ext.include_dirs)
 
+                if os.name == "nt":
+                    postargs = ["-Wl,--out-implib=%s" %
+                                os.path.join(tests_dir, implibname)]
+                else:
+                    postargs = []
+
                 compiler.link_shared_object(
                     objects,
-                    ext_path,
-                    output_dir=script_dir,
+                    compiler.shared_object_filename(ext.name),
+                    output_dir=tests_dir,
                     libraries=ext.libraries,
-                    library_dirs=ext.library_dirs)
+                    library_dirs=ext.library_dirs,
+                    extra_postargs=postargs)
+
+            return ext_paths
 
         ext = Extension(
             name='libgimarshallingtests',
@@ -310,15 +332,16 @@ class build_tests(Command):
         )
         add_ext_pkg_config_dep(ext, compiler.compiler_type, "glib-2.0")
         add_ext_pkg_config_dep(ext, compiler.compiler_type, "gio-2.0")
-        build_ext(ext)
+        ext_paths = build_ext(ext)
 
         gir_path = os.path.join(tests_dir, "GIMarshallingTests-1.0.gir")
         typelib_path = os.path.join(
             tests_dir, "GIMarshallingTests-1.0.typelib")
 
-        if self._newer_group(ext.sources + ext.depends, gir_path):
+        if self._newer_group(ext_paths, gir_path):
             subprocess.check_call([
                 g_ir_scanner,
+                "--no-libtool",
                 "--include=Gio-2.0",
                 "--namespace=GIMarshallingTests",
                 "--nsversion=1.0",
@@ -355,14 +378,15 @@ class build_tests(Command):
         add_ext_pkg_config_dep(ext, compiler.compiler_type, "gio-2.0")
         add_ext_pkg_config_dep(ext, compiler.compiler_type, "cairo")
         add_ext_pkg_config_dep(ext, compiler.compiler_type, "cairo-gobject")
-        build_ext(ext)
+        ext_paths = build_ext(ext)
 
         gir_path = os.path.join(tests_dir, "Regress-1.0.gir")
         typelib_path = os.path.join(tests_dir, "Regress-1.0.typelib")
 
-        if self._newer_group(ext.sources + ext.depends, gir_path):
+        if self._newer_group(ext_paths, gir_path):
             subprocess.check_call([
                 g_ir_scanner,
+                "--no-libtool",
                 "--include=cairo-1.0",
                 "--include=Gio-2.0",
                 "--namespace=Regress",
@@ -433,11 +457,16 @@ class test(Command):
         cmd.ensure_finalized()
         cmd.run()
 
+        env = os.environ.copy()
+        env.pop("MSYSTEM", None)
+        # TODO: set up a temp bus, disable until then
+        env["DBUS_SESSION_BUS_ADDRESS"] = ""
+
         tests_dir = os.path.join(get_script_dir(), "tests")
         subprocess.check_call([
             sys.executable,
             os.path.join(tests_dir, "runtests.py"),
-        ])
+        ], env=env)
 
 
 class quality(Command):


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]