[Scons-users] Regression? GetOption('prefix') does not seem to work in SConscript files since Python 3.10

Mats Wichmann mats at wichmann.us
Tue Jun 21 11:35:38 EDT 2022


On 6/21/22 09:16, Robert-André Mauchin wrote:

> ```
> if 'install' in COMMAND_LINE_TARGETS and GetOption('with_gui'):
>     if not which('python3'):
>         print('!! Unable to find python3 executable.')
>         print('!! Will build no GUI.')
>     else:
>         py_install = env.Command(
>             'always.install',
>             ['setup.py'],
>             'cd gui && python3 -m install . --prefix {}'.format(
>                 GetOption('prefix')
>             )
>         )
>         env.Alias('install', py_install)
> ```
> 
> to be able to pass an environment variable to the Python subprocess via
> env.Command.
> 
> Any idea how to do that?

a construction environment contains a variable ENV the holds a dict
known as the execution environment - this is what is passed to the
subprocess call.  And you've been (un) lucky, SCons is adamant about not
passing through environment variables, so you do need to set them
explicity if you need them.  It can be as simple as:

env['ENV']['RPM_BUILD_ROOT'] = "value"


Not sure this is the ideal setup, by the way:

'cd gui && python3 -m install . --prefix {}'.format(GetOption('prefix')


In our own test suites, which do a lot of forking of of Python
subprocesses, the python is typically pasted in (ususally from
sys.interpreter, which may or may not be appropriate in the rpm case),
rather than explicitly named something like. The reason is that the
execution environment also contains the PATH variable, which also isn't
transferred forward from your original environment.  In other words, if
you've got Python in a nonstandard place, which an isolated rpm build
clearly does, you either need to set env['ENV']['PATH'] to something
appropriate, or supply a path-to-Python instead of just the bare name
"python3" to have joy with this....





More information about the Scons-users mailing list