I'd really like to see some easier way of configuring things. Our sysadmins in
their wisdom install things somewhere where scons can't find them (with the
rather fun result that on solaris, it finds gcc and tries to pass it the
parameters for CC which merely adds to the fun).
I'd like to say - I want to use xlC and *here is where to find it*, then let
scons set up all the flags and things it thinks I should use. I'd be happy
enough to create a wrapper tool which sets up the required path, then delegates
most of the setup to the provided tool, then adds in whatever specific useful
stuff we might require.
I'd like a better way of specifying the site dir to find tools. Though you can
do this on the command line, you can't do it inside the SConstruct file which
makes for grief (this is sort of counter to the tool setup happening before
SConstruct is read though). I've seen more than 1 place where
SCons.Script.Main._load_site_scons_dir(Dir('#'), site_dir)
is called.
If you are going to make lazy initialisation of work, it sort of requires
clients to be able to wrap the tool initialisation with their own, which I
don't think makes things more complex, it would clean things up a bit, so that
if you say used CC and scons looked for CC in your site tools directory, and
found it, as long as your site tools could hand off to the original site tools
after preconfiguring, then add additional stuff, then you'd get a cleaneier and
not too hard to understand system. On the bad side, it would break things.
$CC being left blank would presumably not be an issue, assuming that the
toolchain setup did the right thing and either succeeded with all the variables
set up or failed properly.
Now I need to go read the documentation...
----- Original Message -----
From: [email protected]
To: [email protected]
At: May 25 2014 18:15:09
I'd like to kick off a round of discussion about toolchains, so can make some
progress toward a design. I have some preliminary thoughts. Please comment.
Apologies for the HTML mail, let me know if this isn't readable for you.
*Allow installing external tools (pip install or ...)
*
*scons --version (or similar) should list installed tools and toolchains
*missing external tools should give sensible errors
*Tool setup must happen before reading SConstruct somehow
*
*DefaultEnvironment and all new Environments should know about all tools
*alternative: lazy-construct DefaultEnvironment
*user-specified tools and toolchains need to be specifiable at beginning
of build
*User should be able to set default tools and toolchains
*
*unused tools shouldn't take any startup time
*Lazy init of tools and chains
*
*This is faster because unused tools don't matter
*It allows missing unused tools to not give errors, but missing used tools
can (and should)
*But it makes configuring environments much harder for users, because they
can't override or append to tool-provided variables until those exist. This
would break a lot of existing SConstructs.
*We need to find some kind of compromise here:
*
*Explicitly list tools required by build (where?): this should work
well because only the needed tools will be initialized
*if nothing explicitly specified, fall back to current method
*Within a tool:
*
*specify dependencies on other tools
*detect existence on system reliably, and without modifying env
*
*need better error messaging: ability to probe silently, but also give
sensible errors when needed
*constructor needs to allow args: version, path, ABI, etc. (this is
important)
*allow for common setup (all C compilers, etc.) as now
*tools should be versioned so user can check if up to date, etc.
*Tool chains:
*
*either-or
*and
*collections
*Platform
*
*How much do we need to know about the platform, for tools to initialize
themselves?
*Cross-compilation comes into this, but may be too much to include as a
general part of this project.
*It may be useful to define toolchains and enable/disable them by platform
*Of course the default toolchains need to be different by platform
*It may be possible for a default toolchain to just search for all tools
in a particular order and pick the first, as long as the tool-dependency system
is robust enough.
*Usability
*
*$CC etc. must never be left blank (without a prior tool-missing error
message at least) - this is a common problem
*Must be backward compatible, at least for all common cases.
*Must not require any new user files (e.g. something in site_scons) for
normal operation
*Need a clear guide on requirements for new tools
*
*how to make a a tool
*how to include tests
*Considerations
*
*"batteries included?"
*
*Each tool should do its best to set itself up, find executables, etc.
*What about SCons policy of not relying on $PATH? Maybe we should
relax that or have an option?
*
*minimum magic, maximum flexibility
*what about single tools? Should every tool be required to be part of a
toolchain (even if it's just one tool)? Maybe this doesn't matter much.
*Non-goals:
*
*New command-line args like autotools (platform, install paths, etc.). We
should build something that would enable that, but it's too much to bite off
now.
*Persistence -- remember configuration on disk between runs. This is a
performance enhancement which we should address only once we know it's needed.
Better if we can design a system that's fast without needing this.
*References:
*
*http://www.scons.org/wiki/PlatformToolConfig (Greg's original proposal)
*http://www.scons.org/wiki/RevampToolsSubsystem
*http://www.scons.org/wiki/PlatformToolConfigAlt (my proposal from 2008)
*http://www.scons.org/wiki/EvanEnhancedConfigurationPackageProposal
--
Gary _______________________________________________ Scons-dev mailing list
[email protected] http://two.pairlist.net/mailman/listinfo/scons-dev
_______________________________________________
Scons-dev mailing list
[email protected]
http://two.pairlist.net/mailman/listinfo/scons-dev