Skip to content

Commit 3b45c9d

Browse files
author
Will
committed
cmake/build: enable tests to be run via make test and similar, other minor refactoring
1 parent f7585f0 commit 3b45c9d

4 files changed

Lines changed: 61 additions & 27 deletions

File tree

CMakeLists.txt

Lines changed: 53 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -23,13 +23,15 @@ include(CheckIPOSupported)
2323
include(FetchContent)
2424
include(GNUInstallDirs)
2525

26+
enable_testing()
27+
2628
#
2729
# Options, Variable & Constants
2830
#
2931

3032
option(BUILD_LIB "Create targets for the watcher-c libraries" ON)
3133
option(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)
3335
option(BUILD_HDR "Create targets for the headers (both the C++ single-header library and the watcher-c library header)" ON)
3436
option(BUILD_TESTING "Create targets for the test programs" OFF)
3537
option(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()
353356
endfunction()
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+
355366
function(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()
379390
endfunction()
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

423442
set(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()
470497
else()
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})")
472499
endif()
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
---

Testing/Temporary/LastTest.log

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
Start testing: Aug 09 19:01 EDT
2+
----------------------------------------------------------
3+
End testing: Aug 09 19:01 EDT

devel/src/portable-destructive-rename/main.c

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,10 +28,13 @@ void phelp(FILE* file)
2828

2929
int main(int argc, char* argv[])
3030
{
31+
if (argc != 3 && argc != 2)
32+
return (phelp(stderr), 0);
33+
3134
char* a = argc > 1 ? argv[1] : "";
3235
char* b = argc > 2 ? argv[2] : "";
3336

34-
if (strcmp(a, "--help") == 0)
37+
if (strcmp(a, "--help") == 0 && argc == 2)
3538
return (phelp(stdout), 0);
3639

3740
else if (rename(a, b) == 0)

0 commit comments

Comments
 (0)