xo-cmake: generate .build/reconfigure.sh script to rerun cmake

This commit is contained in:
Roland Conybeare 2026-01-11 14:05:05 -05:00
commit 9d7679c3ad
3 changed files with 46 additions and 9 deletions

View file

@ -4,13 +4,10 @@ cmake_minimum_required(VERSION 3.10)
project(xo-umbrella VERSION 1.0) project(xo-umbrella VERSION 1.0)
# ----------------------------------------------------------------
# global build settings
include(GNUInstallDirs)
include(cmake/xo-bootstrap-macros.cmake)
# Adopting submodule builds directly into this cmake. # Adopting submodule builds directly into this cmake.
# Want this before including bootstrap macros,
# so local ./xo-cmake supersedes installed version
#
# Submodule builds will pickup dependent xo artifacts directly # Submodule builds will pickup dependent xo artifacts directly
# from sibling build dirs. # from sibling build dirs.
# (Contrast with a build that relies on install step). # (Contrast with a build that relies on install step).
@ -26,6 +23,12 @@ include(cmake/xo-bootstrap-macros.cmake)
# #
set(XO_SUBMODULE_BUILD True) set(XO_SUBMODULE_BUILD True)
# ----------------------------------------------------------------
# global build settings
include(GNUInstallDirs)
include(cmake/xo-bootstrap-macros.cmake)
# toplevel source directory; used only with XO_SUBMODULE_BUILD # toplevel source directory; used only with XO_SUBMODULE_BUILD
set(XO_UMBRELLA_SOURCE_DIR ${CMAKE_SOURCE_DIR}) set(XO_UMBRELLA_SOURCE_DIR ${CMAKE_SOURCE_DIR})
set(XO_UMBRELLA_REPO_SUBDIR .) set(XO_UMBRELLA_REPO_SUBDIR .)

View file

