[Scons-users] Is it possible to use Copy Action Functions outside of SConscript?

Bill Deegan bill at baddogconsulting.com
Fri Mar 16 13:34:32 EDT 2018


what does the -d argument do?
-Bill

On Fri, Mar 16, 2018 at 1:21 PM, Pierre-Luc Boily <pierreluc.boily at gmail.com
> wrote:

> I tried both solutions but still no luck.  It appears that scons does not
> like the Copy inside the Command builder :
>
>         env.Command(target = tgtCpp + tgtH + ccpp,
>                     source = idlFile,
>                     action = [Copy(os.path.join(env['LOCALROOT'],
> variantDirOutput, idlFile), idlFile),
>                               'idlpp -S -l cpp -d ' + variantDirOutput + '
> $SOURCE'])
>
> I am am calling directly
>
> Copy(os.path.join(env['LOCALROOT'], str(env.Dir('.').path),
> 'MaxSim.idl'), Glob('*.idl')[0])
>
> scons is OK
>
> On Fri, Mar 16, 2018 at 12:40 PM, Matthew Marinets <
> Matthew.Marinets at kardium.com> wrote:
>
>> The SCons Copy() action factory is in SCons/Defaults.py, defined on line
>> 272. I think you just need to import it from there.
>>
>>
>>
>> (make sure SCons-3.0.0 is in your PYTHONPATH)
>>
>> From SCons.Defaults import Copy
>>
>>
>>
>> And you should be able to use it.
>>
>>
>>
>> If that doesn’t work, try importing the copy_func function from the same
>> place and building Copy() from it, just copy-paste the four lines starting
>> from ln. 272 of Defaults.py into the top of your module
>>
>>
>>
>> I’m using SCons 3.0.0 (if the directory didn’t make it obvious), but the
>> solution should be similar in other versions.
>>
>>
>>
>> Hope this helps
>>
>>
>>
>> -Matthew
>>
>>
>>
>> *From:* Scons-users [mailto:scons-users-bounces at scons.org] *On Behalf Of
>> *Pierre-Luc Boily
>> *Sent:* March 16, 2018 09:35
>> *To:* SCons users mailing list <scons-users at scons.org>
>> *Subject:* Re: [Scons-users] Is it possible to use Copy Action Functions
>> outside of SConscript?
>>
>>
>>
>> It is screwy I agree with you :)
>>
>>
>>
>> We have two different version of open splice, one on windows and one on
>> linux.
>>
>>
>>
>> When scons invoke
>>
>> 'idlpp -S -l cpp -d ' + variantDirOutput + ' $SOURCE'
>>
>> on windows, there is no problem, it works
>>
>>
>>
>> When scons invoke the same command on linux, I get the following error :
>>
>> idlpp -S -l cpp -d build/debug/fwk/dds_model     fwk/dds_model/MaxSim.idl
>>
>> "build/debug/fwk/dds_model/MaxSimDcps.idl", line 7: can't find include
>> file MaxSim.idl
>>
>>
>>
>> As you can see the opensplice version of linux doesn't like the
>> variantdir, he is not aware of MaxSim.idl, located in src dir.  This is the
>> reason why I am trying to copy the source MaxSim.idl to the variant dir.
>>
>>
>>
>> Now, this bring back the question of duplicate=0.  Yes, when I am calling
>> my SConscript, I am giving duplicate=0.  In this unique case, duplicate=1
>> should work I guess, but it is unfortunately not a solution in our current
>> architecture.  We have a top down approach where all SConscript are blindly
>> called from the SConstruct with duplicate=0 . SConstruct has no clues
>> which env is needed, he gives a class containing multiple env and
>> SConscript takes the decision which env to take.   All decisional stuff are
>> inside SConscript
>>
>>
>>
>> This serve us well so far.  We just migrated a project containing almost
>> 600 make files.  That is the only case were duplicate=1 would be needed.
>> So, you have the full context of my screwy fix =)
>>
>>
>>
>>
>>
>>
>>
>> On Fri, Mar 16, 2018 at 12:15 PM, Bill Deegan <bill at baddogconsulting.com>
>> wrote:
>>
>> This looks screwy to me..
>>
>>
>>
>>                     action = [Copy(os.path.join(env['LOCALROOT'],
>> variantDirOutput, idlFile), idlFile),
>>
>>                               'idlpp -S -l cpp -d ' + variantDirOutput +
>> ' $SOURCE'])
>>
>>
>>
>> Why are you building up the target file path?
>>
>> Are you using duplicate=0?
>>
>>
>>
>> Looks like you're trying to copy the source file to the variant dir, and
>> then calling idlpp on the source?
>>
>>
>>
>> Why did you want add Copy in the first place?
>>
>>
>>
>>
>>
>> On Fri, Mar 16, 2018 at 12:10 PM, Pierre-Luc Boily <
>> pierreluc.boily at gmail.com> wrote:
>>
>> Same error with env.Copy and Copy :\
>>
>>
>>
>> AttributeError: <class 'SCons.Node.FS.File'> object has no attribute
>> 'startswith':
>>
>>   File "/svn/localroot/faa_mx/integ-scons/SConstruct", line 58:
>>
>>     build()
>>
>>   File "/svn/localroot/faa_mx/integ-scons/SConstruct", line 29:
>>
>>     cache = not SConscript(str(script).strip(), exports='envService
>> vcxprojList', variant_dir=utils.createVariantDir(envService, script),
>> duplicate=0)
>>
>>   File "/usr/local/lib/scons-2.5.1/SCons/Script/SConscript.py", line 604:
>>
>>     return method(*args, **kw)
>>
>>   File "/usr/local/lib/scons-2.5.1/SCons/Script/SConscript.py", line 541:
>>
>>     return _SConscript(self.fs, *files, **subst_kw)
>>
>>   File "/usr/local/lib/scons-2.5.1/SCons/Script/SConscript.py", line 250:
>>
>>     exec _file_ in call_stack[-1].globals
>>
>>   File "/svn/localroot/faa_mx/integ-scons/fwk/dds_model/dds_model.sc",
>> line 12:
>>
>>     idlGeneratedHeaders = env.compile_idl_files()
>>
>>   File "/svn/localroot/faa_mx/integ-scons/cm/scons/adacelBuilders/pseudoBuilders.py",
>> line 132:
>>
>>     action = [Copy(os.path.join(env['LOCALROOT'], variantDirOutput,
>> idlFile), idlFile),
>>
>>   File "/usr/local/lib/python2.7/posixpath.py", line 68:
>>
>>     if b.startswith('/'):
>>
>>   File "/usr/local/lib/scons-2.5.1/SCons/Node/FS.py", line 682:
>>
>>     (self.__class__, attr))
>>
>>
>>
>> On Fri, Mar 16, 2018 at 12:05 PM, Bill Deegan <bill at baddogconsulting.com>
>> wrote:
>>
>> Not env.Copy,  just Copy().
>>
>>
>>
>> On Fri, Mar 16, 2018 at 11:56 AM, Pierre-Luc Boily <
>> pierreluc.boily at gmail.com> wrote:
>>
>> I  shall read better the man page.  Thx.  Now I have this error below.  I
>> thought that I might need to import SCons.Node, but no luck.
>>
>>
>>
>> AttributeError: <class 'SCons.Node.FS.File'> object has no attribute
>> 'startswith':
>>
>>   File "/svn/localroot/faa_mx/integ-scons/SConstruct", line 58:
>>
>>     build()
>>
>>   File "/svn/localroot/faa_mx/integ-scons/SConstruct", line 29:
>>
>>     cache = not SConscript(str(script).strip(), exports='envService
>> vcxprojList', variant_dir=utils.createVariantDir(envService, script),
>> duplicate=0)
>>
>>   File "/usr/local/lib/scons-2.5.1/SCons/Script/SConscript.py", line 604:
>>
>>     return method(*args, **kw)
>>
>>   File "/usr/local/lib/scons-2.5.1/SCons/Script/SConscript.py", line 541:
>>
>>     return _SConscript(self.fs, *files, **subst_kw)
>>
>>   File "/usr/local/lib/scons-2.5.1/SCons/Script/SConscript.py", line 250:
>>
>>     exec _file_ in call_stack[-1].globals
>>
>>   File "/svn/localroot/faa_mx/integ-scons/fwk/dds_model/dds_model.sc",
>> line 12:
>>
>>     idlGeneratedHeaders = env.compile_idl_files()
>>
>>   File "/svn/localroot/faa_mx/integ-scons/cm/scons/adacelBuilders/pseudoBuilders.py",
>> line 131:
>>
>>     action = [env.Copy(env.File(os.path.join(env['LOCALROOT'],
>> variantDirOutput, idlFile)), idlFile),
>>
>>   File "/usr/local/lib/python2.7/posixpath.py", line 68:
>>
>>     if b.startswith('/'):
>>
>>   File "/usr/local/lib/scons-2.5.1/SCons/Node/FS.py", line 682:
>>
>>     (self.__class__, attr))
>>
>>
>>
>>
>>
>> On Fri, Mar 16, 2018 at 11:21 AM, Bill Deegan <bill at baddogconsulting.com>
>> wrote:
>>
>> From manpage:
>>
>> Builder methods that can be called without an explicit environment may be
>> called from custom Python modules that you import into an SConscript file
>> by adding the following to the Python module:
>>
>> from SCons.Script import *
>>
>>
>>
>>
>>
>> On Fri, Mar 16, 2018 at 11:16 AM, Pierre-Luc Boily <
>> pierreluc.boily at gmail.com> wrote:
>>
>> But then I have : NameError: global name 'Copy' is not defined:
>>
>>
>>
>> And I can`t use env.Copy, because it refers to a deprecated function.
>>
>>
>>
>> I really think it is related with the fact that  def
>> compile_idl_files(env): function is outside of my SConscript.
>>
>>
>>
>> On Fri, Mar 16, 2018 at 11:13 AM, Bill Deegan <bill at baddogconsulting.com>
>> wrote:
>>
>> get rid of env.Execute().. you're building a list of actions, just use
>> Copy.
>>
>>
>>
>> Execute means do it right now.
>>
>>
>>
>>
>>
>> On Fri, Mar 16, 2018 at 10:49 AM, Pierre-Luc Boily <
>> pierreluc.boily at gmail.com> wrote:
>>
>> No totally a builder, but like that :
>>
>>
>>
>> #In my SConscript :
>>
>> idlGeneratedHeaders = env.compile_idl_files()
>>
>>
>>
>> #In my util file (I call those function pseudo-builder, they are not
>> really builder, but they actually call a builder.  In this case,
>> env.Command)
>>
>> def compile_idl_files(env):
>>
>>     """
>>
>>     Compile all the IDL with DDS idlpp tool.
>>
>>     returns the list of header files generated.
>>
>>     """
>>
>>     idlFiles = env.Glob('*.idl', exclude=['*Dcps.idl'])
>>
>>     idlGeneratedHeaders = []
>>
>>     variantDirOutput = str(env.Dir('.').path) #Where to generate .h &
>> .cpp from IDL
>>
>>     for idlFile in idlFiles:
>>
>>         tgtCpp, tgtH, ccpp = create_target_for_idl(env, idlFile)
>>
>>         idlGeneratedHeaders += tgtH + ccpp
>>
>>         env.Command(target = tgtCpp + tgtH + ccpp,
>>
>>                     source = idlFile,
>>
>>                     action = [env.Execute(Copy(os.path.join(env['LOCALROOT'],
>> variantDirOutput, idlFile), idlFile)),
>>
>>                               'idlpp -S -l cpp -d ' + variantDirOutput +
>> ' $SOURCE'])
>>
>>
>>
>>     return idlGeneratedHeaders
>>
>>
>>
>> On Fri, Mar 16, 2018 at 10:30 AM, Bill Deegan <bill at baddogconsulting.com>
>> wrote:
>>
>> So you want to use the Copy() action inside a builder?
>>
>>
>>
>> -Bill
>>
>>
>>
>> On Fri, Mar 16, 2018 at 9:34 AM, Pierre-Luc Boily <
>> pierreluc.boily at gmail.com> wrote:
>>
>> My SConscript contains the following code :
>>
>> Execute(Copy(os.path.join(env['LOCALROOT'], str(env.Dir('.').path),
>> 'MaxSim.idl'), 'MaxSim.idl'))
>>
>> In order to make my SConscript cleaner, I wanted to move this line into a
>> pseudo-builder, in an utility file.
>>
>> Then, when I am calling this line :
>> Execute(Copy(os.path.join(env['LOCALROOT'], variantDirOutput,
>> str(idlFile)),
>> str(idlFile)))
>>
>> from my utility function, I have error:
>> NameError: global name 'Execute' is not defined
>>
>> I understood that because I am outside of the SConscript context, Execute
>> is
>> not recognized anymore.  I then added my env, like that :
>> env.Execute(Copy(os.path.join(env['LOCALROOT'], variantDirOutput,
>> str(idlFile)), str(idlFile)))
>>
>> Now, Execute is recognized, but Copy is not.  If I try to add env to the
>> Copy function (env.Copy()), I now have this error : warning: The
>> env.Copy()
>> method is deprecated;
>>
>> I understand the env.Copy() is depracated, but is it possible to use Copy
>> action outside the SConscript the same way I did for env.Execute?
>>
>> Thx
>>
>>
>>
>>
>>
>>
>>
>>
>> --
>> 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
>>
>>
>>
>>
>> _______________________________________________
>> 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/20180316/c8ed3d7b/attachment-0001.html>


More information about the Scons-users mailing list