gnu: wesnoth: Update to 1.14.0.

* gnu/packages/patches/wesnoth-fix-std-bad-cast.patch: New file.
* gnu/local.mk (dist_patch_DATA): Register it.
* gnu/packages/games.scm (wesnoth): Update to 1.14.0.
[source]: Add wesnoth-fix-std-bad-cast.patch to patches.
[arguments]: Remove "-DENABLE_STRICT_COMPILATION=OFF" configure flag.
[inputs]: Remove sdl-image, sdl-mixer, sdl-net and sdl-ttf. Add openssl and
sdl-union of sdl2, sdl2-image, sdl2-mixer and sdl2-ttf.
[home-page]: Use HTTPS URI.
(wesnoth-server)[inputs]: Remove sdl-net. Add icu4c, openssl and sdl2.
[arguments]: Remove delete-data phase. Since wesnoth 1.14.0, configure flag
"-DENABLE_GAME=OFF" disables installation of game assets.
master
Arun Isaac 2018-05-07 02:06:25 +05:30
parent 9b557beab9
commit e554d43dfc
No known key found for this signature in database
GPG Key ID: 2E25EE8B61802BB3
3 changed files with 80 additions and 27 deletions

View File

@ -1158,6 +1158,7 @@ dist_patch_DATA = \
%D%/packages/patches/wavpack-CVE-2018-7253.patch \
%D%/packages/patches/wavpack-CVE-2018-7254.patch \
%D%/packages/patches/weechat-python.patch \
%D%/packages/patches/wesnoth-fix-std-bad-cast.patch \
%D%/packages/patches/wicd-bitrate-none-fix.patch \
%D%/packages/patches/wicd-get-selected-profile-fix.patch \
%D%/packages/patches/wicd-urwid-1.3.patch \

View File

@ -1809,7 +1809,7 @@ falling, themeable graphics and sounds, and replays.")
(define-public wesnoth
(package
(name "wesnoth")
(version "1.12.6")
(version "1.14.0")
(source (origin
(method url-fetch)
(uri (string-append "mirror://sourceforge/wesnoth/wesnoth-"
@ -1818,17 +1818,11 @@ falling, themeable graphics and sounds, and replays.")
name "-" version ".tar.bz2"))
(sha256
(base32
"0kifp6g1dsr16m6ngjq2hx19h851fqg326ps3krnhpyix963h3x5"))))
"09niq53y17faizhmd98anx3dha7hvacvj9a0a64lg8wn915cm0bw"))
(patches (search-patches "wesnoth-fix-std-bad-cast.patch"))))
(build-system cmake-build-system)
(arguments
'(#:tests? #f ; no check target
#:configure-flags
;; XXX: Failed to compile with '-Werror=old-style-cast'.
;; boost/mpl/assert.hpp:313:58: error:
;; use of old-style cast [-Werror=old-style-cast]
;; [...]
;; cc1plus: all warnings being treated as errors
'("-DENABLE_STRICT_COMPILATION=OFF")))
`(#:tests? #f)) ; no check target
(native-inputs
`(("gettext" ,gettext-minimal)
("pkg-config" ,pkg-config)))
@ -1837,12 +1831,10 @@ falling, themeable graphics and sounds, and replays.")
("dbus" ,dbus)
("fribidi" ,fribidi)
("libvorbis" ,libvorbis)
("openssl" ,openssl)
("pango" ,pango)
("sdl-image" ,sdl-image)
("sdl-mixer" ,sdl-mixer)
("sdl-net" ,sdl-net)
("sdl-ttf" ,sdl-ttf)))
(home-page "http://www.wesnoth.org/")
("sdl-union" ,(sdl-union (list sdl2 sdl2-image sdl2-mixer sdl2-ttf)))))
(home-page "https://www.wesnoth.org/")
(synopsis "Turn-based strategy game")
(description
"The Battle for Wesnoth is a fantasy, turn based tactical strategy game,
@ -1861,19 +1853,12 @@ next campaign.")
(name "wesnoth-server")
(inputs
`(("boost" ,boost)
("sdl-net" ,sdl-net)))
("icu4c" ,icu4c)
("openssl" ,openssl)
("sdl2" ,sdl2)))
(arguments
(append
(substitute-keyword-arguments (package-arguments wesnoth)
((#:configure-flags configure-flags)
`(append ,configure-flags (list "-DENABLE_GAME=OFF"))))
`(#:phases
(modify-phases %standard-phases
;; Delete game assets not required by the server.
(add-after 'install 'delete-data
(lambda* (#:key outputs #:allow-other-keys)
(delete-file-recursively (string-append (assoc-ref outputs "out")
"/share/wesnoth"))))))))
`(#:configure-flags '("-DENABLE_GAME=OFF")
,@(package-arguments wesnoth)))
(synopsis "Dedicated @emph{Battle for Wesnoth} server")
(description "This package contains a dedicated server for @emph{The
Battle for Wesnoth}.")))

