diff options
Diffstat (limited to 'src/bootstrap.cc')
-rw-r--r-- | src/bootstrap.cc | 62 |
1 files changed, 50 insertions, 12 deletions
diff --git a/src/bootstrap.cc b/src/bootstrap.cc index 9a3c321..55bd3e0 100644 --- a/src/bootstrap.cc +++ b/src/bootstrap.cc @@ -3,10 +3,11 @@ // See accompanying file LICENSE for details. #include <iostream> #include <array> +#include <cstdlib> #define BOOTSTRAP -#include "libctor.h" +#include "ctor.h" #include "util.cc" #include "rebuild.cc" @@ -21,21 +22,57 @@ std::filesystem::path configurationFile("configuration.cc"); std::filesystem::path configHeaderFile("config.h"); -const Configuration default_configuration{}; -const Configuration& configuration() +const ctor::configuration& ctor::get_configuration() { - return default_configuration; + static ctor::configuration cfg; + static bool initialised{false}; + if(!initialised) + { + cfg.build_toolchain = getToolChain(cfg.get(ctor::cfg::build_cxx, "/usr/bin/g++")); + initialised = true; + } + + return cfg; } -bool hasConfiguration(const std::string& key) +bool ctor::configuration::has(const std::string& key) const { return false; } -const std::string& getConfiguration(const std::string& key, - const std::string& defaultValue) +const std::string& ctor::configuration::get(const std::string& key, const std::string& default_value) const { - return defaultValue; + if(key == ctor::cfg::build_cxx && std::getenv("CXX")) + { + static std::string s = std::getenv("CXX"); + return s; + } + + if(key == ctor::cfg::build_cc && std::getenv("CC")) + { + static std::string s = std::getenv("CC"); + return s; + } + + if(key == ctor::cfg::build_ld && std::getenv("LD")) + { + static std::string s = std::getenv("LD"); + return s; + } + + if(key == ctor::cfg::build_ar && std::getenv("AR")) + { + static std::string s = std::getenv("AR"); + return s; + } + + if(key == ctor::cfg::builddir && std::getenv("BUILDDIR")) + { + static std::string s = std::getenv("BUILDDIR"); + return s; + } + + return default_value; } int main(int argc, char* argv[]) @@ -47,9 +84,10 @@ int main(int argc, char* argv[]) return 1; } - Settings settings{}; + ctor::settings settings{}; - settings.builddir = getConfiguration(cfg::builddir, "build"); + const auto& c = ctor::get_configuration(); + settings.builddir = c.get(ctor::cfg::builddir, settings.builddir); settings.parallel_processes = std::max(1u, std::thread::hardware_concurrency() * 2 - 1); settings.verbose = 0; @@ -66,8 +104,8 @@ int main(int argc, char* argv[]) auto& targets = getTargets(settings); for(const auto& target : targets) { - if(target.config.type != TargetType::UnitTest && - target.config.type != TargetType::UnitTestLib) + if(target.config.type != ctor::target_type::unit_test && + target.config.type != ctor::target_type::unit_test_library) { non_unittest_targets.push_back(target); } |