X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=gst-uninstalled.py;h=2025ace645cbfdeff88d5ebbd30f6ec542816add;hb=c7e3c8e9f65027d6643c29da17079e7dc084de52;hp=a62eac6bd0f61733063593d5e76f53304e7c80c1;hpb=4ef0584295cb84e69b67ea8adb0dbb0f60b36895;p=platform%2Fupstream%2Fgstreamer.git diff --git a/gst-uninstalled.py b/gst-uninstalled.py deleted file mode 100755 index a62eac6..0000000 --- a/gst-uninstalled.py +++ /dev/null @@ -1,259 +0,0 @@ -#!/usr/bin/env python3 - -import argparse -import contextlib -import json -import os -import platform -import re -import site -import shutil -import subprocess -import sys -import tempfile - -from distutils.sysconfig import get_python_lib - -from common import get_meson - -SCRIPTDIR = os.path.dirname(os.path.realpath(__file__)) -PREFIX_DIR = os.path.join(SCRIPTDIR, 'prefix') -# Use '_build' as the builddir instead of 'build' -DEFAULT_BUILDDIR = os.path.join(SCRIPTDIR, 'build') -if not os.path.exists(DEFAULT_BUILDDIR): - DEFAULT_BUILDDIR = os.path.join(SCRIPTDIR, '_build') - - -def prepend_env_var(env, var, value): - env[var] = os.pathsep + value + os.pathsep + env.get(var, "") - env[var] = env[var].replace(os.pathsep + os.pathsep, os.pathsep).strip(os.pathsep) - - -def get_subprocess_env(options): - env = os.environ.copy() - - env["CURRENT_GST"] = os.path.normpath(SCRIPTDIR) - env["GST_VALIDATE_SCENARIOS_PATH"] = os.path.normpath( - "%s/subprojects/gst-devtools/validate/data/scenarios" % SCRIPTDIR) - env["GST_VALIDATE_PLUGIN_PATH"] = os.path.normpath( - "%s/subprojects/gst-devtools/validate/plugins" % options.builddir) - env["GST_VALIDATE_APPS_DIR"] = os.path.normpath( - "%s/subprojects/gst-editing-services/tests/validate" % SCRIPTDIR) - prepend_env_var(env, "PATH", os.path.normpath( - "%s/subprojects/gst-devtools/validate/tools" % options.builddir)) - prepend_env_var(env, "PATH", os.path.join(SCRIPTDIR, 'meson')) - env["GST_VERSION"] = options.gst_version - env["GST_ENV"] = 'gst-' + options.gst_version - env["GST_PLUGIN_SYSTEM_PATH"] = "" - env["GST_PLUGIN_SCANNER"] = os.path.normpath( - "%s/subprojects/gstreamer/libs/gst/helpers/gst-plugin-scanner" % options.builddir) - env["GST_PTP_HELPER"] = os.path.normpath( - "%s/subprojects/gstreamer/libs/gst/helpers/gst-ptp-helper" % options.builddir) - env["GST_REGISTRY"] = os.path.normpath(options.builddir + "/registry.dat") - - sharedlib_reg = re.compile(r'\.so|\.dylib|\.dll') - typelib_reg = re.compile(r'.*\.typelib$') - pluginpath_reg = re.compile(r'lib.*' + re.escape(os.path.normpath('/gstreamer-1.0/'))) - - if os.name is 'nt': - lib_path_envvar = 'PATH' - elif platform.system() == 'Darwin': - lib_path_envvar = 'DYLD_LIBRARY_PATH' - else: - lib_path_envvar = 'LD_LIBRARY_PATH' - - prepend_env_var(env, "GST_PLUGIN_PATH", os.path.join(SCRIPTDIR, 'subprojects', - 'gst-python', 'plugin')) - prepend_env_var(env, "GST_PLUGIN_PATH", os.path.join(PREFIX_DIR, 'lib', - 'gstreamer-1.0')) - prepend_env_var(env, "PATH", os.path.join(PREFIX_DIR, 'bin')) - prepend_env_var(env, lib_path_envvar, os.path.join(PREFIX_DIR, 'lib')) - prepend_env_var(env, "GST_VALIDATE_SCENARIOS_PATH", os.path.join( - PREFIX_DIR, 'share', 'gstreamer-1.0', 'validate', 'scenarios')) - prepend_env_var(env, "GI_TYPELIB_PATH", os.path.join(PREFIX_DIR, 'lib', - 'lib', 'girepository-1.0')) - prepend_env_var(env, "PKG_CONFIG_PATH", os.path.join(PREFIX_DIR, 'lib', 'pkgconfig')) - - meson = get_meson() - targets_s = subprocess.check_output([sys.executable, meson, 'introspect', options.builddir, '--targets']) - targets = json.loads(targets_s.decode()) - paths = set() - mono_paths = set() - for target in targets: - filename = target['filename'] - root = os.path.dirname(filename) - if filename.endswith('.dll'): - mono_paths.add(os.path.join(options.builddir, root)) - if typelib_reg.search(filename): - prepend_env_var(env, "GI_TYPELIB_PATH", - os.path.join(options.builddir, root)) - elif sharedlib_reg.search(filename): - if target.get('type') != "shared library": - continue - - if target.get('installed') and pluginpath_reg.search(os.path.normpath(target.get('install_filename'))): - prepend_env_var(env, "GST_PLUGIN_PATH", os.path.join(options.builddir, root)) - continue - - prepend_env_var(env, lib_path_envvar, - os.path.join(options.builddir, root)) - elif target.get('type') == 'executable' and target.get('installed'): - paths.add(os.path.join(options.builddir, root)) - - for p in paths: - prepend_env_var(env, 'PATH', p) - - if os.name != 'nt': - for p in mono_paths: - prepend_env_var(env, "MONO_PATH", p) - - presets = set() - encoding_targets = set() - pkg_dirs = set() - if '--installed' in subprocess.check_output([sys.executable, meson, 'introspect', '-h']).decode(): - installed_s = subprocess.check_output([sys.executable, meson, 'introspect', - options.builddir, '--installed']) - for path, installpath in json.loads(installed_s.decode()).items(): - if path.endswith('.prs'): - presets.add(os.path.dirname(path)) - elif path.endswith('.gep'): - encoding_targets.add( - os.path.abspath(os.path.join(os.path.dirname(path), '..'))) - elif path.endswith('.pc'): - # Is there a -uninstalled pc file for this file? - uninstalled = "{0}-uninstalled.pc".format(path[:-3]) - if os.path.exists(uninstalled): - pkg_dirs.add(os.path.dirname(path)) - - for p in presets: - prepend_env_var(env, 'GST_PRESET_PATH', p) - - for t in encoding_targets: - prepend_env_var(env, 'GST_ENCODING_TARGET_PATH', t) - - for pkg_dir in pkg_dirs: - prepend_env_var(env, "PKG_CONFIG_PATH", pkg_dir) - prepend_env_var(env, "PKG_CONFIG_PATH", os.path.join(options.builddir, - 'subprojects', - 'gst-plugins-good', - 'pkgconfig')) - - mesonpath = os.path.join(SCRIPTDIR, "meson") - if os.path.join(mesonpath): - # Add meson/ into PYTHONPATH if we are using a local meson - prepend_env_var(env, 'PYTHONPATH', mesonpath) - - return env - -# https://stackoverflow.com/questions/1871549/determine-if-python-is-running-inside-virtualenv -def in_venv(): - return (hasattr(sys, 'real_prefix') or - (hasattr(sys, 'base_prefix') and sys.base_prefix != sys.prefix)) - -def python_env(options, unset_env=False): - """ - Setup our overrides_hack.py as sitecustomize.py script in user - site-packages if unset_env=False, else unset, previously set - env. - """ - subprojects_path = os.path.join(options.builddir, "subprojects") - gst_python_path = os.path.join(SCRIPTDIR, "subprojects", "gst-python") - if not os.path.exists(os.path.join(subprojects_path, "gst-python")) or \ - not os.path.exists(gst_python_path): - return False - - if in_venv (): - sitepackages = get_python_lib() - else: - sitepackages = site.getusersitepackages() - - if not sitepackages: - return False - - sitecustomize = os.path.join(sitepackages, "sitecustomize.py") - overrides_hack = os.path.join(gst_python_path, "testsuite", "overrides_hack.py") - mesonconfig = os.path.join(gst_python_path, "testsuite", "mesonconfig.py") - mesonconfig_link = os.path.join(sitepackages, "mesonconfig.py") - - if not unset_env: - if os.path.exists(sitecustomize): - if os.path.realpath(sitecustomize) == overrides_hack: - print("Customize user site script already linked to the GStreamer one") - return False - - old_sitecustomize = os.path.join(sitepackages, - "old.sitecustomize.gstuninstalled.py") - shutil.move(sitecustomize, old_sitecustomize) - elif not os.path.exists(sitepackages): - os.makedirs(sitepackages) - - with contextlib.suppress(FileNotFoundError): - os.remove(sitecustomize) - os.remove(mesonconfig_link) - os.symlink(overrides_hack, sitecustomize) - os.symlink(mesonconfig, mesonconfig_link) - return os.path.realpath(sitecustomize) == overrides_hack - else: - if not os.path.realpath(sitecustomize) == overrides_hack: - return False - - os.remove(sitecustomize) - os.remove (mesonconfig_link) - old_sitecustomize = os.path.join(sitepackages, - "old.sitecustomize.gstuninstalled.py") - - if os.path.exists(old_sitecustomize): - shutil.move(old_sitecustomize, sitecustomize) - - return True - - -if __name__ == "__main__": - parser = argparse.ArgumentParser(prog="gstreamer-uninstalled") - - parser.add_argument("--builddir", - default=DEFAULT_BUILDDIR, - help="The meson build directory") - parser.add_argument("--srcdir", - default=SCRIPTDIR, - help="The top level source directory") - parser.add_argument("--gst-version", default="master", - help="The GStreamer major version") - options, args = parser.parse_known_args() - - if not os.path.exists(options.builddir): - print("GStreamer not built in %s\n\nBuild it and try again" % - options.builddir) - exit(1) - options.builddir = os.path.abspath(options.builddir) - - if not os.path.exists(options.srcdir): - print("The specified source dir does not exist" % - options.srcdir) - exit(1) - - if not args: - if os.name is 'nt': - args = [os.environ.get("COMSPEC", r"C:\WINDOWS\system32\cmd.exe")] - else: - args = [os.environ.get("SHELL", os.path.realpath("/bin/sh"))] - if "bash" in args[0]: - bashrc = os.path.expanduser('~/.bashrc') - if os.path.exists(bashrc): - tmprc = tempfile.NamedTemporaryFile(mode='w') - with open(bashrc, 'r') as src: - shutil.copyfileobj(src, tmprc) - tmprc.write('\nexport PS1="[gst-%s] $PS1"' % options.gst_version) - tmprc.flush() - # Let the GC remove the tmp file - args.append("--rcfile") - args.append(tmprc.name) - python_set = python_env(options) - try: - exit(subprocess.call(args, cwd=options.srcdir, close_fds=False, - env=get_subprocess_env(options))) - except subprocess.CalledProcessError as e: - exit(e.returncode) - finally: - if python_set: - python_env(options, unset_env=True) diff --git a/gst-uninstalled.py b/gst-uninstalled.py new file mode 120000 index 0000000..2025ace --- /dev/null +++ b/gst-uninstalled.py @@ -0,0 +1 @@ +gst-env.py \ No newline at end of file