diff --git a/meson.build b/meson.build index f42f0ed0c9..71a5993176 100644 --- a/meson.build +++ b/meson.build @@ -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)) diff --git a/pythondetector b/scripts/pythondetector similarity index 61% rename from pythondetector rename to scripts/pythondetector index 1d3149e11d..2671e273b3 100644 --- a/pythondetector +++ b/scripts/pythondetector @@ -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())