[Scons-users] scons-4.3.0 bug reading scons-3.1.2 generated .sconsign.dblite

Jay West jhdub23 at gmail.com
Mon Mar 21 14:56:26 EDT 2022


I'm not asking for the sconsign file to be made compatible between
versions.  What I'm asking for is to ensure that scons refuses to create
bad builds.  A full rebuild is acceptable.  Error'ing out is acceptable.
Silently creating a bad build is not acceptable.

A developer may check out old code that must be run with scons2
(scons-3.1.2 with python2).  The developer may also check out the most
recent code that must run with scons3 (scons-4.3.0 with python3).  The
following happens:


   - Compile new code with scons3, followed by compiling old code with
   scons2.  scons2 errors out with a pickling error.  This is perfectly fine.
   The developer removes the .sconsign.dblite file and all is good.
   - Compile old code with scons2, followed by compiling new code with
   scon3.  The build is successful, but the build is corrupt.  *This is not
   acceptable.*


We have unknowingly deployed bad builds to the field, and this is causing
all sorts of havoc.  I have added the below to our SConstruct file for one
project.  Can something like this be added to scons?

Thanks,

Jay

    def fix_scons_db():
        '''
        Fix scons2 vs scons3 DB backward compatibility problem

        The dependency database from scons-3.1.2 cannot be read by
scons-4.3.0.  Instead of generating an error, scons-4.3.0 will blissfully
ignore the error and produce an incorrect build.
        In order to workaround this, we'll use use an scons
version-specific DB file.  Credit for the idea to:

https://github.com/Autodesk/arnold-usd/pull/116/commits/a404d5f3400437beb4bad561ef1811538f7af022
        This solution also future proofs against further scons upgrades.
        '''
        scons_db_file_name = '.sconsign.{}'.format(SCons.__version__)
        SConsignFile(scons_db_file_name)
        scons_db_file_name += '.dblite' # scons adds this suffix
        scons_old_db_files = glob.glob('.sconsign.*')
        if scons_db_file_name in scons_old_db_files:
            scons_old_db_files.remove(scons_db_file_name)
        #print('scons DB file name:', scons_db_file_name, 'removing',
scons_old_db_files)
        if len(scons_old_db_files):
            subprocess.run(['rm -f .sconsign.*'], check=True, shell=True)


On Sun, Mar 20, 2022 at 9:36 PM Bill Deegan <bill at baddogconsulting.com>
wrote:

> There's no (reasonable) way to make the sconsign files be compatible
> between py3.5 and p2.7.
> The only way to not have invalid (as in crashes scons per your original
> email) is to name the sconsign files per python version.
> (Which I mentioned in my previous email, and is what the commit you
> pointed to).
>
> Of course as you discovered (most likely) you will rebuild items which
> were not out of date.
>
> The recommended way is to just validate the new scons & python combination
> on your build and then make the switch.
>
> -Bill
>
>
> On Sun, Mar 20, 2022 at 7:23 PM Jay West <jhdub23 at gmail.com> wrote:
>
>> Actually, the workaround isn't sufficient.  We also need to delete all
>> the other versions of .sconsign.dblite* as they will be out of date.
>>
>> Jay
>>
>>
>> On Sun, Mar 20, 2022 at 6:58 PM Jay West <jhdub23 at gmail.com> wrote:
>>
>>> If scons did a full rebuild, it would not be a problem.  The issue is
>>> that scons does NOT do a full rebuild, thinking that targets were up to
>>> date when they were really not.
>>>
>>> I see a workaround that someone else took:
>>> https://github.com/Autodesk/arnold-usd/pull/116/commits/a404d5f3400437beb4bad561ef1811538f7af022.
>>> I will be putting this into our SContruct file.  Can this be made the
>>> default behavior?
>>>
>>> Thanks,
>>>
>>> Jay
>>>
>>>
>>> On Sat, Mar 19, 2022 at 11:09 AM Bill Deegan <bill at baddogconsulting.com>
>>> wrote:
>>>
>>>> Switching from py2.7 -> py 3.5 invalidates the .sconsign files contents.
>>>> You have to do a full build when you make that switch.
>>>> It's in the release notes somewhere.
>>>>
>>>> https://scons.org/scons-300-is-available.html
>>>>
>>>> There's no way around it.
>>>> The best you can do is name your SConsign file to include the python
>>>> version so at least they won't be invalid when you switch from one to
>>>> another, but you will see additional rebuilds which may not be strictly
>>>> necessary.
>>>>
>>>> -Bill
>>>>
>>>> On Fri, Mar 18, 2022 at 5:03 PM Jay West <jhdub23 at gmail.com> wrote:
>>>>
>>>>> Yes, our scons-3.1.2 was using python-2.7.17, and our scons-4.3.1 is
>>>>> using python-3.9.10.  We get a pickling error when trying to run
>>>>> scons-3.1.2 after scons-4.3.1 which is good.  Running scons-4.3.1 after
>>>>> scons-3.1.2 runs without error, but results in bad builds, which is
>>>>> terrible.
>>>>>
>>>>>
>>>>> On Fri, Mar 18, 2022 at 3:04 PM Bill Deegan <bill at baddogconsulting.com>
>>>>> wrote:
>>>>>
>>>>>> Sounds like you also switched from python 2.7 to python 3.5 or higher?
>>>>>>
>>>>>> On Fri, Mar 18, 2022 at 2:07 PM Jay West <jhdub23 at gmail.com> wrote:
>>>>>>
>>>>>>> We are migrating from scons-3.1.2 to scons-4.3.0 and have
>>>>>>> encountered incorrect builds.
>>>>>>>
>>>>>>> After building with scons-3.1.2, changing some files, and then
>>>>>>> running scons-4.3.0, it appears that scons-4.3.0 cannot read some
>>>>>>> dependencies from the DB file.  Instead of error'ing out or ignoring the DB
>>>>>>> file, it happily generates an incorrect build.  However, running:
>>>>>>>
>>>>>>> sconsign .sconsign.dblite
>>>>>>>
>>>>>>>
>>>>>>> gives
>>>>>>>
>>>>>>> TypeError: '<' not supported between instances of 'str' and 'bytes'
>>>>>>>
>>>>>>>
>>>>>>> Has anyone seen this issue?
>>>>>>>
>>>>>>> Thanks,
>>>>>>>
>>>>>>> Jay
>>>>>>>
>>>>>>> _______________________________________________
>>>>>>> Scons-users mailing list
>>>>>>> Scons-users at scons.org
>>>>>>> https://pairlist4.pair.net/mailman/listinfo/scons-users
>>>>>>>
>>>>>> _______________________________________________
>>>>>> Scons-users mailing list
>>>>>> Scons-users at scons.org
>>>>>> https://pairlist4.pair.net/mailman/listinfo/scons-users
>>>>>>
>>>>> _______________________________________________
>>>>> Scons-users mailing list
>>>>> Scons-users at scons.org
>>>>> https://pairlist4.pair.net/mailman/listinfo/scons-users
>>>>>
>>>> _______________________________________________
>>>> Scons-users mailing list
>>>> Scons-users at scons.org
>>>> https://pairlist4.pair.net/mailman/listinfo/scons-users
>>>>
>>> _______________________________________________
>> Scons-users mailing list
>> Scons-users at scons.org
>> https://pairlist4.pair.net/mailman/listinfo/scons-users
>>
> _______________________________________________
> Scons-users mailing list
> Scons-users at scons.org
> https://pairlist4.pair.net/mailman/listinfo/scons-users
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://pairlist4.pair.net/pipermail/scons-users/attachments/20220321/d80c6fc6/attachment.htm>


More information about the Scons-users mailing list