How to convert command.env tcl lists with spaces into working env strings

Joshua Root jmr at macports.org
Thu Sep 1 21:06:46 UTC 2022


On 2022-9-1 21:51 , Steven Smith wrote:
> How does one convert a build.env list into a working string for sh env?
> 
> If I specify this build.env
> 
>> build.env-append \
>>     CC=${configure.cc <http://configure.cc>} \
>> "CFLAGS=${configure.cflags} [get_canonical_archflags cc]"
> 
> and later say something like
> 
>> system "env ${build.env}"
> 
> This tcl string with braces ‘{…}’ is passed to the shell, which breaks:
> 
>> env CC=/usr/bin/clang {CFLAGS=-Os -arch x86_64}
> 
> Rather, I need a port file command that converts build.env to:
> 
>> env CC=/usr/bin/clang CFLAGS="-Os -arch x86_64"
> 

Ideally you would run this as part of build.cmd (or some other command) 
and have MacPorts set up the environment directly for you. But if you 
have to do it this way, something like this should work:

foreach e ${build.env} {
     lappend envargs [shellescape $e]
}
system "env [join $envargs] ..."

- Josh


More information about the macports-dev mailing list