aboutsummaryrefslogtreecommitdiff
path: root/mesonbuild/mdevenv.py
diff options
context:
space:
mode:
authorXavier Claessens <xavier.claessens@collabora.com>2022-02-23 10:04:57 -0500
committerXavier Claessens <xclaesse@gmail.com>2022-02-28 09:03:27 -0500
commit24f224777de7a54a1334c820509bef0aa9b37678 (patch)
treef2a3ba72ad595e898394939ee793265768d1138b /mesonbuild/mdevenv.py
parent30cdb2a28077d9a0364b9ef6b231927c52436a6b (diff)
downloadmeson-24f224777de7a54a1334c820509bef0aa9b37678.zip
meson-24f224777de7a54a1334c820509bef0aa9b37678.tar.gz
meson-24f224777de7a54a1334c820509bef0aa9b37678.tar.bz2
devenv: Add --dump option
It prints all envorinmente variables that have been modified. Can be used by shell scripts that wish to setup their environment themself.
Diffstat (limited to 'mesonbuild/mdevenv.py')
-rw-r--r--mesonbuild/mdevenv.py36
1 files changed, 25 insertions, 11 deletions
diff --git a/mesonbuild/mdevenv.py b/mesonbuild/mdevenv.py
index 0fc8595..6268c1d 100644
--- a/mesonbuild/mdevenv.py
+++ b/mesonbuild/mdevenv.py
@@ -2,10 +2,11 @@ import os, subprocess
import argparse
import tempfile
import shutil
+import itertools
from pathlib import Path
from . import build, minstall, dependencies
-from .mesonlib import MesonException, RealPathAction, is_windows, setup_vsenv, OptionKey
+from .mesonlib import MesonException, RealPathAction, is_windows, setup_vsenv, OptionKey, quote_arg
from . import mlog
import typing as T
@@ -14,7 +15,9 @@ if T.TYPE_CHECKING:
def add_arguments(parser: argparse.ArgumentParser) -> None:
parser.add_argument('-C', dest='wd', action=RealPathAction,
- help='directory to cd into before running')
+ help='Directory to cd into before running')
+ parser.add_argument('--dump', action='store_true',
+ help='Only print required environment (Since 0.62.0)')
parser.add_argument('command', nargs=argparse.REMAINDER,
help='Command to run in developer environment (default: interactive shell)')
@@ -25,11 +28,7 @@ def get_windows_shell() -> str:
result = subprocess.check_output(command)
return result.decode().strip()
-def get_env(b: build.Build, build_dir: str) -> T.Dict[str, str]:
- env = os.environ.copy()
- for i in b.devenv:
- env = i.get_env(env)
-
+def get_env(b: build.Build, build_dir: str) -> T.Tuple[T.Dict[str, str], T.Set[str]]:
extra_env = build.EnvironmentVariables()
extra_env.set('MESON_DEVENV', ['1'])
extra_env.set('MESON_PROJECT_NAME', [b.project_name])
@@ -38,7 +37,13 @@ def get_env(b: build.Build, build_dir: str) -> T.Dict[str, str]:
if meson_uninstalled.is_dir():
extra_env.prepend('PKG_CONFIG_PATH', [str(meson_uninstalled)])
- return extra_env.get_env(env)
+ env = os.environ.copy()
+ varnames = set()
+ for i in itertools.chain(b.devenv, {extra_env}):
+ env = i.get_env(env)
+ varnames |= i.get_names()
+
+ return env, varnames
def bash_completion_files(b: build.Build, install_data: 'InstallData') -> T.List[str]:
result = []
@@ -108,12 +113,21 @@ def run(options: argparse.Namespace) -> int:
if not buildfile.is_file():
raise MesonException(f'Directory {options.wd!r} does not seem to be a Meson build directory.')
b = build.load(options.wd)
- install_data = minstall.load_install_data(str(privatedir / 'install.dat'))
- setup_vsenv(b.need_vsenv)
- devenv = get_env(b, options.wd)
+ devenv, varnames = get_env(b, options.wd)
+ if options.dump:
+ if options.command:
+ raise MesonException('--dump option does not allow running other command.')
+ for name in varnames:
+ print(f'{name}={quote_arg(devenv[name])}')
+ print(f'export {name}')
+ return 0
+
+ install_data = minstall.load_install_data(str(privatedir / 'install.dat'))
write_gdb_script(privatedir, install_data)
+ setup_vsenv(b.need_vsenv)
+
args = options.command
if not args:
prompt_prefix = f'[{b.project_name}]'