guix/gnu/packages/patches/widelands-system-wide_minizip.patch

142 lines
4.2 KiB
Diff
Raw Normal View History

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 <minizip/unzip.h>
+#include <minizip/zip.h>
+#endif
class ZipFilesystem : public FileSystem {
public: