Re: scons-4.3.0 bug reading scons-3.1.2 generated .sconsign.dblite

Jay West <[email protected]>
Newsgroups gmane.comp.programming.tools.scons.user
Message-ID <CALwuoc3Eesb3v=eOz0jzczVy=D+sUQH5AQO8vm0-TES-jg5U_A@mail.gmail.com>
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 <[email protected]>
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 <[email protected]> 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 <[email protected]> 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 <[email protected]>
>>> 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 <[email protected]> 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 <[email protected]>
>>>>> 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 <[email protected]> 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
>>>>>>> [email protected]
>>>>>>> https://pairlist4.pair.net/mailman/listinfo/scons-users
>>>>>>>
>>>>>> _______________________________________________
>>>>>> Scons-users mailing list
>>>>>> [email protected]
>>>>>> https://pairlist4.pair.net/mailman/listinfo/scons-users
>>>>>>
>>>>> _______________________________________________
>>>>> Scons-users mailing list
>>>>> [email protected]
>>>>> https://pairlist4.pair.net/mailman/listinfo/scons-users
>>>>>
>>>> _______________________________________________
>>>> Scons-users mailing list
>>>> [email protected]
>>>> https://pairlist4.pair.net/mailman/listinfo/scons-users
>>>>
>>> _______________________________________________
>> Scons-users mailing list
>> [email protected]
>> https://pairlist4.pair.net/mailman/listinfo/scons-users
>>
> _______________________________________________
> Scons-users mailing list
> [email protected]
> https://pairlist4.pair.net/mailman/listinfo/scons-users
>

_______________________________________________
Scons-users mailing list
[email protected]
https://pairlist4.pair.net/mailman/listinfo/scons-users
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.