From 632695fe3ee704c1c1c539d79172ac0f9f9ce77b Mon Sep 17 00:00:00 2001 From: David Woodhouse Date: Thu, 4 Jun 2020 12:41:27 +0100 Subject: [PATCH] Fix up OpenZWave include path handling MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The path specified by the pkg-config file will be, for example, /usr/include/openzwave. That directory needs to be on the compiler's include path, because OpenZWave's own include files assume they can include each other simply as (e.g.) "ValueIDIndexes.h"; not "openzwave/ValueIDIndexes.h" Our own files do include though, which means that the *parent* directory needs to be on the compilers's include path too. We generally get lucky because /usr/include is automatically included, so we find /usr/include/openzwave/Foo.h anyway. Fix our C files to rely on the correct include path discovered from pkg-config, and to include OpenZWave headers by name without the erroneous openzwave/ prefix. That means we can fix the ../open-zwave-read-only static build to use the header files directly from there just like it does the static library .a file, without requiring the 'sudo make install' step — and without suffering a mismatch of static openzwave build vs. headers of a different version that were installed on the system, which could previously happen. Tested with both static and dynamic builds of OpenZWave. --- CMakeLists.txt | 11 ++++------- hardware/OpenZWave.cpp | 8 ++++---- hardware/openzwave/control_panel/ozwcp.cpp | 10 +++++----- hardware/openzwave/control_panel/ozwcp.h | 4 ++-- 4 files changed, 15 insertions(+), 18 deletions(-) --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -694,6 +694,7 @@ endif(WITH_LIBUSB) # if(USE_STATIC_OPENZWAVE) find_library(OpenZWave NAMES libopenzwave.a HINTS "../open-zwave-read-only" "../open-zwave-read-only/cpp/build") + find_path(OPENZWAVE_INCLUDE_DIRS NAMES OZWException.h HINTS "../open-zwave-read-only/cpp/src") set(OPENZWAVE_LIB ${OpenZWave}) else() pkg_check_modules(OPENZWAVE libopenzwave) @@ -707,16 +708,12 @@ IF(OpenZWave) message(STATUS "OpenZWave library found at: ${OpenZWave}") target_link_libraries(domoticz ${OpenZWave}) - find_path(OPENZWAVE_INCLUDE_DIRS NAMES openzwave/Manager.h) + find_path(OPENZWAVE_INCLUDE_DIRS NAMES OZWException.h) if (OPENZWAVE_INCLUDE_DIRS) - IF(CMAKE_SYSTEM_NAME STREQUAL "FreeBSD") - include_directories(${OPENZWAVE_INCLUDE_DIRS}) - ELSE() - include_directories(${OPENZWAVE_INCLUDE_DIRS}/openzwave) - ENDIF() + include_directories(${OPENZWAVE_INCLUDE_DIRS}) message(STATUS "OpenZWave includes found at: ${OPENZWAVE_INCLUDE_DIRS}") else() - message(FATAL_ERROR "OpenZWave includes not found. Did you not issue 'sudo make install' after building OpenZWave?") + message(FATAL_ERROR "OpenZWave includes not found.") endif (OPENZWAVE_INCLUDE_DIRS) add_definitions(-DWITH_OPENZWAVE) ELSE() --- a/hardware/OpenZWave.cpp +++ b/hardware/OpenZWave.cpp @@ -22,10 +22,10 @@ #include "../main/localtime_r.h" //OpenZWave includes -#include -#include -#include -#include +#include +#include +#include +#include #include "ZWaveCommands.h" --- a/hardware/openzwave/control_panel/ozwcp.cpp +++ b/hardware/openzwave/control_panel/ozwcp.cpp @@ -39,11 +39,11 @@ #include #include #include -#include -#include -#include -#include -#include +#include +#include +#include +#include +#include #include "../../../main/Logger.h" #include --- a/hardware/openzwave/control_panel/ozwcp.h +++ b/hardware/openzwave/control_panel/ozwcp.h @@ -38,8 +38,8 @@ #include #include -#include -#include +#include +#include #define MAX_NODES 255