View File

@ -0,0 +1,67 @@
From 18e5ea50a7136cb3686c5a7c51c111ccce73dc54 Mon Sep 17 00:00:00 2001
From: Iris Morelle <shadowm@wesnoth.org>
Date: Sun, 6 May 2018 16:10:42 -0300
Subject: [PATCH] i18n: Blind fix attempt for std::bad_cast being thrown on
Windows
Several reports on Steam and our forums point at std::bad_cast being
thrown when accessing Preferences and the Multiplayer menu amongst
others. It's possible that the locale configuration on those systems is
not quite right, and compare() and icompare() are able to throw
std::bad_cast when this happens as they both use std::use_facet().
Note that much like the macOS/iOS version of icompare(), this stopgap
patch doesn't attempt to provide any form of case-insensitive fallback
and just uses a case-sensitive comparison instead.
---
src/gettext_boost.cpp | 29 +++++++++++++++++++++++++++--
1 file changed, 27 insertions(+), 2 deletions(-)
diff --git a/src/gettext_boost.cpp b/src/gettext_boost.cpp
index 3cc7690d5ef..fb04ffeea90 100644
--- a/src/gettext_boost.cpp
+++ b/src/gettext_boost.cpp
@@ -423,7 +423,19 @@ void set_language(const std::string& language, const std::vector<std::string>* /
int compare(const std::string& s1, const std::string& s2)
{
std::lock_guard<std::mutex> lock(get_mutex());
- return std::use_facet<std::collate<char>>(get_manager().get_locale()).compare(s1.c_str(), s1.c_str() + s1.size(), s2.c_str(), s2.c_str() + s2.size());
+
+ try {
+ return std::use_facet<std::collate<char>>(get_manager().get_locale()).compare(s1.c_str(), s1.c_str() + s1.size(), s2.c_str(), s2.c_str() + s2.size());
+ } catch(const std::bad_cast&) {
+ static bool bad_cast_once = false;
+
+ if(!bad_cast_once) {
+ ERR_G << "locale set-up for compare() is broken, falling back to std::string::compare()\n";
+ bad_cast_once = true;
+ }
+
+ return s1.compare(s2);
+ }
}
int icompare(const std::string& s1, const std::string& s2)
@@ -433,8 +445,21 @@ int icompare(const std::string& s1, const std::string& s2)
return compare(s1, s2);
#else
std::lock_guard<std::mutex> lock(get_mutex());
- return std::use_facet<bl::collator<char>>(get_manager().get_locale()).compare(
+
+ try {
+ return std::use_facet<bl::collator<char>>(get_manager().get_locale()).compare(
bl::collator_base::secondary, s1, s2);
+ } catch(const std::bad_cast&) {
+ static bool bad_cast_once = false;
+
+ if(!bad_cast_once) {
+ ERR_G << "locale set-up for icompare() is broken, falling back to std::string::compare()\n";
+ bad_cast_once = true;
+ }
+
+ // FIXME: not even lazily case-insensitive
+ return s1.compare(s2);
+ }
#endif
}