From 0dc88adc788674ab20af02fc128f33f7f429ccf1 Mon Sep 17 00:00:00 2001 From: Edward Nolan Date: Fri, 1 May 2026 22:33:42 -0400 Subject: [PATCH] Update flag forking approach to use split config.hpp and config_generated.hpp files This commit reflects the new flag forking approach discussed in the most recent Beman weekly sync: - For any configuration option where a compiler flag could cause differences in behavior that lead to ODR issues when linking two artifacts generated with different flags, maintainers generate a compiler definition like BEMAN_EXEMPLAR_FOOBAR into a config_generated.hpp header from a config_generated.hpp.in template. - Separately, a config.hpp file contains defaults for each definition. These defaults are only enabled if __has_include shows that the config_generated.hpp file is not present. --- CMakeLists.txt | 6 +++--- include/beman/iterator_interface/CMakeLists.txt | 3 ++- include/beman/iterator_interface/config.hpp | 15 +++++++++++++++ .../{config.hpp.in => config_generated.hpp.in} | 4 ++-- 4 files changed, 22 insertions(+), 6 deletions(-) create mode 100644 include/beman/iterator_interface/config.hpp rename include/beman/iterator_interface/{config.hpp.in => config_generated.hpp.in} (63%) diff --git a/CMakeLists.txt b/CMakeLists.txt index 31c4964..98f5b0a 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -49,8 +49,8 @@ if( endif() configure_file( - "${PROJECT_SOURCE_DIR}/include/beman/iterator_interface/config.hpp.in" - "${PROJECT_BINARY_DIR}/include/beman/iterator_interface/config.hpp" + "${PROJECT_SOURCE_DIR}/include/beman/iterator_interface/config_generated.hpp.in" + "${PROJECT_BINARY_DIR}/include/beman/iterator_interface/config_generated.hpp" @ONLY ) @@ -67,7 +67,7 @@ target_sources( FILE_SET HEADERS BASE_DIRS "${CMAKE_CURRENT_SOURCE_DIR}/include" - "${PROJECT_BINARY_DIR}/include" + "${CMAKE_CURRENT_BINARY_DIR}/include" ) set_target_properties( diff --git a/include/beman/iterator_interface/CMakeLists.txt b/include/beman/iterator_interface/CMakeLists.txt index fd546b1..1affc32 100644 --- a/include/beman/iterator_interface/CMakeLists.txt +++ b/include/beman/iterator_interface/CMakeLists.txt @@ -5,10 +5,11 @@ target_sources( PUBLIC FILE_SET HEADERS FILES + config.hpp iterator_interface.hpp iterator_interface_access.hpp detail/stl_interfaces/config.hpp detail/stl_interfaces/fwd.hpp detail/stl_interfaces/iterator_interface.hpp - "${PROJECT_BINARY_DIR}/include/beman/iterator_interface/config.hpp" + "${PROJECT_BINARY_DIR}/include/beman/iterator_interface/config_generated.hpp" ) diff --git a/include/beman/iterator_interface/config.hpp b/include/beman/iterator_interface/config.hpp new file mode 100644 index 0000000..f823ff9 --- /dev/null +++ b/include/beman/iterator_interface/config.hpp @@ -0,0 +1,15 @@ +#ifndef BEMAN_ITERATOR_INTERFACE_CONFIG_HPP +#define BEMAN_ITERATOR_INTERFACE_CONFIG_HPP + +#if !defined(__has_include) || __has_include() + #include +#else + #include + #if defined(__cpp_explicit_this_parameter) && __cpp_explicit_this_parameter >= 202110L + #define BEMAN_ITERATOR_INTERFACE_USE_DEDUCING_THIS() 1 + #else + #define BEMAN_ITERATOR_INTERFACE_USE_DEDUCING_THIS() 0 + #endif +#endif + +#endif diff --git a/include/beman/iterator_interface/config.hpp.in b/include/beman/iterator_interface/config_generated.hpp.in similarity index 63% rename from include/beman/iterator_interface/config.hpp.in rename to include/beman/iterator_interface/config_generated.hpp.in index 30455a2..3aebf28 100644 --- a/include/beman/iterator_interface/config.hpp.in +++ b/include/beman/iterator_interface/config_generated.hpp.in @@ -1,8 +1,8 @@ // include/beman/iterator_interface/config.hpp.in -*-C++-*- // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception -#ifndef BEMAN_ITERATOR_INTERFACE_CONFIG_HPP -#define BEMAN_ITERATOR_INTERFACE_CONFIG_HPP +#ifndef BEMAN_ITERATOR_INTERFACE_CONFIG_GENERATED_HPP +#define BEMAN_ITERATOR_INTERFACE_CONFIG_GENERATED_HPP #cmakedefine01 BEMAN_ITERATOR_INTERFACE_USE_DEDUCING_THIS()