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
This commit is contained in:
Adriaan de Groot 2020-05-31 12:42:19 +00:00
parent 4ea034dc85
commit b01da5e68f
Notes: svn2git 2021-03-31 03:12:20 +00:00
svn path=/head/; revision=537158
2 changed files with 31 additions and 2 deletions

View file

@ -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|' \

View file

@ -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