From f6050813d2c6ff39ac00966ee8a59b6e67d3f6d1 Mon Sep 17 00:00:00 2001 From: Pat Riehecky Date: Fri, 20 Feb 2026 15:51:40 -0600 Subject: [PATCH] Use `add_subdirectory` rather than include --- CMakeLists.txt | 11 ++++++----- config/CMakeLists.txt | 8 +------- docs/CMakeLists.txt | 13 +++++-------- src/CMakeLists.txt | 20 +++++++++----------- systemd/CMakeLists.txt | 18 ++++++------------ test/CMakeLists.txt | 7 ++----- 6 files changed, 29 insertions(+), 48 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index ce69398..26cb090 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -6,6 +6,7 @@ project(static-subid C) # CMake modules include(GNUInstallDirs) include(CheckCCompilerFlag) +enable_testing() # ############################################################################## # Require out-of-source builds @@ -171,11 +172,11 @@ endif(NOT MAX_RANGES MATCHES "^[0-9]+$") # ############################################################################## # task focused cmake -include(config/CMakeLists.txt) -include(docs/CMakeLists.txt) -include(src/CMakeLists.txt) -include(systemd/CMakeLists.txt) -include(test/CMakeLists.txt) +add_subdirectory(config) +add_subdirectory(docs) +add_subdirectory(src) +add_subdirectory(systemd) +add_subdirectory(test) # ############################################################################## # Print out state summary diff --git a/config/CMakeLists.txt b/config/CMakeLists.txt index cb56cdf..4cfeed5 100644 --- a/config/CMakeLists.txt +++ b/config/CMakeLists.txt @@ -1,11 +1,5 @@ -cmake_minimum_required(VERSION 3.21) - -# ############################################################################## -# Load CMake provided modules -include(GNUInstallDirs) - # ############################################################################## # Create example configuration file and directory structure install(DIRECTORY DESTINATION ${CONFIG_DIR_PATH}) -install(FILES ${PROJECT_SOURCE_DIR}/config/${PROJECT_NAME}.conf +install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/${PROJECT_NAME}.conf DESTINATION ${CONFIG_DIR_PATH}) diff --git a/docs/CMakeLists.txt b/docs/CMakeLists.txt index d827609..1aee903 100644 --- a/docs/CMakeLists.txt +++ b/docs/CMakeLists.txt @@ -1,6 +1,3 @@ -cmake_minimum_required(VERSION 3.21) -include(GNUInstallDirs) - find_program(ASCIIDOCTOR asciidoctor) find_program(ASCIIDOC asciidoc) find_program(A2X a2x) @@ -13,29 +10,29 @@ if(ASCIIDOCTOR) OUTPUT ${PROJECT_BINARY_DIR}/static-subid.conf.5 COMMAND ${ASCIIDOCTOR} -b manpage -o ${PROJECT_BINARY_DIR}/static-subid.conf.5 - ${PROJECT_SOURCE_DIR}/docs/static-subid.conf.adoc + ${CMAKE_CURRENT_SOURCE_DIR}/static-subid.conf.adoc COMMENT "Building static-subid.conf manpage with asciidoctor" VERBATIM) add_custom_command( OUTPUT ${PROJECT_BINARY_DIR}/static-subid.8 COMMAND ${ASCIIDOCTOR} -b manpage -o ${PROJECT_BINARY_DIR}/static-subid.8 - ${PROJECT_SOURCE_DIR}/docs/static-subid.adoc + ${CMAKE_CURRENT_SOURCE_DIR}/static-subid.adoc COMMENT "Building static-subid manpage with asciidoctor" VERBATIM) add_custom_target(doc ALL DEPENDS ${PROJECT_BINARY_DIR}/static-subid.conf.5 - static-subid.8) + ${PROJECT_BINARY_DIR}/static-subid.8) elseif(ASCIIDOC AND A2X) message(STATUS "Using asciidoc/a2x for manpage generation") add_custom_command( OUTPUT ${PROJECT_BINARY_DIR}/static-subid.conf.5 COMMAND ${A2X} --doctype manpage --format manpage -D ${PROJECT_BINARY_DIR} - ${PROJECT_SOURCE_DIR}/docs/static-subid.conf.adoc + ${CMAKE_CURRENT_SOURCE_DIR}/static-subid.conf.adoc COMMENT "Building static-subid.conf manpage with a2x" VERBATIM) add_custom_command( OUTPUT ${PROJECT_BINARY_DIR}/static-subid.8 COMMAND ${A2X} --doctype manpage --format manpage -D ${PROJECT_BINARY_DIR} - ${PROJECT_SOURCE_DIR}/docs/static-subid.adoc + ${CMAKE_CURRENT_SOURCE_DIR}/static-subid.adoc COMMENT "Building static-subid manpage with a2x" VERBATIM) add_custom_target(doc ALL DEPENDS ${PROJECT_BINARY_DIR}/static-subid.conf.5 diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 290a897..1043f3d 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -1,24 +1,22 @@ -cmake_minimum_required(VERSION 3.21) - # ############################################################################## # Load CMake provided modules -include(GNUInstallDirs) # ############################################################################## # Generate autoconf.h from template -configure_file("${CMAKE_CURRENT_SOURCE_DIR}/src/autoconf.h.in" +configure_file("${CMAKE_CURRENT_SOURCE_DIR}/autoconf.h.in" "${CMAKE_CURRENT_BINARY_DIR}/autoconf.h" @ONLY) # ############################################################################## # Source files set(STATIC_SUBID_LIB_SOURCES - ${CMAKE_CURRENT_SOURCE_DIR}/src/config.c - ${CMAKE_CURRENT_SOURCE_DIR}/src/range.c - ${CMAKE_CURRENT_SOURCE_DIR}/src/subid.c - ${CMAKE_CURRENT_SOURCE_DIR}/src/syscall_ops_default.c - ${CMAKE_CURRENT_SOURCE_DIR}/src/util.c - ${CMAKE_CURRENT_SOURCE_DIR}/src/validate.c) -set(STATIC_SUBID_BINARY_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/src/main.c) + ${CMAKE_CURRENT_SOURCE_DIR}/config.c + ${CMAKE_CURRENT_SOURCE_DIR}/range.c + ${CMAKE_CURRENT_SOURCE_DIR}/subid.c + ${CMAKE_CURRENT_SOURCE_DIR}/syscall_ops_default.c + ${CMAKE_CURRENT_SOURCE_DIR}/util.c + ${CMAKE_CURRENT_SOURCE_DIR}/validate.c + CACHE INTERNAL "Library source files") +set(STATIC_SUBID_BINARY_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/main.c) # ############################################################################## # Create executable diff --git a/systemd/CMakeLists.txt b/systemd/CMakeLists.txt index f3ae71c..1993b2e 100644 --- a/systemd/CMakeLists.txt +++ b/systemd/CMakeLists.txt @@ -1,24 +1,18 @@ -cmake_minimum_required(VERSION 3.21) - -# ############################################################################## -# Load CMake provided modules -include(GNUInstallDirs) - # ############################################################################## # Create systemd units configure_file( - "${CMAKE_CURRENT_SOURCE_DIR}/systemd/system/static-subid@.service.in" + "${CMAKE_CURRENT_SOURCE_DIR}/system/static-subid@.service.in" "${CMAKE_CURRENT_BINARY_DIR}/static-subid@.service" @ONLY) install(FILES ${CMAKE_CURRENT_BINARY_DIR}/static-subid@.service DESTINATION ${CMAKE_INSTALL_SYSTEMD_UNITDIR}) install( - FILES "${CMAKE_CURRENT_SOURCE_DIR}/systemd/user/setup-static-subid.service" + FILES "${CMAKE_CURRENT_SOURCE_DIR}/user/setup-static-subid.service" DESTINATION ${CMAKE_INSTALL_SYSTEMD_USERUNITDIR}) # ############################################################################## # Setup polkit -install(FILES "${CMAKE_CURRENT_SOURCE_DIR}/systemd/polkit/50-static-subid.rules" +install(FILES "${CMAKE_CURRENT_SOURCE_DIR}/polkit/50-static-subid.rules" DESTINATION ${CMAKE_INSTALL_POLKIT_RULESDIR}) # ############################################################################## @@ -26,6 +20,6 @@ install(FILES "${CMAKE_CURRENT_SOURCE_DIR}/systemd/polkit/50-static-subid.rules" add_custom_target( systemd ALL DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/static-subid@.service - SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/systemd/system/static-subid@.service.in - ${CMAKE_CURRENT_SOURCE_DIR}/systemd/user/setup-static-subid.service - ${CMAKE_CURRENT_SOURCE_DIR}/systemd/polkit/50-static-subid.rules) + SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/system/static-subid@.service.in + ${CMAKE_CURRENT_SOURCE_DIR}/user/setup-static-subid.service + ${CMAKE_CURRENT_SOURCE_DIR}/polkit/50-static-subid.rules) diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index d877863..6f16ac1 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -1,9 +1,6 @@ -cmake_minimum_required(VERSION 3.21) - # ############################################################################## # Project / modules -include(GNUInstallDirs) include(CTest) enable_testing() @@ -61,7 +58,7 @@ endif(CMAKE_C_COMPILER_ID STREQUAL "GNU") # Helper macros macro(add_unit_test TEST_NAME) - add_executable(${TEST_NAME} test/${TEST_NAME}.c ${STATIC_SUBID_LIB_SOURCES}) + add_executable(${TEST_NAME} ${CMAKE_CURRENT_SOURCE_DIR}/${TEST_NAME}.c ${STATIC_SUBID_LIB_SOURCES}) target_compile_definitions(${TEST_NAME} PRIVATE _GNU_SOURCE) target_compile_features( @@ -70,7 +67,7 @@ macro(add_unit_test TEST_NAME) target_include_directories( ${TEST_NAME} PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_SOURCE_DIR}/src - ${CMAKE_SOURCE_DIR/test} ${CMAKE_BINARY_DIR}) + ${CMAKE_BINARY_DIR}/src) target_link_libraries(${TEST_NAME} ${CMAKE_THREAD_LIBS_INIT})