# # Builds the paho.mqtt.c library # # This step is necessary to provide the libraries and # headers for paho.mqtt.cpp project # include(ExternalProject) set(PAHOMQTTC_DIR ${CMAKE_SOURCE_DIR}/modules/paho.mqtt.c) set(PAHOMQTTC_TARGET_DIR ${CMAKE_BINARY_DIR}/modules/paho.mqtt.c) if( WIN32 ) set(PAHOMQTTC_CLIENT_STATIC_LIB ${PAHOMQTTC_TARGET_DIR}/lib/paho-mqtt3c-static.lib) set(PAHOMQTTC_ASYNC_STATIC_LIB ${PAHOMQTTC_TARGET_DIR}/lib/paho-mqtt3a-static.lib) set(PAHOMQTTC_INSTALL_BYPRODUCTS ${PAHOMQTTC_CLIENT_STATIC_LIB} ${PAHOMQTTC_ASYNC_STATIC_LIB}) else() # '-static' suffix is removed from library names if not win32. # That is to be fixed because paho.mqtt.cpp expects the suffix. set(PAHOMQTTC_CLIENT_STATIC_WRONGLIB ${PAHOMQTTC_TARGET_DIR}/lib/libpaho-mqtt3c.a) set(PAHOMQTTC_ASYNC_STATIC_WRONGLIB ${PAHOMQTTC_TARGET_DIR}/lib/libpaho-mqtt3a.a) set(PAHOMQTTC_CLIENT_STATIC_LIB ${PAHOMQTTC_TARGET_DIR}/lib/libpaho-mqtt3c-static.a) set(PAHOMQTTC_ASYNC_STATIC_LIB ${PAHOMQTTC_TARGET_DIR}/lib/libpaho-mqtt3a-static.a) set(PAHOMQTTC_INSTALL_BYPRODUCTS ${PAHOMQTTC_CLIENT_STATIC_WRONGLIB} ${PAHOMQTTC_ASYNC_STATIC_WRONGLIB}) endif() set(PAHOMQTTC_BYPRODUCTS ${PAHOMQTTC_CLIENT_STATIC_LIB} ${PAHOMQTTC_ASYNC_STATIC_LIB}) file(MAKE_DIRECTORY ${PAHOMQTTC_TARGET_DIR}/include) ExternalProject_Add( pahomqttc PREFIX ${PAHOMQTTC_TARGET_DIR} SOURCE_DIR ${PAHOMQTTC_DIR} CMAKE_ARGS -DCMAKE_C_COMPILER=${CMAKE_C_COMPILER} CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${PAHOMQTTC_TARGET_DIR} CMAKE_ARGS -DPAHO_WITH_SSL=${PAHO_BUILD_WITH_SSL} CMAKE_ARGS -DPAHO_BUILD_STATIC=${PAHO_BUILD_STATIC} CMAKE_ARGS -DPAHO_ENABLE_TESTING=${PAHO_ENABLE_TESTING} BUILD_COMMAND cmake --build . --config $ INSTALL_COMMAND cmake --install . --config $ BYPRODUCTS ${PAHOMQTTC_INSTALL_BYPRODUCTS} ) if( NOT WIN32 ) ExternalProject_Add_Step(pahomqttc libfix COMMAND ${CMAKE_COMMAND} -E copy ${PAHOMQTTC_CLIENT_STATIC_WRONGLIB} ${PAHOMQTTC_CLIENT_STATIC_LIB} COMMAND ${CMAKE_COMMAND} -E copy ${PAHOMQTTC_ASYNC_STATIC_WRONGLIB} ${PAHOMQTTC_ASYNC_STATIC_LIB} COMMENT "Fixing paho.mqtt.c static library names" DEPENDS ${PAHOMQTTC_INSTALL_BYPRODUCTS} BYPRODUCTS ${PAHOMQTTC_BYPRODUCTS} ) endif() # The paho.mqtt.cpp project needs to know where the paho.mqtt.c libraries # and headers are installed, so we provide this information in an additional # cmake file which is passed to the paho.mqtt.cpp project build set(PAHOMQTTC_INCLUDE_DIR ${PAHOMQTTC_TARGET_DIR}/include) set(PAHOMQTTC_LIBRARY_DIR ${PAHOMQTTC_TARGET_DIR}/lib) configure_file(${CMAKE_SOURCE_DIR}/cmake/fix_pahomqttcpp.cmake.in ${CMAKE_BINARY_DIR}/cmake/fix_pahomqttcpp.cmake @ONLY) add_library(paho-mqttc3::MQTTClient STATIC IMPORTED GLOBAL) set_target_properties(paho-mqttc3::MQTTClient PROPERTIES IMPORTED_LOCATION ${PAHOMQTTC_CLIENT_STATIC_LIB} INTERFACE_INCLUDE_DIRECTORIES ${PAHOMQTTC_TARGET_DIR}/include) add_library(paho-mqttc3::MQTTAsync STATIC IMPORTED GLOBAL) set_target_properties(paho-mqttc3::MQTTAsync PROPERTIES IMPORTED_LOCATION ${PAHOMQTTC_ASYNC_STATIC_LIB} INTERFACE_INCLUDE_DIRECTORIES ${PAHOMQTTC_TARGET_DIR}/include) if( NOT WIN32 ) # pthread is used and the link dependency needs to be explicitly specified here set_target_properties(paho-mqttc3::MQTTClient paho-mqttc3::MQTTAsync PROPERTIES INTERFACE_LINK_LIBRARIES pthread) else() # WIN32 # winsocks are used and the link dependency needs to be explicitly specified here set_target_properties(paho-mqttc3::MQTTClient paho-mqttc3::MQTTAsync PROPERTIES INTERFACE_LINK_LIBRARIES ws2_32) endif()