Hi Ben,
On 03.11.2014 11:48, Ben Golding wrote:
It seems one possible fix for this bug could be a warning/error if the user
tries to Install() a side-effect file, and expanding/clarifying the docs for
SideEffect(). Also, if Install() is permitted with a warning, the current
behaviour (silently ignoring the file) must be fixed.
A few other comments/questions come to mind:
1) If the contents of a side-effect file are indeterminate, how does telling SCons about
this file help to have a deterministic (or "convergent") build? What purpose
does SideEffect() have at all? What would be the remaining valid use-cases, if Install()
is not permitted?
I tried to explain this in my last mail. SideEffect() kind of "marks" a
file that isn't supposed to be used as a target, but exists intermediary
during the build process/step. The name of this intermediary file is
always the same (it's hard-wired into the compiler/builder), so when you
would run SCons in parallel mode ("-j n") you could get in trouble: one
build thread could get started, while another one is running...so the
intermediary file (the SideEffect) could get mixed up.
As far as I know, that's the scenario the SideEffect() functionality was
designed for, and is actually the only situation where the method should
be used.
As soon as the name of the intermediary file isn't hard-wired for
example, but built from the file stem of its target/source files, the
usage of SideEffect() gets superfluous: each target would create a
uniquely named intermediary file along with it, so there's no danger of
mixing up things.
Another thing that "SideEffect()" does, is to mark the file for getting
removed on a "scons -c". In the past, this has misled many writers of
builders/tools, to use SideEffect() in favour of the more correct Clean()...
2) The example given in docs of .pdb file is an interesting one. It looks like
SideEffect() is not actually used in msvc.py.
It's very well possible that the docs aren't up-to-date, so let's do
something about it! :)
A better example would probably be the "docbook" Tool when it builds an
EPUB file...
In fact, this "indeterminate" behaviour depends on whether the option -Fd [1]
is used, what filename is specified with -Fd, and the debug information format option [2].
It is both possible and desirable, particularly in a parallel build, to either use -Z7
(foo.cc => foo.obj; no .pdb), or to use -Zi / -ZI with -Fd and a suitably unique
filename (foo.cc => foo.obj, foo.pdb). However, using -Zi without explicit -Fd gives
something like (foo.cc => foo.obj, vc100.pdb).
As I wrote above, if the filenames are guaranteed to be unique, you
don't need SideEffect at all...
Best regards,
Dirk
_______________________________________________
Scons-dev mailing list
[email protected]
https://pairlist2.pair.net/mailman/listinfo/scons-dev