diff --git a/CMakeLists.txt b/CMakeLists.txt index ef09e3551..0c8e69942 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -134,9 +134,10 @@ mark_as_advanced( ZM_SYSTEMD ZM_MANPAGE_DEST_PREFIX) +option(BUILD_TEST_SUITE "Build the test suite" 0) option(BUILD_MAN "Build man pages" 1) -set(ZM_RUNDIR "/var/run/zm" CACHE PATH +set(ZM_RUNDIR "/var/run/zm" CACHE PATH "Location of transient process files, default: /var/run/zm") set(ZM_SOCKDIR "/var/run/zm" CACHE PATH "Location of Unix domain socket files, default /var/run/zm") @@ -899,6 +900,16 @@ add_subdirectory(web) add_subdirectory(misc) add_subdirectory(onvif) +if(BUILD_TEST_SUITE) + message("Building unit tests: Yes") + find_package(Catch2 REQUIRED) + + include(CTest) + add_subdirectory(tests) +else() + message("Building unit tests: No (default)") +endif(BUILD_TEST_SUITE) + # Process distro subdirectories if((ZM_TARGET_DISTRO MATCHES "^el") OR (ZM_TARGET_DISTRO MATCHES "^fc")) add_subdirectory(distros/redhat) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index c9f11b064..8fa36cf40 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -72,6 +72,11 @@ set(ZM_BIN_SRC_FILES # A fix for cmake recompiling the source files for every target. add_library(zm STATIC ${ZM_BIN_SRC_FILES}) + +target_include_directories(zm + PUBLIC + ${CMAKE_CURRENT_SOURCE_DIR}) + link_directories(libbcrypt) add_executable(zmc zmc.cpp) diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt new file mode 100644 index 000000000..be8f4b9b5 --- /dev/null +++ b/tests/CMakeLists.txt @@ -0,0 +1,29 @@ +# This file is part of the ZoneMinder Project. +# +# This file is free software; as a special exception the author gives +# unlimited permission to copy and/or distribute it, with or without +# modifications, as long as this notice is preserved. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY, to the extent permitted by law; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + + +include(Catch) + +set(TEST_SOURCES) + +add_executable(tests main.cpp ${TEST_SOURCES}) + +target_link_libraries(tests + PRIVATE + zm + ${ZM_BIN_LIBS} + bcrypt + Catch2::Catch2) + +target_include_directories(tests + PRIVATE + ${CMAKE_CURRENT_BINARY_DIR}) + +catch_discover_tests(tests) diff --git a/tests/main.cpp b/tests/main.cpp new file mode 100644 index 000000000..1a00d1291 --- /dev/null +++ b/tests/main.cpp @@ -0,0 +1,19 @@ +/* + * This file is part of the ZoneMinder Project. See AUTHORS file for Copyright information + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the + * Free Software Foundation; either version 2 of the License, or (at your + * option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along + * with this program. If not, see . + */ + +#define CATCH_CONFIG_MAIN +#include "catch2/catch.hpp"