2020-05-01 13:33:20 +00:00
# @author Lukas Heiligenbrunner
2020-05-01 10:33:51 +00:00
# main CMake file
#
2020-05-01 13:33:20 +00:00
# Build lib dependencies:
## libcurl (with sources)
## libconfig (with sources)
#
2020-05-08 14:45:27 +00:00
# for documenation build doxygen needs to be installed.
# for test build gtest needs to be installed.
2020-05-01 13:33:20 +00:00
2019-10-23 20:05:10 +00:00
cmake_minimum_required ( VERSION 3.13 )
2020-05-21 09:52:55 +00:00
project ( DynuIpRefresher DESCRIPTION "Dynu ip refresher" LANGUAGES )
2020-05-06 09:33:29 +00:00
SET ( PROJECT_VERSION 1.3.3 )
2019-05-01 09:14:52 +00:00
2020-05-06 09:33:29 +00:00
# CONFIGURATION
2020-05-01 14:47:22 +00:00
SET ( CMAKE_BUILD_TYPE Release ) # manually SET build type (Release / Debug)
SET ( LIB_METHOD STATIC ) #SHARED / STATIC
2020-05-06 09:33:29 +00:00
2020-05-08 14:45:27 +00:00
option ( BUILD_DOC "Build documentation" ON ) # additional dependency for Doxygen
2020-05-06 09:33:29 +00:00
option ( PACKAGING "Allow Packaging to <exe>, <deb> or <rpm>" ON ) # additional dependencies for RPMbuild,dpkg or NSIS
2020-05-07 17:58:16 +00:00
option ( TESTS "Build Tests" ON ) # additional dependencies for GTEST - to build tests
2020-05-19 18:58:18 +00:00
option ( WinBuild "cross compile for Windows Platform" OFF )
2019-10-26 08:57:32 +00:00
2020-05-08 14:45:27 +00:00
# helper variables
SET ( CMAKE_CXX_STANDARD 17 )
string ( TIMESTAMP TIMESTAMP_NOW "%d.%m.%Y" )
2020-05-21 09:52:55 +00:00
SET ( Application_Name "dynuiprefresher" )
2020-05-08 14:45:27 +00:00
2020-05-01 14:47:22 +00:00
SET ( CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${ CMAKE_BINARY_DIR } /bin )
SET ( CMAKE_LIBRARY_OUTPUT_DIRECTORY ${ CMAKE_BINARY_DIR } /bin )
SET ( CMAKE_RUNTIME_OUTPUT_DIRECTORY ${ CMAKE_BINARY_DIR } /bin )
2019-08-01 20:31:58 +00:00
2020-05-05 12:20:02 +00:00
# setup winbuild compilers
2020-05-04 19:17:10 +00:00
if ( ${ WinBuild } )
2020-05-19 18:58:18 +00:00
message ( STATUS "setup Mingw Toolchain for cross compile." )
2020-05-04 19:17:10 +00:00
set ( LIBSUFFIX .dll )
set ( SUFFIX .exe )
set ( CMAKE_SYSTEM_NAME WindowsStore )
set ( CMAKE_SYSTEM_VERSION 10.0 )
set ( TOOLCHAIN_PREFIX x86_64-w64-mingw32 ) # x64 build toolchain
#set(TOOLCHAIN_PREFIX i686-w64-mingw32)
# cross compilers to use for C and C++
2020-05-19 18:58:18 +00:00
set ( CMAKE_C_COMPILER /usr/bin/ ${ TOOLCHAIN_PREFIX } -gcc )
set ( CMAKE_CXX_COMPILER /usr/bin/ ${ TOOLCHAIN_PREFIX } -g++ )
set ( CMAKE_RC_COMPILER /usr/bin/ ${ TOOLCHAIN_PREFIX } -windres )
2020-05-04 19:17:10 +00:00
# target environment on the build host system
set ( CMAKE_FIND_ROOT_PATH /usr/ ${ TOOLCHAIN_PREFIX } )
# modify default behavior of FIND_XXX() commands to
# search for headers/libs in the target environment and
# search for programs in the build host environment
set ( CMAKE_FIND_ROOT_PATH_MODE_PROGRAM ONLY )
set ( CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY )
set ( CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY )
set ( CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY )
2020-05-05 12:20:02 +00:00
set ( CMAKE_CXX_STANDARD_LIBRARIES "${CMAKE_CSS_STANDARD_LIBRARIES}" )
set ( CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS}" )
# currently libs are dynamically linked eg. dlls have to be copied to same folder
# todo link dynamically.
# maybe so: set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -static-libgcc -static-libstdc++ -static")
# or set(CMAKE_CXX_STANDARD_LIBRARIES -lcurl -lpthread -static-libgcc -static-libstdc++ -lcrypto -lssl -lws2_32 -static -DCURL_STATICLIB)
# or add_definitions(-DCURL_STATICLIB)
2020-05-05 15:02:39 +00:00
# windows config path is same as executable
2020-05-21 09:26:15 +00:00
set ( CONFIG_PATH "std::string(std::getenv(\" USERPROFILE\ ")) + \" \\\\AppData\\\\Roaming\\\\DynuIPrefresher\\\\\"")
2020-05-04 19:17:10 +00:00
else ( )
2020-05-19 18:58:18 +00:00
message ( STATUS "using nativ gcc toolchain." )
2020-05-04 19:17:10 +00:00
set ( LIBSUFFIX .so )
set ( SUFFIX "" )
2020-05-05 15:02:39 +00:00
# set /etc/ config path
2020-05-21 09:26:15 +00:00
set ( CONFIG_PATH "\" /etc/\ "" )
2020-05-04 19:17:10 +00:00
endif ( )
2020-05-19 18:58:18 +00:00
# test compiler settings and enable languages here
message ( "" )
message ( STATUS "Testing the C++ compiler!" )
enable_language ( CXX )
message ( "" )
message ( STATUS "Testing the C compiler!" )
enable_language ( C )
2020-05-04 19:17:10 +00:00
2020-04-30 08:47:32 +00:00
# config libs
2020-05-19 18:58:18 +00:00
message ( "" )
2019-10-27 13:14:03 +00:00
message ( STATUS "Config of Libraries" )
2020-04-30 08:47:32 +00:00
# libcurl
2020-05-04 19:17:10 +00:00
if ( ${ WinBuild } )
2020-05-05 12:20:02 +00:00
SET ( CMAKE_FIND_LIBRARY_SUFFIXES ".lib" ".dll" )
2020-05-04 19:17:10 +00:00
# configure libcurl
FIND_PATH ( CURL_INCLUDE_DIRS curl/curl.h /usr/ ${ TOOLCHAIN_PREFIX } /sys-root/mingw/include/ ) # search for libconfig include headers
2020-05-05 12:20:02 +00:00
FIND_LIBRARY ( CURL_LIBRARIES NAMES libcurl.dll.a HINTS /usr/ ${ TOOLCHAIN_PREFIX } /sys-root/mingw/lib ) # search for actual lib
2020-05-04 19:17:10 +00:00
2019-10-24 20:00:58 +00:00
message ( STATUS "Using CURL include dir(s): ${CURL_INCLUDE_DIRS}" )
message ( STATUS "Using CURL lib(s): ${CURL_LIBRARIES}" )
2020-05-05 15:02:39 +00:00
message ( STATUS "" )
2019-05-01 09:14:52 +00:00
2020-05-04 19:17:10 +00:00
include_directories ( ${ CURL_INCLUDE_DIRS } inc )
2020-04-29 18:06:27 +00:00
2020-05-04 19:17:10 +00:00
# configure libconfig
FIND_PATH ( LIBCONFIG++_INCLUDE_DIRS libconfig.h++ /usr/ ${ TOOLCHAIN_PREFIX } /sys-root/mingw/include/ ) # search for libconfig include headers
2020-05-05 12:20:02 +00:00
FIND_LIBRARY ( LIBCONFIG++_LIBRARIES NAMES libconfig++.dll.a HINTS /usr/ ${ TOOLCHAIN_PREFIX } /sys-root/mingw/lib ) # search for actual lib
2020-04-29 18:06:27 +00:00
2020-05-04 19:17:10 +00:00
message ( STATUS "Using LIBCONFIG++ include dir(s): ${LIBCONFIG++_INCLUDE_DIRS}" )
message ( STATUS "Using LIBCONFIG++ lib(s): ${LIBCONFIG++_LIBRARIES}" )
2020-04-30 08:47:32 +00:00
2020-05-04 19:17:10 +00:00
include_directories ( ${ LIBCONFIG++_INCLUDE_DIRS } inc )
else ( )
find_package ( CURL REQUIRED )
if ( CURL_INCLUDE_DIRS AND CURL_LIBRARIES )
message ( STATUS "Found CURL version: ${CURL_VERSION_STRING}" )
message ( STATUS "Using CURL include dir(s): ${CURL_INCLUDE_DIRS}" )
message ( STATUS "Using CURL lib(s): ${CURL_LIBRARIES}" )
else ( )
message ( FATAL_ERROR "Could not find CURL" )
endif ( )
include_directories ( ${ CURL_INCLUDE_DIR } inc )
message ( "" )
# libconfig
2020-05-07 14:17:47 +00:00
FIND_PATH ( LIBCONFIG++_INCLUDE_DIRS
N A M E S l i b c o n f i g . h + +
P A T H S / u s r / i n c l u d e / u s r / l o c a l / i n c l u d e ) # search for libconfig include headers
2020-05-07 14:19:59 +00:00
FIND_LIBRARY ( LIBCONFIG++_LIBRARIES
2020-05-07 14:17:47 +00:00
N A M E S c o n f i g + +
P A T H S / u s r / l i b / u s r / l o c a l / l i b ) # search for actual lib
2020-05-07 14:19:59 +00:00
if ( LIBCONFIG++_INCLUDE_DIRS AND LIBCONFIG++_LIBRARIES )
2020-05-07 14:17:47 +00:00
message ( STATUS "Fount libconfig!" )
2020-05-04 19:17:10 +00:00
message ( STATUS "Using libconfig include dir(s): ${LIBCONFIG++_INCLUDE_DIRS}" )
2020-05-07 14:19:59 +00:00
message ( STATUS "Using libconfig lib(s): ${LIBCONFIG++_LIBRARIES}" )
2020-05-04 19:17:10 +00:00
else ( )
2020-05-07 14:17:47 +00:00
message ( FATAL_ERROR "Could not find LIBCONFIG" )
2020-05-04 19:17:10 +00:00
endif ( )
2020-05-07 14:17:47 +00:00
include_directories ( ${ LIBCONFIG_INCLUDE_DIRS } )
2020-05-04 19:17:10 +00:00
endif ( )
2020-04-29 18:06:27 +00:00
message ( "" )
2020-05-01 14:56:37 +00:00
#read sample config
2020-05-21 09:52:55 +00:00
FILE ( READ ${ CMAKE_SOURCE_DIR } /config/dynuiprefresher.cfg SAMPLECONFIG )
2019-10-26 12:41:43 +00:00
#add version header
FILE ( WRITE ${ CMAKE_SOURCE_DIR } /inc/Version.h
2020-05-08 14:45:27 +00:00
" / * *
* V e r s i o n h e a d e r t o s t o r e V e r s i o n , C o n f i g d i r a n d a S a m p l e c o n f i g
* D o n o t e d i t t h i s f i l e m a n u a l l y , i t i s g e n e r a t e d b y t h e c m a k e s c r i p t !
*
* @ a u t h o r L u k a s H e i l i g e n b r u n n e r
* @ d a t e $ { T I M E S T A M P _ N O W }
* /
#pragma once
2020-05-01 14:56:37 +00:00
#include <string>
2020-05-08 14:45:27 +00:00
2020-05-01 14:56:37 +00:00
n a m e s p a c e V e r s i o n {
c o n s t s t d : : s t r i n g V E R S I O N = \ " $ { P R O J E C T _ V E R S I O N } \ " ;
2020-05-21 09:26:15 +00:00
c o n s t s t d : : s t r i n g C o n f i g D i r = $ { C O N F I G _ P A T H } ;
2020-05-21 09:52:55 +00:00
c o n s t s t d : : s t r i n g C o n f N a m e = \ " $ { A p p l i c a t i o n _ N a m e } . c f g \ " ;
2020-05-01 14:56:37 +00:00
c o n s t s t d : : s t r i n g S A M P L E C O N F I G = R \ " ( $ { S A M P L E C O N F I G } ) \ " ;
} "
2019-10-26 12:41:43 +00:00
)
2019-10-27 12:41:40 +00:00
add_library ( api ${ LIB_METHOD }
2019-05-08 17:19:42 +00:00
s r c / a p i / A P I . c p p
s r c / a p i / T e l e g r a m A P I . c p p
2019-06-18 09:23:24 +00:00
s r c / a p i / D y n u A P I . c p p
2020-05-01 14:56:37 +00:00
s r c / a p i / I P A P I . c p p )
2019-08-01 18:18:39 +00:00
2020-05-21 09:52:55 +00:00
add_library ( libdynuiprefresher ${ LIB_METHOD }
2019-10-26 12:41:43 +00:00
s r c / I P R e f r e s h e r . c p p
2020-05-07 12:54:40 +00:00
s r c / C o n f i g . c p p
2020-05-08 14:45:27 +00:00
s r c / I p H e l p e r . c p p
s r c / F i l e L o g g e r . c p p
s r c / L o g g e r . c p p
)
2019-05-05 13:38:48 +00:00
2020-05-21 09:52:55 +00:00
add_executable ( ${ Application_Name } src/main.cpp )
2019-08-01 19:19:02 +00:00
# LINK generated LIBS #
2020-05-21 09:52:55 +00:00
target_link_libraries ( ${ Application_Name } libdynuiprefresher api ${ CURL_LIBRARIES } ${ LIBCONFIG++_LIBRARIES } )
2019-05-01 09:14:52 +00:00
2020-05-06 09:33:29 +00:00
# setting install targets
2020-05-05 12:20:02 +00:00
IF ( NOT ${ WinBuild } )
# INSTALL to Linux SYSTEM #
# install binaries
2020-05-21 09:52:55 +00:00
install ( TARGETS ${ Application_Name } DESTINATION usr/bin )
2020-05-05 12:20:02 +00:00
# install systemd service and enable it
2020-05-21 09:52:55 +00:00
install ( FILES service/ ${ Application_Name } .service DESTINATION lib/systemd/system )
2020-05-05 12:20:02 +00:00
ELSE ( )
2020-05-05 15:02:39 +00:00
# INSTALL to Windows SYSTEM #
# install binary to current folder
2020-05-21 09:52:55 +00:00
set_target_properties ( ${ Application_Name } PROPERTIES SUFFIX ".exe" )
install ( TARGETS ${ Application_Name } DESTINATION . )
2020-05-18 17:46:19 +00:00
2020-05-05 15:02:39 +00:00
# install .dll dependencies
# todo check if files exist...
install ( FILES /usr/ ${ TOOLCHAIN_PREFIX } /sys-root/mingw/bin/libcurl-4.dll
/ u s r / $ { T O O L C H A I N _ P R E F I X } / s y s - r o o t / m i n g w / b i n / l i b s s h 2 - 1 . d l l
/ u s r / $ { T O O L C H A I N _ P R E F I X } / s y s - r o o t / m i n g w / b i n / l i b s t d c + + - 6 . d l l
/ u s r / $ { T O O L C H A I N _ P R E F I X } / s y s - r o o t / m i n g w / b i n / l i b g c c _ s _ s e h - 1 . d l l
/ u s r / $ { T O O L C H A I N _ P R E F I X } / s y s - r o o t / m i n g w / b i n / l i b c r y p t o - 1 _ 1 - x 6 4 . d l l
/ u s r / $ { T O O L C H A I N _ P R E F I X } / s y s - r o o t / m i n g w / b i n / l i b s s l - 1 _ 1 - x 6 4 . d l l
/ u s r / $ { T O O L C H A I N _ P R E F I X } / s y s - r o o t / m i n g w / b i n / l i b w i n p t h r e a d - 1 . d l l
/ u s r / $ { T O O L C H A I N _ P R E F I X } / s y s - r o o t / m i n g w / b i n / z l i b 1 . d l l
/ u s r / $ { T O O L C H A I N _ P R E F I X } / s y s - r o o t / m i n g w / b i n / l i b i d n 2 - 0 . d l l
/ u s r / $ { T O O L C H A I N _ P R E F I X } / s y s - r o o t / m i n g w / b i n / l i b c o n f i g + + - 1 1 . d l l
D E S T I N A T I O N . )
2020-05-06 09:33:29 +00:00
ENDIF ( )
2020-05-05 15:02:39 +00:00
2020-05-06 09:33:29 +00:00
if ( ${ PACKAGING } )
# General Packaging options:
message ( STATUS "config of Package build" )
2020-05-05 15:02:39 +00:00
2020-05-06 09:33:29 +00:00
set ( CPACK_PACKAGE_NAME "DynuIpRefresher" )
SET ( CPACK_PACKAGE_DESCRIPTION "IPrefresher to refresh Dynu ip address and notify user via Telegram" )
SET ( CPACK_PACKAGE_DESCRIPTION_SUMMARY "IPrefresher to refresh Dynu ip address and notify user via Telegram" )
SET ( CPACK_PACKAGE_VENDOR "Lukas Heilgienbrunner" )
SET ( CPACK_PACKAGE_VERSION "${PROJECT_VERSION}" )
SET ( CPACK_SOURCE_PACKAGE_FILE_NAME "${CMAKE_PROJECT_NAME}-${PROJECT_VERSION}" )
SET ( CPACK_PACKAGE_CONTACT "Lukas Heiligenbrunner <lukas.heiligenbrunner@gmail.com>" )
2020-05-05 12:20:02 +00:00
2020-05-06 09:33:29 +00:00
SET ( CMAKE_INSTALL_PREFIX "/" )
2020-05-05 12:20:02 +00:00
2020-05-06 09:33:29 +00:00
IF ( NOT ${ WinBuild } )
# generate post script for checking if configuration already exists
FILE ( WRITE ${ CMAKE_SOURCE_DIR } /postinst
" #!/bin/bash
2020-05-08 14:45:27 +00:00
# Post installation script for linux packages
# do not edit this file manually, it is generated by the cmake script
2020-05-06 09:33:29 +00:00
i f [ ! - f $ { C O N F I G _ P A T H } ] ; t h e n
c a t > $ { C O N F I G _ P A T H } < < - E O M
$ { S A M P L E C O N F I G } E O M
2020-05-19 14:35:57 +00:00
f i
2020-05-21 09:52:55 +00:00
s y s t e m c t l e n a b l e $ { A p p l i c a t i o n _ N a m e } . s e r v i c e
s y s t e m c t l s t a r t $ { A p p l i c a t i o n _ N a m e } . s e r v i c e " )
2020-05-06 09:33:29 +00:00
SET ( CPACK_DEB_COMPONENT_INSTALL 1 )
SET ( CPACK_OUTPUT_FILE_PREFIX packages )
SET ( CPACK_PACKAGING_INSTALL_PREFIX "/" ) # no prefix for package structure
FIND_PROGRAM ( RPMBUILD_EXECUTABLE rpmbuild )
FIND_PROGRAM ( DEB_EXECUTABLE dpkg )
SET ( CPACK_GENERATOR "TGZ;TBZ2" )
#check if rpm build is possible
if ( NOT ${ RPMBUILD_EXECUTABLE } STREQUAL "RPMBUILD_EXECUTABLE-NOTFOUND" )
message ( STATUS "found rpm build executeable --> able to build rpm" )
SET ( CPACK_GENERATOR "${CPACK_GENERATOR};RPM" )
SET ( CPACK_RPM_POST_INSTALL_SCRIPT_FILE "${CMAKE_CURRENT_SOURCE_DIR}/postinst" )
SET ( CPACK_RPM_EXCLUDE_FROM_AUTO_FILELIST_ADDITION "/lib/systemd/system" "/lib/systemd" "/lib" "/usr/local/bin" "/usr/local" ) # --> needed to not override existing folders
set ( CPACK_RPM_PACKAGE_REQUIRES "libcurl,libconfig" )
else ( NOT ${ RPMBUILD_EXECUTABLE } STREQUAL "RPMBUILD_EXECUTABLE-NOTFOUND" )
message ( STATUS "not found rpm build tools --> not building rpm" )
endif ( NOT ${ RPMBUILD_EXECUTABLE } STREQUAL "RPMBUILD_EXECUTABLE-NOTFOUND" )
#check if deb build is possible
if ( NOT ${ DEB_EXECUTABLE } STREQUAL "DEB_EXECUTABLE-NOTFOUND" )
message ( STATUS "found deb build tools --> able to build deb" )
SET ( CPACK_GENERATOR "${CPACK_GENERATOR};DEB" ) # add deb generator
set ( CPACK_DEBIAN_PACKAGE_CONTROL_EXTRA "${CMAKE_CURRENT_SOURCE_DIR}/postinst" ) # set post inst file
set ( CPACK_DEBIAN_PACKAGE_DEPENDS "libcurl4,libconfig++9v5" ) # add debian dependencies
else ( NOT ${ DEB_EXECUTABLE } STREQUAL "DEB_EXECUTABLE-NOTFOUND" )
message ( STATUS "not found deb build tools --> not building deb" )
endif ( NOT ${ DEB_EXECUTABLE } STREQUAL "DEB_EXECUTABLE-NOTFOUND" )
SET ( CPACK_CMAKE_GENERATOR "Unix Makefiles" )
SET ( CPACK_SOURCE_GENERATOR "TGZ;TBZ2" )
SET ( CPACK_PACKAGE_SECTION "games" )
ELSE ( )
# Pack a NSIS intaller
set ( CPACK_GENERATOR NSIS )
message ( STATUS "Using NSIS Package build." )
set ( CPACK_NSIS_testcomp_INSTALL_DIRECTORY / )
set ( CPACK_PACKAGE_INSTALL_DIRECTORY "DynuIpRefresher" )
SET ( CPACK_NSIS_MODIFY_PATH ON )
ENDIF ( )
INCLUDE ( CPack )
add_custom_target ( build-packages
" $ { C M A K E _ C O M M A N D } " - - b u i l d " $ { C M A K E _ B I N A R Y _ D I R } " - - t a r g e t p a c k a g e
D E P E N D S $ { P R O J E C T _ N A M E }
C O M M E N T " P a c k i n g $ { P R O J E C T _ N A M E } " )
message ( "" )
ENDIF ( )
2019-10-27 12:41:40 +00:00
# check if Doxygen is installed
2019-10-27 13:14:03 +00:00
if ( BUILD_DOC )
message ( STATUS "config of DOxygen build" )
find_package ( Doxygen )
if ( DOXYGEN_FOUND )
2020-05-01 14:47:22 +00:00
# SET input and output files
SET ( DOXYGEN_IN ${ CMAKE_CURRENT_SOURCE_DIR } /docs/Doxyfile.in )
SET ( DOXYGEN_OUT ${ CMAKE_CURRENT_BINARY_DIR } /Doxyfile )
2019-10-27 12:41:40 +00:00
# request to configure the file
configure_file ( ${ DOXYGEN_IN } ${ DOXYGEN_OUT } @ONLY )
# note the option ALL which allows to build the docs together with the application
add_custom_target ( doc_doxygen ALL
C O M M A N D $ { D O X Y G E N _ E X E C U T A B L E } $ { D O X Y G E N _ O U T }
W O R K I N G _ D I R E C T O R Y $ { C M A K E _ C U R R E N T _ B I N A R Y _ D I R }
C O M M E N T " G e n e r a t i n g A P I d o c u m e n t a t i o n w i t h D o x y g e n "
V E R B A T I M )
2019-10-27 13:14:03 +00:00
message ( STATUS "Successfully configured doxygen" )
else ( DOXYGEN_FOUND )
message ( STATUS "Doxygen need to be installed to generate the doxygen documentation" )
endif ( DOXYGEN_FOUND )
message ( "" )
2020-05-07 17:58:16 +00:00
endif ( BUILD_DOC )
# Test Cases
if ( TESTS )
2020-05-19 18:58:18 +00:00
# include(GoogleTest)
message ( STATUS "Configuring GTEST" )
find_package ( GTest )
if ( GTEST_FOUND )
mark_as_advanced (
B U I L D _ G M O C K B U I L D _ G T E S T B U I L D _ S H A R E D _ L I B S
g m o c k _ b u i l d _ t e s t s g t e s t _ b u i l d _ s a m p l e s g t e s t _ b u i l d _ t e s t s
g t e s t _ d i s a b l e _ p t h r e a d s g t e s t _ f o r c e _ s h a r e d _ c r t g t e s t _ h i d e _ i n t e r n a l _ s y m b o l s
)
2020-05-07 17:58:16 +00:00
2020-05-19 18:58:18 +00:00
enable_testing ( )
macro ( package_add_test TESTNAME )
# create an exectuable in which the tests will be stored
add_executable ( ${ TESTNAME } ${ ARGN } )
# link the Google test infrastructure, mocking library, and a default main fuction to
2020-05-21 09:52:55 +00:00
target_link_libraries ( ${ TESTNAME } gtest gtest_main -lpthread -lm libdynuiprefresher api ${ CURL_LIBRARIES } ${ LIBCONFIG++_LIBRARIES } )
2020-05-19 18:58:18 +00:00
# see https://cmake.org/cmake/help/v3.10/module/GoogleTest.html for more options to pass to it
2020-05-20 17:37:39 +00:00
gtest_discover_tests ( ${ TESTNAME } )
2020-05-19 18:58:18 +00:00
2020-05-20 17:25:37 +00:00
add_custom_command ( TARGET build-test
P O S T _ B U I L D
2020-05-20 17:37:39 +00:00
C O M M A N D " $ { C M A K E _ C O M M A N D } " - - b u i l d " $ { C M A K E _ B I N A R Y _ D I R } " - - t a r g e t $ { T E S T N A M E }
C O M M A N D " b i n / $ { T E S T N A M E } " - - g t e s t _ o u t p u t = x m l : $ { T E S T N A M E } - r e p o r t . x m l )
2020-05-20 17:25:37 +00:00
endmacro ( )
2020-05-19 18:58:18 +00:00
add_custom_target ( build-test
D E P E N D S $ { P R O J E C T _ N A M E }
2020-05-20 17:25:37 +00:00
C O M M E N T " T e s t i n g $ { P R O J E C T _ N A M E } " )
package_add_test ( test1 tests/UnitTest.cpp ${ SOURCE } )
2020-05-19 18:58:18 +00:00
else ( )
message ( STATUS "GTEST environment not found!" )
endif ( )
2020-05-07 17:58:16 +00:00
ENDIF ( )