diff options
-rw-r--r-- | gnu/local.mk | 1 | ||||
-rw-r--r-- | gnu/packages/games.scm | 39 | ||||
-rw-r--r-- | gnu/packages/patches/wesnoth-fix-std-bad-cast.patch | 67 |
3 files changed, 80 insertions, 27 deletions
diff --git a/gnu/local.mk b/gnu/local.mk index bd99883462..6d6663f8b8 100644 --- a/gnu/local.mk +++ b/gnu/local.mk @@ -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 \ diff --git a/gnu/packages/games.scm b/gnu/packages/games.scm index e4f87a6c46..b2d106e907 100644 --- a/gnu/packages/games.scm +++ b/gnu/packages/games.scm @@ -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}."))) diff --git a/gnu/packages/patches/wesnoth-fix-std-bad-cast.patch b/gnu/packages/patches/wesnoth-fix-std-bad-cast.patch new file mode 100644 index 0000000000..18328ed018 --- /dev/null +++ b/gnu/packages/patches/wesnoth-fix-std-bad-cast.patch @@ -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 + } + |