Skip to content

Commit fe29811

Browse files
minijacksonralphlange
authored andcommitted
add --add-env argument for appending to generic environment variables
1 parent dead44c commit fe29811

2 files changed

Lines changed: 27 additions & 11 deletions

File tree

cue-test.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -702,7 +702,7 @@ def test_MisspelledConfigurationGetsWarning(self):
702702

703703

704704
class TestSetupForBuild(unittest.TestCase):
705-
args = Namespace(paths=[])
705+
args = Namespace(extra_env_vars=[])
706706
if ci_os == 'windows':
707707
choco_installs = ['make']
708708
if ci_service != 'appveyor':
@@ -721,7 +721,7 @@ def tearDown(self):
721721

722722
def test_AddPathsOption(self):
723723
os.environ['FOOBAR'] = 'BAR'
724-
args = Namespace(paths=['/my/{FOOBAR}/dir', '/my/foobar'])
724+
args = Namespace(extra_env_vars=['PATH=/my/{FOOBAR}/dir', 'PATH=/my/foobar'])
725725
cue.setup_for_build(args)
726726
self.assertTrue(re.search('/my/BAR/dir', os.environ['PATH']), 'Expanded path not in PATH')
727727
self.assertTrue(re.search('/foobar', os.environ['PATH']), 'Plain path not in PATH')
@@ -887,7 +887,7 @@ def test_archive7z(self):
887887

888888
@unittest.skipIf(ci_os != 'linux', 'CrossCompatibilityHandling tests only apply to linux')
889889
class TestCrossCompatibilityHandling(unittest.TestCase):
890-
args = Namespace(paths=[])
890+
args = Namespace(extra_env_vars=[])
891891

892892
def setUp(self):
893893
cue.clear_lists()

cue.py

Lines changed: 24 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -766,17 +766,33 @@ def setup_for_build(args):
766766

767767
# apparently %CD% is handled automagically, so use getcwd() instead
768768
os.environ['TOP'] = os.getcwd()
769+
os.environ['MAKE'] = 'make'
770+
os.environ['EPICS_BASE'] = places['EPICS_BASE']
769771

770-
addpaths = []
771-
for path in args.paths:
772+
changed_vars = set()
773+
774+
for extra_env_var in args.extra_env_vars:
772775
try:
773-
addpaths.append(path.format(**os.environ))
776+
key_value = extra_env_var.split('=')
777+
key = key_value[0]
778+
value = key_value[1]
779+
expanded_value = value.format(**os.environ)
780+
781+
# Update the environment right now so later variables have access
782+
if key in os.environ:
783+
old_value = [os.environ[key]]
784+
else:
785+
old_value = []
786+
787+
os.environ[key] = os.pathsep.join(old_value + [expanded_value])
788+
changed_vars.add(key)
774789
except KeyError:
775790
print('Environment')
776791
[print(' ', K, '=', repr(V)) for K, V in os.environ.items()]
777792
raise
778793

779-
os.environ['PATH'] = os.pathsep.join([os.environ['PATH']] + addpaths)
794+
for key in changed_vars:
795+
print("{0}{2} = {3}{1}".format(ANSI_CYAN, ANSI_RESET, key, os.environ[key]))
780796

781797
# os.environ completely updated at this point
782798

@@ -1354,8 +1370,6 @@ def test_results(args):
13541370
def doExec(args):
13551371
'exec user command with vcvars'
13561372
setup_for_build(args)
1357-
os.environ['MAKE'] = 'make'
1358-
os.environ['EPICS_BASE'] = places['EPICS_BASE']
13591373
fold_start('exec.command', 'Execute command {}'.format(args.cmd))
13601374
sp.check_call(' '.join(args.cmd), shell=True)
13611375
fold_end('exec.command', 'Execute command {}'.format(args.cmd))
@@ -1425,8 +1439,10 @@ def timespec(s):
14251439
p = ArgumentParser()
14261440
p.add_argument('--no-vcvars', dest='vcvars', default=True, action='store_false',
14271441
help='Assume vcvarsall.bat has already been run')
1428-
p.add_argument('--add-path', dest='paths', default=[], action='append',
1429-
help='Append directory to $PATH or %%PATH%%. Expands {ENVVAR}')
1442+
p.add_argument('--add-path', dest='extra_env_vars', type=lambda x: "PATH={}".format(x), default=[], action='append',
1443+
help='Append directory to $PATH or %%PATH%%. Expands {ENVVAR}. Equivalent to: "--add-env PATH=<PATHS>"')
1444+
p.add_argument('--add-env', dest='extra_env_vars', default=[], action='append',
1445+
help='Append directory to the specified $ENVVAR or %%ENVVAR%%. Expands {OTHER_ENVVAR}. Example: "--add-env \'LD_LIBRARY_PATH={EPICS_BASE}/lib/{EPICS_HOST_ARCH}\'"')
14301446
p.add_argument('-T', '--timeout', type=timespec, metavar='DLY',
14311447
help='Terminate make after delay. DLY interpreted as second, or may be qualified with "S", "M", or "H". (default no timeout)')
14321448
subp = p.add_subparsers()

0 commit comments

Comments
 (0)