@ -19,7 +19,13 @@ endif()
message(STATUS "XO_CMAKE_CONFIG_EXECUTABLE=${XO_CMAKE_CONFIG_EXECUTABLE}") message(STATUS "XO_CMAKE_CONFIG_EXECUTABLE=${XO_CMAKE_CONFIG_EXECUTABLE}")
if (NOT XO_SUBMODULE_BUILD) if (XO_SUBMODULE_BUILD)
if (("${CMAKE_MODULE_PATH}" STREQUAL "") OR ("${CMAKE_MODULE_PATH}" STREQUAL prefix))
# local version of xo-cmake macros
set(CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/xo-cmake/cmake")
message(STATUS "CMAKE_MODULE_PATH=${CMAKE_MODULE_PATH}")
endif()
else()
if (("${CMAKE_MODULE_PATH}" STREQUAL "") OR ("${CMAKE_MODULE_PATH}" STREQUAL prefix)) if (("${CMAKE_MODULE_PATH}" STREQUAL "") OR ("${CMAKE_MODULE_PATH}" STREQUAL prefix))
# default to typical install location for xo-project-macros # default to typical install location for xo-project-macros
execute_process(COMMAND ${XO_CMAKE_CONFIG_EXECUTABLE} --cmake-module-path OUTPUT_VARIABLE CMAKE_MODULE_PATH) execute_process(COMMAND ${XO_CMAKE_CONFIG_EXECUTABLE} --cmake-module-path OUTPUT_VARIABLE CMAKE_MODULE_PATH)

View file

@ -5,7 +5,7 @@ option(XO_ENABLE_OPENGL "enable opengl dependency for imgui apps" ON)
option(XO_ENABLE_ASM "generate assembler output (.s files)" OFF) option(XO_ENABLE_ASM "generate assembler output (.s files)" OFF)
macro(xo_cxx_config_message) macro(xo_cxx_config_message)
message(STATUS "GUESSED_CMAKE_CMD=cmake -DXO_CMAKE_CONFIG_EXECUTABLE=${XO_CMAKE_CONFIG_EXECUTABLE} -DENABLE_TESTING=${ENABLE_TESTING} -DXO_ENABLE_DOCS=${XO_ENABLE_DCS} -DXO_ENABLE_EXAMPLES=${XO_ENABLE_EXAMPLES} -DXO_ENABLE_VULKAN=${XO_ENABLE_VULKAN} -DXO_ENABLE_OPENGL=${XO_ENABLE_OPENGL} -DCMAKE_CXX_STANDARD=${CMAKE_CXX_STANDARD} -DCMAKE_INSTALL_PREFIX=${CMAKE_INSTALL_PREFIX} -DCMAKE_MODULE_PATH=${CMAKE_MODULE_PATH} -DCMAKE_PREFIX_PATH=${CMAKE_PREFIX_PATH} -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} -DCMAKE_INSTALL_DOCDIR=${CMAKE_INSTALL_DOCDIR} -B ${CMAKE_BINARY_DIR}") message(STATUS "GUESSED_CMAKE_CMD=cmake -DXO_CMAKE_CONFIG_EXECUTABLE=${XO_CMAKE_CONFIG_EXECUTABLE} -DENABLE_TESTING=${ENABLE_TESTING} -DXO_ENABLE_DOCS=${XO_ENABLE_DOCS} -DXO_ENABLE_ASM=${XO_ENABLE_ASM} -DXO_ENABLE_EXAMPLES=${XO_ENABLE_EXAMPLES} -DXO_ENABLE_VULKAN=${XO_ENABLE_VULKAN} -DXO_ENABLE_OPENGL=${XO_ENABLE_OPENGL} -DCMAKE_CXX_STANDARD=${CMAKE_CXX_STANDARD} -DCMAKE_INSTALL_PREFIX=${CMAKE_INSTALL_PREFIX} -DCMAKE_MODULE_PATH=${CMAKE_MODULE_PATH} -DCMAKE_PREFIX_PATH=${CMAKE_PREFIX_PATH} -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} -DCMAKE_INSTALL_DOCDIR=${CMAKE_INSTALL_DOCDIR} -B ${CMAKE_BINARY_DIR}")
message(STATUS "XO_CMAKE_CONFIG_EXECUTABLE=${XO_CMAKE_CONFIG_EXECUTABLE}") message(STATUS "XO_CMAKE_CONFIG_EXECUTABLE=${XO_CMAKE_CONFIG_EXECUTABLE}")
message(STATUS "CMAKE_INSTALL_PREFIX=${CMAKE_INSTALL_PREFIX}") message(STATUS "CMAKE_INSTALL_PREFIX=${CMAKE_INSTALL_PREFIX}")
endmacro() endmacro()
@ -40,7 +40,7 @@ endmacro()
# deprecated -- prefer xo_cxx_toplevel_options3() # deprecated -- prefer xo_cxx_toplevel_options3()
macro(xo_cxx_toplevel_options2) macro(xo_cxx_toplevel_options2)
if (NOT DEFINED _xo_cxx_toplevel_done) if (NOT DEFINED _xo_cxx_toplevel_done)
message("xo_cxx_toplevel_options2: PROJECT=${PROJECT_NAME}") message(STATUS "xo_cxx_toplevel_options2: PROJECT=${PROJECT_NAME}")
enable_language(CXX) enable_language(CXX)
xo_toplevel_compile_options() xo_toplevel_compile_options()
@ -76,6 +76,7 @@ endmacro()
macro(xo_cxx_toplevel_options3) macro(xo_cxx_toplevel_options3)
xo_cxx_toplevel_options2() xo_cxx_toplevel_options2()
xo_toplevel_config2() xo_toplevel_config2()
xo_generate_reconfigure_script()
endmacro() endmacro()
# deprecated, I think? # deprecated, I think?
@ -270,6 +271,33 @@ macro(xo_toplevel_asm_config2)
endif() endif()
endmacro() endmacro()
function(xo_generate_reconfigure_script)
set(_reconfigure_script "${CMAKE_BINARY_DIR}/reconfigure.sh")
# In submodule build: only generate at umbrella toplevel
# In standalone build: always generate
if(XO_SUBMODULE_BUILD AND NOT (CMAKE_SOURCE_DIR STREQUAL PROJECT_SOURCE_DIR))
return()
endif()
file(WRITE ${_reconfigure_script} "#!/bin/bash\n")
file(APPEND ${_reconfigure_script} "# Generated by cmake - rerun to reconfigure\n")
file(APPEND ${_reconfigure_script} "cmake \\\n")
file(APPEND ${_reconfigure_script} " -B ${CMAKE_BINARY_DIR} \\\n")
file(APPEND ${_reconfigure_script} " -S ${CMAKE_SOURCE_DIR} \\\n")
file(APPEND ${_reconfigure_script} " -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} \\\n")
file(APPEND ${_reconfigure_script} " -DCMAKE_INSTALL_PREFIX=${CMAKE_INSTALL_PREFIX} \\\n")
file(APPEND ${_reconfigure_script} " -DXO_ENABLE_DOCS=${XO_ENABLE_DOCS} \\\n")
file(APPEND ${_reconfigure_script} " -DXO_ENABLE_EXAMPLES=${XO_ENABLE_EXAMPLES} \\\n")
file(APPEND ${_reconfigure_script} " -DXO_ENABLE_ASM=${XO_ENABLE_ASM} \\\n")
file(APPEND ${_reconfigure_script} " \"$@\"\n")
file(CHMOD ${_reconfigure_script} PERMISSIONS
OWNER_READ OWNER_WRITE OWNER_EXECUTE
GROUP_READ GROUP_EXECUTE
WORLD_READ WORLD_EXECUTE)
message(STATUS "Generated ${_reconfigure_script}")
endfunction()
# target to build+install coverage report. # target to build+install coverage report.
# #
macro(xo_utest_coverage_config2) macro(xo_utest_coverage_config2)