summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Seifert <soap@gentoo.org>2022-10-08 16:58:38 +0200
committerDavid Seifert <soap@gentoo.org>2022-10-08 16:58:38 +0200
commit810cbfa3961719466326528a442a8d114e1f6fd6 (patch)
tree341c8be32e4dee08d5a72f035c1770ce61f8a179 /games-util
parentx11-libs/libva-intel-driver: Drop libva[drm] USE dep (diff)
downloadgentoo-810cbfa3961719466326528a442a8d114e1f6fd6.tar.gz
gentoo-810cbfa3961719466326528a442a8d114e1f6fd6.tar.bz2
gentoo-810cbfa3961719466326528a442a8d114e1f6fd6.zip
games-util/grfcodec: update EAPI 7 -> 8
Bug: https://bugs.gentoo.org/715910 Bug: https://bugs.gentoo.org/859310 Signed-off-by: David Seifert <soap@gentoo.org>
Diffstat (limited to 'games-util')
-rw-r--r--games-util/grfcodec/files/6.0.6_p20210310/0001-Remove-brittle-apWrapper-code.patch144
-rw-r--r--games-util/grfcodec/files/6.0.6_p20210310/0002-Fix-ODR-violations.patch63
-rw-r--r--games-util/grfcodec/grfcodec-6.0.6_p20210310-r1.ebuild40
3 files changed, 247 insertions, 0 deletions
diff --git a/games-util/grfcodec/files/6.0.6_p20210310/0001-Remove-brittle-apWrapper-code.patch b/games-util/grfcodec/files/6.0.6_p20210310/0001-Remove-brittle-apWrapper-code.patch
new file mode 100644
index 000000000000..e702f00160ce
--- /dev/null
+++ b/games-util/grfcodec/files/6.0.6_p20210310/0001-Remove-brittle-apWrapper-code.patch
@@ -0,0 +1,144 @@
+From 9e928c98c8ad0767607bc421b14ac289cdc6e536 Mon Sep 17 00:00:00 2001
+From: David Seifert <soap@gentoo.org>
+Date: Sat, 8 Oct 2022 16:29:43 +0200
+Subject: [PATCH 1/2] Remove brittle `apWrapper` code
+
+* This causes issues on musl, and generally doesn't make the
+ code any simpler, while also creating lots of opportunities
+ for undefined behavior.
+
+Bug: https://bugs.gentoo.org/715910
+---
+ src/messages.cpp | 14 ++++++++++----
+ src/sanity.cpp | 4 +++-
+ src/sanity_defines.h | 23 -----------------------
+ src/strings.cpp | 9 +++++----
+ 4 files changed, 18 insertions(+), 32 deletions(-)
+
+diff --git a/src/messages.cpp b/src/messages.cpp
+index 385f217..3794f66 100644
+--- a/src/messages.cpp
++++ b/src/messages.cpp
+@@ -60,8 +60,11 @@ void ManualConsoleMessages(){
+ }
+
+ string mysprintf(const char*str,...){
+- WrapAp(str);
+- return myvsprintf(str,ap);
++ va_list ap;
++ va_start(ap, str);
++ string result = myvsprintf(str,ap);
++ va_end(ap);
++ return result;
+ }
+
+ #if defined DEBUG || defined _DEBUG
+@@ -69,8 +72,11 @@ static RenumMessageId curMessage;
+ #endif
+
+ string IssueMessage(int minSan,RenumMessageId id,...){
+- WrapAp(id);
+- return vIssueMessage(minSan,id,ap);
++ va_list ap;
++ va_start(ap, id);
++ string result = vIssueMessage(minSan,id,ap);
++ va_end(ap);
++ return result;
+ }
+
+ string vIssueMessage(int minSan,RenumMessageId id,va_list& arg_ptr){
+diff --git a/src/sanity.cpp b/src/sanity.cpp
+index 844d840..0793a63 100644
+--- a/src/sanity.cpp
++++ b/src/sanity.cpp
+@@ -151,13 +151,15 @@ void Before8(int action){
+ }
+
+ bool CheckLength(int alen,int elen,RenumMessageId message,...){
+- WrapAp(message);
++ va_list ap;
++ va_start(ap, message);
+ if(alen<elen){
+ vIssueMessage(FATAL,message,ap);
+ return true;
+ }
+ if(alen>elen)
+ vIssueMessage(WARNING2,message,ap);
++ va_end(ap);
+ return false;
+ }
+
+diff --git a/src/sanity_defines.h b/src/sanity_defines.h
+index d094f21..47f9c5f 100644
+--- a/src/sanity_defines.h
++++ b/src/sanity_defines.h
+@@ -22,7 +22,6 @@
+ #ifndef _RENUM_SANITY_DEFS_H_INCLUDED_
+ #define _RENUM_SANITY_DEFS_H_INCLUDED_
+
+-#include <cstdarg>
+ #include "message_mgr.h"
+
+ bool CheckLength(int,int,RenumMessageId,...);
+@@ -70,26 +69,4 @@ typedef auto_array<uint> Guintp;
+ type&operator[](uint x){return _p[x];}\
+ type operator[](uint x)const{return _p[x];}\
+
+-class apWrapper{
+-private:
+- va_list _ap;
+-public:
+- ~apWrapper(){va_end(_ap);}
+- operator va_list&(){return _ap;}
+- operator const va_list&()const{return _ap;}
+-#ifdef __va_copy
+- va_list&operator=(va_list&ap){
+- __va_copy(_ap,ap);
+- return _ap;
+- }
+-#else
+- va_list const&operator=(va_list const&ap){
+- return _ap=ap;
+- }
+-#endif
+-};
+-#define WrapAp(v)\
+- apWrapper ap;\
+- va_start((va_list&)ap,v);
+-
+ #endif//_RENUM_SANITY_DEFS_H_INCLUDED_
+diff --git a/src/strings.cpp b/src/strings.cpp
+index 2512734..e184825 100644
+--- a/src/strings.cpp
++++ b/src/strings.cpp
+@@ -23,6 +23,7 @@
+ #include<string>
+ #include<cerrno>
+ #include<cstdlib>
++#include<cstdarg>
+
+ using namespace std;
+
+@@ -396,15 +397,15 @@ static const uchar stackSize[]={0,1,2,2,4,2,8};
+
+ string MakeStack(int items,...){
+ string ret;
+- WrapAp(items);
++ va_list ap;
++ va_start(ap, items);
+ uint item;
+ for(int i=0;i<items;i++){
+- item=va_arg(ap.operator va_list&(),uint);
+- // ^^^^^^^^^^^^^^^^^^^
+- // gcc complains without that call.
++ item=va_arg(ap, uint);
+ VERIFY(item&&item<STACK_INVALID,item);
+ ret+=string(stackSize[item],char(item|i<<4));
+ }
++ va_end(ap);
+ return ret;
+ }
+
+--
+2.38.0
+
diff --git a/games-util/grfcodec/files/6.0.6_p20210310/0002-Fix-ODR-violations.patch b/games-util/grfcodec/files/6.0.6_p20210310/0002-Fix-ODR-violations.patch
new file mode 100644
index 000000000000..d76a904efd9a
--- /dev/null
+++ b/games-util/grfcodec/files/6.0.6_p20210310/0002-Fix-ODR-violations.patch
@@ -0,0 +1,63 @@
+From f2e16cca87e8a324ce7ccc9cc2d82235b1e490c1 Mon Sep 17 00:00:00 2001
+From: David Seifert <soap@gentoo.org>
+Date: Sat, 8 Oct 2022 16:29:44 +0200
+Subject: [PATCH 2/2] Fix ODR violations
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+* When compiling with `-flto`, ODR violations pop up:
+
+ src/escapes.h:98:1: error: type ‘struct esc’ violates the C++ One Definition Rule [-Werror=odr]
+ 98 | START_ESCAPES()
+ | ^
+ src/escapes.h:98:1: note: a different type is defined in another translation unit
+ 98 | START_ESCAPES()
+ | ^
+ src/escapes.h:98:1: note: the first difference of corresponding definitions is field ‘additional’
+ 98 | START_ESCAPES()
+ | ^
+ src/escapes.h:98:1: note: a type with different number of fields is defined in another translation unit
+ 98 | START_ESCAPES()
+ | ^
+
+ by wrapping the `struct esc` definitions in unnamed namespaces, we can avoid running afoul of ODR.
+
+Bug: https://bugs.gentoo.org/859310
+---
+ src/escapes.h | 5 ++++-
+ 1 file changed, 4 insertions(+), 1 deletion(-)
+
+diff --git a/src/escapes.h b/src/escapes.h
+index 91da82f..d3d2bea 100644
+--- a/src/escapes.h
++++ b/src/escapes.h
+@@ -8,6 +8,7 @@
+ #ifndef GRFCODEC
+
+ #define START_ESCAPES()\
++ namespace {\
+ const struct esc{\
+ char byte;\
+ char*str;\
+@@ -30,6 +31,7 @@
+ #else /* GRFCODEC */
+
+ #define START_ESCAPES()\
++ namespace {\
+ const struct esc{\
+ char byte;\
+ char*str;\
+@@ -59,7 +61,8 @@
+ #endif /* GRFCODEC */
+
+ #define END_ESCAPES() };\
+- static const unsigned int num_esc=sizeof(escapes)/sizeof(escapes[0]);
++ static const unsigned int num_esc=sizeof(escapes)/sizeof(escapes[0]);\
++ }
+
+ #ifdef GRFCODEC
+
+--
+2.38.0
+
diff --git a/games-util/grfcodec/grfcodec-6.0.6_p20210310-r1.ebuild b/games-util/grfcodec/grfcodec-6.0.6_p20210310-r1.ebuild
new file mode 100644
index 000000000000..90d01d7a6794
--- /dev/null
+++ b/games-util/grfcodec/grfcodec-6.0.6_p20210310-r1.ebuild
@@ -0,0 +1,40 @@
+# Copyright 1999-2022 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit cmake vcs-snapshot
+
+COMMIT=045774dee7cab1a618a3e0d9b39bff78a12b6efa
+
+DESCRIPTION="A suite of programs to modify openttd/Transport Tycoon Deluxe's GRF files"
+HOMEPAGE="https://github.com/OpenTTD/grfcodec"
+SRC_URI="https://github.com/OpenTTD/grfcodec/archive/${COMMIT}.tar.gz -> ${P}.tar.gz"
+
+LICENSE="GPL-2+"
+SLOT="0"
+KEYWORDS="~amd64 ~arm ~arm64 ~ppc ~ppc64 ~x86"
+
+RDEPEND="media-libs/libpng:="
+DEPEND="${RDEPEND}
+ dev-libs/boost"
+
+PATCHES=( "${FILESDIR}"/${PV} )
+
+src_configure() {
+ local mycmakeargs=(
+ # Make sure we don't use git by accident.
+ # Build system does not care much if it's
+ # executed successfully and populates
+ # YEARS / VERSION with empty values.
+ -DGIT_EXECUTABLE=/bin/do-not-use-git-executable
+ )
+
+ cmake_src_configure
+}
+
+src_install() {
+ dobin "${BUILD_DIR}"/{grfcodec,grfid,grfstrip,nforenum}
+ doman docs/*.1
+ dodoc changelog.txt docs/*.txt
+}