summaryrefslogtreecommitdiff
path: root/src/rebuild.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/rebuild.cc')
-rw-r--r--src/rebuild.cc62
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