cmake_minimum_required(VERSION 2.8.8) include(CMakeConfig.txt) project(pilight) set(VERSION 7.0) set(MODULESPACK OFF) set(CMAKE_BUILD_TYPE Debug) set(CMAKE_SKIP_RULE_DEPENDENCY TRUE) set(CPACK_DEB_COMPONENT_INSTALL TRUE) if(${ZWAVE} MATCHES "ON") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-psabi") endif() if(CMAKE_BUILD_TOOL MATCHES "(msdev|devenv|nmake)") # Use the highest warning level for visual studio. if(CMAKE_CXX_FLAGS MATCHES "/W[0-4]") string(REGEX REPLACE "/W[0-4]" "/W4" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}") else(CMAKE_CXX_FLAGS MATCHES "/W[0-4]") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /W4") endif(CMAKE_CXX_FLAGS MATCHES "/W[0-4]") if(CMAKE_C_FLAGS MATCHES "/W[0-4]") string(REGEX REPLACE "/W[0-4]" "/W4" CMAKE_C_FLAGS "${CMAKE_C_FLAGS}") else(CMAKE_C_FLAGS MATCHES "/W[0-4]") set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /W4") endif(CMAKE_C_FLAGS MATCHES "/W[0-4]") # Disable deprecation warnings for standard C functions in VS2005 and later if(CMAKE_COMPILER_2005) add_definitions(-D_CRT_SECURE_NO_DEPRECATE -D_CRT_NONSTDC_NO_DEPRECATE) endif(CMAKE_COMPILER_2005) endif(CMAKE_BUILD_TOOL MATCHES "(msdev|devenv|nmake)") if(CMAKE_BUILD_TOOL MATCHES "make") if(NOT CMAKE_CXX_FLAGS MATCHES "-Wall") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall") endif(NOT CMAKE_CXX_FLAGS MATCHES "-Wall") if(NOT CMAKE_C_FLAGS MATCHES "-Wall") set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall") endif(NOT CMAKE_C_FLAGS MATCHES "-Wall") endif(CMAKE_BUILD_TOOL MATCHES "make") if(NOT WIN32) string(ASCII 27 Esc) set(ColorReset "${Esc}[m") set(ColorBold "${Esc}[1m") set(Red "${Esc}[31m") set(Green "${Esc}[32m") set(Yellow "${Esc}[33m") set(Blue "${Esc}[34m") set(Magenta "${Esc}[35m") set(Cyan "${Esc}[36m") set(White "${Esc}[37m") set(BoldRed "${Esc}[1;31m") set(BoldGreen "${Esc}[1;32m") set(BoldYellow "${Esc}[1;33m") set(BoldBlue "${Esc}[1;34m") set(BoldMagenta "${Esc}[1;35m") set(BoldCyan "${Esc}[1;36m") set(BoldWhite "${Esc}[1;37m") endif() set(CMAKE_SKIP_RPATH TRUE) if(NOT WIN32) set(CMAKE_EXE_LINKER_FLAGS " -Wl,-rpath=.,-rpath=/usr/local/lib/,-rpath=/usr/lib/,-rpath=/lib/") set(CMAKE_SHARED_LINKER_FLAGS " -Wl,-rpath=.,-rpath=/usr/local/lib/,-rpath=/usr/lib/,-rpath=/lib/") set(CMAKE_MODULE_LINKER_FLAGS " -Wl,-rpath=.,-rpath=/usr/local/lib/,-rpath=/usr/lib/,-rpath=/lib/") else() set(CMAKE_EXE_LINKER_FLAGS "-static -static-libgcc") endif() if(NOT WIN32) # Start uninstaller generator function(WRITE_UNINSTALL_TARGET_SCRIPT) # Create uninstall target template file, if it doesn't exist... if(NOT EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/cmake_uninstall.cmake.in) set(__uninstall_filename ${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake.in) # BEGIN actual write to file... file(WRITE ${__uninstall_filename} "\# - uninstall target template\n\#") file(APPEND ${__uninstall_filename} " if (NOT EXISTS \"\@CMAKE_CURRENT_BINARY_DIR\@/install_manifest.txt\") message(FATAL_ERROR \"Cannot find install manifest: \\\"\@CMAKE_CURRENT_BINARY_DIR\@/install_manifest.txt\\\"\") endif(NOT EXISTS \"\@CMAKE_CURRENT_BINARY_DIR\@/install_manifest.txt\") file(READ \"\@CMAKE_CURRENT_BINARY_DIR\@/install_manifest.txt\" files) string(REGEX REPLACE \"\\n\" \";\" files \"\${files}\") foreach (file \${files}) message(STATUS \"Uninstalling \\\"\$ENV{DESTDIR}\${file}\\\"\") if (EXISTS \"\$ENV{DESTDIR}\${file}\") execute_process( COMMAND \@CMAKE_COMMAND\@ -E remove \"\$ENV{DESTDIR}\${file}\" OUTPUT_VARIABLE rm_out RESULT_VARIABLE rm_retval ) if(NOT \${rm_retval} EQUAL 0) message(FATAL_ERROR \"Problem when removing \\\"\$ENV{DESTDIR}\${file}\\\"\") endif (NOT \${rm_retval} EQUAL 0) else (EXISTS \"\$ENV{DESTDIR}\${file}\") message(STATUS \"File \\\"\$ENV{DESTDIR}\${file}\\\" does not exist.\") endif (EXISTS \"\$ENV{DESTDIR}\${file}\") endforeach(file) execute_process(COMMAND update-rc.d ${PROJECT_NAME} remove) execute_process(COMMAND ldconfig) ") # END of appending to file... endif() endfunction() # End of the uninstaller generator if(NOT EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/cmake_postinstall.cmake) set(__uninstall_filename ${CMAKE_CURRENT_BINARY_DIR}/cmake_postinstall.cmake) # BEGIN actual write to file... file(WRITE ${__uninstall_filename} "execute_process(COMMAND update-rc.d ${PROJECT_NAME} defaults)") endif() endif() execute_process(COMMAND git log -n 1 --pretty=format:"%h" WORKING_DIRECTORY ${PROJECT_SOURCE_DIR} RESULT_VARIABLE git_result OUTPUT_VARIABLE git_hash) execute_process(COMMAND git describe --always --abbrev=0 WORKING_DIRECTORY ${PROJECT_SOURCE_DIR} RESULT_VARIABLE git_result OUTPUT_VARIABLE git_ver) string(REGEX REPLACE "\n" "" git_ver "${git_ver}") string(REGEX REPLACE "\"" "" git_hash "${git_hash}") add_definitions(-DHASH="${git_ver}-nightly-${git_hash}") file(MD5 ${PROJECT_SOURCE_DIR}/res/pilight.pem md5sum) add_definitions(-DPILIGHT_PEM_MD5="${md5sum}") if(${MODULESPACK} MATCHES "ON" AND NOT WIN32) add_definitions(-DMODULE="1") endif() if(NOT WIN32) if(${PROTOCOL_ARPING} MATCHES "ON") set(CMAKE_PCAP_LIBS_INIT) find_library(CMAKE_PCAP_LIBS_INIT NAME pcap PATHS ${CROSS_COMPILE_LIBS} /usr/lib /usr/lib32 /usr/lib64 /usr/lib/i386-linux-gnu /usr/lib/x86_64-linux-gnu /usr/local/lib /usr/local/lib32 /usr/local/lib64 /usr/lib/arm-linux-gnueabi /usr/lib/arm-linux-gnueabihf /usr/lib/aarch64-linux-gnu NO_DEFAULT_PATH) if(${CMAKE_PCAP_LIBS_INIT} MATCHES "CMAKE_PCAP_LIBS_INIT-NOTFOUND") message(FATAL_ERROR "Looking for libpcap - not found") else() message(STATUS "Looking for libpcap - found (${CMAKE_PCAP_LIBS_INIT})") endif() endif() set(CMAKE_UNWIND_LIBS_INIT) if(NOT ${CMAKE_SYSTEM_PROCESSOR} MATCHES "^mips") find_library(CMAKE_UNWIND_LIBS_INIT NAME unwind PATHS ${CROSS_COMPILE_LIBS} /usr/lib /usr/lib32 /usr/lib64 /usr/lib/i386-linux-gnu /usr/lib/x86_64-linux-gnu /usr/local/lib /usr/local/lib32 /usr/local/lib64 /usr/lib/arm-linux-gnueabi /usr/lib/arm-linux-gnueabihf /usr/lib/aarch64-linux-gnu NO_DEFAULT_PATH) if(${CMAKE_UNWIND_LIBS_INIT} MATCHES "CMAKE_UNWIND_LIBS_INIT-NOTFOUND") message(FATAL_ERROR "Looking for libunwind - not found") else() message(STATUS "Looking for libunwind - found (${CMAKE_UNWIND_LIBS_INIT})") endif() endif() find_library(CMAKE_WIRINGX_LIBS_INIT NAME wiringx PATHS ${CROSS_COMPILE_LIBS} /usr/lib /usr/lib32 /usr/lib64 /usr/lib/i386-linux-gnu /usr/lib/x86_64-linux-gnu /usr/local/lib /usr/local/lib32 /usr/local/lib64 /usr/lib/arm-linux-gnueabi /usr/lib/arm-linux-gnueabihf /usr/lib/aarch64-linux-gnu NO_DEFAULT_PATH) if(${CMAKE_WIRINGX_LIBS_INIT} MATCHES "CMAKE_WIRINGX_LIBS_INIT-NOTFOUND") message(FATAL_ERROR "Looking for libwiringx - not found") else() message(STATUS "Looking for libwiringx - found (${CMAKE_WIRINGX_LIBS_INIT})") endif() endif() find_library(CMAKE_MBEDTLS_LIBS_INIT NAME mbedtls PATHS ${CROSS_COMPILE_LIBS} /usr/lib /usr/lib32 /usr/lib64 /usr/lib/i386-linux-gnu /usr/lib/x86_64-linux-gnu /usr/local/lib /usr/local/lib32 /usr/local/lib64 /usr/lib/arm-linux-gnueabi /usr/lib/arm-linux-gnueabihf /usr/lib/aarch64-linux-gnu NO_DEFAULT_PATH) if(${CMAKE_MBEDTLS_LIBS_INIT} MATCHES "CMAKE_MBEDTLS_LIBS_INIT-NOTFOUND") message(FATAL_ERROR "Looking for libmbedtls - not found") else() message(STATUS "Looking for libmbedtls - found (${CMAKE_MBEDTLS_LIBS_INIT})") endif() find_library(CMAKE_MBEDCRYPTO_LIBS_INIT NAME mbedcrypto PATHS ${CROSS_COMPILE_LIBS} /usr/lib /usr/lib32 /usr/lib64 /usr/lib/i386-linux-gnu /usr/lib/x86_64-linux-gnu /usr/local/lib /usr/local/lib32 /usr/local/lib64 /usr/lib/arm-linux-gnueabi /usr/lib/arm-linux-gnueabihf /usr/lib/aarch64-linux-gnu NO_DEFAULT_PATH) if(${CMAKE_MBEDCRYPTO_LIBS_INIT} MATCHES "CMAKE_MBEDCRYPTO_LIBS_INIT-NOTFOUND") message(FATAL_ERROR "Looking for libmbedcrypto - not found") else() message(STATUS "Looking for libmbedcrypto - found (${CMAKE_MBEDCRYPTO_LIBS_INIT})") endif() find_library(CMAKE_MBEDX509_LIBS_INIT NAME mbedx509 PATHS ${CROSS_COMPILE_LIBS} /usr/lib /usr/lib32 /usr/lib64 /usr/lib/i386-linux-gnu /usr/lib/x86_64-linux-gnu /usr/local/lib /usr/local/lib32 /usr/local/lib64 /usr/lib/arm-linux-gnueabi /usr/lib/arm-linux-gnueabihf /usr/lib/aarch64-linux-gnu NO_DEFAULT_PATH) if(${CMAKE_MBEDX509_LIBS_INIT} MATCHES "CMAKE_MBEDX509_LIBS_INIT-NOTFOUND") message(FATAL_ERROR "Looking for libmbedx509 - not found") else() message(STATUS "Looking for libmbedx509 - found (${CMAKE_MBEDX509_LIBS_INIT})") endif() find_library(CMAKE_LUA_LIBS_INIT NAME luajit-5.1 PATHS ${CROSS_COMPILE_LIBS} /usr/lib /usr/lib32 /usr/lib64 /usr/lib/i386-linux-gnu /usr/lib/x86_64-linux-gnu /usr/local/lib /usr/local/lib32 /usr/local/lib64 /usr/lib/arm-linux-gnueabi /usr/lib/arm-linux-gnueabihf /usr/lib/aarch64-linux-gnu NO_DEFAULT_PATH) if(${CMAKE_LUA_LIBS_INIT} MATCHES "CMAKE_LUA_LIBS_INIT-NOTFOUND") message(FATAL_ERROR "Looking for libluajit - not found") else() message(STATUS "Looking for libluajit - found (${CMAKE_LUA_LIBS_INIT})") endif() include_directories(${PROJECT_SOURCE_DIR}/inc) include_directories(${PROJECT_SOURCE_DIR}/libs/libuv) include_directories(/usr/local/include/) add_subdirectory(inc) add_subdirectory(libs) if(WIN32) set(THREADS_USE_PTHREADS_WIN32 true) endif() find_package(Threads REQUIRED) if(NOT WIN32) if(${CMAKE_SYSTEM_NAME} MATCHES "FreeBSD") find_package(Backtrace REQUIRED) endif() endif() if(${MODULESPACK} MATCHES "OFF" OR WIN32) if(WIN32) add_custom_command(OUTPUT ${PROJECT_SOURCE_DIR}/res/win32/admin.obj COMMAND ${CMAKE_RC_COMPILER} -o ${PROJECT_SOURCE_DIR}/res/win32/admin.obj ${PROJECT_SOURCE_DIR}/res/win32/admin.rc) add_custom_command(OUTPUT ${PROJECT_SOURCE_DIR}/res/win32/icon.obj COMMAND ${CMAKE_RC_COMPILER} -o ${PROJECT_SOURCE_DIR}/res/win32/icon.obj ${PROJECT_SOURCE_DIR}/res/win32/icon.rc) add_library(admin STATIC ${PROJECT_SOURCE_DIR}/res/win32/admin.obj) add_library(icon STATIC ${PROJECT_SOURCE_DIR}/res/win32/icon.obj) set_source_files_properties(${PROJECT_SOURCE_DIR}/res/win32/admin.obj PROPERTIES EXTERNAL_OBJECT true GENERATED true) set_source_files_properties(${PROJECT_SOURCE_DIR}/res/win32/icon.obj PROPERTIES EXTERNAL_OBJECT true GENERATED true) set_target_properties(admin PROPERTIES LINKER_LANGUAGE C) set_target_properties(icon PROPERTIES LINKER_LANGUAGE C) endif() add_library(${PROJECT_NAME} OBJECT ${libs_files}) set_property(TARGET ${PROJECT_NAME} PROPERTY POSITION_INDEPENDENT_CODE TRUE) if(WIN32) add_library(${PROJECT_NAME}_shared STATIC $) else() add_library(${PROJECT_NAME}_shared SHARED $) endif() add_library(${PROJECT_NAME}_static STATIC $) target_link_libraries(${PROJECT_NAME}_shared ${CMAKE_THREAD_LIBS_INIT}) if(WIN32) target_link_libraries(${PROJECT_NAME}_shared ws2_32) target_link_libraries(${PROJECT_NAME}_shared user32) target_link_libraries(${PROJECT_NAME}_shared userenv) target_link_libraries(${PROJECT_NAME}_shared wsock32) target_link_libraries(${PROJECT_NAME}_shared iphlpapi) target_link_libraries(${PROJECT_NAME}_shared psapi) target_link_libraries(${PROJECT_NAME}_static ws2_32) target_link_libraries(${PROJECT_NAME}_static user32) target_link_libraries(${PROJECT_NAME}_static userenv) target_link_libraries(${PROJECT_NAME}_static wsock32) target_link_libraries(${PROJECT_NAME}_static iphlpapi) target_link_libraries(${PROJECT_NAME}_static psapi) if(${PROTOCOL_ARPING} MATCHES "ON") target_link_libraries(${PROJECT_NAME}_shared ${PROJECT_SOURCE_DIR}/res/win32/libwpcap.dll.a) target_link_libraries(${PROJECT_NAME}_static ${PROJECT_SOURCE_DIR}/res/win32/libwpcap.dll.a) endif() endif() target_link_libraries(${PROJECT_NAME}_shared m) if(${CMAKE_SYSTEM_NAME} MATCHES "FreeBSD") target_link_libraries(${PROJECT_NAME}_shared ${Backtrace_LIBRARIES}) endif() if(NOT WIN32) target_link_libraries(${PROJECT_NAME}_shared rt) endif() target_link_libraries(${PROJECT_NAME}_shared ${CMAKE_DL_LIBS}) target_link_libraries(${PROJECT_NAME}_shared ${CMAKE_WIRINGX_LIBS_INIT}) target_link_libraries(${PROJECT_NAME}_shared ${CMAKE_MBEDTLS_LIBS_INIT}) target_link_libraries(${PROJECT_NAME}_shared ${CMAKE_MBEDCRYPTO_LIBS_INIT}) target_link_libraries(${PROJECT_NAME}_shared ${CMAKE_MBEDX509_LIBS_INIT}) target_link_libraries(${PROJECT_NAME}_shared ${CMAKE_LUA_LIBS_INIT}) target_link_libraries(${PROJECT_NAME}_static ${CMAKE_THREAD_LIBS_INIT}) target_link_libraries(${PROJECT_NAME}_static m) if(${CMAKE_SYSTEM_NAME} MATCHES "FreeBSD") target_link_libraries(${PROJECT_NAME}_static ${Backtrace_LIBRARIES}) endif() if(NOT WIN32) target_link_libraries(${PROJECT_NAME}_static rt) endif() target_link_libraries(${PROJECT_NAME}_static ${CMAKE_DL_LIBS}) target_link_libraries(${PROJECT_NAME}_static ${CMAKE_WIRINGX_LIBS_INIT}) target_link_libraries(${PROJECT_NAME}_static ${CMAKE_MBEDTLS_LIBS_INIT}) target_link_libraries(${PROJECT_NAME}_static ${CMAKE_MBEDCRYPTO_LIBS_INIT}) target_link_libraries(${PROJECT_NAME}_static ${CMAKE_MBEDX509_LIBS_INIT}) target_link_libraries(${PROJECT_NAME}_static ${CMAKE_LUA_LIBS_INIT}) if(${PROTOCOL_ARPING} MATCHES "ON") target_link_libraries(${PROJECT_NAME}_shared ${CMAKE_PCAP_LIBS_INIT}) target_link_libraries(${PROJECT_NAME}_static ${CMAKE_PCAP_LIBS_INIT}) endif() if(NOT WIN32) target_link_libraries(${PROJECT_NAME}_shared ${CMAKE_UNWIND_LIBS_INIT}) target_link_libraries(${PROJECT_NAME}_static ${CMAKE_UNWIND_LIBS_INIT}) endif() set_target_properties(${PROJECT_NAME}_shared ${PROJECT_NAME}_static PROPERTIES OUTPUT_NAME ${PROJECT_NAME}) if(NOT WIN32) install(CODE "execute_process(COMMAND rm /usr/local/lib/lib${PROJECT_NAME}.so)") install(FILES ${CMAKE_BINARY_DIR}/lib${PROJECT_NAME}.so DESTINATION lib RENAME lib${PROJECT_NAME}.so.${VERSION} COMPONENT ${PROJECT_NAME}) install(FILES ${CMAKE_BINARY_DIR}/lib${PROJECT_NAME}.a DESTINATION lib RENAME lib${PROJECT_NAME}.a COMPONENT ${PROJECT_NAME}) install(CODE "execute_process(COMMAND ln -s \"/usr/local/lib/lib${PROJECT_NAME}.so.${VERSION}\" \"/usr/local/lib/lib${PROJECT_NAME}.so\")") if(EXISTS "/usr/local/lib/${PROJECT_NAME}/protocols") install(CODE "execute_process(COMMAND find /usr/local/lib/${PROJECT_NAME}/protocols/ -type f -exec rm {} \\;)") endif() if(EXISTS "/usr/local/lib/${PROJECT_NAME}/hardware") install(CODE "execute_process(COMMAND find /usr/local/lib/${PROJECT_NAME}/hardware/ -type f -exec rm {} \\;)") endif() if(EXISTS "/usr/local/lib/${PROJECT_NAME}/actions") install(CODE "execute_process(COMMAND find /usr/local/lib/${PROJECT_NAME}/actions/ -type f -exec rm {} \\;)") endif() if(EXISTS "/usr/local/lib/${PROJECT_NAME}/operators") install(CODE "execute_process(COMMAND find /usr/local/lib/${PROJECT_NAME}/operators/ -type f -exec rm {} \\;)") endif() if(EXISTS "/usr/local/${PROJECT_NAME}/operators") install(CODE "execute_process(COMMAND find /usr/local/${PROJECT_NAME}/operators/ -type f -exec rm {} \\;)") endif() if(EXISTS "/etc/${PROJECT_NAME}/config.json") install(CODE "execute_process(COMMAND mv /etc/${PROJECT_NAME}/config.json /etc/${PROJECT_NAME}/config.json.bak)") endif() if(EXISTS "/etc/${PROJECT_NAME}/pilight.pem") install(CODE "execute_process(COMMAND mv /etc/${PROJECT_NAME}/pilight.pem /etc/${PROJECT_NAME}/pilight.pem.bak)") endif() install(PROGRAMS ${PROJECT_SOURCE_DIR}/res/init/${PROJECT_NAME}.initd DESTINATION /etc/init.d/ RENAME ${PROJECT_NAME}) install(FILES ${PROJECT_SOURCE_DIR}/res/config/config.json-default DESTINATION /etc/${PROJECT_NAME}/ RENAME config.json COMPONENT ${PROJECT_NAME}) install(FILES ${PROJECT_SOURCE_DIR}/res/pilight.pem DESTINATION /etc/${PROJECT_NAME}/ COMPONENT ${PROJECT_NAME}) else() # install(FILES ${CMAKE_BINARY_DIR}/lib${PROJECT_NAME}.dll DESTINATION . RENAME lib${PROJECT_NAME}.dll COMPONENT ${PROJECT_NAME}) install(FILES ${PROJECT_SOURCE_DIR}/res/config/config.json-default-w32 DESTINATION . RENAME config.json-default COMPONENT ${PROJECT_NAME}) endif() if(${WEBSERVER} MATCHES "ON") if(WIN32) install(DIRECTORY ${PROJECT_SOURCE_DIR}/libs/webgui/ DESTINATION web/ COMPONENT webgui) else() install(DIRECTORY ${PROJECT_SOURCE_DIR}/libs/webgui/ DESTINATION /usr/local/lib/${PROJECT_NAME}/webgui COMPONENT webgui) endif() endif() if(WIN32) add_executable(${PROJECT_NAME}-daemon daemon.c ${PROJECT_SOURCE_DIR}/res/win32/icon.obj) target_link_libraries(${PROJECT_NAME}-daemon "-Wl,--subsystem,windows") else() add_executable(${PROJECT_NAME}-daemon daemon.c) endif() target_link_libraries(${PROJECT_NAME}-daemon ${PROJECT_NAME}_shared) if(${ZWAVE} MATCHES "ON") target_link_libraries(${PROJECT_NAME}-daemon stdc++) endif() target_link_libraries(${PROJECT_NAME}-daemon ${CMAKE_DL_LIBS}) target_link_libraries(${PROJECT_NAME}-daemon m) if(${CMAKE_SYSTEM_NAME} MATCHES "FreeBSD") target_link_libraries(${PROJECT_NAME}-daemon ${Backtrace_LIBRARIES}) endif() target_link_libraries(${PROJECT_NAME}-daemon ${CMAKE_THREAD_LIBS_INIT}) # if(WIN32) # add_executable(${PROJECT_NAME}-unittest unittest.c ${PROJECT_SOURCE_DIR}/res/win32/icon.obj) # target_link_libraries(${PROJECT_NAME}-unittest "-Wl,--subsystem,windows") # else() # add_executable(${PROJECT_NAME}-unittest unittest.c) # endif() # target_link_libraries(${PROJECT_NAME}-unittest ${PROJECT_NAME}_shared) # if(${ZWAVE} MATCHES "ON") # target_link_libraries(${PROJECT_NAME}-unittest stdc++) # endif() # target_link_libraries(${PROJECT_NAME}-unittest ${CMAKE_DL_LIBS}) # target_link_libraries(${PROJECT_NAME}-unittest m) # if(${CMAKE_SYSTEM_NAME} MATCHES "FreeBSD") # target_link_libraries(${PROJECT_NAME}-unittest ${Backtrace_LIBRARIES}) # endif() # target_link_libraries(${PROJECT_NAME}-unittest ${CMAKE_THREAD_LIBS_INIT}) if(WIN32) add_executable(${PROJECT_NAME}-raw raw.c ${PROJECT_SOURCE_DIR}/res/win32/icon.obj) else() add_executable(${PROJECT_NAME}-raw raw.c) endif() target_link_libraries(${PROJECT_NAME}-raw ${PROJECT_NAME}_shared) if(${ZWAVE} MATCHES "ON") target_link_libraries(${PROJECT_NAME}-raw stdc++) endif() target_link_libraries(${PROJECT_NAME}-raw ${CMAKE_DL_LIBS}) target_link_libraries(${PROJECT_NAME}-raw m) if(${CMAKE_SYSTEM_NAME} MATCHES "FreeBSD") target_link_libraries(${PROJECT_NAME}-raw ${Backtrace_LIBRARIES}) endif() target_link_libraries(${PROJECT_NAME}-raw ${CMAKE_THREAD_LIBS_INIT}) if(WIN32) add_executable(${PROJECT_NAME}-send send.c ${PROJECT_SOURCE_DIR}/res/win32/icon.obj) else() add_executable(${PROJECT_NAME}-send send.c) endif() target_link_libraries(${PROJECT_NAME}-send ${PROJECT_NAME}_shared) target_link_libraries(${PROJECT_NAME}-send ${CMAKE_DL_LIBS}) if(${ZWAVE} MATCHES "ON") target_link_libraries(${PROJECT_NAME}-send stdc++) endif() target_link_libraries(${PROJECT_NAME}-send m) if(${CMAKE_SYSTEM_NAME} MATCHES "FreeBSD") target_link_libraries(${PROJECT_NAME}-send ${Backtrace_LIBRARIES}) endif() target_link_libraries(${PROJECT_NAME}-send ${CMAKE_THREAD_LIBS_INIT}) if(WIN32) add_executable(${PROJECT_NAME}-control control.c ${PROJECT_SOURCE_DIR}/res/win32/icon.obj) else() add_executable(${PROJECT_NAME}-control control.c) endif() target_link_libraries(${PROJECT_NAME}-control ${PROJECT_NAME}_shared) target_link_libraries(${PROJECT_NAME}-control ${CMAKE_DL_LIBS}) if(${ZWAVE} MATCHES "ON") target_link_libraries(${PROJECT_NAME}-control stdc++) endif() target_link_libraries(${PROJECT_NAME}-control m) if(${CMAKE_SYSTEM_NAME} MATCHES "FreeBSD") target_link_libraries(${PROJECT_NAME}-control ${Backtrace_LIBRARIES}) endif() target_link_libraries(${PROJECT_NAME}-control ${CMAKE_THREAD_LIBS_INIT}) if(WIN32) add_executable(${PROJECT_NAME}-receive receive.c ${PROJECT_SOURCE_DIR}/res/win32/icon.obj) else() add_executable(${PROJECT_NAME}-receive receive.c) endif() target_link_libraries(${PROJECT_NAME}-receive ${PROJECT_NAME}_shared) if(${ZWAVE} MATCHES "ON") target_link_libraries(${PROJECT_NAME}-receive stdc++) endif() target_link_libraries(${PROJECT_NAME}-receive ${CMAKE_DL_LIBS}) target_link_libraries(${PROJECT_NAME}-receive m) if(${CMAKE_SYSTEM_NAME} MATCHES "FreeBSD") target_link_libraries(${PROJECT_NAME}-receive ${Backtrace_LIBRARIES}) endif() target_link_libraries(${PROJECT_NAME}-receive ${CMAKE_THREAD_LIBS_INIT}) if(WIN32) add_executable(${PROJECT_NAME}-debug debug.c ${PROJECT_SOURCE_DIR}/res/win32/icon.obj) else() add_executable(${PROJECT_NAME}-debug debug.c) endif() target_link_libraries(${PROJECT_NAME}-debug ${PROJECT_NAME}_shared) if(${ZWAVE} MATCHES "ON") target_link_libraries(${PROJECT_NAME}-debug stdc++) endif() target_link_libraries(${PROJECT_NAME}-debug ${CMAKE_DL_LIBS}) target_link_libraries(${PROJECT_NAME}-debug m) if(${CMAKE_SYSTEM_NAME} MATCHES "FreeBSD") target_link_libraries(${PROJECT_NAME}-debug ${Backtrace_LIBRARIES}) endif() target_link_libraries(${PROJECT_NAME}-debug ${CMAKE_THREAD_LIBS_INIT}) if(WIN32) add_executable(${PROJECT_NAME}-uuid uuid.c ${PROJECT_SOURCE_DIR}/res/win32/icon.obj) else() add_executable(${PROJECT_NAME}-uuid uuid.c) endif() target_link_libraries(${PROJECT_NAME}-uuid ${PROJECT_NAME}_shared) if(${ZWAVE} MATCHES "ON") target_link_libraries(${PROJECT_NAME}-uuid stdc++) endif() target_link_libraries(${PROJECT_NAME}-uuid ${CMAKE_DL_LIBS}) target_link_libraries(${PROJECT_NAME}-uuid m) if(${CMAKE_SYSTEM_NAME} MATCHES "FreeBSD") target_link_libraries(${PROJECT_NAME}-uuid ${Backtrace_LIBRARIES}) endif() target_link_libraries(${PROJECT_NAME}-uuid ${CMAKE_THREAD_LIBS_INIT}) if(WIN32) add_executable(${PROJECT_NAME}-sha256 sha256.c ${PROJECT_SOURCE_DIR}/res/win32/icon.obj) else() add_executable(${PROJECT_NAME}-sha256 sha256.c) endif() target_link_libraries(${PROJECT_NAME}-sha256 ${PROJECT_NAME}_shared) if(${ZWAVE} MATCHES "ON") target_link_libraries(${PROJECT_NAME}-sha256 stdc++) endif() target_link_libraries(${PROJECT_NAME}-sha256 ${CMAKE_DL_LIBS}) target_link_libraries(${PROJECT_NAME}-sha256 m) if(${CMAKE_SYSTEM_NAME} MATCHES "FreeBSD") target_link_libraries(${PROJECT_NAME}-sha256 ${Backtrace_LIBRARIES}) endif() target_link_libraries(${PROJECT_NAME}-sha256 ${CMAKE_THREAD_LIBS_INIT}) if(WIN32) add_executable(${PROJECT_NAME}-flash flash.c ${PROJECT_SOURCE_DIR}/res/win32/icon.obj) else() add_executable(${PROJECT_NAME}-flash flash.c) endif() target_link_libraries(${PROJECT_NAME}-flash ${PROJECT_NAME}_shared) if(${ZWAVE} MATCHES "ON") target_link_libraries(${PROJECT_NAME}-flash stdc++) endif() target_link_libraries(${PROJECT_NAME}-flash ${CMAKE_DL_LIBS}) target_link_libraries(${PROJECT_NAME}-flash m) if(${CMAKE_SYSTEM_NAME} MATCHES "FreeBSD") target_link_libraries(${PROJECT_NAME}-flash ${Backtrace_LIBRARIES}) endif() target_link_libraries(${PROJECT_NAME}-flash ${CMAKE_THREAD_LIBS_INIT}) if(WIN32) install(FILES "${PROJECT_SOURCE_DIR}/res/firmware/${PROJECT_NAME}_usb_nano.hex" DESTINATION . COMPONENT ${PROJECT_NAME}) endif() if(NOT WIN32) if(EXISTS "/usr/local/sbin/${PROJECT_NAME}-send") install(CODE "execute_process(COMMAND rm /usr/local/sbin/${PROJECT_NAME}-send)") endif() if(EXISTS "/usr/local/sbin/${PROJECT_NAME}-receive") install(CODE "execute_process(COMMAND rm /usr/local/sbin/${PROJECT_NAME}-receive)") endif() if(EXISTS "/usr/local/sbin/${PROJECT_NAME}-control") install(CODE "execute_process(COMMAND rm /usr/local/sbin/${PROJECT_NAME}-control)") endif() if(EXISTS "/usr/local/sbin/${PROJECT_NAME}-uuid") install(CODE "execute_process(COMMAND rm /usr/local/sbin/${PROJECT_NAME}-uuid)") endif() endif() if(WIN32) install(FILES "${PROJECT_SOURCE_DIR}/LICENSE.txt" DESTINATION . COMPONENT ${PROJECT_NAME}) install(FILES "${PROJECT_SOURCE_DIR}/res/win32/libmbedx509.dll" DESTINATION . COMPONENT ${PROJECT_NAME}) install(FILES "${PROJECT_SOURCE_DIR}/res/win32/libmbedcrypto.dll" DESTINATION . COMPONENT ${PROJECT_NAME}) install(FILES "${PROJECT_SOURCE_DIR}/res/win32/libmbedtls.dll" DESTINATION . COMPONENT ${PROJECT_NAME}) install(FILES "${PROJECT_SOURCE_DIR}/res/win32/libwinpthread-1.dll" DESTINATION . COMPONENT ${PROJECT_NAME}) install(FILES "${PROJECT_SOURCE_DIR}/res/win32/Packet.dll" DESTINATION . COMPONENT ${PROJECT_NAME}) install(FILES "${PROJECT_SOURCE_DIR}/res/win32/wpcap.dll" DESTINATION . COMPONENT ${PROJECT_NAME}) install(PROGRAMS ${CMAKE_BINARY_DIR}/${PROJECT_NAME}-daemon.exe DESTINATION . COMPONENT ${PROJECT_NAME}) install(PROGRAMS ${CMAKE_BINARY_DIR}/${PROJECT_NAME}-raw.exe DESTINATION . COMPONENT ${PROJECT_NAME}) install(PROGRAMS ${CMAKE_BINARY_DIR}/${PROJECT_NAME}-send.exe DESTINATION . COMPONENT ${PROJECT_NAME}) install(PROGRAMS ${CMAKE_BINARY_DIR}/${PROJECT_NAME}-control.exe DESTINATION . COMPONENT ${PROJECT_NAME}) install(PROGRAMS ${CMAKE_BINARY_DIR}/${PROJECT_NAME}-receive.exe DESTINATION . COMPONENT ${PROJECT_NAME}) install(PROGRAMS ${CMAKE_BINARY_DIR}/${PROJECT_NAME}-debug.exe DESTINATION . COMPONENT ${PROJECT_NAME}) install(PROGRAMS ${CMAKE_BINARY_DIR}/${PROJECT_NAME}-flash.exe DESTINATION . COMPONENT ${PROJECT_NAME}) install(PROGRAMS ${CMAKE_BINARY_DIR}/${PROJECT_NAME}-uuid.exe DESTINATION . COMPONENT ${PROJECT_NAME}) install(PROGRAMS ${CMAKE_BINARY_DIR}/${PROJECT_NAME}-sha256.exe DESTINATION . COMPONENT ${PROJECT_NAME}) else() install(PROGRAMS ${CMAKE_BINARY_DIR}/${PROJECT_NAME}-daemon DESTINATION sbin COMPONENT ${PROJECT_NAME}) install(PROGRAMS ${CMAKE_BINARY_DIR}/${PROJECT_NAME}-raw DESTINATION sbin COMPONENT ${PROJECT_NAME}) install(PROGRAMS ${CMAKE_BINARY_DIR}/${PROJECT_NAME}-send DESTINATION bin COMPONENT ${PROJECT_NAME}) install(PROGRAMS ${CMAKE_BINARY_DIR}/${PROJECT_NAME}-control DESTINATION bin COMPONENT ${PROJECT_NAME}) install(PROGRAMS ${CMAKE_BINARY_DIR}/${PROJECT_NAME}-receive DESTINATION bin COMPONENT ${PROJECT_NAME}) install(PROGRAMS ${CMAKE_BINARY_DIR}/${PROJECT_NAME}-debug DESTINATION sbin COMPONENT ${PROJECT_NAME}) install(PROGRAMS ${CMAKE_BINARY_DIR}/${PROJECT_NAME}-flash DESTINATION sbin COMPONENT ${PROJECT_NAME}) install(PROGRAMS ${CMAKE_BINARY_DIR}/${PROJECT_NAME}-uuid DESTINATION bin COMPONENT ${PROJECT_NAME}) install(PROGRAMS ${CMAKE_BINARY_DIR}/${PROJECT_NAME}-sha256 DESTINATION bin COMPONENT ${PROJECT_NAME}) install(CODE "execute_process(COMMAND update-rc.d ${PROJECT_NAME} defaults)") install(CODE "execute_process(COMMAND ldconfig)") endif() endif() if(WIN32) set(CPACK_MONOLITHIC_INSTALL True) set(CPACK_NSIS_INSTALL_ROOT "c:") set(CPACK_PACKAGE_INSTALL_DIRECTORY "${PROJECT_NAME}") set(CPACK_NSIS_DISPLAY_NAME "${PROJECT_NAME}") set(CPACK_NSIS_PACKAGE_NAME "${PROJECT_NAME} ${git_ver}") set(CPACK_NSIS_URL_INFO_ABOUT "http://www.${PROJECT_NAME}.org") set(CPACK_NSIS_CONTACT "info@${PROJECT_NAME}.org") set(CPACK_NSIS_EXECUTABLES_DIRECTORY ".") set(CPACK_NSIS_ENABLE_UNINSTALL_BEFORE_INSTALL True) set(CPACK_NSIS_MENU_LINKS "${PROJECT_NAME}-daemon" "${PROJECT_NAME}-daemon" ) set(CPACK_RESOURCE_FILE_LICENSE "${PROJECT_SOURCE_DIR}/LICENSE.txt") # set(CPACK_COMPONENTS_ALL ${PROJECT_NAME} webgui) set(CPACK_GENERATOR "NSIS") set(CPACK_PACKAGING_INSTALL_DIRECTORY "${PROJECT_NAME}") set(CPACK_SOURCE_STRIP_FILES TRUE) set(CPACK_STRIP_FILES TRUE) set(CPACK_PACKAGE_CONTACT "CurlyMo ") set(CPACK_PACKAGE_VERSION ${git_ver}) set(CPACK_PACKAGE_NAME "${PROJECT_NAME}") set(CPACK_PACKAGE_VENDOR "${PROJECT_NAME}") set(CPACK_PACKAGE_DESCRIPTION "Control RF devices with the Raspberry Pi") set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "Control RF devices with the Raspberry Pi") include(CPack) else() WRITE_UNINSTALL_TARGET_SCRIPT() configure_file("${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake.in" "${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake" IMMEDIATE @ONLY) add_custom_target(uninstall COMMAND ${CMAKE_COMMAND} -P ${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake) set(CPACK_GENERATOR "DEB") set(CPACK_PACKAGING_INSTALL_PREFIX "/usr/local/") set(CPACK_SOURCE_STRIP_FILES TRUE) set(CPACK_STRIP_FILES TRUE) set(CPACK_PACKAGE_CONTACT "CurlyMo ") set(CPACK_PACKAGE_VERSION ${VERSION}) set(CPACK_PACKAGE_NAME "${PROJECT_NAME}") set(CPACK_DEBIAN_PACKAGE_DEPENDS "zlib1g-dev") set(CPACK_DEBIAN_PACKAGE_PRIORITY "optional") set(CPACK_PACKAGE_DESCRIPTION "Control RF devices with the Raspberry Pi") set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "Control RF devices with the Raspberry Pi") include(CPack) message("") message("${Red}-- WARNING --${ColorReset}") message("${Yellow}Manually compiling and installing ${PROJECT_NAME} will also clear all module folders: /usr/local/lib/${PROJECT_NAME}/protocols/ /usr/local/lib/${PROJECT_NAME}/hardware/ /usr/local/lib/${PROJECT_NAME}/actions/ /usr/local/lib/${PROJECT_NAME}/operators/${ColorReset}") message("${Red}-- WARNING --${ColorReset}") message("") endif()