From b5e4e3880c3b92055fbbc80dd9504c35f1528865 Mon Sep 17 00:00:00 2001 From: Jose Luis Blanco-Claraco Date: Fri, 6 Jul 2018 08:22:23 +0200 Subject: [PATCH] Fix Win builds against wx3.1.1 (zlib link error) cc: #795 --- cmakemodules/script_show_final_summary.cmake | 3 +- cmakemodules/script_wxwidgets.cmake | 1 - cmakemodules/script_zlib.cmake | 44 ++++++++++++-------- doc/doxygen-pages/changeLog_doc.h | 1 + libs/io/CMakeLists.txt | 4 +- 5 files changed, 31 insertions(+), 22 deletions(-) diff --git a/cmakemodules/script_show_final_summary.cmake b/cmakemodules/script_show_final_summary.cmake index ba0509f352..d1a69f66d6 100644 --- a/cmakemodules/script_show_final_summary.cmake +++ b/cmakemodules/script_show_final_summary.cmake @@ -128,7 +128,8 @@ SHOW_CONFIG_LINE_SYSTEM("GLUT " CMAKE_MRPT_HAS_GL SHOW_CONFIG_LINE_SYSTEM("PCAP (Wireshark logs for Velodyne) " CMAKE_MRPT_HAS_LIBPCAP) SHOW_CONFIG_LINE_SYSTEM("PCL (Pointscloud library) " CMAKE_MRPT_HAS_PCL "[Version: ${PCL_VERSION}]") SHOW_CONFIG_LINE_SYSTEM("SuiteSparse " CMAKE_MRPT_HAS_SUITESPARSE) -SHOW_CONFIG_LINE ("VTK " CMAKE_MRPT_HAS_VTK) +SHOW_CONFIG_LINE("VTK " CMAKE_MRPT_HAS_VTK) +SHOW_CONFIG_LINE_SYSTEM("wxWidgets " CMAKE_MRPT_HAS_WXWIDGETS "[Version: ${wxWidgets_VERSION_STRING}]") SHOW_CONFIG_LINE_SYSTEM("yamlcpp (YAML file format) " CMAKE_MRPT_HAS_YAMLCPP "[Version: ${LIBYAMLCPP_VERSION}]") MESSAGE(STATUS "") diff --git a/cmakemodules/script_wxwidgets.cmake b/cmakemodules/script_wxwidgets.cmake index ff1660e095..78a65789df 100644 --- a/cmakemodules/script_wxwidgets.cmake +++ b/cmakemodules/script_wxwidgets.cmake @@ -113,4 +113,3 @@ SET(CMAKE_MRPT_HAS_WXWIDGETS_SYSTEM 0) IF(CMAKE_MRPT_HAS_WXWIDGETS) SET(CMAKE_MRPT_HAS_WXWIDGETS_SYSTEM 1) ENDIF(CMAKE_MRPT_HAS_WXWIDGETS) - diff --git a/cmakemodules/script_zlib.cmake b/cmakemodules/script_zlib.cmake index 4e099da1cd..b40dd92050 100644 --- a/cmakemodules/script_zlib.cmake +++ b/cmakemodules/script_zlib.cmake @@ -1,25 +1,33 @@ # Check for system zlib: # =================================================== -SET(CMAKE_MRPT_HAS_ZLIB 1) # Always present: system or built-in -IF(MSVC) - SET(CMAKE_MRPT_HAS_ZLIB_SYSTEM 0) -ELSE(MSVC) - FIND_PACKAGE(ZLIB) - IF(ZLIB_FOUND) +set(CMAKE_MRPT_HAS_ZLIB 1) # Always present: system or built-in +set(CMAKE_MRPT_HAS_ZLIB_SYSTEM_IS_WX 0) +if (MSVC) + set(CMAKE_MRPT_HAS_ZLIB_SYSTEM 0) +else() + find_package(ZLIB) + if (ZLIB_FOUND) #MESSAGE(STATUS "Found library: zlib - Include: ${ZLIB_INCLUDE_DIR}") - INCLUDE_DIRECTORIES("${ZLIB_INCLUDE_DIR}") + include_directories("${ZLIB_INCLUDE_DIR}") - SET(MRPT_ZLIB_LIBS ${ZLIB_LIBRARIES}) # APPEND_MRPT_LIBS(z) + set(MRPT_ZLIB_LIBS ${ZLIB_LIBRARIES}) # APPEND_MRPT_LIBS(z) - SET(CMAKE_MRPT_HAS_ZLIB_SYSTEM 1) - ELSE(ZLIB_FOUND) + set(CMAKE_MRPT_HAS_ZLIB_SYSTEM 1) + set(CMAKE_MRPT_HAS_ZLIB_SYSTEM_IS_WX 1) + else() # If we are using wxWidgets we dont need this... for now check if this is MinGW on Windows... - IF (WIN32 AND CMAKE_MRPT_HAS_WXWIDGETS) - SET(CMAKE_MRPT_HAS_ZLIB_SYSTEM 1) - SET(CMAKE_MRPT_HAS_ZLIB_SYSTEM_IS_WX 1) - ELSE(WIN32 AND CMAKE_MRPT_HAS_WXWIDGETS) - SET(CMAKE_MRPT_HAS_ZLIB_SYSTEM 0) - ENDIF(WIN32 AND CMAKE_MRPT_HAS_WXWIDGETS) - ENDIF(ZLIB_FOUND) -ENDIF(MSVC) + if (WIN32 AND CMAKE_MRPT_HAS_WXWIDGETS) + set(CMAKE_MRPT_HAS_ZLIB_SYSTEM 1) + set(CMAKE_MRPT_HAS_ZLIB_SYSTEM_IS_WX 1) + else() + set(CMAKE_MRPT_HAS_ZLIB_SYSTEM 0) + endif() + endif() +endif() +# Update: wxWidgets >=3.1.1 no longer comes with zlib +if (CMAKE_MRPT_HAS_WXWIDGETS AND CMAKE_MRPT_HAS_ZLIB_SYSTEM_IS_WX AND (NOT "${wxWidgets_VERSION_STRING}" VERSION_LESS "3.1.1")) + # Use embedded version instead: + set(CMAKE_MRPT_HAS_ZLIB_SYSTEM 0) + set(CMAKE_MRPT_HAS_ZLIB_SYSTEM_IS_WX 0) +endif() diff --git a/doc/doxygen-pages/changeLog_doc.h b/doc/doxygen-pages/changeLog_doc.h index a57d093298..6f950901a3 100644 --- a/doc/doxygen-pages/changeLog_doc.h +++ b/doc/doxygen-pages/changeLog_doc.h @@ -107,6 +107,7 @@ CMetricMap has empty smart pointers. - CNetworkOfPoses: read/write format made compatible with G2O EDGE_SE2 types. - BUG FIXES: - Fix missing "-ldl" linker flag. + - Fix building against wxWidgets 3.1.1 in Windows (zlib link error).
diff --git a/libs/io/CMakeLists.txt b/libs/io/CMakeLists.txt index 1cdbdb5e3b..93fe8b5f4b 100644 --- a/libs/io/CMakeLists.txt +++ b/libs/io/CMakeLists.txt @@ -7,7 +7,7 @@ LIST(APPEND io_EXTRA_SRCS_NAME "io" "io") IF(CMAKE_MRPT_HAS_ZLIB) IF(CMAKE_MRPT_HAS_ZLIB_SYSTEM_IS_WX OR NOT CMAKE_MRPT_HAS_ZLIB_SYSTEM) INCLUDE_DIRECTORIES("${MRPT_LIBS_ROOT}/io/src/zlib/") - IF(NOT MSVC OR NOT CMAKE_MRPT_HAS_WXWIDGETS) + IF(NOT MSVC OR NOT CMAKE_MRPT_HAS_ZLIB_SYSTEM_IS_WX) LIST(APPEND io_EXTRA_SRCS "${MRPT_LIBS_ROOT}/io/src/zlib/*.c" "${MRPT_LIBS_ROOT}/io/src/zlib/*.h") LIST(APPEND io_EXTRA_SRCS_NAME "io/zlib" "io/zlib") ENDIF() @@ -39,5 +39,5 @@ IF(BUILD_mrpt-io) # Use wxWidgets version of libzip (gz* funtions) IF(MSVC AND CMAKE_MRPT_HAS_WXWIDGETS) target_link_libraries(mrpt-io PRIVATE ${wxWidgets_LIBRARIES}) - ENDIF() + ENDIF() ENDIF()