summaryrefslogtreecommitdiff
path: root/src
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 /src
parent6accb227b75fef7e99257b0078eb95f9aa0823cc (diff)
Apply new syntax to flagsnew_syntax
Diffstat (limited to 'src')
-rw-r--r--src/configure.cc10
-rw-r--r--src/ctor.h35
2 files changed, 40 insertions, 5 deletions
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