From 810cbfa3961719466326528a442a8d114e1f6fd6 Mon Sep 17 00:00:00 2001 From: David Seifert Date: Sat, 8 Oct 2022 16:58:38 +0200 Subject: games-util/grfcodec: update EAPI 7 -> 8 Bug: https://bugs.gentoo.org/715910 Bug: https://bugs.gentoo.org/859310 Signed-off-by: David Seifert --- .../0001-Remove-brittle-apWrapper-code.patch | 144 +++++++++++++++++++++ .../6.0.6_p20210310/0002-Fix-ODR-violations.patch | 63 +++++++++ .../grfcodec/grfcodec-6.0.6_p20210310-r1.ebuild | 40 ++++++ 3 files changed, 247 insertions(+) create mode 100644 games-util/grfcodec/files/6.0.6_p20210310/0001-Remove-brittle-apWrapper-code.patch create mode 100644 games-util/grfcodec/files/6.0.6_p20210310/0002-Fix-ODR-violations.patch create mode 100644 games-util/grfcodec/grfcodec-6.0.6_p20210310-r1.ebuild (limited to 'games-util') 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 +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(alenelen) + 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 + #include "message_mgr.h" + + bool CheckLength(int,int,RenumMessageId,...); +@@ -70,26 +69,4 @@ typedef auto_array 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 + #include + #include ++#include + + 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 +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 +} -- cgit v1.2.3-65-gdbad