diff options
author | Boris Kolpackov <boris@codesynthesis.com> | 2017-08-13 13:29:54 +0200 |
---|---|---|
committer | Boris Kolpackov <boris@codesynthesis.com> | 2017-08-13 13:29:54 +0200 |
commit | 2da6777d14a1cf600891cdeee6202d692eae48f9 (patch) | |
tree | 756cf03db8fceebeaec088f1167aad64ce81a74d /build2/install/init.cxx | |
parent | 8632a68385258e43f73c91a0106b34dcd3f8d733 (diff) |
Implement support for chroot'ed install (aka DESTDIR)
For example:
b config.install.root=/usr config.install.chroot=/tmp/install
The difference between doing just config.install.root=/tmp/install/usr is
that everything is installed "as if" into /usr. So, for example, pkg-config
files will contain -I/usr/include, -L/usr/lib, etc.
Diffstat (limited to 'build2/install/init.cxx')
-rw-r--r-- | build2/install/init.cxx | 25 |
1 files changed, 20 insertions, 5 deletions
diff --git a/build2/install/init.cxx b/build2/install/init.cxx index 0e8118a..757d4ef 100644 --- a/build2/install/init.cxx +++ b/build2/install/init.cxx @@ -178,11 +178,11 @@ namespace build2 // Enter module variables. // + auto& vp (var_pool.rw (rs)); + // Note that the set_dir() calls below enter some more. // { - auto& v (var_pool.rw (rs)); - // Note: not overridable. // // The install variable is a path, not dir_path, since it can be used @@ -191,9 +191,9 @@ namespace build2 // way we distinguish between the two is via the presence/absence of // the trailing directory separator. // - v.insert<path> ("install", variable_visibility::target); - v.insert<string> ("install.mode", variable_visibility::project); - v.insert<bool> ("install.subdirs", variable_visibility::project); + vp.insert<path> ("install", variable_visibility::target); + vp.insert<string> ("install.mode", variable_visibility::project); + vp.insert<bool> ("install.subdirs", variable_visibility::project); } // Register our alias and file rules. @@ -249,6 +249,21 @@ namespace build2 set_dir (s, rs, "doc", dir_path (dir_doc) /= n, true); set_dir (s, rs, "man", dir_man); set_dir (s, rs, "man1", dir_man1); + + // Support for chroot'ed install (aka DESTDIR). + // + { + auto& var (vp.insert<dir_path> ( "install.chroot")); + auto& cvar (vp.insert<abs_dir_path> ("config.install.chroot", true)); + + value& v (rs.assign (var)); + + if (s) + { + if (lookup l = config::optional (rs, cvar)) + v = cast<dir_path> (l); // Strip abs_dir_path. + } + } } // Configure "installability" for built-in target types. |