Skip to content

Commit 2bd17ec

Browse files
committed
Add template force regeneration capability
FORCE_INIT MECHANISM: - Added FORCE_INIT option to cpp_library_setup() - Added global CPP_LIBRARY_FORCE_INIT CMake option - Added 'init' preset for convenient template regeneration - Updated presets and CI modules to respect FORCE_INIT USAGE: Method 1: cmake -S . -B build -DCPP_LIBRARY_FORCE_INIT=ON Method 2: cmake --preset=init (after initial generation) REGENERATES: - CMakePresets.json from template - .github/workflows/ci.yml from template - Future template files will respect this flag too
1 parent 0cd37b7 commit 2bd17ec

File tree

4 files changed

+39
-9
lines changed

4 files changed

+39
-9
lines changed

cmake/cpp-library-ci.cmake

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,16 +3,20 @@
33
# cpp-library-ci.cmake - CI setup functionality
44

55
function(_cpp_library_setup_ci)
6+
set(options FORCE_INIT)
67
set(oneValueArgs
78
NAME
89
VERSION
910
DESCRIPTION
1011
)
1112

12-
cmake_parse_arguments(ARG "" "${oneValueArgs}" "" ${ARGN})
13+
cmake_parse_arguments(ARG "${options}" "${oneValueArgs}" "" ${ARGN})
1314

14-
# Only generate CI files if they don't exist
15-
if(NOT EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/.github/workflows/ci.yml")
15+
# Only generate CI files if they don't exist (unless forcing)
16+
if(NOT EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/.github/workflows/ci.yml" OR ARG_FORCE_INIT)
17+
if(ARG_FORCE_INIT)
18+
message(STATUS "Force regenerating .github/workflows/ci.yml")
19+
endif()
1620
# Create .github/workflows directory
1721
file(MAKE_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/.github/workflows")
1822

cmake/cpp-library-presets.cmake

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,18 @@
33
# cpp-library-presets.cmake - CMakePresets.json generation
44

55
function(_cpp_library_generate_presets)
6-
# Only generate if CMakePresets.json doesn't already exist
7-
if(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/CMakePresets.json")
6+
set(options FORCE_INIT)
7+
cmake_parse_arguments(ARG "${options}" "" "" ${ARGN})
8+
9+
# Only generate if CMakePresets.json doesn't already exist (unless forcing)
10+
if(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/CMakePresets.json" AND NOT ARG_FORCE_INIT)
811
return()
912
endif()
1013

14+
if(ARG_FORCE_INIT)
15+
message(STATUS "Force regenerating CMakePresets.json")
16+
endif()
17+
1118
set(PRESETS_TEMPLATE ${CPP_LIBRARY_ROOT}/templates/CMakePresets.json.in)
1219
set(PRESETS_OUT ${CMAKE_CURRENT_SOURCE_DIR}/CMakePresets.json)
1320

cpp-library.cmake

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ function(cpp_library_setup)
2525
CUSTOM_INSTALL # Skip default installation
2626
NO_PRESETS # Skip CMakePresets.json generation
2727
NO_CI # Skip CI generation (CI enabled by default)
28+
FORCE_INIT # Force regeneration of template files
2829
)
2930
set(oneValueArgs
3031
NAME # Project name (e.g., "stlab-enum-ops")
@@ -66,6 +67,11 @@ function(cpp_library_setup)
6667
set(ARG_REQUIRES_CPP_VERSION 17)
6768
endif()
6869

70+
# Check for global FORCE_INIT option (can be set via -DCPP_LIBRARY_FORCE_INIT=ON)
71+
if(CPP_LIBRARY_FORCE_INIT)
72+
set(ARG_FORCE_INIT TRUE)
73+
endif()
74+
6975
# Create the basic library target (always done)
7076
_cpp_library_setup_core(
7177
NAME "${ARG_NAME}"
@@ -95,7 +101,7 @@ function(cpp_library_setup)
95101

96102
# Generate CMakePresets.json (unless disabled)
97103
if(NOT ARG_NO_PRESETS)
98-
_cpp_library_generate_presets()
104+
_cpp_library_generate_presets(FORCE_INIT ${ARG_FORCE_INIT})
99105
endif()
100106

101107
# Setup testing (if tests are specified)
@@ -123,6 +129,7 @@ function(cpp_library_setup)
123129
NAME "${ARG_NAME}"
124130
VERSION "${ARG_VERSION}"
125131
DESCRIPTION "${ARG_DESCRIPTION}"
132+
FORCE_INIT ${ARG_FORCE_INIT}
126133
)
127134
endif()
128135

templates/CMakePresets.json.in

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -41,18 +41,30 @@
4141
"binaryDir": "${sourceDir}/build/clang-tidy",
4242
"inherits": "test",
4343
"cacheVariables": {
44-
"CMAKE_CXX_CLANG_TIDY": "clang-tidy;-checks=*,-fuchsia-*,-google-*,-zircon-*,-abseil-*,-llvm-*,-llvmlibc-*,-altera-*,-android-*,-darwin-*,-objc-*,-openmp-*"
44+
"CMAKE_CXX_CLANG_TIDY": "clang-tidy;"
45+
}
46+
},
47+
{
48+
"name": "init",
49+
"displayName": "Initialize Templates",
50+
"description": "Force regeneration of template files (CMakePresets.json, CI, etc.)",
51+
"binaryDir": "${sourceDir}/build/init",
52+
"inherits": "test",
53+
"cacheVariables": {
54+
"CPP_LIBRARY_FORCE_INIT": "ON"
4555
}
4656
}
4757
],
4858
"buildPresets": [
4959
{ "name": "default", "displayName": "Default Build", "configurePreset": "default" },
5060
{ "name": "test", "displayName": "Build Tests", "configurePreset": "test" },
5161
{ "name": "docs", "displayName": "Build Docs", "configurePreset": "docs", "targets": ["docs"] },
52-
{ "name": "clang-tidy", "displayName": "Build with Clang-Tidy", "configurePreset": "clang-tidy" }
62+
{ "name": "clang-tidy", "displayName": "Build with Clang-Tidy", "configurePreset": "clang-tidy" },
63+
{ "name": "init", "displayName": "Initialize Templates", "configurePreset": "init" }
5364
],
5465
"testPresets": [
5566
{ "name": "test", "displayName": "Run All Tests", "configurePreset": "test", "output": { "outputOnFailure": true } },
56-
{ "name": "clang-tidy", "displayName": "Run Tests with Clang-Tidy", "configurePreset": "clang-tidy", "output": { "outputOnFailure": true } }
67+
{ "name": "clang-tidy", "displayName": "Run Tests with Clang-Tidy", "configurePreset": "clang-tidy", "output": { "outputOnFailure": true } },
68+
{ "name": "init", "displayName": "Initialize Templates", "configurePreset": "init", "output": { "outputOnFailure": true } }
5769
]
5870
}

0 commit comments

Comments
 (0)