Age | Commit message (Collapse) | Author | Files | Lines |
|
This solves the problem of changing path spelling on platforms with case-
insensitive filesystems.
For example, you may build a project in the current working directory without
specifying any paths. This means the current working directory will be used as
the project's root. On Windows this could be C:\x.
Now you are building another project that imports the above project and you
specify config.import.x variable pointing to the above build. But you are lazy
to type capital C so you spell it as config.import.x=c:\x.
What happens now is the value from config.import.x is used as the project
root. And now it is a different spelling compared to your original build. This
is not a problem when the build system itself is concerned -- it is smart
enough to use case-insensitive comparison. However, we often use roots to
derive other things, say, -I options that we pass to compilers. And these
options are normally no longer treated as (case-insensitive) paths. If they
are hashed and the result stored in depdb, then we end up with rebuilds that
are triggered by changes from C:\ to c:\.
|
|
This will make things more convenient on Windows provided we use "sane"
paths (no spaces, no (), etc).
|
|
|
|
The 'projects and subprojects' semantics resulted in some counter-intuitive
behavior. For example, in a project with tests/ as a subproject if one builds
one of the tests directly with a non-global override (say C++ compiler), then
the main project would be built without the overrides. I this light,
overriding in the whole amalgamation seems like the right thing to do. The
old behavior can still be obtained with scope qualification, for example:
b ./:foo=bar
|
|
This way we don't load/configure what we don't need.
|
|
This fixes a core dump in out-of-source 'clean update' run.
|
|
|
|
|
|
|
|
|
|
Normally the user doesn't need to specify config.bin.target explicitly
since the cxx module will hint it. We now also have the whole set of
target's components:
bin.target.{cpu,vendor,system,version,class}
|
|
We will have a separate (extern "C") register() function that will return
the pointers to these two. This way we can still throw exceptions from
boot() and init().
|
|
|
|
Relaxing it to base was not wise since we can have "sideways"
prerequisites (those from parallel directories such as brep's ../web/*).
|
|
We no longer enter paths from the src tree into scope map. Instead, targets
from the src tree now include their out tree directory (in essence their
"configuration"). This is then used to find a target's scope. See the
comment in class target for details.
The result of this change is that we can now again build multiple
configurations (out trees) for same project at once.
|
|
|
|
|
|
For example:
v = [null]
v = [string] abc
v += ABC # abcABC
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Probably can also do for the rest of the target_key members.
|
|
|
|
|
|
|