summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBent Bisballe Nyeng <deva@aasimon.org>2026-02-02 18:30:58 +0100
committerBent Bisballe Nyeng <deva@aasimon.org>2026-02-02 18:57:44 +0100
commit6accb227b75fef7e99257b0078eb95f9aa0823cc (patch)
tree41ed3773d1f8b05eea0e6ff86010237f6e4bd25a
parent19d1dd34fbc87b6637147785332f180e36acdfef (diff)
New syntax
-rw-r--r--ctor.cc70
-rw-r--r--src/ctor.h87
-rw-r--r--src/task_fn.cc27
-rw-r--r--src/tasks.cc11
-rw-r--r--test/ctor.cc474
-rw-r--r--test/cycle_test.cc14
-rw-r--r--test/generated_sources_test.cc56
-rw-r--r--test/suite/ctor_files/ctor.cc.bar10
-rw-r--r--test/suite/ctor_files/ctor.cc.base10
-rw-r--r--test/suite/ctor_files/ctor.cc.generated32
-rw-r--r--test/suite/ctor_files/ctor.cc.generated228
-rw-r--r--test/suite/ctor_files/ctor.cc.multi10
-rw-r--r--test/tasks_test.cc12
13 files changed, 460 insertions, 381 deletions
diff --git a/ctor.cc b/ctor.cc
index 3dd1b59..daf040e 100644
--- a/ctor.cc
+++ b/ctor.cc
@@ -10,42 +10,42 @@ ctor::build_configurations ctorConfigs(const ctor::settings& settings)
return
{
{
- .system = ctor::output_system::build,
- .target = "libctor.a",
- .sources = {
- "src/build.cc",
- "src/configure.cc",
- "src/deps.cc",
- "src/execute.cc",
- "src/externals_manual.cc",
- "src/libctor.cc",
- "src/pointerlist.cc",
- "src/rebuild.cc",
- "src/task.cc",
- "src/task_ar.cc",
- "src/task_fn.cc",
- "src/task_cc.cc",
- "src/task_ld.cc",
- "src/task_so.cc",
- "src/tasks.cc",
- "src/tools.cc",
- "src/util.cc",
- "src/unittest.cc",
- },
- .flags = {
- .cxxflags = {
- "-std=c++20",
- "-O3",
- "-g",
- "-Wall",
- "-Wextra",
- "-Wshadow",
- "-Wconversion",
-// "-Wnrvo",
- "-Isrc",
- "-fexceptions",
+ ctor::output_system::build,
+ ctor::target("libctor.a"),
+ ctor::sources{
+ "src/build.cc",
+ "src/configure.cc",
+ "src/deps.cc",
+ "src/execute.cc",
+ "src/externals_manual.cc",
+ "src/libctor.cc",
+ "src/pointerlist.cc",
+ "src/rebuild.cc",
+ "src/task.cc",
+ "src/task_ar.cc",
+ "src/task_fn.cc",
+ "src/task_cc.cc",
+ "src/task_ld.cc",
+ "src/task_so.cc",
+ "src/tasks.cc",
+ "src/tools.cc",
+ "src/util.cc",
+ "src/unittest.cc",
},
- },
+ ctor::flags({
+ .cxxflags = {
+ "-std=c++20",
+ "-O3",
+ "-g",
+ "-Wall",
+ "-Wextra",
+ "-Wshadow",
+ "-Wconversion",
+// "-Wnrvo",
+ "-Isrc",
+ "-fexceptions",
+ },
+ }),
}
};
}
diff --git a/src/ctor.h b/src/ctor.h
index 29c8f6d..aa46e5f 100644
--- a/src/ctor.h
+++ b/src/ctor.h
@@ -297,8 +297,90 @@ using GeneratorManyToOne =
const ctor::build_configuration& config,
const ctor::settings& settings)>;
+struct name
+{
+ std::string name;
+};
+
+struct target
+{
+ std::string target;
+};
+
+using sources = std::vector<ctor::source>;
+
+struct depends
+{
+ std::vector<std::string> depends;
+};
+
+struct externals
+{
+ std::vector<std::string> externals;
+};
+
struct build_configuration
{
+ template <class ... Args>
+ requires ((
+ std::is_same_v<Args, ctor::name> ||
+ std::is_same_v<Args, ctor::target_type> ||
+ std::is_same_v<Args, ctor::output_system> ||
+ std::is_same_v<Args, ctor::target> ||
+ std::is_same_v<Args, ctor::sources> ||
+ std::is_same_v<Args, ctor::depends> ||
+ std::is_same_v<Args, ctor::flags> ||
+ std::is_same_v<Args, ctor::externals> ||
+ std::is_same_v<Args, ctor::GeneratorOneToOne> ||
+ std::is_same_v<Args, ctor::GeneratorManyToOne>
+ ) && ...)
+ constexpr build_configuration(Args && ... arg)
+ {
+ ([&]
+ {
+ if constexpr(std::is_same_v<Args, ctor::name>)
+ {
+ name = arg.name;
+ }
+ else if constexpr(std::is_same_v<Args, ctor::target_type>)
+ {
+ type = arg;
+ }
+ else if constexpr(std::is_same_v<Args, ctor::output_system>)
+ {
+ system = arg;
+ }
+ else if constexpr(std::is_same_v<Args, ctor::target>)
+ {
+ target = arg.target;
+ }
+ else if constexpr(std::is_same_v<Args, ctor::sources>)
+ {
+ sources = arg;
+ }
+ else if constexpr(std::is_same_v<Args, ctor::depends>)
+ {
+ depends = arg.depends;
+ }
+ else if constexpr(std::is_same_v<Args, ctor::flags>)
+ {
+ flags = arg;
+ }
+ else if constexpr(std::is_same_v<Args, ctor::externals>)
+ {
+ externals = arg.externals;
+ }
+ else if constexpr(std::is_same_v<Args, ctor::GeneratorOneToOne>)
+ {
+ function_one_to_one = arg;
+ }
+ else if constexpr(std::is_same_v<Args, ctor::GeneratorManyToOne>)
+ {
+ function_many_to_one = arg;
+ }
+ }(), ...);
+ }
+
std::string name; // Name - used for referring in other configurations.
ctor::target_type type{ctor::target_type::automatic};
ctor::output_system system{ctor::output_system::build};
@@ -307,9 +389,8 @@ struct build_configuration
std::vector<std::string> depends; // internal target dependencies
ctor::flags flags;
std::vector<std::string> externals; // externals used by this configuration
- std::variant<std::monostate,
- GeneratorOneToOne,
- GeneratorManyToOne> function;
+ ctor::GeneratorOneToOne function_one_to_one;
+ ctor::GeneratorManyToOne function_many_to_one;
};
using build_configurations = std::vector<build_configuration>;
diff --git a/src/task_fn.cc b/src/task_fn.cc
index b712e70..4f27cc7 100644
--- a/src/task_fn.cc
+++ b/src/task_fn.cc
@@ -24,7 +24,7 @@ TaskFn::TaskFn(ctor::target_type resolved_target_type,
sourceDir.parent_path());
source_language = source.language;
- if(std::holds_alternative<ctor::GeneratorOneToOne>(config.function))
+ if(config.function_one_to_one)
{
if(source.source_type == ctor::source_type::generated)
{
@@ -41,7 +41,7 @@ TaskFn::TaskFn(ctor::target_type resolved_target_type,
}
_targetFile = base / source.output;
}
- else if(std::holds_alternative<ctor::GeneratorManyToOne>(config.function))
+ else if(config.function_many_to_one)
{
for(const auto& src : config.sources)
{
@@ -74,7 +74,7 @@ bool TaskFn::dirtyInner()
return true;
}
- if(std::holds_alternative<ctor::GeneratorManyToOne>(config.function))
+ if(config.function_many_to_one)
{
if(!std::filesystem::exists(sourceListFile))
{
@@ -94,7 +94,7 @@ bool TaskFn::dirtyInner()
std::filesystem::file_time_type last_changed{};
bool missing{false};
- if(std::holds_alternative<ctor::GeneratorOneToOne>(config.function))
+ if(config.function_one_to_one)
{
if(!std::filesystem::exists(sourceFile))
{
@@ -102,7 +102,7 @@ bool TaskFn::dirtyInner()
}
last_changed = std::filesystem::last_write_time(sourceFile);
}
- else if(std::holds_alternative<ctor::GeneratorManyToOne>(config.function))
+ else if(config.function_many_to_one)
{
bool first{true};
for(const auto& source : sources)
@@ -144,7 +144,7 @@ bool TaskFn::dirtyInner()
int TaskFn::runInner()
{
- if(std::holds_alternative<ctor::GeneratorManyToOne>(config.function))
+ if(config.function_many_to_one)
{
// Write sourceList to file.
std::ofstream sourceListStream(sourceListFile.string());
@@ -160,20 +160,17 @@ int TaskFn::runInner()
}
int res{};
- if(std::holds_alternative<std::monostate>(config.function))
+ if(config.function_one_to_one)
{
- }
- else if(std::holds_alternative<ctor::GeneratorOneToOne>(config.function))
- {
- auto func = std::get<ctor::GeneratorOneToOne>(config.function);
+ auto func = config.function_one_to_one;
res = func(sourceFile.string(),
targetFile().string(),
config,
settings);
}
- else if(std::holds_alternative<ctor::GeneratorManyToOne>(config.function))
+ else if(config.function_many_to_one)
{
- auto func = std::get<ctor::GeneratorManyToOne>(config.function);
+ auto func = config.function_many_to_one;
res = func(sources,
targetFile().string(),
config,
@@ -196,7 +193,7 @@ int TaskFn::clean()
std::filesystem::remove(targetFile());
}
- if(std::holds_alternative<ctor::GeneratorManyToOne>(config.function))
+ if(config.function_many_to_one)
{
if(std::filesystem::exists(sourceListFile))
{
@@ -211,7 +208,7 @@ int TaskFn::clean()
std::vector<std::string> TaskFn::depends() const
{
std::vector<std::string> deps;
- if(std::holds_alternative<ctor::GeneratorManyToOne>(config.function))
+ if(config.function_many_to_one)
{
for(const auto& src : config.sources)
{
diff --git a/src/tasks.cc b/src/tasks.cc
index f520772..5e1d235 100644
--- a/src/tasks.cc
+++ b/src/tasks.cc
@@ -85,7 +85,7 @@ std::vector<std::shared_ptr<Task>> taskFactory(const ctor::build_configuration&
ctor::target_type resolved_target_type{config.type};
if(resolved_target_type == ctor::target_type::automatic)
{
- if(!std::holds_alternative<std::monostate>(config.function))
+ if(config.function_one_to_one || config.function_many_to_one)
{
resolved_target_type = ctor::target_type::function;
}
@@ -103,8 +103,10 @@ std::vector<std::shared_ptr<Task>> taskFactory(const ctor::build_configuration&
for(const auto& source : config.sources)
{
if(source.toolchain == ctor::toolchain::any ||
- (config.system == ctor::output_system::build && source.toolchain == c.build_toolchain) ||
- (config.system == ctor::output_system::host && source.toolchain == c.host_toolchain))
+ (config.system == ctor::output_system::build &&
+ source.toolchain == c.build_toolchain) ||
+ (config.system == ctor::output_system::host &&
+ source.toolchain == c.host_toolchain))
{
auto task =
std::make_shared<TaskCC>(ctor::target_type::object, config, settings, sourceDir, source);
@@ -116,8 +118,7 @@ std::vector<std::shared_ptr<Task>> taskFactory(const ctor::build_configuration&
#ifndef BOOTSTRAP
else
{
- bool multi{std::holds_alternative<ctor::GeneratorManyToOne>(config.function)};
- if(multi)
+ if(config.function_many_to_one)
{
auto task =
std::make_shared<TaskFn>(resolved_target_type, config, settings, sourceDir, "");
diff --git a/test/ctor.cc b/test/ctor.cc
index e7ed038..250acec 100644
--- a/test/ctor.cc
+++ b/test/ctor.cc
@@ -8,244 +8,244 @@ namespace
ctor::build_configurations ctorTestConfigs(const ctor::settings& settings)
{
return
- {
{
- .type = ctor::target_type::unit_test,
- .system = ctor::output_system::build,
- .target = "argparser_test",
- .sources = {
- "argparser_test.cc",
- "testmain.cc",
- },
- .flags = {
- .cxxflags = {
- "-std=c++20", "-O3", "-Wall",
- "-I../src", "-Iuunit",
- "-DOUTPUT=\"argparser\"",
- "-fexceptions",
- },
- },
- },
- {
- .type = ctor::target_type::unit_test,
- .system = ctor::output_system::build,
- .target = "generated_sources_test",
- .sources = {
- "generated_sources_test.cc",
- "testmain.cc",
- },
- .depends = { "libctor_nomain.a" },
- .flags = {
- .cxxflags = {
- "-std=c++20", "-O3", "-Wall",
- "-I../src", "-Iuunit",
- "-DOUTPUT=\"generated_sources\"",
- "-fexceptions",
- },
- },
- },
- {
- .type = ctor::target_type::unit_test,
- .system = ctor::output_system::build,
- .target = "argsplit_test",
- .sources = {
- "argsplit_test.cc",
- "testmain.cc",
- "../src/util.cc",
- },
- .flags = {
- .cxxflags = {
- "-std=c++20", "-O3", "-Wall",
- "-I../src", "-Iuunit",
- "-DOUTPUT=\"argsplit\"",
- "-fexceptions",
- },
- },
- },
- {
- .type = ctor::target_type::unit_test,
- .system = ctor::output_system::build,
- .target = "pointerlist_test",
- .sources = {
- "pointerlist_test.cc",
- "testmain.cc",
- "../src/pointerlist.cc",
- },
- .flags = {
- .cxxflags = {
- "-std=c++20", "-O3", "-Wall",
- "-I../src", "-Iuunit",
- "-DOUTPUT=\"pointerlist\"",
- "-fexceptions",
- },
- },
- },
- {
- .type = ctor::target_type::unit_test,
- .system = ctor::output_system::build,
- .target = "deps_test",
- .sources = {
- "deps_test.cc",
- "testmain.cc",
- "../src/deps.cc",
- "../src/util.cc",
- },
- .depends = { "testprog", },
- .flags = {
- .cxxflags = {
- "-std=c++20", "-O3", "-Wall",
- "-I../src", "-Iuunit",
- "-DOUTPUT=\"deps\"",
- "-fexceptions",
- },
- },
- },
- {
- .type = ctor::target_type::unit_test,
- .system = ctor::output_system::build,
- .target = "testprog",
- .sources = {
- "testprog.cc",
- },
- .flags = {
- .cxxflags = {
- "-std=c++20", "-O3", "-Wall",
- "-fexceptions",
- },
- },
- },
- {
- .type = ctor::target_type::unit_test,
- .system = ctor::output_system::build,
- .target = "execute_test",
- .sources = {
- "execute_test.cc",
- "testmain.cc",
- "../src/execute.cc",
- "../src/pointerlist.cc",
- "../src/util.cc",
- },
- .depends = { "testprog", },
- .flags = {
- .cxxflags = {
- "-std=c++20", "-O3", "-Wall",
- "-I../src", "-Iuunit",
- "-DOUTPUT=\"execute\"",
- "-fexceptions",
- },
- .ldflags = { "-pthread" },
- },
- },
- {
- .type = ctor::target_type::unit_test,
- .system = ctor::output_system::build,
- .target = "tasks_test",
- .sources = {
- "tasks_test.cc",
- "testmain.cc",
- },
- .depends = { "libctor_nomain.a" },
- .flags = {
- .cxxflags = {
- "-std=c++20", "-O3", "-Wall",
- "-I../src", "-Iuunit",
- "-DOUTPUT=\"tasks\"",
- "-fexceptions",
- },
- .ldflags = { "-pthread" },
- },
- },
- {
- .type = ctor::target_type::unit_test,
- .system = ctor::output_system::build,
- .target = "cycle_test",
- .sources = {
- "cycle_test.cc",
- "testmain.cc",
- },
- .depends = { "libctor_nomain.a" },
- .flags = {
- .cxxflags = {
- "-std=c++20", "-O3", "-Wall",
- "-I../src", "-Iuunit",
- "-DOUTPUT=\"cycle\"",
- "-fexceptions",
- },
- .ldflags = { "-pthread" },
- },
- },
- {
- .type = ctor::target_type::unit_test,
- .system = ctor::output_system::build,
- .target = "source_type_test",
- .sources = {
- "source_type_test.cc",
- "testmain.cc",
- },
- .depends = { "libctor_nomain.a" },
- .flags = {
- .cxxflags = {
- "-std=c++20", "-O3", "-Wall",
- "-I../src", "-Iuunit",
- "-DOUTPUT=\"source_type\"",
- "-fexceptions",
- },
- .ldflags = { "-pthread" },
- },
- },
- {
- .type = ctor::target_type::unit_test,
- .system = ctor::output_system::build,
- .target = "tools_test",
- .sources = {
- "tools_test.cc",
- "testmain.cc",
- "../src/util.cc",
- "../src/tools.cc",
- },
- //.depends = { "libctor_nomain.a" },
- .flags = {
- .cxxflags = {
- "-std=c++20", "-O3", "-Wall",
- "-I../src", "-Iuunit",
- "-DOUTPUT=\"tools\"",
- "-fexceptions",
- },
- },
- },
- {
- .type = ctor::target_type::unit_test_library,
- .system = ctor::output_system::build,
- .target = "libctor_nomain.a",
- .sources = {
- "../src/build.cc",
- "../src/configure.cc",
- "../src/deps.cc",
- "../src/execute.cc",
- "../src/pointerlist.cc",
- "../src/rebuild.cc",
- "../src/tasks.cc",
- "../src/task.cc",
- "../src/task_ar.cc",
- "../src/task_cc.cc",
- "../src/task_fn.cc",
- "../src/task_ld.cc",
- "../src/task_so.cc",
- "../src/tools.cc",
- "../src/util.cc",
- "../src/externals_manual.cc",
- "../configuration.cc",
- },
- .flags = {
- .cxxflags = {
- "-std=c++20", "-O3", "-Wall",
- "-I../src",
- "-fexceptions",
- },
- .ldflags = { "-pthread" },
- },
- },
- };
+ {
+ ctor::target_type::unit_test,
+ ctor::output_system::build,
+ ctor::target("argparser_test"),
+ ctor::sources{
+ "argparser_test.cc",
+ "testmain.cc",
+ },
+ ctor::flags({
+ .cxxflags = {
+ "-std=c++20", "-O3", "-Wall",
+ "-I../src", "-Iuunit",
+ "-DOUTPUT=\"argparser\"",
+ "-fexceptions",
+ },
+ }),
+ },
+ {
+ ctor::target_type::unit_test,
+ ctor::output_system::build,
+ ctor::target("generated_sources_test"),
+ ctor::sources{
+ "generated_sources_test.cc",
+ "testmain.cc",
+ },
+ ctor::depends({"libctor_nomain.a"}),
+ ctor::flags({
+ .cxxflags = {
+ "-std=c++20", "-O3", "-Wall",
+ "-I../src", "-Iuunit",
+ "-DOUTPUT=\"generated_sources\"",
+ "-fexceptions",
+ },
+ }),
+ },
+ {
+ ctor::target_type::unit_test,
+ ctor::output_system::build,
+ ctor::target("argsplit_test"),
+ ctor::sources{
+ "argsplit_test.cc",
+ "testmain.cc",
+ "../src/util.cc",
+ },
+ ctor::flags({
+ .cxxflags = {
+ "-std=c++20", "-O3", "-Wall",
+ "-I../src", "-Iuunit",
+ "-DOUTPUT=\"argsplit\"",
+ "-fexceptions",
+ },
+ }),
+ },
+ {
+ ctor::target_type::unit_test,
+ ctor::output_system::build,
+ ctor::target("pointerlist_test"),
+ ctor::sources{
+ "pointerlist_test.cc",
+ "testmain.cc",
+ "../src/pointerlist.cc",
+ },
+ ctor::flags({
+ .cxxflags = {
+ "-std=c++20", "-O3", "-Wall",
+ "-I../src", "-Iuunit",
+ "-DOUTPUT=\"pointerlist\"",
+ "-fexceptions",
+ },
+ }),
+ },
+ {
+ ctor::target_type::unit_test,
+ ctor::output_system::build,
+ ctor::target("deps_test"),
+ ctor::sources{
+ "deps_test.cc",
+ "testmain.cc",
+ "../src/deps.cc",
+ "../src/util.cc",
+ },
+ ctor::depends({"testprog"}),
+ ctor::flags({
+ .cxxflags = {
+ "-std=c++20", "-O3", "-Wall",
+ "-I../src", "-Iuunit",
+ "-DOUTPUT=\"deps\"",
+ "-fexceptions",
+ },
+ }),
+ },
+ {
+ ctor::target_type::unit_test,
+ ctor::output_system::build,
+ ctor::target("testprog"),
+ ctor::sources{
+ "testprog.cc",
+ },
+ ctor::flags({
+ .cxxflags = {
+ "-std=c++20", "-O3", "-Wall",
+ "-fexceptions",
+ },
+ }),
+ },
+ {
+ ctor::target_type::unit_test,
+ ctor::output_system::build,
+ ctor::target("execute_test"),
+ ctor::sources{
+ "execute_test.cc",
+ "testmain.cc",
+ "../src/execute.cc",
+ "../src/pointerlist.cc",
+ "../src/util.cc",
+ },
+ ctor::depends({"testprog"}),
+ ctor::flags({
+ .cxxflags = {
+ "-std=c++20", "-O3", "-Wall",
+ "-I../src", "-Iuunit",
+ "-DOUTPUT=\"execute\"",
+ "-fexceptions",
+ },
+ .ldflags = { "-pthread" },
+ }),
+ },
+ {
+ ctor::target_type::unit_test,
+ ctor::output_system::build,
+ ctor::target("tasks_test"),
+ ctor::sources{
+ "tasks_test.cc",
+ "testmain.cc",
+ },
+ ctor::depends({"libctor_nomain.a"}),
+ ctor::flags({
+ .cxxflags = {
+ "-std=c++20", "-O3", "-Wall",
+ "-I../src", "-Iuunit",
+ "-DOUTPUT=\"tasks\"",
+ "-fexceptions",
+ },
+ .ldflags = { "-pthread" },
+ }),
+ },
+ {
+ ctor::target_type::unit_test,
+ ctor::output_system::build,
+ ctor::target("cycle_test"),
+ ctor::sources{
+ "cycle_test.cc",
+ "testmain.cc",
+ },
+ ctor::depends({"libctor_nomain.a"}),
+ ctor::flags({
+ .cxxflags = {
+ "-std=c++20", "-O3", "-Wall",
+ "-I../src", "-Iuunit",
+ "-DOUTPUT=\"cycle\"",
+ "-fexceptions",
+ },
+ .ldflags = { "-pthread" },
+ }),
+ },
+ {
+ ctor::target_type::unit_test,
+ ctor::output_system::build,
+ ctor::target("source_type_test"),
+ ctor::sources{
+ "source_type_test.cc",
+ "testmain.cc",
+ },
+ ctor::depends({"libctor_nomain.a"}),
+ ctor::flags({
+ .cxxflags = {
+ "-std=c++20", "-O3", "-Wall",
+ "-I../src", "-Iuunit",
+ "-DOUTPUT=\"source_type\"",
+ "-fexceptions",
+ },
+ .ldflags = { "-pthread" },
+ }),
+ },
+ {
+ ctor::target_type::unit_test,
+ ctor::output_system::build,
+ ctor::target("tools_test"),
+ ctor::sources{
+ "tools_test.cc",
+ "testmain.cc",
+ "../src/util.cc",
+ "../src/tools.cc",
+ },
+ ctor::depends({"libctor_nomain.a"}),
+ ctor::flags({
+ .cxxflags = {
+ "-std=c++20", "-O3", "-Wall",
+ "-I../src", "-Iuunit",
+ "-DOUTPUT=\"tools\"",
+ "-fexceptions",
+ },
+ }),
+ },
+ {
+ ctor::target_type::unit_test_library,
+ ctor::output_system::build,
+ ctor::target("libctor_nomain.a"),
+ ctor::sources{
+ "../src/build.cc",
+ "../src/configure.cc",
+ "../src/deps.cc",
+ "../src/execute.cc",
+ "../src/pointerlist.cc",
+ "../src/rebuild.cc",
+ "../src/tasks.cc",
+ "../src/task.cc",
+ "../src/task_ar.cc",
+ "../src/task_cc.cc",
+ "../src/task_fn.cc",
+ "../src/task_ld.cc",
+ "../src/task_so.cc",
+ "../src/tools.cc",
+ "../src/util.cc",
+ "../src/externals_manual.cc",
+ "../configuration.cc",
+ },
+ ctor::flags({
+ .cxxflags = {
+ "-std=c++20", "-O3", "-Wall",
+ "-I../src",
+ "-fexceptions",
+ },
+ .ldflags = { "-pthread" },
+ }),
+ },
+ };
}
}
diff --git a/test/cycle_test.cc b/test/cycle_test.cc
index 3b45632..8f4c296 100644
--- a/test/cycle_test.cc
+++ b/test/cycle_test.cc
@@ -11,23 +11,23 @@ ctor::build_configurations ctorTestConfigsCyclic(const ctor::settings&)
{
// No dependency
{
- .target = "target0",
+ ctor::target("target0"),
},
// Direct (self-depends)
{
- .target = "target1",
- .depends = { "target1" },
+ ctor::target("target1"),
+ ctor::depends({ "target1" }),
},
// Indirect cyclic depends
{
- .target = "target2",
- .depends = { "target3" },
+ ctor::target("target2"),
+ ctor::depends({ "target3" }),
},
{
- .target = "target3",
- .depends = { "target2" },
+ ctor::target("target3"),
+ ctor::depends({ "target2" }),
},
};
}
diff --git a/test/generated_sources_test.cc b/test/generated_sources_test.cc
index 8c46983..626a102 100644
--- a/test/generated_sources_test.cc
+++ b/test/generated_sources_test.cc
@@ -32,24 +32,24 @@ public:
{
return ctor::build_configurations{
{
- .target = "test1",
- .sources = {
- {"foo.cc", ctor::source_type::generated}
- }
+ ctor::target("test1"),
+ ctor::sources{
+ {"foo.cc", ctor::source_type::generated}
+ },
},
{
- .target = "this_is_unused",
- .sources = {
- {"bar.x", ctor::output_file{"foo.cc"}},
- {"bar.y", ctor::output_file{"bar.cc"}},
- },
- .function = []([[maybe_unused]]const std::string& input,
- [[maybe_unused]]const std::string& output,
- [[maybe_unused]]const ctor::build_configuration& config,
- [[maybe_unused]]const ctor::settings& settings)
+ ctor::target("this_is_unused"),
+ ctor::sources{
+ {"bar.x", ctor::output_file{"foo.cc"}},
+ {"bar.y", ctor::output_file{"bar.cc"}},
+ },
+ ctor::GeneratorOneToOne([]([[maybe_unused]]const std::string& input,
+ [[maybe_unused]]const std::string& output,
+ [[maybe_unused]]const ctor::build_configuration& config,
+ [[maybe_unused]]const ctor::settings& settings)
{
return 0;
- }
+ }),
},
};
});
@@ -85,24 +85,24 @@ public:
{
return ctor::build_configurations{
{
- .target = "test1",
- .sources = {
- {"foo.cc", ctor::source_type::generated}
- }
+ ctor::target("test1"),
+ ctor::sources{
+ {"foo.cc", ctor::source_type::generated}
+ },
},
{
- .target = "foo.cc",
- .sources = {
- {"bar.x"},
- {"bar.y"},
- },
- .function = [](const std::vector<std::string>& input,
- const std::string& output,
- const ctor::build_configuration& config,
- const ctor::settings& settings)
+ ctor::target("foo.cc"),
+ ctor::sources{
+ {"bar.x"},
+ {"bar.y"},
+ },
+ ctor::GeneratorManyToOne([](const std::vector<std::string>& input,
+ const std::string& output,
+ const ctor::build_configuration& config,
+ const ctor::settings& settings)
{
return 0;
- }
+ }),
},
};
});
diff --git a/test/suite/ctor_files/ctor.cc.bar b/test/suite/ctor_files/ctor.cc.bar
index ab88379..9a45878 100644
--- a/test/suite/ctor_files/ctor.cc.bar
+++ b/test/suite/ctor_files/ctor.cc.bar
@@ -11,12 +11,12 @@ ctor::build_configurations ctorConfigs(const ctor::settings& settings)
return
{
{
- .name = "hello",
- .target = "hello",
- .sources = {
+ ctor::name("hello"),
+ ctor::target("hello"),
+ ctor::sources{
"hello.cc",
},
- .flags = {
+ ctor::flags{
.cxxflags = {
"-std=c++20",
"-O3",
@@ -26,7 +26,7 @@ ctor::build_configurations ctorConfigs(const ctor::settings& settings)
"-fexceptions",
},
},
- .externals = {"bar"},
+ ctor::externals({"bar"}),
}
};
}
diff --git a/test/suite/ctor_files/ctor.cc.base b/test/suite/ctor_files/ctor.cc.base
index a8b3c92..f740659 100644
--- a/test/suite/ctor_files/ctor.cc.base
+++ b/test/suite/ctor_files/ctor.cc.base
@@ -11,12 +11,12 @@ ctor::build_configurations ctorConfigs(const ctor::settings& settings)
return
{
{
- .name = "hello",
- .target = "hello",
- .sources = {
+ ctor::name("hello"),
+ ctor::target("hello"),
+ ctor::sources{
"hello.cc",
},
- .flags = {
+ ctor::flags{
.cxxflags = {
"-std=c++20",
"-O3",
@@ -26,7 +26,7 @@ ctor::build_configurations ctorConfigs(const ctor::settings& settings)
"-fexceptions",
},
},
- .externals = {"bar"},
+ ctor::externals({"bar"}),
}
};
}
diff --git a/test/suite/ctor_files/ctor.cc.generated b/test/suite/ctor_files/ctor.cc.generated
index d4b9786..1466e4d 100644
--- a/test/suite/ctor_files/ctor.cc.generated
+++ b/test/suite/ctor_files/ctor.cc.generated
@@ -13,11 +13,11 @@ ctor::build_configurations ctorConfigs(const ctor::settings& settings)
return
{
{
- .target = "world",
- .sources = {
+ ctor::target("world"),
+ ctor::sources{
{ "world.cc", ctor::source_type::generated },
},
- .flags = {
+ ctor::flags{
.cxxflags = {
"-std=c++20",
"-O3",
@@ -29,11 +29,11 @@ ctor::build_configurations ctorConfigs(const ctor::settings& settings)
},
},
{
- .target = "foo",
- .sources = {
+ ctor::target("foo"),
+ ctor::sources{
{ "foo.cc", ctor::source_type::generated },
},
- .flags = {
+ ctor::flags{
.cxxflags = {
"-std=c++20",
"-O3",
@@ -45,12 +45,12 @@ ctor::build_configurations ctorConfigs(const ctor::settings& settings)
},
},
{
- .target = "this_is_unused",
- .sources = {
+ ctor::target("this_is_unused"),
+ ctor::sources{
{"hello.cc", ctor::output_file{"world.cc"}},
{"hello.cc", ctor::output_file{"foo.cc"}},
},
- .function = [](const std::string& input,
+ ctor::GeneratorOneToOne{[](const std::string& input,
const std::string& output,
const ctor::build_configuration& config,
const ctor::settings& settings)
@@ -60,22 +60,22 @@ ctor::build_configurations ctorConfigs(const ctor::settings& settings)
std::cout << "Output: " << output << '\n';
fs::copy_file(input, output, fs::copy_options::overwrite_existing);
return 0;
- }
+ }}
},
{
- .target = "many_to_one",
- .sources = {
+ ctor::target("many_to_one"),
+ ctor::sources{
{"many_to_one.cc", ctor::source_type::generated}
}
},
{
- .target = "many_to_one.cc",
- .sources = {
+ ctor::target("many_to_one.cc"),
+ ctor::sources{
{"foo.cc", ctor::source_type::generated},
{"hello.cc"},
},
- .function = [](const std::vector<std::string>& input,
+ ctor::GeneratorManyToOne{[](const std::vector<std::string>& input,
const std::string& output,
const ctor::build_configuration& config,
const ctor::settings& settings)
@@ -97,7 +97,7 @@ ctor::build_configurations ctorConfigs(const ctor::settings& settings)
}
ofs << "*/\n";
return 0;
- }
+ }}
},
};
diff --git a/test/suite/ctor_files/ctor.cc.generated2 b/test/suite/ctor_files/ctor.cc.generated2
index c78489f..acda99f 100644
--- a/test/suite/ctor_files/ctor.cc.generated2
+++ b/test/suite/ctor_files/ctor.cc.generated2
@@ -13,24 +13,24 @@ ctor::build_configurations ctorConfigs(const ctor::settings& settings)
return
{
{
- .target = "world",
- .sources = {
+ ctor::target("world"),
+ ctor::sources{
{ "world.cc", ctor::source_type::generated },
},
},
{
- .target = "foo",
- .sources = {
+ ctor::target("foo"),
+ ctor::sources{
{ "foo.cc", ctor::source_type::generated },
},
},
{
- .target = "this_is_unused",
- .sources = {
+ ctor::target("this_is_unused"),
+ ctor::sources{
{"hello.cc", ctor::output_file{"world.cc"}},
{"hello.cc", ctor::output_file{"foo.cc"}},
},
- .function = [](const std::string& input,
+ ctor::GeneratorOneToOne{[](const std::string& input,
const std::string& output,
const ctor::build_configuration& config,
const ctor::settings& settings)
@@ -40,21 +40,21 @@ ctor::build_configurations ctorConfigs(const ctor::settings& settings)
std::cout << "Output: " << output << '\n';
fs::copy_file(input, output, fs::copy_options::overwrite_existing);
return 0;
- }
+ }}
},
{
- .target = "many_to_one",
- .sources = {
+ ctor::target("many_to_one"),
+ ctor::sources{
{"many_to_one.cc", ctor::source_type::generated}
}
},
{
- .target = "many_to_one.cc",
- .sources = {
+ ctor::target("many_to_one.cc"),
+ ctor::sources{
{"hello.cc"},
},
- .function = [](const std::vector<std::string>& input,
+ ctor::GeneratorManyToOne{[](const std::vector<std::string>& input,
const std::string& output,
const ctor::build_configuration& config,
const ctor::settings& settings)
@@ -76,7 +76,7 @@ ctor::build_configurations ctorConfigs(const ctor::settings& settings)
}
ofs << "*/\n";
return 0;
- }
+ }}
},
};
diff --git a/test/suite/ctor_files/ctor.cc.multi b/test/suite/ctor_files/ctor.cc.multi
index 157d96c..419f982 100644
--- a/test/suite/ctor_files/ctor.cc.multi
+++ b/test/suite/ctor_files/ctor.cc.multi
@@ -13,12 +13,12 @@ ctor::build_configurations ctorConfigs(const ctor::settings& settings)
return
{
{
- .name = "hello",
- .target = "hello",
- .sources = {
+ ctor::name("hello"),
+ ctor::target("hello"),
+ ctor::sources{
"hello.cc",
},
- .flags = {
+ ctor::flags{
.cxxflags = {
"-std=c++20",
"-O3",
@@ -28,7 +28,7 @@ ctor::build_configurations ctorConfigs(const ctor::settings& settings)
"-fexceptions",
},
},
- .externals = {"bar"},
+ ctor::externals({"bar"}),
}
};
}
diff --git a/test/tasks_test.cc b/test/tasks_test.cc
index 1276347..32bed5a 100644
--- a/test/tasks_test.cc
+++ b/test/tasks_test.cc
@@ -10,12 +10,12 @@ ctor::build_configurations ctorTestConfigs1(const ctor::settings&)
return
{
{
- .name = "Target1",
- .target = "target1",
- .sources = {"foo.cc", "bar.c"},
+ ctor::name("Target1"),
+ ctor::target("target1"),
+ ctor::sources({"foo.cc", "bar.c"}),
},
{
- .target = "target2",
+ ctor::target("target2"),
},
};
}
@@ -25,10 +25,10 @@ ctor::build_configurations ctorTestConfigs2(const ctor::settings&)
return
{
{
- .target = "target3",
+ ctor::target("target3"),
},
{
- .target = "target4",
+ ctor::target("target4"),
},
};
}