summarylogtreecommitdiffstats
diff options
context:
space:
mode:
authorCarsten Teibes2023-08-24 00:57:03 +0200
committerCarsten Teibes2023-08-24 00:57:03 +0200
commit9a06fd17131cfb7d1193650796e2851b832cd7fc (patch)
tree9415e480d618a027317a98b147a82dcacfc2bff3
parenta4528e48e026155133c3d5576c9323629f59ab7e (diff)
downloadaur-easyrpg-player.tar.gz
[fix] building with fmt 10
-rw-r--r--.SRCINFO4
-rw-r--r--PKGBUILD12
-rw-r--r--easyrpg-player-0.8-fmt-string_view-api.patch218
3 files changed, 230 insertions, 4 deletions
diff --git a/.SRCINFO b/.SRCINFO
index 5426dee7bf04..d60e98f8c4cb 100644
--- a/.SRCINFO
+++ b/.SRCINFO
@@ -1,7 +1,7 @@
pkgbase = easyrpg-player
pkgdesc = FLOSS RPG Maker 2000/2003 and EasyRPG games interpreter
pkgver = 0.8
- pkgrel = 1
+ pkgrel = 2
url = https://easyrpg.org
install = easyrpg-player.install
arch = i686
@@ -25,6 +25,8 @@ pkgbase = easyrpg-player
optdepends = rpg2000-rtp: run time package for some 2k games
optdepends = rpg2003-rtp: run time package for some 2k3 games
source = https://easyrpg.org/downloads/player/0.8/easyrpg-player-0.8.tar.xz
+ source = easyrpg-player-0.8-fmt-string_view-api.patch
sha256sums = 06e6d034348d1c52993d0be6b88fc3502a6c7718e366f691401539d5a2195c79
+ sha256sums = 723d82c9ae8e38d3e56684c4115debb6af140f1db648871b355fbb88e9b24759
pkgname = easyrpg-player
diff --git a/PKGBUILD b/PKGBUILD
index 37a9d5cb7efb..688a1a65c89f 100644
--- a/PKGBUILD
+++ b/PKGBUILD
@@ -2,7 +2,7 @@
pkgname=easyrpg-player
pkgver=0.8
-pkgrel=1
+pkgrel=2
pkgdesc="FLOSS RPG Maker 2000/2003 and EasyRPG games interpreter"
arch=('i686' 'x86_64')
url="https://easyrpg.org"
@@ -16,8 +16,14 @@ optdepends=('wine: for installing the run time packages (RTP)'
'rpg2000-rtp: run time package for some 2k games'
'rpg2003-rtp: run time package for some 2k3 games')
install=$pkgname.install
-source=("https://easyrpg.org/downloads/player/$pkgver/$pkgname-$pkgver.tar.xz")
-sha256sums=('06e6d034348d1c52993d0be6b88fc3502a6c7718e366f691401539d5a2195c79')
+source=("https://easyrpg.org/downloads/player/$pkgver/$pkgname-$pkgver.tar.xz"
+ "$pkgname-$pkgver-fmt-string_view-api.patch")
+sha256sums=('06e6d034348d1c52993d0be6b88fc3502a6c7718e366f691401539d5a2195c79'
+ '723d82c9ae8e38d3e56684c4115debb6af140f1db648871b355fbb88e9b24759')
+
+prepare() {
+ patch -d $pkgname-$pkgver -p1 < $pkgname-$pkgver-fmt-string_view-api.patch
+}
build() {
cd $pkgname-$pkgver
diff --git a/easyrpg-player-0.8-fmt-string_view-api.patch b/easyrpg-player-0.8-fmt-string_view-api.patch
new file mode 100644
index 000000000000..d28c94edd4f7
--- /dev/null
+++ b/easyrpg-player-0.8-fmt-string_view-api.patch
@@ -0,0 +1,218 @@
+From a4672d2e30db4e4918c8f3580236faed3c9d04c1 Mon Sep 17 00:00:00 2001
+From: Ghabry <gabriel+github@mastergk.de>
+Date: Sun, 14 May 2023 14:41:13 +0200
+Subject: [PATCH] Fix building with fmtlib 10
+
+to_string_view is a private API since fmt10.
+
+The new API only works properly since fmt8.
+
+Added casts to enum formating as they are not converted automatically anymore.
+
+Fix #3002
+---
+ CMakeLists.txt | 1 +
+ Makefile.am | 1 +
+ src/game_interpreter.cpp | 6 +++---
+ src/game_interpreter_map.cpp | 2 +-
+ src/output.h | 9 ---------
+ src/player.cpp | 2 +-
+ src/string_view.cpp | 34 ++++++++++++++++++++++++++++++++++
+ src/string_view.h | 27 ++++++++++++++++++++++++---
+ 8 files changed, 65 insertions(+), 17 deletions(-)
+ create mode 100644 src/string_view.cpp
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 8507e5d103..28d595a214 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -345,6 +345,7 @@ add_library(${PROJECT_NAME} OBJECT
+ src/state.cpp
+ src/state.h
+ src/std_clock.h
++ src/string_view.cpp
+ src/string_view.h
+ src/system.h
+ src/teleport_target.h
+diff --git a/Makefile.am b/Makefile.am
+index bed1b21941..4c4774892c 100644
+--- a/Makefile.am
++++ b/Makefile.am
+@@ -327,6 +327,7 @@ libeasyrpg_player_a_SOURCES = \
+ src/state.cpp \
+ src/state.h \
+ src/std_clock.h \
++ src/string_view.cpp \
+ src/string_view.h \
+ src/system.h \
+ src/teleport_target.h \
+diff --git a/src/game_interpreter.cpp b/src/game_interpreter.cpp
+index 7877d77ff4..7ae056ccfb 100644
+--- a/src/game_interpreter.cpp
++++ b/src/game_interpreter.cpp
+@@ -2187,7 +2187,7 @@ bool Game_Interpreter::CommandChangeVehicleGraphic(lcf::rpg::EventCommand const&
+ Game_Vehicle* vehicle = Game_Map::GetVehicle(vehicle_id);
+
+ if (!vehicle) {
+- Output::Warning("ChangeVehicleGraphic: Invalid vehicle ID {}", vehicle_id);
++ Output::Warning("ChangeVehicleGraphic: Invalid vehicle ID {}", static_cast<int>(vehicle_id));
+ return true;
+ }
+
+@@ -2261,7 +2261,7 @@ bool Game_Interpreter::CommandSetVehicleLocation(lcf::rpg::EventCommand const& c
+ // 0 because we adjust all vehicle IDs by +1 to match the lcf values
+ Output::Debug("SetVehicleLocation: Party referenced");
+ } else {
+- Output::Warning("SetVehicleLocation: Invalid vehicle ID {}", vehicle_id);
++ Output::Warning("SetVehicleLocation: Invalid vehicle ID {}", static_cast<int>(vehicle_id));
+ return true;
+ }
+ }
+@@ -3494,7 +3494,7 @@ bool Game_Interpreter::CommandConditionalBranch(lcf::rpg::EventCommand const& co
+ Game_Vehicle* vehicle = Game_Map::GetVehicle(vehicle_id);
+
+ if (!vehicle) {
+- Output::Warning("ConditionalBranch: Invalid vehicle ID {}", vehicle_id);
++ Output::Warning("ConditionalBranch: Invalid vehicle ID {}", static_cast<int>(vehicle_id));
+ return true;
+ }
+
+diff --git a/src/game_interpreter_map.cpp b/src/game_interpreter_map.cpp
+index 6c193c2f31..0b47a3db61 100644
+--- a/src/game_interpreter_map.cpp
++++ b/src/game_interpreter_map.cpp
+@@ -345,7 +345,7 @@ bool Game_Interpreter_Map::CommandEndShop(lcf::rpg::EventCommand const& /* com *
+
+ bool Game_Interpreter_Map::CommandShowInn(lcf::rpg::EventCommand const& com) { // code 10730
+ int inn_type = com.parameters[0];
+- auto inn_price = com.parameters[1];
++ int inn_price = com.parameters[1];
+ // Not used, but left here for documentation purposes
+ // bool has_inn_handlers = com.parameters[2] != 0;
+
+diff --git a/src/output.h b/src/output.h
+index 90e1118958..78ff3c0cad 100644
+--- a/src/output.h
++++ b/src/output.h
+@@ -22,17 +22,8 @@
+ #include <string>
+ #include <iosfwd>
+ #include <fmt/core.h>
+-#include <lcf/dbstring.h>
+-
+ #include "filesystem_stream.h"
+
+-namespace lcf {
+-// FIXME: liblcf doesn't depend on fmt, so we need to add this here to enable fmtlib support for lcf::DBString
+-inline fmt::basic_string_view<char> to_string_view(const lcf::DBString& s) {
+- return to_string_view(StringView(s));
+-}
+-}
+-
+ enum class LogLevel {
+ Error,
+ Warning,
+diff --git a/src/player.cpp b/src/player.cpp
+index 0ed6bbb657..654d31e0dc 100644
+--- a/src/player.cpp
++++ b/src/player.cpp
+@@ -1240,7 +1240,7 @@ void Player::SetupBattleTest() {
+ }
+
+ Output::Debug("BattleTest Mode 2k3 troop=({}) background=({}) formation=({}) condition=({}) terrain=({})",
+- args.troop_id, args.background.c_str(), args.formation, args.condition, args.terrain_id);
++ args.troop_id, args.background, static_cast<int>(args.formation), static_cast<int>(args.condition), args.terrain_id);
+ } else {
+ Output::Debug("BattleTest Mode 2k troop=({}) background=({})", args.troop_id, args.background);
+ }
+diff --git a/src/string_view.cpp b/src/string_view.cpp
+new file mode 100644
+index 0000000000..13a526504d
+--- /dev/null
++++ b/src/string_view.cpp
+@@ -0,0 +1,34 @@
++/*
++ * This file is part of EasyRPG Player.
++ *
++ * EasyRPG Player is free software: you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License as published by
++ * the Free Software Foundation, either version 3 of the License, or
++ * (at your option) any later version.
++ *
++ * EasyRPG Player is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with EasyRPG Player. If not, see <http://www.gnu.org/licenses/>.
++ */
++
++#include "string_view.h"
++
++#if FMT_VERSION >= EP_FMT_MODERN_VERSION
++
++#include <fmt/format.h>
++
++auto fmt::formatter<lcf::DBString>::format(const lcf::DBString& s, format_context& ctx) const -> decltype(ctx.out()) {
++ string_view sv(s.data(), s.size());
++ return formatter<string_view>::format(sv, ctx);
++}
++
++auto fmt::formatter<lcf::StringView>::format(const lcf::StringView& s, format_context& ctx) const -> decltype(ctx.out()) {
++ string_view sv(s.data(), s.size());
++ return formatter<string_view>::format(sv, ctx);
++}
++
++#endif
+diff --git a/src/string_view.h b/src/string_view.h
+index 11e3550d5f..030bb09a10 100644
+--- a/src/string_view.h
++++ b/src/string_view.h
+@@ -22,9 +22,9 @@
+ #include <lcf/dbstring.h>
+ #include <fmt/core.h>
+
+-// FIXME: needed to allow building with fmt 5, older versions are untested.
++// Needed to allow building with fmt 5, older versions are untested.
+ #if FMT_VERSION < 60000
+-#include <fmt/ostream.h>
++# include <fmt/ostream.h>
+ #endif
+
+ using StringView = lcf::StringView;
+@@ -33,12 +33,33 @@ using U32StringView = lcf::U32StringView;
+ using lcf::ToString;
+ using lcf::ToStringView;
+
++// Version required to use the new formatting API
++#define EP_FMT_MODERN_VERSION 80000
++
+ // FIXME: liblcf doesn't depend on fmt, so we need to add this here to enable fmtlib support for our StringView.
++#if FMT_VERSION >= EP_FMT_MODERN_VERSION
++template<>
++struct fmt::formatter<lcf::StringView> : fmt::formatter<fmt::string_view> {
++ auto format(const lcf::StringView& s, format_context& ctx) const -> decltype(ctx.out());
++};
++
++template<>
++struct fmt::formatter<lcf::DBString> : formatter<string_view> {
++ auto format(const lcf::DBString& s, format_context& ctx) const -> decltype(ctx.out());
++};
++#else
+ namespace nonstd { namespace sv_lite {
+ template <typename C, typename T>
+ inline fmt::basic_string_view<C> to_string_view(basic_string_view<C,T> s) {
+- return fmt::basic_string_view<C>(s.data(), s.size());
++ return fmt::basic_string_view<C>(s.data(), s.size());
+ }
+ } }
+
++namespace lcf {
++inline fmt::basic_string_view<char> to_string_view(const lcf::DBString& s) {
++ return to_string_view(StringView(s));
++}
++}
++#endif
++
+ #endif