diff options
Diffstat (limited to 'src/rebuild.cc')
-rw-r--r-- | src/rebuild.cc | 62 |
1 files changed, 37 insertions, 25 deletions
diff --git a/src/rebuild.cc b/src/rebuild.cc index a82e0cc..f0d52d9 100644 --- a/src/rebuild.cc +++ b/src/rebuild.cc @@ -7,9 +7,10 @@ #include <filesystem> #include <algorithm> #include <source_location> +#include <cstring> #include "configure.h" -#include "libctor.h" +#include "ctor.h" #include "tasks.h" #include "build.h" #include "execute.h" @@ -19,7 +20,8 @@ std::array<BuildConfigurationEntry, 1024> configFiles; std::size_t numConfigFiles{0}; -int reg(BuildConfigurations (*cb)(const Settings&), +namespace ctor { +int reg(ctor::build_configurations (*cb)(const ctor::settings&), const std::source_location location) { // NOTE: std::cout cannot be used here @@ -30,12 +32,23 @@ int reg(BuildConfigurations (*cb)(const Settings&), exit(1); } - configFiles[numConfigFiles].file = location.file_name(); + auto loc = std::filesystem::path(location.file_name()); + if(loc.is_absolute()) + { + auto pwd = std::filesystem::current_path(); + auto rel = std::filesystem::relative(loc, pwd); + configFiles[numConfigFiles].file = strdup(rel.string().data()); // NOTE: This intentionally leaks memory + } + else + { + configFiles[numConfigFiles].file = location.file_name(); + } configFiles[numConfigFiles].cb = cb; ++numConfigFiles; return 0; } +} // ctor:: int reg(const char* location) { @@ -49,7 +62,7 @@ int reg(const char* location) configFiles[numConfigFiles].file = location; configFiles[numConfigFiles].cb = - [](const Settings&){ return std::vector<BuildConfiguration>{}; }; + [](const ctor::settings&){ return std::vector<ctor::build_configuration>{}; }; ++numConfigFiles; return 0; @@ -98,7 +111,8 @@ int unreg(const char* location) std::array<ExternalConfigurationEntry, 1024> externalConfigFiles; std::size_t numExternalConfigFiles{0}; -int reg(ExternalConfigurations (*cb)(const Settings&), +namespace ctor { +int reg(ctor::external_configurations (*cb)(const ctor::settings&), const std::source_location location) { // NOTE: std::cout cannot be used here @@ -115,10 +129,11 @@ int reg(ExternalConfigurations (*cb)(const Settings&), return 0; } +} // namespace ctor:: namespace { -bool contains(const std::vector<Source>& sources, const std::string& file) +bool contains(const std::vector<ctor::source>& sources, const std::string& file) { for(const auto& source : sources) { @@ -132,7 +147,7 @@ bool contains(const std::vector<Source>& sources, const std::string& file) } } -bool recompileCheck(const Settings& global_settings, int argc, char* argv[], +bool recompileCheck(const ctor::settings& global_settings, int argc, char* argv[], bool relaunch_allowed) { using namespace std::string_literals; @@ -142,33 +157,30 @@ bool recompileCheck(const Settings& global_settings, int argc, char* argv[], std::cout << "Recompile check (" << numConfigFiles << "):\n"; } - BuildConfiguration config; + ctor::build_configuration config; + config.type = ctor::target_type::executable; config.name = "ctor"; - config.system = OutputSystem::Build; + config.system = ctor::output_system::build; - auto tool_chain = getToolChain(config.system); + config.flags.cxxflags.push_back({ctor::cxx_opt::optimization, "3"}); + config.flags.cxxflags.push_back({ctor::cxx_opt::cpp_std, "c++20"}); - append(config.flags.cxxflags, - getOption(tool_chain, opt::optimization, "3")); - append(config.flags.cxxflags, - getOption(tool_chain, opt::cpp_std, "c++20")); - if(hasConfiguration(cfg::ctor_includedir)) + const auto& c = ctor::get_configuration(); + if(c.has(ctor::cfg::ctor_includedir)) { - append(config.flags.cxxflags, - getOption(tool_chain, opt::include_path, - getConfiguration(cfg::ctor_includedir))); + config.flags.cxxflags.push_back({ctor::cxx_opt::include_path, + c.get(ctor::cfg::ctor_includedir)}); } - if(hasConfiguration(cfg::ctor_libdir)) + if(c.has(ctor::cfg::ctor_libdir)) { - append(config.flags.ldflags, - getOption(tool_chain, opt::library_path, - getConfiguration(cfg::ctor_libdir))); + config.flags.ldflags.push_back({ctor::ld_opt::library_path, c.get(ctor::cfg::ctor_libdir)}); } - append(config.flags.ldflags, getOption(tool_chain, opt::link, "ctor")); - append(config.flags.ldflags, getOption(tool_chain, opt::threads)); + config.flags.ldflags.push_back({ctor::ld_opt::link, "ctor"}); + config.flags.ldflags.push_back({ctor::ld_opt::strip}); + config.flags.ldflags.push_back({ctor::ld_opt::threads}); - Settings settings{global_settings}; + ctor::settings settings{global_settings}; settings.verbose = -1; // Make check completely silent. settings.builddir += "/ctor"; // override builddir to use ctor subdir |