aboutsummaryrefslogtreecommitdiff
path: root/apps/CMakeLists.txt
diff options
context:
space:
mode:
Diffstat (limited to 'apps/CMakeLists.txt')
-rw-r--r--apps/CMakeLists.txt90
1 files changed, 67 insertions, 23 deletions
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_OBJECTS:apps>)
- 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)