[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[bug#40035] Add widelands game
From: |
Nicolas Goaziou |
Subject: |
[bug#40035] Add widelands game |
Date: |
Thu, 18 Jun 2020 23:22:59 +0200 |
User-agent: |
Gnus/5.13 (Gnus v5.13) Emacs/26.3 (gnu/linux) |
Hello,
I integrated the previous suggestions. I am not sure about the version
string. Upstream seems to use "build-20", and most distributions use
"20", some use "build20" or "b20". I used "build20" because it makes it
easier to build the download URL.
I'm sending the updated patch for review.
Regards,
--
Nicolas Goaziou
>From 186efb0ba86c431e57d535968450bdfd30c1fc43 Mon Sep 17 00:00:00 2001
From: Alberto Eleuterio Flores Guerrero <barbanegra+guix@posteo.mx>
Date: Wed, 17 Jun 2020 11:45:17 +0200
Subject: [PATCH] gnu: Add widelands.
* gnu/local.mk (widelands): New variable.
* gnu/packages/patches/widelands-system-wide_minizip.patch: New file.
(dist_patch_DATA): Register file above.
Co-authored-by: Nicolas Goaziou <mail@nicolasgoaziou.fr>
---
gnu/local.mk | 1 +
gnu/packages/games.scm | 98 +++++++++++
.../widelands-system-wide_minizip.patch | 153 ++++++++++++++++++
3 files changed, 252 insertions(+)
create mode 100644 gnu/packages/patches/widelands-system-wide_minizip.patch
diff --git a/gnu/local.mk b/gnu/local.mk
index fd3cc88af5..b9cd455fa0 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -1592,6 +1592,7 @@ dist_patch_DATA =
\
%D%/packages/patches/wicd-get-selected-profile-fix.patch \
%D%/packages/patches/wicd-urwid-1.3.patch \
%D%/packages/patches/wicd-wpa2-ttls.patch \
+ %D%/packages/patches/widelands-system-wide_minizip.patch \
%D%/packages/patches/wmctrl-64-fix.patch \
%D%/packages/patches/wmfire-update-for-new-gdk-versions.patch \
%D%/packages/patches/wordnet-CVE-2008-2149.patch \
diff --git a/gnu/packages/games.scm b/gnu/packages/games.scm
index 39669ba1c9..f121d7f5c3 100644
--- a/gnu/packages/games.scm
+++ b/gnu/packages/games.scm
@@ -4018,6 +4018,104 @@ tactics.")
license:gpl2+
license:lgpl2.1+))))
+(define-public widelands
+ (package
+ (name "widelands")
+ (version "build20")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (string-append "https://launchpad.net/widelands/"
+ version "/" version "/+download/"
+ "widelands-" version ".tar.bz2"))
+ (sha256
+ (base32 "1cmwfwk7j6yi2pwmm4rm57s23sdzasqf53nx6567sdagqyc4sn9q"))
+ (modules '((guix build utils)))
+ (snippet
+ '(begin
+ (delete-file-recursively "src/third_party/minizip")
+ #t))
+ (patches
+ ;; Use system Minizip. This is discussed updstream at
+ ;; <https://github.com/widelands/widelands/issues/399>.
+ (search-patches "widelands-system-wide_minizip.patch"))))
+ (build-system cmake-build-system)
+ (arguments
+ `(#:configure-flags
+ (let* ((out (assoc-ref %outputs "out"))
+ (share (string-append out "/share")))
+ (list "-DCMAKE_BUILD_TYPE=Release"
+ (string-append "-DCMAKE_INSTALL_PREFIX=" out "/bin")
+ (string-append "-DWL_INSTALL_BASEDIR=" share "/widelands")
+ (string-append "-DWL_INSTALL_DATADIR=" share "/widelands")
+ "-DOPTION_BUILD_WEBSITE_TOOLS=OFF"))
+ #:phases
+ (modify-phases %standard-phases
+ (add-after 'unpack 'install-desktop-file-and-icons
+ (lambda* (#:key inputs outputs #:allow-other-keys)
+ (let* ((share (string-append (assoc-ref outputs "out") "/share"))
+ (applications (string-append share "/applications"))
+ (icons (string-append share "/icons/hicolor")))
+ ;; Create desktop entry.
+ (mkdir-p applications)
+ (copy-file "debian/org.widelands.widelands.desktop"
+ (string-append applications "/widelands.desktop"))
+ ;; Install icons.
+ (for-each (lambda (size)
+ (let* ((dim (string-append size "x" size))
+ (apps (string-append icons "/" dim "/apps")))
+ (mkdir-p apps)
+ (copy-file (string-append "data/images/logos"
+ "/wl-ico-" size ".png")
+ (string-append apps
"/widelands.png"))))
+ '("16" "32" "48" "64" "128"))
+ #t)))
+ (add-after 'unpack 'unbundle-fonts
+ ;; Unbundle fonts already packaged in Guix. XXX: missing fonts are
+ ;; amiri, Culmus, mmrCensus, Nakula, and Sinhala.
+ (lambda* (#:key inputs #:allow-other-keys)
+ (with-directory-excursion "data/i18n/fonts"
+ (for-each (lambda (font)
+ (delete-file-recursively font)
+ (symlink (string-append (assoc-ref inputs font)
+ "/share/fonts/truetype")
+ font))
+ '("DejaVu" "MicroHei")))
+ #t)))))
+ (native-inputs
+ `(("gettext" ,gettext-minimal)
+ ("python" ,python-wrapper)))
+ (inputs
+ `(("boost" ,boost)
+ ("DejaVu" ,font-dejavu) ;case matters in name
+ ("glew" ,glew)
+ ("icu4c" ,icu4c)
+ ("libpng" ,libpng)
+ ("MicroHei" ,font-wqy-microhei) ;case matters in name
+ ("minizip" ,minizip)
+ ("sdl" ,(sdl-union (list sdl2 sdl2-image sdl2-mixer sdl2-ttf)))
+ ("zlib" ,zlib)))
+ (home-page "https://www.widelands.org/")
+ (synopsis "Fantasy real-time strategy game")
+ (description
+ "Widelands is a real-time strategy game with singleplayer campaigns and
+multiplayer mode, aiming for gameplay similar to Settlers II by BlueByte.
+
+In this game, you start out on a small piece of land with nothing more than
+a few of useful resources. Using those, you can build yourself an empire with
+many thousands of inhabitants. On your way towards this goal, you will have
+to build up an economic infrastructure, explore the lands around you and face
+enemies who are trying to rule the world just like you do.")
+ ;; Game is released as GPL2+. Some parts, e.g., art, are released under
+ ;; different licenses.
+ (license (list license:gpl2+
+ license:gpl3+
+ license:expat
+ license:zlib
+ license:silofl1.1
+ license:asl2.0
+ license:cc-by-sa3.0))))
+
(define-public starfighter
(package
(name "starfighter")
diff --git a/gnu/packages/patches/widelands-system-wide_minizip.patch
b/gnu/packages/patches/widelands-system-wide_minizip.patch
new file mode 100644
index 0000000000..1fac0d5396
--- /dev/null
+++ b/gnu/packages/patches/widelands-system-wide_minizip.patch
@@ -0,0 +1,153 @@
+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.
+
+I just added this line to make its use easier:
+ set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_HOME_DIRECTORY}/Modules)
+
+=== modified file 'CMakeLists.txt'
+---
+ CMakeLists.txt | 3 +++
+ Modules/FindMinizip.cmake | 37
+++++++++++++++++++++++++++++++++++++
+ cmake/WlFunctions.cmake | 7 +++++++
+ src/io/CMakeLists.txt | 2 +-
+ src/third_party/CMakeLists.txt | 20 +++++++++++---------
+ src/third_party/minizip/README.txt | 4 ++++
+ 6 files changed, 63 insertions(+), 10 deletions(-)
+
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -43,6 +43,7 @@
+ endif(POLICY CMP0074)
+
+ include("${CMAKE_SOURCE_DIR}/cmake/WlFunctions.cmake")
++set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_HOME_DIRECTORY}/Modules)
+
+ option(OPTION_USE_GLBINDING "Use glbinding instead of GLEW" OFF)
+ option(OPTION_GLEW_STATIC "Use static GLEW Library" OFF)
+@@ -105,6 +106,8 @@
+ find_package(SDL2_ttf REQUIRED)
+ find_package(ZLIB REQUIRED)
+ find_package(ICU REQUIRED)
++find_package(Minizip)
++
+ if(OPTION_USE_GLBINDING)
+ find_package(glbinding REQUIRED)
+ else()
+--- /dev/null
++++ b/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
+@@ -81,6 +81,14 @@
+ if(ARG_USES_ZLIB)
+ wl_include_system_directories(${NAME} ${ZLIB_INCLUDE_DIRS})
+ target_link_libraries(${NAME} ${ZLIB_LIBRARY})
++ 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
+@@ -28,8 +28,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:
--
2.26.2
- [bug#40035] Add widelands game,
Nicolas Goaziou <=