@@ -23,13 +23,15 @@ include(CheckIPOSupported)
2323include (FetchContent )
2424include (GNUInstallDirs )
2525
26+ enable_testing ()
27+
2628#
2729# Options, Variable & Constants
2830#
2931
3032option (BUILD_LIB "Create targets for the watcher-c libraries" ON )
3133option (BUILD_BIN "Create targets for the CLI binaries" ON )
32- option (BUILD_PKC_CONFIG "Create targets for the pkg-config files" ON )
34+ option (BUILD_PKG_CONFIG "Create targets for the pkg-config files" ON )
3335option (BUILD_HDR "Create targets for the headers (both the C++ single-header library and the watcher-c library header)" ON )
3436option (BUILD_TESTING "Create targets for the test programs" OFF )
3537option (BUILD_SAN "Mega-option to allow sanitizers" OFF )
@@ -227,6 +229,7 @@ function(wtr_add_bin_target
227229 )
228230 FetchContent_MakeAvailable (snitch)
229231 endif ()
232+ add_test (NAME "${NAME} " COMMAND "${NAME} " )
230233 endif ()
231234 if (BIN_COMPONENT_NAME)
232235 install (
@@ -352,6 +355,14 @@ function(wtr_add_autosan_bin_target NAME SRC_SET IS_TEST)
352355 endforeach ()
353356endfunction ()
354357
358+ function (wtr_add_autosan_rel_bin_target NAME SRC_SET )
359+ wtr_add_autosan_bin_target ("${NAME} " "${SRC_SET} " OFF )
360+ endfunction ()
361+
362+ function (wtr_add_autosan_test_bin_target NAME SRC_SET )
363+ wtr_add_autosan_bin_target ("${NAME} " "${SRC_SET} " ON )
364+ endfunction ()
365+
355366function (wtr_add_san_lib_target NAME OUTPUT_NAME SRC_SET INC_SET LIB_TYPE SAN )
356367 string (TOUPPER "${SAN} " UPPER_SAN)
357368 if (NOT BUILD_LIB)
@@ -378,6 +389,16 @@ function(wtr_add_autosan_lib_target NAME OUTPUT_NAME SRC_SET INC_SET LIB_TYPE)
378389 endforeach ()
379390endfunction ()
380391
392+ function (wtr_add_pkg_config_target NAME SRC )
393+ if (BUILD_PKG_CONFIG)
394+ message (STATUS "${NAME} : Added (BUILD_PKG_CONFIG=${BUILD_PKG_CONFIG} )" )
395+ configure_file ("${SRC} " "${CMAKE_BINARY_DIR} /${DST} " @ONLY )
396+ install (FILES "${CMAKE_BINARY_DIR} /${NAME} " DESTINATION "${CMAKE_INSTALL_LIBDIR} /pkgconfig" COMPONENT pkgconfig)
397+ else ()
398+ message (STATUS "${NAME} : Skipped (BUILD_PKG_CONFIG=${BUILD_PKG_CONFIG} )" )
399+ endif ()
400+ endfunction ()
401+
381402#
382403# Actual work
383404#
@@ -408,16 +429,14 @@ wtr_add_autosan_lib_target(
408429 "STATIC"
409430)
410431
411- wtr_add_autosan_bin_target (
432+ wtr_add_autosan_rel_bin_target (
412433 "wtr.watcher"
413434 "src/wtr/watcher/main.cpp"
414- OFF
415435)
416436
417- wtr_add_autosan_bin_target (
437+ wtr_add_autosan_rel_bin_target (
418438 "tw"
419439 "src/wtr/tiny_watcher/main.cpp"
420- OFF
421440)
422441
423442set (WTR_TEST_WATCHER_SOURCE_SET
@@ -428,10 +447,9 @@ set(WTR_TEST_WATCHER_SOURCE_SET
428447 "devel/src/wtr/test_watcher/test_performance.cpp"
429448 "devel/src/wtr/test_watcher/test_openclose.cpp"
430449)
431- wtr_add_autosan_bin_target (
450+ wtr_add_autosan_test_bin_target (
432451 "wtr.test_watcher"
433452 "${WTR_TEST_WATCHER_SOURCE_SET} "
434- ON
435453)
436454
437455# Used in the tool/test suite. Platforms vary
@@ -449,24 +467,33 @@ wtr_add_bin_target(
449467 ""
450468)
451469
452- if (BUILD_HDR AND BUILD_PKC_CONFIG)
453- message (STATUS "Generating watcher.pc (BUILD_HDR=${BUILD_HDR} , BUILD_PKC_CONFIG=${BUILD_PKC_CONFIG} )" )
454- set (PC_WATCHER_LIBS_PRIVATE "${LINK_LIBRARIES} " )
455- set (PC_WATCHER_LIBDIR "${CMAKE_INSTALL_LIBDIR} " )
456- set (PC_WATCHER_INCLUDEDIR "${CMAKE_INSTALL_INCLUDEDIR} /wtr" )
457- configure_file ("watcher.pc.in" "${CMAKE_BINARY_DIR} /watcher.pc" @ONLY )
458- install (FILES "${CMAKE_BINARY_DIR} /watcher.pc" DESTINATION "${CMAKE_INSTALL_LIBDIR} /pkgconfig" COMPONENT "include" )
459- else ()
460- message (STATUS "Skipping watcher.pc generation (BUILD_HDR=${BUILD_HDR} , BUILD_PKC_CONFIG=${BUILD_PKC_CONFIG} )" )
461- endif ()
462-
463- if (BUILD_LIB AND BUILD_PKC_CONFIG)
464- message (STATUS "Generating watcher-c.pc (BUILD_LIB=${BUILD_LIB} , BUILD_PKC_CONFIG=${BUILD_PKC_CONFIG} )" )
465- set (PC_LIBWATCHER_C_LIBS_PRIVATE "${LINK_LIBRARIES} " )
466- set (PC_LIBWATCHER_C_LIBDIR "${CMAKE_INSTALL_LIBDIR} " )
467- set (PC_LIBWATCHER_C_INCLUDEDIR "${CMAKE_INSTALL_INCLUDEDIR} /wtr" )
468- configure_file ("watcher-c/watcher-c.pc.in" "${CMAKE_BINARY_DIR} /watcher-c.pc" @ONLY )
469- install (FILES "${CMAKE_BINARY_DIR} /watcher-c.pc" DESTINATION "${CMAKE_INSTALL_LIBDIR} /pkgconfig" COMPONENT "include" )
470+ set (PC_WATCHER_LIBS_PRIVATE "${LINK_LIBRARIES} " )
471+ set (PC_WATCHER_LIBDIR "${CMAKE_INSTALL_LIBDIR} " )
472+ set (PC_WATCHER_INCLUDEDIR "${CMAKE_INSTALL_INCLUDEDIR} /wtr" )
473+ wtr_add_pkg_config_target ("watcher.pc" "watcher.pc.in" )
474+
475+ set (PC_LIBWATCHER_C_LIBS_PRIVATE "${LINK_LIBRARIES} " )
476+ set (PC_LIBWATCHER_C_LIBDIR "${CMAKE_INSTALL_LIBDIR} " )
477+ set (PC_LIBWATCHER_C_INCLUDEDIR "${CMAKE_INSTALL_INCLUDEDIR} /wtr" )
478+ wtr_add_pkg_config_target ("watcher-c.pc" "watcher-c/watcher-c.pc.in" )
479+
480+ if (BUILD_TESTING)
481+ message (STATUS "wtr.test_tool_test_all: Added (BUILD_TESTING=${BUILD_TESTING} )" )
482+ add_test (
483+ NAME wtr.test_tool_test_all
484+ COMMAND sh -c "PATH=$<TARGET_FILE_DIR :portable -destructive -rename >:$ENV{PATH} WATCHER=$<TARGET_FILE :wtr .watcher > ${CMAKE_SOURCE_DIR} /tool/test/all"
485+ )
486+ foreach (SAN ${SAN_NAMES} )
487+ if (ALLOWED_${SAN} AND (BUILD_SAN OR BUILD_${SAN} ))
488+ message (STATUS "wtr.test_tool_test_all.${SAN} : Added (BUILD_SAN=${BUILD_SAN} , BUILD_${SAN} =${BUILD_${SAN} })" )
489+ add_test (
490+ NAME wtr.test_tool_test_all.${SAN}
491+ COMMAND sh -c "PATH=$<TARGET_FILE_DIR :portable -destructive -rename >:$ENV{PATH} WATCHER=$<TARGET_FILE :wtr .watcher .${SAN} > ${CMAKE_SOURCE_DIR} /tool/test/all"
492+ )
493+ else ()
494+ message (STATUS "wtr.test_tool_test_all.${SAN} : Skipped (BUILD_SAN=${BUILD_SAN} , BUILD_${SAN} =${BUILD_${SAN} }, ALLOWED_${SAN} =${ALLOWED_${SAN} })" )
495+ endif ()
496+ endforeach ()
470497else ()
471- message (STATUS "Skipping watcher-c.pc generation (BUILD_LIB =${BUILD_LIB} , BUILD_PKC_CONFIG= ${BUILD_PKC_CONFIG } )" )
498+ message (STATUS "wtr.test_tool_test_all: Skipped (BUILD_TESTING =${BUILD_TESTING } )" )
472499endif ()
0 commit comments