@@ -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):
13541370def 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