summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/bootstrap.cc16
-rw-r--r--src/configure.cc75
-rw-r--r--src/ctor.h10
-rw-r--r--src/libctor.cc7
-rw-r--r--src/rebuild.cc9
-rw-r--r--src/task.cc9
-rw-r--r--src/task_ar.cc5
-rw-r--r--src/tasks.cc2
-rw-r--r--src/tools.cc5
9 files changed, 68 insertions, 70 deletions
diff --git a/src/bootstrap.cc b/src/bootstrap.cc
index 09d6353..1fb3807 100644
--- a/src/bootstrap.cc
+++ b/src/bootstrap.cc
@@ -22,20 +22,18 @@
std::filesystem::path configurationFile("configuration.cc");
std::filesystem::path configHeaderFile("config.h");
-namespace ctor {
-const Configuration default_configuration{};
-const Configuration& configuration()
+const ctor::configuration default_configuration{};
+const ctor::configuration& ctor::get_configuration()
{
return default_configuration;
}
-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
{
if(key == cfg::host_cxx && std::getenv("CXX"))
{
@@ -49,9 +47,8 @@ const std::string& getConfiguration(const std::string& key,
return s;
}
- return defaultValue;
+ return default_value;
}
-} // namespace ctor::
int main(int argc, char* argv[])
{
@@ -64,7 +61,8 @@ int main(int argc, char* argv[])
ctor::settings settings{};
- settings.builddir = ctor::getConfiguration(cfg::builddir, settings.builddir);
+ const auto& c = ctor::get_configuration();
+ settings.builddir = c.get(cfg::builddir, settings.builddir);
settings.parallel_processes =
std::max(1u, std::thread::hardware_concurrency() * 2 - 1);
settings.verbose = 0;
diff --git a/src/configure.cc b/src/configure.cc
index 129fa42..76103c6 100644
--- a/src/configure.cc
+++ b/src/configure.cc
@@ -24,31 +24,32 @@ std::filesystem::path configHeaderFile("config.h");
std::map<std::string, std::string> external_includedir;
std::map<std::string, std::string> external_libdir;
-namespace ctor {
-const Configuration default_configuration{};
-const Configuration& __attribute__((weak)) configuration()
+const ctor::configuration default_configuration{};
+const ctor::configuration& __attribute__((weak)) ctor::get_configuration()
{
return default_configuration;
}
+namespace ctor {
std::optional<std::string> includedir;
std::optional<std::string> libdir;
std::optional<std::string> builddir;
std::map<std::string, std::string> conf_values;
+} // ctor::
-bool hasConfiguration(const std::string& key)
+bool ctor::configuration::has(const std::string& key) const
{
- if(key == cfg::ctor_includedir && ctor::includedir)
+ if(key == ctor::cfg::ctor_includedir && ctor::includedir)
{
return true;
}
- if(key == cfg::ctor_libdir && ctor::libdir)
+ if(key == ctor::cfg::ctor_libdir && ctor::libdir)
{
return true;
}
- if(key == cfg::builddir && ctor::builddir)
+ if(key == ctor::cfg::builddir && ctor::builddir)
{
return true;
}
@@ -58,24 +59,22 @@ bool hasConfiguration(const std::string& key)
return true;
}
- const auto& c = configuration();
- return c.tools.find(key) != c.tools.end();
+ return tools.find(key) != tools.end();
}
-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
{
- if(key == cfg::ctor_includedir && ctor::includedir)
+ if(key == ctor::cfg::ctor_includedir && ctor::includedir)
{
return *ctor::includedir;
}
- if(key == cfg::ctor_libdir && ctor::libdir)
+ if(key == ctor::cfg::ctor_libdir && ctor::libdir)
{
return *ctor::libdir;
}
- if(key == cfg::builddir && ctor::builddir)
+ if(key == ctor::cfg::builddir && ctor::builddir)
{
return *ctor::builddir;
}
@@ -85,15 +84,13 @@ const std::string& getConfiguration(const std::string& key,
return ctor::conf_values[key];
}
- const auto& c = configuration();
- if(hasConfiguration(key))
+ if(has(key))
{
- return c.tools.at(key);
+ return tools.at(key);
}
- return defaultValue;
+ return default_value;
}
-} // namespace ctor::
std::string locate(const std::string& arch, const std::string& app)
{
@@ -403,27 +400,26 @@ int regenerateCache(ctor::settings& settings,
// Store current values for execution in this execution context.
if(!ctor_includedir.empty())
{
- ctor::conf_values[cfg::ctor_includedir] = ctor_includedir;
+ ctor::conf_values[ctor::cfg::ctor_includedir] = ctor_includedir;
}
if(!ctor_libdir.empty())
{
- ctor::conf_values[cfg::ctor_libdir] = ctor_libdir;
+ ctor::conf_values[ctor::cfg::ctor_libdir] = ctor_libdir;
}
if(!builddir.empty())
{
- ctor::conf_values[cfg::builddir] = builddir;
+ ctor::conf_values[ctor::cfg::builddir] = builddir;
}
- ctor::conf_values[cfg::host_cxx] = host_cxx;
- ctor::conf_values[cfg::build_cxx] = build_cxx;
+ ctor::conf_values[ctor::cfg::host_cxx] = host_cxx;
+ ctor::conf_values[ctor::cfg::build_cxx] = build_cxx;
std::cout << "Writing results to: " << configurationFile.string() << "\n";
{
std::ofstream istr(configurationFile);
istr << "#include <ctor.h>\n\n";
- istr << "namespace ctor {\n";
- istr << "const Configuration& configuration()\n";
+ istr << "const ctor::configuration& ctor::get_configuration()\n";
istr << "{\n";
- istr << " static Configuration cfg =\n";
+ istr << " static ctor::configuration cfg =\n";
istr << " {\n";
istr << " .args = {";
for(const auto& arg : args)
@@ -441,25 +437,25 @@ int regenerateCache(ctor::settings& settings,
istr << " .tools = {\n";
if(!builddir.empty())
{
- istr << " { \"" << cfg::builddir << "\", \"" << builddir << "\" },\n";
+ istr << " { \"" << ctor::cfg::builddir << "\", \"" << builddir << "\" },\n";
ctor::builddir = builddir;
}
- istr << " { \"" << cfg::host_cc << "\", \"" << host_cc << "\" },\n";
- istr << " { \"" << cfg::host_cxx << "\", \"" << host_cxx << "\" },\n";
- istr << " { \"" << cfg::host_ar << "\", \"" << host_ar << "\" },\n";
- istr << " { \"" << cfg::host_ld << "\", \"" << host_ld << "\" },\n";
- istr << " { \"" << cfg::build_cc << "\", \"" << build_cc << "\" },\n";
- istr << " { \"" << cfg::build_cxx << "\", \"" << build_cxx << "\" },\n";
- istr << " { \"" << cfg::build_ar << "\", \"" << build_ar << "\" },\n";
- istr << " { \"" << cfg::build_ld << "\", \"" << build_ld << "\" },\n";
+ istr << " { \"" << ctor::cfg::host_cc << "\", \"" << host_cc << "\" },\n";
+ istr << " { \"" << ctor::cfg::host_cxx << "\", \"" << host_cxx << "\" },\n";
+ istr << " { \"" << ctor::cfg::host_ar << "\", \"" << host_ar << "\" },\n";
+ istr << " { \"" << ctor::cfg::host_ld << "\", \"" << host_ld << "\" },\n";
+ istr << " { \"" << ctor::cfg::build_cc << "\", \"" << build_cc << "\" },\n";
+ istr << " { \"" << ctor::cfg::build_cxx << "\", \"" << build_cxx << "\" },\n";
+ istr << " { \"" << ctor::cfg::build_ar << "\", \"" << build_ar << "\" },\n";
+ istr << " { \"" << ctor::cfg::build_ld << "\", \"" << build_ld << "\" },\n";
if(!ctor_includedir.empty())
{
- istr << " { \"" << cfg::ctor_includedir << "\", \"" << ctor_includedir << "\" },\n";
+ istr << " { \"" << ctor::cfg::ctor_includedir << "\", \"" << ctor_includedir << "\" },\n";
ctor::includedir = ctor_includedir;
}
if(!ctor_libdir.empty())
{
- istr << " { \"" << cfg::ctor_libdir << "\", \"" << ctor_libdir << "\" },\n";
+ istr << " { \"" << ctor::cfg::ctor_libdir << "\", \"" << ctor_libdir << "\" },\n";
ctor::libdir = ctor_libdir;
}
@@ -531,7 +527,6 @@ int regenerateCache(ctor::settings& settings,
istr << " };\n";
istr << " return cfg;\n";
istr << "}\n";
- istr << "} // namespace ctor::\n\n";
}
{
@@ -607,7 +602,7 @@ int reconfigure(const ctor::settings& global_settings, int argc, char* argv[])
args.push_back(argv[i]);
}
- const auto& cfg = configuration();
+ const auto& cfg = ctor::get_configuration();
std::cout << "Re-running configure:\n";
for(const auto& e : cfg.env)
diff --git a/src/ctor.h b/src/ctor.h
index c9d7d8a..d4a71bd 100644
--- a/src/ctor.h
+++ b/src/ctor.h
@@ -141,8 +141,11 @@ constexpr auto ctor_includedir = "ctor-includedir";
constexpr auto ctor_libdir = "ctor-libdir";
}
-struct Configuration
+struct configuration
{
+ bool has(const std::string& key) const;
+ const std::string& get(const std::string& key, const std::string& default_value = {}) const;
+
std::vector<std::string> args; // vector of arguments used when last calling configure
std::map<std::string, std::string> env; // env used when last calling configure
@@ -150,9 +153,6 @@ struct Configuration
std::map<std::string, ctor::flags> externals;
};
-const Configuration& configuration();
-bool hasConfiguration(const std::string& key);
-const std::string& getConfiguration(const std::string& key,
- const std::string& defaultValue = {});
+const ctor::configuration& get_configuration();
} // namespace ctor::
diff --git a/src/libctor.cc b/src/libctor.cc
index 67e734a..69d35cf 100644
--- a/src/libctor.cc
+++ b/src/libctor.cc
@@ -31,8 +31,9 @@ using namespace ctor;
int main(int argc, char* argv[])
{
ctor::settings settings{};
+ const auto& c = ctor::get_configuration();
- settings.builddir = getConfiguration(cfg::builddir, settings.builddir);
+ settings.builddir = c.get(cfg::builddir, settings.builddir);
settings.parallel_processes =
std::max(1u, std::thread::hardware_concurrency()) * 2 - 1;
@@ -265,13 +266,13 @@ Options:
if(print_configure_cmd)
{
no_default_build = true;
- std::cout << getConfiguration("cmd") << "\n";
+ std::cout << c.get("cmd") << "\n";
}
if(print_configure_db)
{
no_default_build = true;
- const auto& c = configuration();
+ const auto& c = ctor::get_configuration();
for(const auto& config : c.tools)
{
std::cout << config.first << ": " << config.second << "\n";
diff --git a/src/rebuild.cc b/src/rebuild.cc
index 7e5259a..3033a46 100644
--- a/src/rebuild.cc
+++ b/src/rebuild.cc
@@ -170,17 +170,18 @@ bool recompileCheck(const ctor::settings& global_settings, int argc, char* argv[
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(cfg::ctor_includedir))
{
append(config.flags.cxxflags,
getOption(tool_chain, opt::include_path,
- getConfiguration(cfg::ctor_includedir)));
+ c.get(cfg::ctor_includedir)));
}
- if(hasConfiguration(cfg::ctor_libdir))
+ if(c.has(cfg::ctor_libdir))
{
append(config.flags.ldflags,
getOption(tool_chain, opt::library_path,
- getConfiguration(cfg::ctor_libdir)));
+ c.get(cfg::ctor_libdir)));
}
append(config.flags.ldflags, getOption(tool_chain, opt::link, "ctor"));
append(config.flags.ldflags, getOption(tool_chain, opt::threads));
diff --git a/src/task.cc b/src/task.cc
index cff850e..27e6c44 100644
--- a/src/task.cc
+++ b/src/task.cc
@@ -131,23 +131,24 @@ ctor::output_system Task::outputSystem() const
std::string Task::compiler() const
{
+ const auto& c = ctor::get_configuration();
switch(sourceLanguage())
{
case ctor::language::c:
switch(outputSystem())
{
case ctor::output_system::host:
- return getConfiguration(cfg::host_cc, "/usr/bin/gcc");
+ return c.get(cfg::host_cc, "/usr/bin/gcc");
case ctor::output_system::build:
- return getConfiguration(cfg::build_cc, "/usr/bin/gcc");
+ return c.get(cfg::build_cc, "/usr/bin/gcc");
}
case ctor::language::cpp:
switch(outputSystem())
{
case ctor::output_system::host:
- return getConfiguration(cfg::host_cxx, "/usr/bin/g++");
+ return c.get(cfg::host_cxx, "/usr/bin/g++");
case ctor::output_system::build:
- return getConfiguration(cfg::build_cxx, "/usr/bin/g++");
+ return c.get(cfg::build_cxx, "/usr/bin/g++");
}
default:
std::cerr << "Unknown CC target type\n";
diff --git a/src/task_ar.cc b/src/task_ar.cc
index 890209e..89bbc40 100644
--- a/src/task_ar.cc
+++ b/src/task_ar.cc
@@ -97,14 +97,15 @@ int TaskAR::runInner()
std::cout << "AR => " << targetFile().string() << std::endl;
}
+ const auto& c = ctor::get_configuration();
std::string tool;
switch(outputSystem())
{
case ctor::output_system::host:
- tool = getConfiguration(cfg::host_ar, "/usr/bin/ar");
+ tool = c.get(cfg::host_ar, "/usr/bin/ar");
break;
case ctor::output_system::build:
- tool = getConfiguration(cfg::build_ar, "/usr/bin/ar");
+ tool = c.get(cfg::build_ar, "/usr/bin/ar");
break;
}
diff --git a/src/tasks.cc b/src/tasks.cc
index ff3aaec..d10b83f 100644
--- a/src/tasks.cc
+++ b/src/tasks.cc
@@ -28,7 +28,7 @@ const std::deque<Target>& getTargets(const ctor::settings& settings,
static std::deque<Target> targets;
if(!initialised)
{
- const auto& externals = configuration().externals;
+ const auto& externals = ctor::get_configuration().externals;
for(std::size_t i = 0; i < numConfigFiles; ++i)
{
std::string path =
diff --git a/src/tools.cc b/src/tools.cc
index e61a749..9e7102e 100644
--- a/src/tools.cc
+++ b/src/tools.cc
@@ -12,14 +12,15 @@ using namespace ctor;
ToolChain getToolChain(ctor::output_system system)
{
+ const auto& c = ctor::get_configuration();
std::string compiler;
switch(system)
{
case ctor::output_system::host:
- compiler = getConfiguration(cfg::host_cxx, "g++");
+ compiler = c.get(cfg::host_cxx, "g++");
break;
case ctor::output_system::build:
- compiler = getConfiguration(cfg::build_cxx, "g++");
+ compiler = c.get(cfg::build_cxx, "g++");
break;
}