2019-10-23 20:05:10 +00:00
cmake_minimum_required ( VERSION 3.13 )
2019-10-26 12:41:43 +00:00
project ( iprefresher DESCRIPTION "Dynu ip refresher" )
2019-05-01 09:14:52 +00:00
2019-08-01 18:18:39 +00:00
set ( CMAKE_CXX_STANDARD 17 )
2019-05-01 09:14:52 +00:00
2019-10-23 19:47:54 +00:00
set ( CMAKE_BUILD_TYPE Release ) # manually set build type (Release / Debug)
2019-10-27 12:41:40 +00:00
set ( LIB_METHOD STATIC ) #SHARED / STATIC
2019-10-27 17:26:36 +00:00
set ( WinBuild false )
2020-04-29 18:06:27 +00:00
set ( PROJECT_VERSION 1.2.3 )
2019-10-27 12:41:40 +00:00
option ( BUILD_DOC "Build documentation" ON )
2019-10-26 08:57:32 +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-10-25 10:24:19 +00:00
#set up toolchain
if ( ${ WinBuild } )
set ( LIBSUFFIX .dll )
set ( SUFFIX .exe )
2019-10-24 20:00:58 +00:00
2019-10-25 10:24:19 +00:00
set ( CMAKE_SYSTEM_NAME Windows )
set ( TOOLCHAIN_PREFIX x86_64-w64-mingw32 )
#set(TOOLCHAIN_PREFIX i686-w64-mingw32)
# cross compilers to use for C and C++
set ( CMAKE_C_COMPILER ${ TOOLCHAIN_PREFIX } -gcc )
set ( CMAKE_CXX_COMPILER ${ TOOLCHAIN_PREFIX } -g++ )
set ( CMAKE_RC_COMPILER ${ TOOLCHAIN_PREFIX } -windres )
# target environment on the build host system
2019-10-27 14:55:54 +00:00
set ( CMAKE_FIND_ROOT_PATH /usr/ ${ TOOLCHAIN_PREFIX } /usr/lib/gcc/ ${ TOOLCHAIN_PREFIX } /9.2.1 )
2019-10-25 10:24:19 +00:00
# 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
2019-10-27 14:55:54 +00:00
set ( CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER )
2019-10-25 10:24:19 +00:00
set ( CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY )
set ( CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY )
# set(CMAKE_CXX_STANDARD_LIBRARIES -lcurl -lpthread -static-libgcc -static-libstdc++ -lcrypto -lssl -lws2_32 -std=c++11 -static -DCURL_STATICLIB)
2020-04-29 16:33:30 +00:00
# set(CMAKE_CXX_STANDARD_LIBRARIES "-static-libgcc -static-libstdc++ -DCURL_STATICLIB -lstdc++ -lwsock32 -lws2_32 ${CMAKE_CSS_STANDARD_LIBRARIES}")
2019-10-27 14:55:54 +00:00
set ( CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -DCURL_STATICLIB -static -lpthread" )
2019-10-25 10:24:19 +00:00
# set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++14")
# set(CMAKE_SHARED_LIBRARY_LINK_CXX_FLAGS)
2019-10-27 14:55:54 +00:00
#add_definitions(-DCURL_STATICLIB)
2019-10-25 10:24:19 +00:00
else ( )
set ( LIBSUFFIX .so )
set ( SUFFIX "" )
2019-10-24 20:00:58 +00:00
endif ( )
2019-08-01 20:31:58 +00:00
2019-10-27 13:14:03 +00:00
#config libs
message ( STATUS "Config of Libraries" )
2019-05-01 09:14:52 +00:00
find_package ( CURL REQUIRED )
2019-10-25 10:24:19 +00:00
if ( CURL_FOUND )
2019-10-24 20:00:58 +00:00
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}" )
2019-10-25 10:24:19 +00:00
else ( )
2019-10-27 13:14:03 +00:00
message ( FATAL_ERROR "Could not find CURL" )
2019-10-25 10:24:19 +00:00
endif ( )
2019-08-01 19:19:02 +00:00
include_directories ( ${ CURL_INCLUDE_DIR } inc )
2019-05-01 09:14:52 +00:00
2020-04-29 18:06:27 +00:00
# libconfig
FIND_PATH ( CONFIG++_INCLUDE_DIR libconfig.h++ /usr/include /usr/local/include )
FIND_LIBRARY ( CONFIG++_LIBRARY NAMES config++ PATH /usr/lib /usr/local/lib )
IF ( CONFIG++_INCLUDE_DIR AND CONFIG++_LIBRARY )
SET ( CONFIG++_FOUND TRUE )
ENDIF ( CONFIG++_INCLUDE_DIR AND CONFIG++_LIBRARY )
IF ( CONFIG++_FOUND )
MESSAGE ( STATUS "Found Config++: ${CONFIG++_LIBRARY}" )
ELSE ( CONFIG++_FOUND )
IF ( Config++_FIND_REQUIRED )
IF ( NOT CONFIG++_INCLUDE_DIR )
MESSAGE ( FATAL_ERROR "Could not find LibConfig++ header file!" )
ENDIF ( NOT CONFIG++_INCLUDE_DIR )
IF ( NOT CONFIG++_LIBRARY )
MESSAGE ( FATAL_ERROR "Could not find LibConfig++ library file!" )
ENDIF ( NOT CONFIG++_LIBRARY )
ENDIF ( Config++_FIND_REQUIRED )
ENDIF ( CONFIG++_FOUND )
message ( "" )
2019-10-26 12:41:43 +00:00
#add version header
FILE ( WRITE ${ CMAKE_SOURCE_DIR } /inc/Version.h
2020-04-29 16:33:30 +00:00
" \ #pragma once\nclass Version {\npublic:\n static const std::string VERSION;\n};\n\nstd::string const Version::VERSION = \"${PROJECT_VERSION}\";"
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
2019-08-01 18:18:39 +00:00
s r c / a p i / I P A P I . c p p
)
2019-10-27 12:41:40 +00:00
add_library ( logger ${ LIB_METHOD }
2019-10-26 12:41:43 +00:00
s r c / F i l e L o g g e r . c p p
2019-08-01 18:18:39 +00:00
s r c / L o g g e r . c p p
)
set ( SOURCE
s r c / m a i n . c p p
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-02-11 16:14:17 +00:00
s r c / C r e d e n t i a l s . c p p )
2019-05-05 13:38:48 +00:00
2019-10-23 19:55:45 +00:00
add_executable ( iprefresher ${ SOURCE } )
2019-08-01 19:19:02 +00:00
# LINK generated LIBS #
2020-04-29 18:06:27 +00:00
target_link_libraries ( iprefresher api logger ${ CURL_LIBRARIES } config++ )
2019-05-01 09:14:52 +00:00
2019-08-01 19:19:02 +00:00
# INSTALL to SYSTEM #
2020-04-29 16:33:30 +00:00
set ( CMAKE_INSTALL_PREFIX "/" )
install ( TARGETS iprefresher DESTINATION usr/local/bin )
2020-04-29 18:06:27 +00:00
install ( FILES service/iprefresher.service DESTINATION lib/systemd/system )
install ( FILES config/iprefresher.cfg DESTINATION etc )
2019-10-23 07:24:35 +00:00
IF ( UNIX )
2019-10-27 13:14:03 +00:00
message ( STATUS "config of Package build" )
2019-10-25 10:24:19 +00:00
SET ( CPACK_DEB_COMPONENT_INSTALL 1 )
2019-10-26 08:57:32 +00:00
SET ( CPACK_OUTPUT_FILE_PREFIX packages )
2020-04-29 16:33:30 +00:00
set ( CPACK_PACKAGING_INSTALL_PREFIX "/" ) # no prefix for package structure
2019-10-25 10:24:19 +00:00
2019-10-23 19:47:54 +00:00
FIND_PROGRAM ( RPMBUILD_EXECUTABLE rpmbuild )
2019-10-23 19:55:45 +00:00
FIND_PROGRAM ( DEB_EXECUTABLE dpkg )
2019-10-23 19:47:54 +00:00
2019-10-23 19:55:45 +00:00
SET ( CPACK_GENERATOR "TGZ;TBZ2" )
2019-10-23 19:47:54 +00:00
#check if rpm build is possible
2019-10-23 19:55:45 +00:00
if ( NOT ${ RPMBUILD_EXECUTABLE } STREQUAL "RPMBUILD_EXECUTABLE-NOTFOUND" )
2019-10-23 19:47:54 +00:00
message ( STATUS "found rpm build executeable --> able to build rpm" )
set ( CPACK_GENERATOR "${CPACK_GENERATOR};RPM" )
2020-04-29 16:33:30 +00:00
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
2019-10-23 19:55:45 +00:00
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" )
2019-10-23 19:47:54 +00:00
2019-10-23 19:55:45 +00:00
#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" )
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" )
2019-10-23 19:47:54 +00:00
2019-10-23 07:24:35 +00:00
SET ( CPACK_CMAKE_GENERATOR "Unix Makefiles" )
SET ( CPACK_SOURCE_GENERATOR "TGZ;TBZ2" )
2019-10-23 19:47:54 +00:00
2019-10-23 07:24:35 +00:00
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" )
2019-10-26 12:41:43 +00:00
SET ( CPACK_PACKAGE_VERSION "${PROJECT_VERSION}" )
SET ( CPACK_SOURCE_PACKAGE_FILE_NAME "${CMAKE_PROJECT_NAME}-${PROJECT_VERSION}" )
2020-04-29 16:33:30 +00:00
SET ( CPACK_PACKAGE_CONTACT "Lukas Heiligenbrunner <lukas.heiligenbrunner@gmail.com>" )
2019-10-23 07:24:35 +00:00
SET ( CPACK_PACKAGE_SECTION "games" )
2019-10-26 09:49:10 +00:00
set ( CPACK_PACKAGE_DEPENDS "libcurl (>= 7.0.0-1)" )
2019-10-23 19:47:54 +00:00
2019-10-23 07:24:35 +00:00
INCLUDE ( CPack )
2019-10-24 20:00:58 +00:00
add_custom_target ( build-linux-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 " I n s t a l l i n g $ { P R O J E C T _ N A M E } " )
2020-04-29 16:33:30 +00:00
message ( "" )
2019-10-27 12:41:40 +00:00
ENDIF ( UNIX )
# 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 )
2019-10-27 12:41:40 +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 )
# 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 ( "" )
endif ( BUILD_DOC )