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

Robert-André Mauchin zebob.m at gmail.com
Tue Jun 21 11:16:14 EDT 2022


On 6/21/22 15:59, Mats Wichmann wrote:
> On 6/21/22 07:04, Robert-André Mauchin wrote:
>> Hi Scons people,
>>
>>
>> So I'm trying to build rmlint https://github.com/sahib/rmlint
>> It worked normally on Python 3.9, but since 3.10 and 3.11, I can't
>> install it in the location I want.
>>
>> In the SConstruct file we have
>> ```
>> AddOption(
>>       '--prefix', default='/usr/local',
>>       dest='prefix', type='string', nargs=1,
>>       action='store', metavar='DIR', help='installation prefix'
>> )
>> ```
>>
>> which I set to /usr instead of /usr/local with `scons config --prefix=/usr`
> 
> couple of questions about the setup:
> 
> 
>> `scons config -m 16  --prefix=/usr --actual-prefix=/usr --libdir=lib64
>> DEBUG=1 SYMBOLS=1 VERBOSE=1`
> 
> -m 16 ?  was that intended to be -j 16 ?
> 
>> scons`
>>
>> -> Builds correctly.
>>
>> `scons install`
> 
> Those two would have to repeat the --prefix setting.  Was the above just
> shorthand?
> 
>>
>> -> Install the gui sublibrary in the weong place (/usr/local instead of
>> /usr/)
>>
>> See a build log here:
>> https://koji.fedoraproject.org/koji/taskinfo?taskID=88548801
> 
> So can see this:
> 
> 
> cd gui && python3 setup.py install --prefix
> /builddir/build/BUILDROOT/rmlint-2.10.1-10.fc37.x86_64/usr --record
> .files.txt
> /usr/lib/python3.11/site-packages/setuptools/dist.py:519: UserWarning:
> The version specified ('2.10.1 Ludicrous Lemur') is an invalid version,
> this may not work as expected with newer versions of setuptools, pip,
> and PyPI. Please see PEP 440 for more details.
> 
> aside from the setuptools complaint, that looks ok, no? the "setup.py"
> line has on execution expanded to a path ending in /usr, not /usr/local
> 
> What am I missing?
> 

Well, none of this is actually the problem but according to my Python master, it is due to 
change in Fedora about how it handles Python installations:

================================================================================================
RPM build–related caveats

When Python runs during RPM build, it selects the rpm_prefix installation scheme. This 
behavior is triggered when the $RPM_BUILD_ROOT environment variable is set. That has several 
caveats:
Executing Python in Python’s subprocess

If the Python code that runs in RPM build (for example in %check) executes another Python 
instance via a subprocess, it is relatively easy to inadvertently unset all environment 
variables. When this happens, the inner Python will not know it runs within RPM build and 
will return paths with the /local/ infix.
================================================================================================

So the problem is not SCons itself, however I need:

```
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?

Thanks!

Best regards,

Robert-André


More information about the Scons-users mailing list