From 5dbc69fb16c71c02859ec8665c55a1e2b068ddd7 Mon Sep 17 00:00:00 2001 From: Trygve Laugstøl Date: Mon, 20 Jul 2015 22:33:39 +0200 Subject: o Adding an application to send samples over MQTT. o Improved CMake build script, better detection and error messages of headers/libraries. Conditionally adding the applications that can be compiled with the given set of found libraries. --- apps/CMakeLists.txt | 90 +++++++++++++++++++++++++++++++++++++++-------------- 1 file changed, 67 insertions(+), 23 deletions(-) (limited to 'apps/CMakeLists.txt') diff --git a/apps/CMakeLists.txt b/apps/CMakeLists.txt index b8255d1..411eb32 100644 --- a/apps/CMakeLists.txt +++ b/apps/CMakeLists.txt @@ -9,18 +9,41 @@ list(APPEND APPS sm-get-value) list(APPEND APPS sm-serial-read) list(APPEND APPS sm-serial-read-all) -add_library(apps OBJECT - apps.cpp apps.h - SoilMoisture.cpp SoilMoisture.h) -target_include_directories(apps - PUBLIC ${CMAKE_CURRENT_SOURCE_DIR} - PUBLIC "${PROJECT_SOURCE_DIR}/include" - PUBLIC "${PROJECT_SOURCE_DIR}/json/src" - PUBLIC "${PROJECT_SOURCE_DIR}/sensor/include" - PUBLIC "${LOG4CPLUS_INCLUDE_DIRECTORIES}") +list(APPEND INCLUDE_DIRECTORIES + ${CMAKE_CURRENT_SOURCE_DIR} + "${PROJECT_SOURCE_DIR}/include" + "${PROJECT_SOURCE_DIR}/json/src" + "${PROJECT_SOURCE_DIR}/sensor/include") + +#### Find all packages + +function(find_header_and_lib PREFIX HEADER_NAME LIBRARY_NAME) +# message(STATUS "=== PREFIX ===") +# message(STATUS "PREFIX=${PREFIX}") +# message(STATUS "HEADER_NAME=${HEADER_NAME}") +# message(STATUS "LIBRARY_NAME=${LIBRARY_NAME}") + + find_path(${PREFIX}_INCLUDE_DIRECTORY ${HEADER_NAME}) + if(${${PREFIX}_INCLUDE_DIRECTORY} MATCHES NOTFOUND) + message(STATUS "Could not find header file: " ${HEADER_NAME}) + endif() + + find_library(${PREFIX}_LIBRARY ${LIBRARY_NAME}) + if(${${PREFIX}_LIBRARY} MATCHES NOTFOUND) + message(STATUS "Could not find library: " ${LIBRARY_NAME}) + endif() + + if(${${PREFIX}_INCLUDE_DIRECTORY} MATCHES NOTFOUND OR ${${PREFIX}_LIBRARY} MATCHES NOTFOUND) + set(${PREFIX}_OK NOTFOUND PARENT_SCOPE) + else() + set(${PREFIX}_INCLUDE_DIRECTORY ${${PREFIX}_INCLUDE_DIRECTORY} PARENT_SCOPE) + set(${PREFIX}_LIBRARY ${${PREFIX}_LIBRARY} PARENT_SCOPE) + set(${PREFIX}_OK OK PARENT_SCOPE) + endif() +endfunction() # Boost -find_package(Boost COMPONENTS regex system program_options REQUIRED) +find_package(Boost COMPONENTS regex system program_options REQUIRED QUIET) # Bluez pkg_check_modules(BLUEZ bluez REQUIRED) @@ -28,35 +51,56 @@ pkg_check_modules(BLUEZ bluez REQUIRED) # pthreads find_package(Threads REQUIRED) +# libpqxx pkg_check_modules(PQXX libpqxx REQUIRED) -find_path(LOG4CPLUS_INCLUDE_DIRECTORIES log4cplus/logger.h) -if(LOG4CPLUS_INCLUDE_DIRECTORIES MATCHES NOTFOUND) - message(FATAL_ERROR "Could not find log4cplus header files") +# log4cplus +find_header_and_lib(LOG4CPLUS log4cplus/logger.h log4cplus) + +if(NOT LOG4CPLUS_OK STREQUAL "OK") + message(STATUS "Not adding MQTT applications, missing header and/or library files") endif() -find_library(LOG4CPLUS_LIBRARIES log4cplus) -if(LOG4CPLUS_LIBRARIES MATCHES NOTFOUND) - message(FATAL_ERROR "Could not find log4cplus library files") +list(APPEND INCLUDE_DIRECTORIES "${LOG4CPLUS_INCLUDE_DIRECTORY}") +list(APPEND LIBRARIES "${LOG4CPLUS_LIBRARY}") + +# mosquitto + +find_header_and_lib(MOSQUITTO mosquitto.h mosquitto) +find_header_and_lib(MOSQUITTOPP mosquittopp.h mosquittopp) + +if(MOSQUITTO_OK STREQUAL "OK" AND MOSQUITTOPP_OK STREQUAL "OK") + list(APPEND APPS mqtt-publish) + list(APPEND INCLUDE_DIRECTORIES "${MOSQUITTO_INCLUDE_DIRECTORY}") + list(APPEND INCLUDE_DIRECTORIES "${MOSQUITTOPP_INCLUDE_DIRECTORY}") + list(APPEND LIBRARIES "${MOSQUITTO_LIBRARY}") + list(APPEND LIBRARIES "${MOSQUITTOPP_LIBRARY}") +else() + message(STATUS "Not adding MQTT applications, missing header and/or library files") endif() +message(STATUS "Dependency summary:") +message(STATUS "Log4cplus: -I${LOG4CPLUS_INCLUDE_DIRECTORY}, -L${LOG4CPLUS_LIBRARY}") +message(STATUS "Mosquitto: -I${MOSQUITTO_INCLUDE_DIRECTORY}, -L${MOSQUITTO_LIBRARY}") +message(STATUS "Mosquittopp: -I${MOSQUITTOPP_INCLUDE_DIRECTORY}, -L${MOSQUITTOPP_LIBRARY}") + +add_library(apps OBJECT + apps.cpp apps.h + SoilMoisture.cpp SoilMoisture.h) +target_include_directories(apps PUBLIC ${INCLUDE_DIRECTORIES}) + foreach(app ${APPS}) add_executable(${app} ${app}.cpp $) - target_include_directories(${app} - PUBLIC ${CMAKE_CURRENT_SOURCE_DIR} - PUBLIC "${PROJECT_SOURCE_DIR}/include" - PUBLIC "${PROJECT_SOURCE_DIR}/json/src" - PUBLIC "${PROJECT_SOURCE_DIR}/sensor/include" - PUBLIC "${LOG4CPLUS_INCLUDE_DIRECTORIES}") + target_include_directories(${app} PUBLIC ${INCLUDE_DIRECTORIES}) target_link_libraries(${app} ble trygvis-sensor + ${LIBRARIES} ${Boost_LIBRARIES} ${BLUEZ_LIBRARIES} ${PQXX_LIBRARIES} - ${LOG4CPLUS_LIBRARIES} ${CMAKE_THREAD_LIBS_INIT}) install(TARGETS ${app} RUNTIME DESTINATION bin) -- cgit v1.2.3