From b01da5e68f95f5133fcdc04abb0b62432acc69f2 Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Sun, 31 May 2020 12:42:19 +0000 Subject: [PATCH] emulators/qmc2: Prep-work for Qt 5.15; compatible with Qt 5.14 In Qt 5.15 an enumeration is introduced which has enumerators True and False, used like QCborSimpleType::False. In C++ that's 3 tokens, one name. The C Preprocessor deals with tokens, though, and since some headers #define False 0, we end up with tokens QCborSimpleType::0 instead, which is nonsense. The actual defines are only relevant in C code internals, not the API for lzma that is used from C++. So somewhat-hackishly just switch off the #defines when in C++ mode. The change is complicated by this *particular* source file being in DOS CRLF mode. Reported by: tcberner --- emulators/qmc2/Makefile | 10 ++++++-- .../qmc2/files/patch-qmc2_lzma_7zTypes.h | 23 +++++++++++++++++++ 2 files changed, 31 insertions(+), 2 deletions(-) create mode 100644 emulators/qmc2/files/patch-qmc2_lzma_7zTypes.h diff --git a/emulators/qmc2/Makefile b/emulators/qmc2/Makefile index 58015706e4a5..b2dc5311bd4a 100644 --- a/emulators/qmc2/Makefile +++ b/emulators/qmc2/Makefile @@ -3,7 +3,7 @@ PORTNAME= qmc2 PORTVERSION= 0.195 -PORTREVISION= 2 +PORTREVISION= 3 CATEGORIES= emulators MASTER_SITES= SF @@ -17,7 +17,7 @@ OPTIONS_DEFINE= DOCS NO_WRKSUBDIR= yes -USES= compiler:c++11-lang gl gmake qt:5 sdl tar:bzip2 xorg +USES= compiler:c++11-lang dos2unix gl gmake qt:5 sdl tar:bzip2 xorg USE_XORG= x11 xmu USE_GL= gl glu USE_QT= buildtools_build core declarative gui multimedia \ @@ -40,6 +40,12 @@ DESKTOP_ENTRIES="QMC2" "MAME frontend" "${DATADIR}/img/mame.png" \ "CHDMAN GUI" "Qt CHDMAN GUI" "${DATADIR}/img/qchdman.png" \ "qchdman" "Game;Emulator;Qt;" "true" \ +# This seems to be third-party, and has DOS line-endings. It also +# needs to be patched because of a confusing build error: #define True 1 +# is a bad idea in C++ code that *also* uses True as an identifier +# in some scopes. +DOS2UNIX_FILES= qmc2/lzma/7zTypes.h + post-patch: @${CP} ${FILESDIR}/Makefile ${WRKSRC} @(cd ${WRKSRC}/qmc2/inst; ${SED} -e 's|DATADIR|${PREFIX}/share|' \ diff --git a/emulators/qmc2/files/patch-qmc2_lzma_7zTypes.h b/emulators/qmc2/files/patch-qmc2_lzma_7zTypes.h new file mode 100644 index 000000000000..03ea8278da17 --- /dev/null +++ b/emulators/qmc2/files/patch-qmc2_lzma_7zTypes.h @@ -0,0 +1,23 @@ +This avoids errors list the following, where True is a C++ +identifier used in scoped context; the #define eats it. + +/usr/local/include/qt5/QtCore/qcborstreamreader.h:143:76: error: expected unqualified-id + bool isFalse() const { return isSimpleType(QCborSimpleType::False); } + ^ +lzma/7zTypes.h:98:15: note: expanded from macro 'False' +#define False 0 + +--- qmc2/lzma/7zTypes.h.orig 2020-05-30 14:14:41 UTC ++++ qmc2/lzma/7zTypes.h +@@ -94,8 +94,11 @@ typedef size_t SizeT; + #endif + + typedef int Bool_7z; ++#ifndef __cplusplus ++/* Only for library internals */ + #define True 1 + #define False 0 ++#endif + + + #ifdef _WIN32