Description: use the system-wide minizip instead of the embeeded one if found. Forwarded-Upstream: It was provided by upstream: http://bazaar.launchpad.net/~widelands-dev/widelands/b19-debian/revision/8147 . Thanks to Fòram na Gàidhlig for the patch. === modified file 'CMakeLists.txt' --- CMakeLists.txt | 1 + cmake/Modules/FindMinizip.cmake | 37 +++++++++++++++++++++++++++++++++++++ cmake/WlFunctions.cmake | 8 ++++++++ src/io/filesystem/CMakeLists.txt | 2 +- src/io/filesystem/zip_filesystem.h | 6 ++++++ src/third_party/CMakeLists.txt | 20 +++++++++++--------- 6 files changed, 64 insertions(+), 10 deletions(-) --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -142,6 +142,7 @@ find_package(SDL2_mixer REQUIRED) find_package(SDL2_ttf REQUIRED) find_package(ZLIB REQUIRED) +find_package(Minizip) if(${CMAKE_VERSION} VERSION_LESS 3.9.0) find_package(ICU_old REQUIRED) else() --- /dev/null +++ b/cmake/Modules/FindMinizip.cmake @@ -0,0 +1,37 @@ +# - Try to find Minizip +# Once done this will define +# +# MINIZIP_FOUND - system has MINIZIP +# MINIZIP_INCLUDE_DIR - the MINIZIP include directory +# MINIZIP_LIBRARY_DIR - where the libraries are +# MINIZIP_LIBRARY - Link these to use MINIZIP +# + +IF (MINIZIP_INCLUDE_DIR) + # Already in cache, be silent + SET(MINIZIP_FIND_QUIETLY TRUE) +ENDIF (MINIZIP_INCLUDE_DIR) + +FIND_PATH( MINIZIP_INCLUDE_DIR + NAMES zip.h unzip.h ioapi.h + PATHS /usr/local/include /usr/include + PATH_SUFFIXES minizip/ ) +SET( MINIZIP_NAMES minizip MINIZIP ) +FIND_LIBRARY( MINIZIP_LIBRARY + NAMES ${MINIZIP_NAMES} + PATHS /usr/lib /usr/local/lib ) + +GET_FILENAME_COMPONENT( MINIZIP_LIBRARY_DIR ${MINIZIP_LIBRARY} PATH ) + +IF (MINIZIP_INCLUDE_DIR AND MINIZIP_LIBRARY) + SET(MINIZIP_FOUND TRUE) + SET(MINIZIP_LIBRARY_DIR ${MINIZIP_LIBRARY} ) + IF (NOT MINIZIP_FIND_QUIETLY) + MESSAGE (STATUS "Found Minizip: ${MINIZIP_LIBRARY} ${MINIZIP_INCLUDE_DIR}") + ENDIF (NOT MINIZIP_FIND_QUIETLY) +ELSE (MINIZIP_INCLUDE_DIR AND MINIZIP_LIBRARY) + SET( MINIZIP_FOUND FALSE ) + SET( MINIZIP_LIBRARY_DIR ) + SET( MINIZIP_EXTRA_DEFINITIONS ) +ENDIF (MINIZIP_INCLUDE_DIR AND MINIZIP_LIBRARY) + --- a/cmake/WlFunctions.cmake +++ b/cmake/WlFunctions.cmake @@ -84,6 +84,14 @@ if(ARG_USES_ZLIB) target_link_libraries(${NAME} ZLIB::ZLIB) + if (MINIZIP_FOUND) + wl_include_system_directories(${NAME} ${MINIZIP_INCLUDE_DIR}) + target_link_libraries(${NAME} ${MINIZIP_LIBRARY}) + target_compile_definitions(${NAME} PUBLIC -DHAVE_SYSTEM_MINIZIP) + else(MINIZIP_FOUND) + target_link_libraries(${NAME} third_party_minizip) + message(FATAL_ERROR "You are using widelands-bundled minizip sources. Please install your distribution's minizip dev library or urge your distribution maintainer to include the minizip library in your package repository. Thank you.") + endif(MINIZIP_FOUND) endif() # OpenGL and GLEW are one thing for us. If you use the one, you also use the --- a/src/third_party/CMakeLists.txt +++ b/src/third_party/CMakeLists.txt @@ -1,12 +1,14 @@ -wl_library(third_party_minizip - THIRD_PARTY - SRCS - minizip/ioapi.h - minizip/unzip.cc - minizip/unzip.h - minizip/zip.h - USES_ZLIB -) +if(NOT MINIZIP_FOUND) + wl_library(third_party_minizip + THIRD_PARTY + SRCS + ioapi.h + unzip.cc + unzip.h + zip.h + USES_ZLIB + ) +endif(NOT MINIZIP_FOUND) wl_library(third_party_eris THIRD_PARTY --- a/src/io/filesystem/CMakeLists.txt +++ b/src/io/filesystem/CMakeLists.txt @@ -12,6 +12,7 @@ zip_exceptions.h zip_filesystem.cc zip_filesystem.h + USES_ZLIB DEPENDS base_exceptions base_i18n @@ -19,5 +20,4 @@ base_macros graphic_text_layout io_stream - third_party_minizip ) --- a/src/io/filesystem/zip_filesystem.h +++ b/src/io/filesystem/zip_filesystem.h @@ -25,8 +25,14 @@ #include "io/filesystem/filesystem.h" #include "io/streamread.h" #include "io/streamwrite.h" + +#ifndef HAVE_SYSTEM_MINIZIP #include "third_party/minizip/unzip.h" #include "third_party/minizip/zip.h" +#else +#include +#include +#endif class ZipFilesystem : public FileSystem { public: