[Scons-users] Retrieving variables
Bill Deegan
bill at baddogconsulting.com
Fri Jun 17 14:14:39 EDT 2016
Is there a msvc.pyc or .pyo still in your config dir?
-Bill
On Fri, Jun 17, 2016 at 8:06 AM, Stefan Seefeld <stefan at seefeld.name> wrote:
> On 17.06.2016 10:56, Bill Deegan wrote:
> > Stefan,
> >
> >
> >
> > On Fri, Jun 17, 2016 at 6:35 AM, Stefan Seefeld <stefan at seefeld.name
> > <mailto:stefan at seefeld.name>> wrote:
> >
> > Hi Bill,
> >
> > sorry for a belated followup.
> >
> > On 14.06.2016 15:47, Bill Deegan wrote:
> >
> > >
> > > While this may work, it really looks like a kludge.
> > >
> > >
> > > not sure what you are referring to here..
> >
> > Explicitly instantiating a tool seems to imply that I want to
> override
> > the automatic choice, so the semantic is (at least slightly) changed.
> >
> >
> > Not exactly. It means you want to be explicit about loading tools.
> > You may not want to load all the available ones, it is also an
> > optimization as loading all tools can slowsdown scons startup.
> > So in the case where you only need tools x,y, and z, you can specify
> > only those.
> > In your case you want to defer loading msvc until you are able to set
> > some variables to aid in its configuration.
> > This is not an odd or unusual event to do any of the above.
>
> I agree. But to be able to load that tool (msvc) explicitly, I need to
> duplicate the SCons-internal logic to determine whether MSVC is
> available at all on the given platform, and I have yet to figure out how
> to do that.
>
> >
> >
> >
> > But experimenting with this, I ran into other issues, as well:
> >
> > >
> > > env=Environment(tools=[], variables=vars)
> > >
> > > env['TARGET_ARCH'] = env['arch']
> > > env.Tool('msvc')
> > >
> > > Should more or less do what you want.
> >
> > Here is my current logic:
> >
> > env = Environment(toolpath=['config'],
> > tools=['default', 'build_variants', 'boost_libs',
> > 'boost_tests'],
> > variables=vars)
> > env['TARGET_ARCH'] = env['arch']
> > env.Tool('msvc')
> >
> > which yields:
> >
> > EnvironmentError: No module named msvc:
> >
> > Any idea why ? (Is SCons by any chance looking for tools *only* in
> > config/ ?) But it gets slightly worse: My `config/` directory
> actually
> > contains a 'msvc.py' module. And with that, I get a different error:
> >
> >
> > AttributeError: 'module' object has no attribute 'generate':
> >
> > because that module isn't a 'tool' at all (and as it isn't listed
> > in the
> > 'tools' constructor argument above, I had assumed it would not be
> > read).
> > So, I don't understand the precise semantics of the 'toolpath' and
> > 'tools' constructor arguments. (I thought the 'default' value was
> > supposed to tell SCons to load all the built-in tools first, and only
> > add the other ones mentioned above from the provided toolpath.
> > Please clarify the documentation.
> >
> >
> > The documentation is fairly clear on this (from manpage). Sounds like
> > you are telling SCons you have tools in config, then you have a file
> > named msvc.py which scons trys to load as the msvc tool which doesn't
> > specify the required methods and so scons fails loading the tool. This
> > is pretty much what the doc snippet below says. See bit highlighed in
> red.
> >
> > Non-built-in tools may be specified using the toolpath argument:
> >
> > env = Environment(tools = ['default', 'foo'], toolpath = ['tools'])
> >
> > This looks for a tool specification in tools/foo.py (as well as using
> > the ordinary default tools for the platform). foo.py should have two
> > functions: generate(env, **kw) and exists(env).
> > The|generate()| function modifies the passed-in environment to set up
> > variables so that the tool can be executed; it may use any keyword
> > arguments that the user supplies (see below) to vary its
> > initialization. The |exists()| function should return a true value if
> > the tool is available. Tools in the toolpath are used before any of
> > the built-in ones. For example, adding gcc.py to the toolpath would
> > override the built-in gcc tool. Also note that the toolpath is stored
> > in the environment for use by later calls to *Clone*() and *Tool*()
> > methods:
> >
> > If you specify a toolpath, then really no files which are not tools,
> > especially if they are named the same as existing tools, should be in
> > that directory.
>
> OK, fair enough. But that only answers one of the two questions. If I
> (re-)move the msvc.py module from config/, I get the error
>
> EnvironmentError: No module named msvc:
>
> What do I need to do to tell SCons to *also* look in its default
> location(s) ? Isn't this error in conflict with the documentation you
> cite above, specifically "This looks for a tool specification in
> tools/foo.py (as well as using the ordinary default tools for the
> platform)." ?
>
> Thanks,
> Stefan
>
>
> --
>
> ...ich hab' noch einen Koffer in Berlin...
>
> _______________________________________________
> 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/20160617/fd23c456/attachment-0001.html>
More information about the Scons-users
mailing list