[Scons-users] Java builder is rebuilds when not needed

Pierre-Luc Boily pierreluc.boily at gmail.com
Thu Jan 30 13:07:17 EST 2020


Here you go, I created a simple exemple that reproduces the problem :
https://www.dropbox.com/s/ky2cki5w487bmkw/java_test.zip?dl=0.  You just
need to update the java_root to your own path.

thx!


Le jeu. 30 janv. 2020, à 00 h 26, Bill Deegan <bill at baddogconsulting.com> a
écrit :

> SCons doesn't only look for files when your SConstruct/SConscript file is
> run (excluding calls go Glob() though even that call can see files which
> aren't on disk but which SCons expects to produce). All those files do is
> tell SCons what to do. After that SCons will run with those rules.
>
> BTW. SCons will recognize "/" as a dirsep for any File()  you specify.
>
> There's nothing I can do with just that SConscript to try to reproduce.
> You'll have to simplify it  down to a single SConstruct and a few files
> before I can take a look at it.
>
>
>
> On Wed, Jan 29, 2020 at 6:22 PM Pierre-Luc Boily <
> pierreluc.boily at gmail.com> wrote:
>
>> I tried to simplify much as possible my sconscript(
>> https://pastebin.com/yhE0FwAN).  But Java builder is still not creating
>> the target under correct folder.
>>
>> I added taskmastertrace argument :
>> 1- First build (java file doesn't exist)( https://pastebin.com/P5X24KrK)
>> I can see my .class file is created directly under "classes" folder,
>> instead of under "classes/adacel/speech" :
>> <https://pastebin.com/P5X24KrK>
>>
>> 2- Second build (java file exists)(https://pastebin.com/6zByD2dy)
>> I can see that .class file has to be build again
>>
>> See this picture (
>> https://www.dropbox.com/s/vg0cifs50i9jxqz/sconsjava.png?dl=0)  .  As you
>> can see, class file is created under classes\adacel\speech.  Log files
>> above tell me that scons think that the .class file shall be under
>> "classes" folder
>>
>> Sorry if I look dumb, but I don't understand how Java builder could
>> create target "classes\adacel\speech\file.class" in the first build,
>> because file.java doesn't exist yet :(  From my limited understanding,
>> scons creates "classes\file.class" because it is the best he can do.
>>
>> Le mer. 29 janv. 2020, à 18 h 41, Bill Deegan <bill at baddogconsulting.com>
>> a écrit :
>>
>>> run with --taskmastertrace=trace.log and take a look in there.
>>>
>>> On Wed, Jan 29, 2020 at 3:19 PM Bill Deegan <bill at baddogconsulting.com>
>>> wrote:
>>>
>>>> yacc creates c which get's compiled to o's.
>>>> SCons knows when a target is built (or not yet built) and won't scan
>>>> the file if it's not there.
>>>> If it's rebuilt. SCons knows to scan the file again.
>>>>
>>>> Assuming you have a correct list of files produced by the idl (emitter
>>>> and/or manually specified targets), it should do the right thing.
>>>>
>>>> -Bill
>>>>
>>>> On Wed, Jan 29, 2020 at 2:12 PM Pierre-Luc Boily <
>>>> pierreluc.boily at gmail.com> wrote:
>>>>
>>>>> So, how Java builder can create the targets when java files are not
>>>>> yet existing?
>>>>>
>>>>> this
>>>>> classes_tgt = env.Java(target='classes',
>>>>>                        source=java_files_to_be_generated_from_idl)
>>>>>
>>>>> Can`t create correctly classes_tgt because java files are not yet
>>>>> created from idl.  Is it possible without creating a custom builder?
>>>>>
>>>>> Le mer. 29 janv. 2020, à 16 h 12, Bill Deegan <
>>>>> bill at baddogconsulting.com> a écrit :
>>>>>
>>>>>> When a file is built, then it would get scanned.
>>>>>> So likely that's not the case.
>>>>>>
>>>>>> On Wed, Jan 29, 2020 at 10:17 AM Pierre-Luc Boily <
>>>>>> pierreluc.boily at gmail.com> wrote:
>>>>>>
>>>>>>> I think I know what the problem is.  At the first scons pass, java
>>>>>>> files that are generated from idl into the variant dir don't exist yet.
>>>>>>> So, scons can`t scan the java file for "package" statement.  That is why
>>>>>>> the target is
>>>>>>>
>>>>>>> classes/fileName.class
>>>>>>> instead of
>>>>>>> classes/adacel/speech/fileName.class
>>>>>>>
>>>>>>> For this understandable reason, I don't have the choice to create my
>>>>>>> own builder around the Java builder.  This builder will take care of
>>>>>>> creating java from idl and create the correct targets in the emitter.
>>>>>>>
>>>>>>> Le mer. 29 janv. 2020, à 11 h 32, Pierre-Luc Boily <
>>>>>>> pierreluc.boily at gmail.com> a écrit :
>>>>>>>
>>>>>>>> Hello,
>>>>>>>>
>>>>>>>> I have a case where
>>>>>>>> 1- I am creating java files from idl then
>>>>>>>> 2- Compile those java files
>>>>>>>>
>>>>>>>> All my java files starts with "package adacel.speech;"
>>>>>>>>
>>>>>>>> --------------------------------
>>>>>>>> generated_java_target += env.Command(
>>>>>>>>                                      target='ActivateGrammar.java',
>>>>>>>>
>>>>>>>> source='#sr/speech/common_dds/ActivateGrammar.idl',
>>>>>>>>                                      action=[idl_command])
>>>>>>>>
>>>>>>>> classes_tgt = env.Java(target='classes',
>>>>>>>>                        source=generated_java_target)
>>>>>>>> ---------------------------------
>>>>>>>>
>>>>>>>> The code above generates all my class files under
>>>>>>>> "classes/adacel/speech",
>>>>>>>> which is correct.
>>>>>>>>
>>>>>>>> But when I start another build with following code :
>>>>>>>> for i in classes_tgt:
>>>>>>>>     print(str(i))
>>>>>>>>
>>>>>>>> I can see that all my class targets looks like this :
>>>>>>>> classes\ActivateGrammar.class
>>>>>>>>
>>>>>>>> Which is incorrect.  scons tell me :
>>>>>>>> scons: building
>>>>>>>>
>>>>>>>> `build\sr\speech\ContextualPostProcessor\RulesEngine\DroolsGenericModel\classes\TimeValueHolder.class'
>>>>>>>> because it doesn't exist
>>>>>>>>
>>>>>>>> Scons should look under classes\adacel\speech
>>>>>>>>
>>>>>>>> Am I doing something incorrect?  Is this a bug in Java builder?  As
>>>>>>>> a
>>>>>>>> workaround, I though doing my own builder that takes idl that
>>>>>>>> generates java
>>>>>>>> file and build it.  And within the emitter, generate all class
>>>>>>>> targets that
>>>>>>>> points to correct path.  It could be faster, because in that case,
>>>>>>>> I could
>>>>>>>> generate all java files and compile them at once.
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>> --
>>>>>>>> Sent from: http://scons.1086193.n5.nabble.com/Users-f16930.html
>>>>>>>> _______________________________________________
>>>>>>>> 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
>>
> _______________________________________________
> 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/20200130/41f2b7ba/attachment.html>


More information about the Scons-users mailing list