aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorXavier Claessens <xclaesse@gmail.com>2021-03-23 17:35:05 -0400
committerGitHub <noreply@github.com>2021-03-23 23:35:05 +0200
commita9e9b7c7501a3c8a5984a93879d1f309bf8c72aa (patch)
treed578c6e790ce958e04531f22004f52ab2aae1422
parent1be13710adba2126f5731fccdf698a9d405a9d67 (diff)
downloadmeson-a9e9b7c7501a3c8a5984a93879d1f309bf8c72aa.zip
meson-a9e9b7c7501a3c8a5984a93879d1f309bf8c72aa.tar.gz
meson-a9e9b7c7501a3c8a5984a93879d1f309bf8c72aa.tar.bz2
devenv: Set GI_TYPELIB_PATH and LD_LIBRARY_PATH (#8548)
-rw-r--r--docs/markdown/Commands.md7
-rw-r--r--docs/markdown/snippets/devenv.md8
-rw-r--r--mesonbuild/backend/backends.py21
-rw-r--r--mesonbuild/modules/gnome.py19
4 files changed, 46 insertions, 9 deletions
diff --git a/docs/markdown/Commands.md b/docs/markdown/Commands.md
index 0751aed..fc8cdd2 100644
--- a/docs/markdown/Commands.md
+++ b/docs/markdown/Commands.md
@@ -295,5 +295,12 @@ These variables are set in environment in addition to those set using `meson.add
- `PATH` includes every directory where there is an executable that would be
installed into `bindir`. On windows it also includes every directory where there
is a DLL needed to run those executables.
+- `LD_LIBRARY_PATH` includes every directory where there is a shared library that
+ would be installed into `libdir`. This allows to run system application using
+ custom build of some libraries. For example running system GEdit when building
+ GTK from git. On OSX the environment variable is `DYLD_LIBRARY_PATH` and
+ `PATH` on Windows.
+- `GI_TYPELIB_PATH` includes every directory where a GObject Introspection
+ typelib is built. This is automatically set when using `gnome.generate_gir()`.
{{ devenv_arguments.inc }}
diff --git a/docs/markdown/snippets/devenv.md b/docs/markdown/snippets/devenv.md
index c3bac10..1160945 100644
--- a/docs/markdown/snippets/devenv.md
+++ b/docs/markdown/snippets/devenv.md
@@ -26,4 +26,10 @@ These variables are set in environment in addition to those set using `meson.add
- `PATH` includes every directory where there is an executable that would be
installed into `bindir`. On windows it also includes every directory where there
is a DLL needed to run those executables.
-
+- `LD_LIBRARY_PATH` includes every directory where there is a shared library that
+ would be installed into `libdir`. This allows to run system application using
+ custom build of some libraries. For example running system GEdit when building
+ GTK from git. On OSX the environment variable is `DYLD_LIBRARY_PATH` and
+ `PATH` on Windows.
+- `GI_TYPELIB_PATH` includes every directory where a GObject Introspection
+ typelib is built. This is automatically set when using `gnome.generate_gir()`.
diff --git a/mesonbuild/backend/backends.py b/mesonbuild/backend/backends.py
index 9624ed6..5ce27c3 100644
--- a/mesonbuild/backend/backends.py
+++ b/mesonbuild/backend/backends.py
@@ -1496,18 +1496,33 @@ class Backend:
def get_devenv(self) -> build.EnvironmentVariables:
env = build.EnvironmentVariables()
extra_paths = set()
+ library_paths = set()
for t in self.build.get_targets().values():
cross_built = not self.environment.machines.matches_build_machine(t.for_machine)
can_run = not cross_built or not self.environment.need_exe_wrapper()
- in_bindir = t.should_install() and not t.get_install_dir(self.environment)[1]
- if isinstance(t, build.Executable) and can_run and in_bindir:
+ in_default_dir = t.should_install() and not t.get_install_dir(self.environment)[1]
+ if not can_run or not in_default_dir:
+ continue
+ tdir = os.path.join(self.environment.get_build_dir(), self.get_target_dir(t))
+ if isinstance(t, build.Executable):
# Add binaries that are going to be installed in bindir into PATH
# so they get used by default instead of searching on system when
# in developer environment.
- extra_paths.add(os.path.join(self.environment.get_build_dir(), self.get_target_dir(t)))
+ extra_paths.add(tdir)
if mesonlib.is_windows() or mesonlib.is_cygwin():
# On windows we cannot rely on rpath to run executables from build
# directory. We have to add in PATH the location of every DLL needed.
extra_paths.update(self.determine_windows_extra_paths(t, []))
+ elif isinstance(t, build.SharedLibrary):
+ # Add libraries that are going to be installed in libdir into
+ # LD_LIBRARY_PATH. This allows running system applications using
+ # that library.
+ library_paths.add(tdir)
+ if mesonlib.is_windows() or mesonlib.is_cygwin():
+ extra_paths.update(library_paths)
+ elif mesonlib.is_osx():
+ env.prepend('DYLD_LIBRARY_PATH', list(library_paths))
+ else:
+ env.prepend('LD_LIBRARY_PATH', list(library_paths))
env.prepend('PATH', list(extra_paths))
return env
diff --git a/mesonbuild/modules/gnome.py b/mesonbuild/modules/gnome.py
index 8a48ca8..dc2979e 100644
--- a/mesonbuild/modules/gnome.py
+++ b/mesonbuild/modules/gnome.py
@@ -50,11 +50,13 @@ gresource_dep_needed_version = '>= 2.51.1'
native_glib_version = None
class GnomeModule(ExtensionModule):
- gir_dep = None
-
- install_glib_compile_schemas = False
- install_gio_querymodules = []
- install_gtk_update_icon_cache = False
+ def __init__(self, interpreter: 'Interpreter') -> None:
+ super().__init__(interpreter)
+ self.gir_dep = None
+ self.install_glib_compile_schemas = False
+ self.install_gio_querymodules = []
+ self.install_gtk_update_icon_cache = False
+ self.devenv = None
@staticmethod
def _get_native_glib_version(state):
@@ -480,6 +482,12 @@ class GnomeModule(ExtensionModule):
return girtarget
+ def _devenv_append(self, varname: str, value: str) -> None:
+ if self.devenv is None:
+ self.devenv = build.EnvironmentVariables()
+ self.interpreter.build.devenv.append(self.devenv)
+ self.devenv.append(varname, [value])
+
def _get_gir_dep(self, state):
if not self.gir_dep:
self.gir_dep = self._get_native_dep(state, 'gobject-introspection-1.0')
@@ -884,6 +892,7 @@ class GnomeModule(ExtensionModule):
typelib_cmd += ["--includedir=" + incdir]
typelib_target = self._make_typelib_target(state, typelib_output, typelib_cmd, kwargs)
+ self._devenv_append('GI_TYPELIB_PATH', os.path.join(state.environment.get_build_dir(), state.subdir))
rv = [scan_target, typelib_target]