aboutsummaryrefslogtreecommitdiff
path: root/build2/types
diff options
context:
space:
mode:
authorBoris Kolpackov <boris@codesynthesis.com>2016-07-30 11:41:48 +0200
committerBoris Kolpackov <boris@codesynthesis.com>2016-07-30 11:41:48 +0200
commit988fd0eec5d88bf6534fb1f645777350c20d4723 (patch)
treeb04f8c47dedc7d63b138ce50356f509196c4f7bc /build2/types
parente3004011bbab5b0e031804465a0c340c7102be6d (diff)
Actualize project root directories
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:\.
Diffstat (limited to 'build2/types')
-rw-r--r--build2/types2
1 files changed, 2 insertions, 0 deletions
diff --git a/build2/types b/build2/types
index 5409c60..8ccbd13 100644
--- a/build2/types
+++ b/build2/types
@@ -91,6 +91,8 @@ namespace build2
// a (variable) value of this type gets initialized from untyped names. See
// value_type<abs_dir_path> for details.
//
+ // Note that currently we also normalize and actualize the path.
+ //
struct abs_dir_path: dir_path
{
using dir_path::dir_path;