unofficial mirror of guix-patches@gnu.org 
 help / color / mirror / code / Atom feed
From: Nicolas Goaziou <mail@nicolasgoaziou.fr>
To: Tobias Geerinckx-Rice <me@tobias.gr>
Cc: Alberto EFG <albertoefg@posteo.mx>, 40035@debbugs.gnu.org
Subject: [bug#40035] Add widelands game
Date: Fri, 19 Jun 2020 22:46:06 +0200	[thread overview]
Message-ID: <87wo42zsvl.fsf@nicolasgoaziou.fr> (raw)
In-Reply-To: <87366q287d.fsf@nicolasgoaziou.fr> (Nicolas Goaziou's message of "Fri, 19 Jun 2020 20:59:02 +0200")

[-- Attachment #1: Type: text/plain, Size: 390 bytes --]

Correcting myself,

Nicolas Goaziou <mail@nicolasgoaziou.fr> writes:

> Tobias Geerinckx-Rice <me@tobias.gr> writes:

>> Why not the default RelWithDebInfo?  Please note in a comment.
>
> I don't know. It seems to build fine without it, so I removed it.

It builds, but doesn't run properly with RelWithDebInfo. Indeed, no game
data is installed when using this build type.

Time for a v4.

[-- Attachment #2: Add widelands --]
[-- Type: text/x-diff, Size: 12567 bytes --]

From 9427f07a83381613344053d6f496474ae6bbe09c 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 v4] 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                        | 109 +++++++++++++
 .../widelands-system-wide_minizip.patch       | 153 ++++++++++++++++++
 3 files changed, 263 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..9407966151 100644
--- a/gnu/packages/games.scm
+++ b/gnu/packages/games.scm
@@ -4018,6 +4018,115 @@ tactics.")
                    license:gpl2+
                    license:lgpl2.1+))))
 
+(define-public widelands
+  (package
+    (name "widelands")
+    (version "20")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "https://launchpad.net/widelands/"
+                           "build" version "/build" version "/+download/"
+                           "widelands-build" version ".tar.bz2"))
+       (sha256
+        (base32 "1cmwfwk7j6yi2pwmm4rm57s23sdzasqf53nx6567sdagqyc4sn9q"))
+       (modules '((guix build utils)))
+       (snippet
+        '(begin
+           (delete-file-recursively "src/third_party/minizip")
+           #t))
+       (patches
+        ;; Use system Minizip.  Following patch is included in "debian/"
+        ;; sub-directory.  This is discussed upstream 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 (string-append "-DCMAKE_INSTALL_PREFIX=" out "/bin")
+               (string-append "-DWL_INSTALL_BASEDIR=" share "/widelands")
+               (string-append "-DWL_INSTALL_DATADIR=" share "/widelands")
+               ;; CMakeLists.txt does not handle properly RelWithDebInfo build
+               ;; type.  When used, no game data is installed!
+               "-DCMAKE_BUILD_TYPE=Release"
+               "-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")))
+               ;; Move 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)
+       ("glew" ,glew)
+       ("icu4c" ,icu4c)
+       ("libpng" ,libpng)
+       ("minizip" ,minizip)
+       ("sdl" ,(sdl-union (list sdl2 sdl2-image sdl2-mixer sdl2-ttf)))
+       ("zlib" ,zlib)
+       ;; Fonts for the ‘unbundle-fonts’ phase.  Case matters in name!
+       ("DejaVu" ,font-dejavu)
+       ("MicroHei" ,font-wqy-microhei)))
+    (home-page "https://www.widelands.org/")
+    (synopsis "Fantasy real-time strategy game")
+    (description
+     "In Widelands, you are the regent of a small clan.  You start out with
+nothing but your headquarters, where all your resources are stored.
+
+In the course of the game, you will build an ever growing settlement.  Every
+member of your clan will do his or her part to produce more resources---wood,
+food, iron, gold and more---to further this growth.  The economic network is
+complex and different in the four tribes (Barbarians, Empire, Atlanteans, and
+Frisians).
+
+As you are not alone in the world, you will meet other clans sooner or later.
+Some of them may be friendly and you may eventually trade with them.  However,
+if you want to rule the world, you will have to train soldiers and fight.
+
+Widelands offers single-player mode with different campaigns; the campaigns
+all tell stories of tribes and their struggle in the Widelands universe!
+However, settling really starts when you unite with friends over the Internet
+or LAN to build up new empires together---or to crush each other in the dusts
+of war.  Widelands also offers an Artificial Intelligence to challenge you.")
+    ;; Game is released as GPL2+.  Some parts, e.g., art, are released under
+    ;; different licenses.
+    (license (list license:gpl2+
+                   license:expat           ;src/third_party/eris
+                   license:silofl1.1       ;Widelands.ttf
+                   license:cc-by-sa3.0)))) ;some music files
+
 (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


  reply	other threads:[~2020-06-19 20:47 UTC|newest]

Thread overview: 15+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-03-12  4:29 [bug#40035] Add widelands game Alberto EFG
2020-03-12 14:31 ` Nicolas Goaziou
2020-03-13  3:14   ` Alberto EFG
2020-03-13  8:16     ` Nicolas Goaziou
2020-06-18 21:22       ` Nicolas Goaziou
2020-06-18 22:58         ` Jonathan Brielmaier
2020-06-19  7:01           ` Nicolas Goaziou
2020-06-21  6:33           ` Efraim Flashner
2020-06-19 12:09         ` Tobias Geerinckx-Rice via Guix-patches via
2020-06-19 18:59           ` Nicolas Goaziou
2020-06-19 20:46             ` Nicolas Goaziou [this message]
2020-06-19 21:14             ` Tobias Geerinckx-Rice via Guix-patches via
2020-06-19 21:55               ` Nicolas Goaziou
2020-06-30 15:50                 ` bug#40035: " Nicolas Goaziou
2020-06-19 12:30 ` [bug#40035] " Tobias Geerinckx-Rice via Guix-patches via

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://guix.gnu.org/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=87wo42zsvl.fsf@nicolasgoaziou.fr \
    --to=mail@nicolasgoaziou.fr \
    --cc=40035@debbugs.gnu.org \
    --cc=albertoefg@posteo.mx \
    --cc=me@tobias.gr \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/guix.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).