summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBent Bisballe Nyeng <deva@aasimon.org>2026-02-02 20:10:41 +0100
committerBent Bisballe Nyeng <deva@aasimon.org>2026-02-02 20:10:41 +0100
commitf66ab53b9380a5367e24727df620d6620ab031f7 (patch)
tree80735e1493b7c8d17186a008c9cf36337dab936d
parent6accb227b75fef7e99257b0078eb95f9aa0823cc (diff)
Apply new syntax to flagsnew_syntax
-rw-r--r--ctor.cc28
-rw-r--r--src/configure.cc10
-rw-r--r--src/ctor.h35
-rw-r--r--test/ctor.cc304
-rw-r--r--test/suite/ctor_files/ctor.cc.bar12
-rw-r--r--test/suite/ctor_files/ctor.cc.base12
-rw-r--r--test/suite/ctor_files/ctor.cc.generated4
-rw-r--r--test/suite/ctor_files/ctor.cc.multi12
8 files changed, 226 insertions, 191 deletions
diff --git a/ctor.cc b/ctor.cc
index daf040e..9a82cf5 100644
--- a/ctor.cc
+++ b/ctor.cc
@@ -32,20 +32,20 @@ ctor::build_configurations ctorConfigs(const ctor::settings& settings)
"src/util.cc",
"src/unittest.cc",
},
- ctor::flags({
- .cxxflags = {
- "-std=c++20",
- "-O3",
- "-g",
- "-Wall",
- "-Wextra",
- "-Wshadow",
- "-Wconversion",
-// "-Wnrvo",
- "-Isrc",
- "-fexceptions",
- },
- }),
+ ctor::flags{
+ ctor::cxx_flags{
+ "-std=c++20",
+ "-O3",
+ "-g",
+ "-Wall",
+ "-Wextra",
+ "-Wshadow",
+ "-Wconversion",
+// "-Wnrvo",
+ "-Isrc",
+ "-fexceptions",
+ },
+ },
}
};
}
diff --git a/src/configure.cc b/src/configure.cc
index a8b50e0..1b8caa6 100644
--- a/src/configure.cc
+++ b/src/configure.cc
@@ -839,7 +839,7 @@ int regenerateCache(ctor::settings& settings,
for(const auto& ext : externalConfigs)
{
- istr << " { \"" << esc(ext.name) << "\", {\n";
+ istr << " { \"" << esc(ext.name) << "\", ctor::flags{\n";
ctor::flags resolved_flags;
if(std::holds_alternative<ctor::external_manual>(ext.external))
{
@@ -858,7 +858,7 @@ int regenerateCache(ctor::settings& settings,
if(!resolved_flags.cflags.empty())
{
- istr << " .cflags = {";
+ istr << " ctor::c_flags{";
for(const auto& flag : resolved_flags.cflags)
{
istr << flag << ",";
@@ -868,7 +868,7 @@ int regenerateCache(ctor::settings& settings,
if(!resolved_flags.cxxflags.empty())
{
- istr << " .cxxflags = {";
+ istr << " ctor::cxx_flags{";
for(const auto& flag : resolved_flags.cxxflags)
{
istr << flag << ",";
@@ -878,7 +878,7 @@ int regenerateCache(ctor::settings& settings,
if(!resolved_flags.ldflags.empty())
{
- istr << " .ldflags = {";
+ istr << " ctor::ld_flags{";
for(const auto& flag : resolved_flags.ldflags)
{
istr << flag << ",";
@@ -888,7 +888,7 @@ int regenerateCache(ctor::settings& settings,
if(!resolved_flags.asmflags.empty())
{
- istr << " .asmflags = {";
+ istr << " ctor::asm_flags{";
for(const auto& flag : resolved_flags.asmflags)
{
istr << flag << ",";
diff --git a/src/ctor.h b/src/ctor.h
index aa46e5f..bac1e3a 100644
--- a/src/ctor.h
+++ b/src/ctor.h
@@ -269,6 +269,41 @@ using asm_flags = std::vector<ctor::asm_flag>;
struct flags
{
+ template <class ... Args>
+ requires ((
+ std::is_same_v<Args, ctor::c_flags> ||
+ std::is_same_v<Args, ctor::cxx_flags> ||
+ std::is_same_v<Args, ctor::ld_flags> ||
+ std::is_same_v<Args, ctor::ar_flags> ||
+ std::is_same_v<Args, ctor::asm_flags>
+ ) && ...)
+ constexpr flags(Args && ... arg)
+ {
+ ([&]
+ {
+ if constexpr(std::is_same_v<Args, ctor::c_flags>)
+ {
+ cflags = arg;
+ }
+ else if constexpr(std::is_same_v<Args, ctor::cxx_flags>)
+ {
+ cxxflags = arg;
+ }
+ else if constexpr(std::is_same_v<Args, ctor::ld_flags>)
+ {
+ ldflags = arg;
+ }
+ else if constexpr(std::is_same_v<Args, ctor::ar_flags>)
+ {
+ arflags = arg;
+ }
+ else if constexpr(std::is_same_v<Args, ctor::asm_flags>)
+ {
+ asmflags = arg;
+ }
+ }(), ...);
+ }
+
ctor::c_flags cflags; // flags for c compiler
ctor::cxx_flags cxxflags; // flags for c++ compiler
ctor::ld_flags ldflags; // flags for linker
diff --git a/test/ctor.cc b/test/ctor.cc
index 250acec..440ddfe 100644
--- a/test/ctor.cc
+++ b/test/ctor.cc
@@ -14,236 +14,236 @@ ctor::build_configurations ctorTestConfigs(const ctor::settings& settings)
ctor::output_system::build,
ctor::target("argparser_test"),
ctor::sources{
- "argparser_test.cc",
- "testmain.cc",
+ "argparser_test.cc",
+ "testmain.cc",
+ },
+ ctor::flags{
+ ctor::cxx_flags{
+ "-std=c++20", "-O3", "-Wall",
+ "-I../src", "-Iuunit",
+ "-DOUTPUT=\"argparser\"",
+ "-fexceptions",
},
- 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",
- },
+ "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::flags{
+ ctor::cxx_flags{
+ "-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",
+ "argsplit_test.cc",
+ "testmain.cc",
+ "../src/util.cc",
+ },
+ ctor::flags{
+ ctor::cxx_flags{
+ "-std=c++20", "-O3", "-Wall",
+ "-I../src", "-Iuunit",
+ "-DOUTPUT=\"argsplit\"",
+ "-fexceptions",
},
- 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",
+ "pointerlist_test.cc",
+ "testmain.cc",
+ "../src/pointerlist.cc",
+ },
+ ctor::flags{
+ ctor::cxx_flags{
+ "-std=c++20", "-O3", "-Wall",
+ "-I../src", "-Iuunit",
+ "-DOUTPUT=\"pointerlist\"",
+ "-fexceptions",
},
- 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",
- },
+ "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::flags{
+ ctor::cxx_flags{
+ "-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",
+ "testprog.cc",
+ },
+ ctor::flags{
+ ctor::cxx_flags{
+ "-std=c++20", "-O3", "-Wall",
+ "-fexceptions",
},
- 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",
- },
+ "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::flags{
+ ctor::cxx_flags{
+ "-std=c++20", "-O3", "-Wall",
+ "-I../src", "-Iuunit",
+ "-DOUTPUT=\"execute\"",
+ "-fexceptions",
+ },
+ ctor::ld_flags{ "-pthread" },
+ },
},
{
ctor::target_type::unit_test,
ctor::output_system::build,
ctor::target("tasks_test"),
ctor::sources{
- "tasks_test.cc",
- "testmain.cc",
- },
+ "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::flags{
+ ctor::cxx_flags{
+ "-std=c++20", "-O3", "-Wall",
+ "-I../src", "-Iuunit",
+ "-DOUTPUT=\"tasks\"",
+ "-fexceptions",
+ },
+ ctor::ld_flags{ "-pthread" },
+ },
},
{
ctor::target_type::unit_test,
ctor::output_system::build,
ctor::target("cycle_test"),
ctor::sources{
- "cycle_test.cc",
- "testmain.cc",
- },
+ "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::flags{
+ ctor::cxx_flags{
+ "-std=c++20", "-O3", "-Wall",
+ "-I../src", "-Iuunit",
+ "-DOUTPUT=\"cycle\"",
+ "-fexceptions",
+ },
+ ctor::ld_flags{ "-pthread" },
+ },
},
{
ctor::target_type::unit_test,
ctor::output_system::build,
ctor::target("source_type_test"),
ctor::sources{
- "source_type_test.cc",
- "testmain.cc",
- },
+ "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::flags{
+ ctor::cxx_flags{
+ "-std=c++20", "-O3", "-Wall",
+ "-I../src", "-Iuunit",
+ "-DOUTPUT=\"source_type\"",
+ "-fexceptions",
+ },
+ ctor::ld_flags{ "-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",
- },
+ "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::flags{
+ ctor::cxx_flags{
+ "-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",
+ "../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{
+ ctor::cxx_flags{
+ "-std=c++20", "-O3", "-Wall",
+ "-I../src",
+ "-fexceptions",
},
- ctor::flags({
- .cxxflags = {
- "-std=c++20", "-O3", "-Wall",
- "-I../src",
- "-fexceptions",
- },
- .ldflags = { "-pthread" },
- }),
+ ctor::ld_flags{ "-pthread" },
+ },
},
};
}
diff --git a/test/suite/ctor_files/ctor.cc.bar b/test/suite/ctor_files/ctor.cc.bar
index 9a45878..2342c3a 100644
--- a/test/suite/ctor_files/ctor.cc.bar
+++ b/test/suite/ctor_files/ctor.cc.bar
@@ -17,7 +17,7 @@ ctor::build_configurations ctorConfigs(const ctor::settings& settings)
"hello.cc",
},
ctor::flags{
- .cxxflags = {
+ ctor::cxx_flags{
"-std=c++20",
"-O3",
"-g",
@@ -38,11 +38,11 @@ ctor::external_configurations ctorExtConfigs(const ctor::settings& settings)
{
.name = "bar",
.external = ctor::external_manual{
- .flags = {
- .cflags = { "-D_B_" },
- .cxxflags = { "-D_A_", "-DBAR"},
- .ldflags = { "-D_C_" },
- .asmflags = { "-D_D_" },
+ .flags = ctor::flags{
+ ctor::c_flags{ "-D_B_" },
+ ctor::cxx_flags{ "-D_A_", "-DBAR"},
+ ctor::ld_flags{ "-D_C_" },
+ ctor::asm_flags{ "-D_D_" },
},
},
// Creates --with-foo-prefix arg to configure which will be used for
diff --git a/test/suite/ctor_files/ctor.cc.base b/test/suite/ctor_files/ctor.cc.base
index f740659..3734415 100644
--- a/test/suite/ctor_files/ctor.cc.base
+++ b/test/suite/ctor_files/ctor.cc.base
@@ -17,7 +17,7 @@ ctor::build_configurations ctorConfigs(const ctor::settings& settings)
"hello.cc",
},
ctor::flags{
- .cxxflags = {
+ ctor::cxx_flags{
"-std=c++20",
"-O3",
"-g",
@@ -39,11 +39,11 @@ ctor::external_configurations ctorExtConfigs(const ctor::settings& settings)
.name = "bar",
.external = ctor::external_manual
{
- .flags = {
- .cflags = { "-D_B_" },
- .cxxflags = { "-D_A_", "-DFOO"},
- .ldflags = { "-D_C_" },
- .asmflags = { "-D_D_" },
+ .flags = ctor::flags{
+ ctor::c_flags{ "-D_B_" },
+ ctor::cxx_flags{ "-D_A_", "-DFOO"},
+ ctor::ld_flags{ "-D_C_" },
+ ctor::asm_flags{ "-D_D_" },
},
},
// Creates --with-foo-prefix arg to configure which will be used for
diff --git a/test/suite/ctor_files/ctor.cc.generated b/test/suite/ctor_files/ctor.cc.generated
index 1466e4d..fe7e173 100644
--- a/test/suite/ctor_files/ctor.cc.generated
+++ b/test/suite/ctor_files/ctor.cc.generated
@@ -18,7 +18,7 @@ ctor::build_configurations ctorConfigs(const ctor::settings& settings)
{ "world.cc", ctor::source_type::generated },
},
ctor::flags{
- .cxxflags = {
+ ctor::cxx_flags{
"-std=c++20",
"-O3",
"-g",
@@ -34,7 +34,7 @@ ctor::build_configurations ctorConfigs(const ctor::settings& settings)
{ "foo.cc", ctor::source_type::generated },
},
ctor::flags{
- .cxxflags = {
+ ctor::cxx_flags{
"-std=c++20",
"-O3",
"-g",
diff --git a/test/suite/ctor_files/ctor.cc.multi b/test/suite/ctor_files/ctor.cc.multi
index 419f982..cf86703 100644
--- a/test/suite/ctor_files/ctor.cc.multi
+++ b/test/suite/ctor_files/ctor.cc.multi
@@ -19,7 +19,7 @@ ctor::build_configurations ctorConfigs(const ctor::settings& settings)
"hello.cc",
},
ctor::flags{
- .cxxflags = {
+ ctor::cxx_flags{
"-std=c++20",
"-O3",
"-g",
@@ -40,11 +40,11 @@ ctor::external_configurations ctorExtConfigs(const ctor::settings& settings)
{
.name = "bar",
.external = ctor::external_manual{
- .flags = {
- .cflags = { "-D_B_" },
- .cxxflags = { "-D_A_", "-DFOO"},
- .ldflags = { "-D_C_" },
- .asmflags = { "-D_D_" },
+ .flags = ctor::flags{
+ ctor::c_flags{ "-D_B_" },
+ ctor::cxx_flags{ "-D_A_", "-DFOO"},
+ ctor::ld_flags{ "-D_C_" },
+ ctor::asm_flags{ "-D_D_" },
},
},
// Creates --with-foo-prefix arg to configure which will be used for