meson: Install in gi._overidesdir only if we are installing in right prefix
authorThibault Saunier <thibault.saunier@osg.samsung.com>
Thu, 23 Mar 2017 15:09:05 +0000 (12:09 -0300)
committerThibault Saunier <thibault.saunier@osg.samsung.com>
Fri, 24 Mar 2017 15:38:04 +0000 (12:38 -0300)
And make sure python detector did not fail

https://bugzilla.gnome.org/show_bug.cgi?id=780369

meson.build
scripts/pythondetector [moved from pythondetector with 61% similarity]

index f42f0ed..71a5993 100644 (file)
@@ -22,14 +22,38 @@ pygobject_dep = dependency('pygobject-3.0', version : '>= 3.0')
 python_dep = dependency('python3')
 
 python = find_program('python3')
-pythondetector = find_program('pythondetector')
-py_so_suffix = run_command(pythondetector, '--sosuffix').stdout().strip()
-python_abi_flags = run_command(pythondetector, '--abiflags').stdout().strip()
-pylib_loc = run_command(pythondetector, '--libloc').stdout().strip()
+pythondetector = find_program('scripts/pythondetector')
+
+cres = run_command(pythondetector, '--sosuffix')
+if cres.returncode() != 0
+    error('Could not detect python sosuffix' + cres.stdout() + cres.stderr())
+endif
+py_so_suffix = cres.stdout().strip()
+
+cres = run_command(pythondetector, '--abiflags')
+if cres.returncode() != 0
+    error('Could not detect python abiflags' + cres.stdout() + cres.stderr())
+endif
+python_abi_flags = cres.stdout().strip()
+
+cres = run_command(pythondetector, '--libloc')
+if cres.returncode() != 0
+    error('Could not detect python library location' + cres.stdout() + cres.stderr())
+endif
+pylib_loc = cres.stdout().strip()
+
 assert(pylib_loc != 'None', 'Python dynamic library path could not be determined')
 pygi_override_dir = get_option('pygi-overrides-dir')
 if pygi_override_dir == ''
-    pygi_override_dir = run_command(pythondetector, '--pygi-overridedir').stdout().strip()
+    cres = run_command(pythondetector, '--pygi-overridedir',
+            get_option('prefix'))
+    if cres.returncode() != 0
+        error('Could not detect PyGObject overrides location' + cres.stdout() + cres.stderr())
+    endif
+    pygi_override_dir = cres.stdout().strip()
+    if cres.stderr() != ''
+        message(cres.stderr())
+    endif
 endif
 message('pygobject overrides directory ' + pygi_override_dir)
 
@@ -39,7 +63,6 @@ if host_machine.system() == 'windows'
 elif host_machine.system() == 'darwin'
   pylib_suffix = 'dylib'
 endif
-
 cdata = configuration_data()
 cdata.set('PACKAGE', '"gst-python"')
 cdata.set('VERSION', '"@0@"'.format(gst_version))
similarity index 61%
rename from pythondetector
rename to scripts/pythondetector
index 1d3149e..2671e27 100644 (file)
@@ -36,8 +36,8 @@ def get_python_libloc():
 
 
 if __name__ == "__main__":
-    if len(sys.argv) > 2:
-        print("Only 1 argument accepted")
+    if len(sys.argv) > 3:
+        print("At most 2 arguments accepted")
         exit(1)
 
     if sys.argv[1] == '--abiflags':
@@ -47,7 +47,25 @@ if __name__ == "__main__":
         suffix = get("EXT_SUFFIX") or get("SO") or ".so"
         print(suffix[1:])
     elif sys.argv[1] == '--pygi-overridedir':
+        prefix = sys.argv[2]
+        version = sys.version_info
+
+        # If we are installing in the same prefix as PyGobject
+        # make sure to install in the right place.
         import gi
-        print(gi._overridesdir)
+        if os.path.commonprefix([gi._overridesdir, prefix]) == prefix:
+            print(gi._overridesdir)
+            exit(0)
+
+        # Otherwise follow python's way of install site packages inside
+        # the provided prefix
+        if os.name == 'posix':
+            print(os.path.join(
+                prefix, 'lib', 'python%d.%d' % (version.major, version.minor),
+                'site-packages', 'gi', 'overrides'))
+        else:
+            print(os.path.join(
+                prefix, 'Lib', 'Python%d%d' % (version.major, version.minor),
+                'site-packages', 'gi', 'overrides'))
     elif sys.argv[1] == '--libloc':
         print(get_python_libloc())