diff options
Diffstat (limited to 'build/bin/module.cxx')
-rw-r--r-- | build/bin/module.cxx | 188 |
1 files changed, 0 insertions, 188 deletions
diff --git a/build/bin/module.cxx b/build/bin/module.cxx deleted file mode 100644 index 5f65b8d..0000000 --- a/build/bin/module.cxx +++ /dev/null @@ -1,188 +0,0 @@ -// file : build/bin/module.cxx -*- C++ -*- -// copyright : Copyright (c) 2014-2015 Code Synthesis Ltd -// license : MIT; see accompanying LICENSE file - -#include <build/bin/module> - -#include <build/scope> -#include <build/variable> -#include <build/diagnostics> - -#include <build/config/utility> -#include <build/install/utility> - -#include <build/bin/rule> -#include <build/bin/target> - -using namespace std; - -namespace build -{ - namespace bin - { - static obj_rule obj_; - static lib_rule lib_; - - // Default config.bin.*.lib values. - // - static const strings exe_lib {"shared", "static"}; - static const strings liba_lib {"static"}; - static const strings libso_lib {"shared"}; - - extern "C" bool - bin_init (scope& r, - scope& b, - const location&, - std::unique_ptr<module>&, - bool first, - bool) - { - tracer trace ("bin::init"); - level5 ([&]{trace << "for " << b.out_path ();}); - - // Enter module variables. - // - if (first) - { - auto& v (var_pool); - - v.find ("config.bin.lib", string_type); - v.find ("config.bin.exe.lib", strings_type); - v.find ("config.bin.liba.lib", strings_type); - v.find ("config.bin.libso.lib", strings_type); - v.find ("config.bin.rpath", strings_type); //@@ VAR paths_type - - v.find ("bin.lib", string_type); - v.find ("bin.exe.lib", strings_type); - v.find ("bin.liba.lib", strings_type); - v.find ("bin.libso.lib", strings_type); - v.find ("bin.rpath", strings_type); //@@ VAR paths_type - - v.find ("bin.libprefix", string_type); - } - - // Register target types. - // - { - auto& t (b.target_types); - - t.insert<obja> (); - t.insert<objso> (); - t.insert<obj> (); - t.insert<exe> (); - t.insert<liba> (); - t.insert<libso> (); - t.insert<lib> (); - } - - // Register rules. - // - { - auto& r (b.rules); - - r.insert<obj> (perform_update_id, "bin.obj", obj_); - r.insert<obj> (perform_clean_id, "bin.obj", obj_); - - r.insert<lib> (perform_update_id, "bin.lib", lib_); - r.insert<lib> (perform_clean_id, "bin.lib", lib_); - - // Configure member. - // - r.insert<lib> (configure_update_id, "bin.lib", lib_); - - //@@ Should we check if the install module was loaded - // (by checking if install operation is registered - // for this project)? If we do that, then install - // will have to be loaded before bin. Perhaps we - // should enforce loading of all operation-defining - // modules before all others? - // - r.insert<lib> (perform_install_id, "bin.lib", lib_); - } - - // Configure. - // - using config::required; - - // The idea here is as follows: if we already have one of - // the bin.* variables set, then we assume this is static - // project configuration and don't bother setting the - // corresponding config.bin.* variable. - // - //@@ Need to validate the values. Would be more efficient - // to do it once on assignment than every time on query. - // Custom var type? - // - - // config.bin.lib - // - { - value& v (b.assign ("bin.lib")); - if (!v) - v = required (r, "config.bin.lib", "both").first; - } - - // config.bin.exe.lib - // - { - value& v (b.assign ("bin.exe.lib")); - if (!v) - v = required (r, "config.bin.exe.lib", exe_lib).first; - } - - // config.bin.liba.lib - // - { - value& v (b.assign ("bin.liba.lib")); - if (!v) - v = required (r, "config.bin.liba.lib", liba_lib).first; - } - - // config.bin.libso.lib - // - { - value& v (b.assign ("bin.libso.lib")); - if (!v) - v = required (r, "config.bin.libso.lib", libso_lib).first; - } - - // config.bin.rpath - // - // This one is optional and we merge it into bin.rpath, if any. - // See the cxx module for details on merging. - // - if (const value& v = config::optional (r, "config.bin.rpath")) - b.assign ("bin.rpath") += as<strings> (v); - - - // Configure "installability" of our target types. - // - install::path<exe> (b, dir_path ("bin")); // Install into install.bin. - - // Should shared libraries have executable bit? That depends on - // who you ask. In Debian, for example, it should not unless, it - // really is executable (i.e., has main()). On the other hand, on - // some systems, this may be required in order for the dynamic - // linker to be able to load the library. So, by default, we will - // keep it executable, especially seeing that this is also the - // behavior of autotools. At the same time, it is easy to override - // this, for example: - // - // config.install.lib.mode=644 - // - // And a library that wants to override any such overrides (e.g., - // because it does have main()) can do: - // - // libso{foo}: install.mode=755 - // - // Everyone is happy then? - // - install::path<libso> (b, dir_path ("lib")); // Install into install.lib. - - install::path<liba> (b, dir_path ("lib")); // Install into install.lib. - install::mode<liba> (b, "644"); - - return true; - } - } -} |