mirror of
https://git.in.rschanz.org/ryan77627/guix.git
synced 2024-12-25 05:48:07 -05:00
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>
This commit is contained in:
parent
db23a54875
commit
9299da1362
3 changed files with 262 additions and 0 deletions
|
@ -1604,6 +1604,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 \
|
||||
|
|
|
@ -4401,6 +4401,114 @@ (define-public warzone2100
|
|||
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. Patch is provided by Debian, and 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")
|
||||
"-DOPTION_BUILD_WEBSITE_TOOLS=OFF"
|
||||
;; CMakeLists.txt does not handle properly RelWithDebInfo build
|
||||
;; type. When used, no game data is installed!
|
||||
"-DCMAKE_BUILD_TYPE=Release"))
|
||||
#: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")
|
||||
|
|
153
gnu/packages/patches/widelands-system-wide_minizip.patch
Normal file
153
gnu/packages/patches/widelands-system-wide_minizip.patch
Normal file
|
@ -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:
|
Loading…
Reference in a new issue