123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172 |
- FILE(GLOB HDR_ROOT "*.hpp")
- FILE(GLOB HDR_MQTT "mqtt/*.hpp")
- SET(ROOT_INCLUDE_TARGET include)
- SET(ROOT_MQTT_TARGET include/mqtt)
- ADD_LIBRARY(${PROJECT_NAME} INTERFACE)
- TARGET_LINK_LIBRARIES(${PROJECT_NAME} INTERFACE Threads::Threads Boost::system Boost::date_time)
- IF(MQTT_USE_STATIC_OPENSSL)
- # Unfortunately, cmake doesn't automatically detect that statically linked openssl
- # requires at least two more libs to be linked. "dl" is for dynamic library linking
- # and zlib is for basic compression functionality.
- # There is currently no way to specify statically linked zlib.
- TARGET_LINK_LIBRARIES(${PROJECT_NAME} INTERFACE $<$<BOOL:${MQTT_USE_TLS}>:${CMAKE_DL_LIBS} ZLIB::ZLIB>)
- ENDIF()
- TARGET_LINK_LIBRARIES(${PROJECT_NAME} INTERFACE $<$<BOOL:${MQTT_USE_TLS}>:OpenSSL::SSL>)
- TARGET_INCLUDE_DIRECTORIES(${PROJECT_NAME}
- INTERFACE
- $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>
- $<INSTALL_INTERFACE:${ROOT_INCLUDE_TARGET}>
- $<INSTALL_INTERFACE:${ROOT_MQTT_TARGET}>
- )
- TARGET_COMPILE_DEFINITIONS(${PROJECT_NAME} INTERFACE $<$<BOOL:${MQTT_USE_TLS}>:MQTT_USE_TLS>)
- TARGET_COMPILE_DEFINITIONS(${PROJECT_NAME} INTERFACE $<$<BOOL:${MQTT_USE_WS}>:MQTT_USE_WS>)
- TARGET_COMPILE_DEFINITIONS(${PROJECT_NAME} INTERFACE $<$<BOOL:${MQTT_USE_STR_CHECK}>:MQTT_USE_STR_CHECK>)
- TARGET_COMPILE_DEFINITIONS(${PROJECT_NAME} INTERFACE $<$<BOOL:${MQTT_USE_LOG}>:MQTT_USE_LOG>)
- TARGET_COMPILE_DEFINITIONS(${PROJECT_NAME} INTERFACE MQTT_ALWAYS_SEND_REASON_CODE=$<BOOL:${MQTT_ALWAYS_SEND_REASON_CODE}>)
- TARGET_COMPILE_DEFINITIONS(${PROJECT_NAME} INTERFACE $<$<BOOL:${MQTT_STD_VARIANT}>:MQTT_STD_VARIANT>)
- TARGET_COMPILE_DEFINITIONS(${PROJECT_NAME} INTERFACE $<$<BOOL:${MQTT_STD_OPTIONAL}>:MQTT_STD_OPTIONAL>)
- TARGET_COMPILE_DEFINITIONS(${PROJECT_NAME} INTERFACE $<$<BOOL:${MQTT_STD_ANY}>:MQTT_STD_ANY>)
- TARGET_COMPILE_DEFINITIONS(${PROJECT_NAME} INTERFACE $<$<BOOL:${MQTT_STD_STRING_VIEW}>:MQTT_STD_STRING_VIEW>)
- TARGET_COMPILE_DEFINITIONS(${PROJECT_NAME} INTERFACE $<$<BOOL:${MQTT_STD_SHARED_PTR_ARRAY}>:MQTT_STD_SHARED_PTR_ARRAY>)
- TARGET_COMPILE_DEFINITIONS(${PROJECT_NAME} INTERFACE $<$<BOOL:${MQTT_DISABLE_LIBSTDCXX_TUPLE_ANY_WORKAROUND}>:MQTT_DISABLE_LIBSTDCXX_TUPLE_ANY_WORKAROUND>)
- # You might wonder why we don't simply add the list of header files to the check_deps
- # executable directly, and let cmake figure everything out on it's own.
- # The reason we can't do that is because cmake has built in rules that can't be disabled
- # or overridden that prevent it from ever treating a file that ends in .h as a source file.
- # So the work around for this problem is that we copy the header files to a different folder,
- # one that's owned by CMake (the binary dir), and compile the header files there to perform
- # the dependency checking.
- SET (HDR_DEPS_CHK_FOLDER "${CMAKE_BINARY_DIR}/check_deps_headers")
- FILE (MAKE_DIRECTORY "${HDR_DEPS_CHK_FOLDER}")
- LIST (APPEND CHK_MQTT)
- FILE (GLOB_RECURSE ALL_HPP "mqtt/*.hpp")
- FOREACH (HDR ${ALL_HPP})
- GET_FILENAME_COMPONENT (HDR_NAME ${HDR} NAME)
- # Of course, the FILE macro always treats the destination name as if it were a folder name
- # So we have to first copy the header file, and THEN rename the header file to have an
- # extension that cmake will treat as a source file.
- FILE (COPY ${HDR} DESTINATION "${HDR_DEPS_CHK_FOLDER}")
- FILE (RENAME "${HDR_DEPS_CHK_FOLDER}/${HDR_NAME}" "${HDR_DEPS_CHK_FOLDER}/${HDR_NAME}.cpp")
- LIST (APPEND CHK_MQTT "${HDR_DEPS_CHK_FOLDER}/${HDR_NAME}.cpp")
- ENDFOREACH ()
- # The EXCLUDE_FROM_ALL property prevents check_deps from being included in the default target
- ADD_LIBRARY(check_deps OBJECT EXCLUDE_FROM_ALL ${CHK_MQTT})
- # We don't need to actually run the whole compiler. We're just checking that all the includes are valid
- # So here we ask for only the syntax checking mode to be used.
- # We also don't mind that there might be unused constant variables when doing deps checking.
- TARGET_COMPILE_OPTIONS(check_deps PUBLIC -Wno-unused-const-variable $<IF:$<CXX_COMPILER_ID:MSVC>,/Zs,-fsyntax-only>)
- TARGET_LINK_LIBRARIES (check_deps PUBLIC ${PROJECT_NAME})
- INSTALL(FILES ${HDR_ROOT} DESTINATION ${ROOT_INCLUDE_TARGET})
- INSTALL(FILES ${HDR_MQTT} DESTINATION ${ROOT_MQTT_TARGET})
|