Sunday, April 28, 2019

Re: [ports-gcc-8] Unbreak x11/qt4

Ping :)

On Mon, 8 Apr 2019 16:48:15 +0200
Charlene Wendling <julianaito@posteo.jp> wrote:

> Hi ports,
>
>
> It's already well-known - x11/qt4 won't build with gcc-8's C++14
> default standard.
>
> The diff i'm proposing here mostly comes from Debian [1] [2], and
> simply consists to make gcc-8 pose as gcc-4.
>
> While here, i've moved HOMEPAGE to https and made portcheck(1) happy
> by removing trailing whitespaces.
>
> Testing:
>
> - macppc: It worked well [3] with gcc-8 and gcc-4.9. As i did it 3
> months ago, i've tested again the whole thing with gcc-8, and it
> has built x11/kde4/marble without issues.
>
> - amd64: It builds fine as well.
>
>
> Comments/feedback are welcome!
>
>
> Charlène.
>
>
> [1]
> https://sources.debian.org/patches/qt4-x11/4:4.8.7+dfsg-17/qt-everywhere-opensource-src-4.8.7-gcc6.patch/
> [2]
> https://sources.debian.org/patches/qt4-x11/4:4.8.7+dfsg-17/fix-build-icu59.patch/
> [3]
> https://bsd.network/@julianaito/101462113728207696
>
>


Index: Makefile
===================================================================
RCS file: /cvs/ports/x11/qt4/Makefile,v
retrieving revision 1.156
diff -u -p -r1.156 Makefile
--- Makefile 26 Nov 2018 16:41:20 -0000 1.156
+++ Makefile 7 Apr 2019 20:59:51 -0000
@@ -25,14 +25,14 @@ PKGNAME-main = qt4-${PKGVERSION}
PKGNAME-debug = qt4-debug-${PKGVERSION}
FULLPKGNAME-html = qt4-html-${PKGVERSION}
FULLPKGPATH-html = ${BASE_PKGPATH},-html
-REVISION-main = 18
-REVISION-mysql = 5
-REVISION-postgresql = 5
-REVISION-sqlite2 = 5
-REVISION-tds = 5
-REVISION-debug = 2
-REVISION-examples = 6
-REVISION-html = 2
+REVISION-main = 19
+REVISION-mysql = 6
+REVISION-postgresql = 6
+REVISION-sqlite2 = 6
+REVISION-tds = 6
+REVISION-debug = 3
+REVISION-examples = 7
+REVISION-html = 3

# XXX qmake include parser is bogus
DPB_PROPERTIES = parallel nojunk
@@ -67,7 +67,7 @@ DISTNAME = qt-everywhere-opensource-src-
CATEGORIES = x11
MASTER_SITES = https://download.qt.io/archive/qt/4.8/${VERSION}/

-HOMEPAGE = http://www.qt.io/
+HOMEPAGE = https://www.qt.io/

MAINTAINER = Marc Espie <espie@openbsd.org>

@@ -248,6 +248,8 @@ DESTDIRNAME = INSTALL_ROOT
CONFIGURE_ARGS += -platform openbsd-clang
.else
CONFIGURE_ARGS += -platform openbsd-g++4
+# Using gcc 4.9 default standard with gcc>=6.
+CXXFLAGS += -std=gnu++98
.endif

pre-patch:
Index: patches/patch-configure
===================================================================
RCS file: /cvs/ports/x11/qt4/patches/patch-configure,v
retrieving revision 1.27
diff -u -p -r1.27 patch-configure
--- patches/patch-configure 3 Jun 2015 07:28:01 -0000 1.27
+++ patches/patch-configure 7 Apr 2019 20:59:51 -0000
@@ -1,6 +1,7 @@
$OpenBSD: patch-configure,v 1.27 2015/06/03 07:28:01 dcoppa Exp $
---- configure.orig Thu May 7 16:14:56 2015
-+++ configure Sun May 31 13:28:28 2015
+Index: configure
+--- configure.orig
++++ configure
@@ -918,7 +918,7 @@ CFG_SILENT=no
CFG_GRAPHICS_SYSTEM=default
CFG_RUNTIME_SYSTEM=
@@ -37,3 +38,21 @@ $OpenBSD: patch-configure,v 1.27 2015/06
[ '!' -z "$QCONFIG_H" ] && mv -f "$QCONFIG_H" "$QMAKE_QCONFIG_H" #move qmake's qconfig.h to qconfig.h.qmake
[ '!' -z "$OLD_QCONFIG_H" ] && mv -f "${OLD_QCONFIG_H}.old" "$OLD_QCONFIG_H" #put back qconfig.h
[ "$QMAKE_BUILD_ERROR" = "yes" ] && exit 2
+@@ -7734,7 +7734,7 @@ case "$XPLATFORM" in
+ *-g++*)
+ # Check gcc's version
+ case "$(${QMAKE_CONF_COMPILER} -dumpversion)" in
+- 5*|4*|3.4*)
++ 8*|6*|5*|4*|3.4*)
+ ;;
+ 3.3*)
+ canBuildWebKit="no"
+@@ -8050,7 +8050,7 @@ g++*)
+ 3.*)
+ COMPILER_VERSION="3.*"
+ ;;
+- 5*|4.*)
++ 8*|6*|5*|4.*)
+ COMPILER_VERSION="4"
+ ;;
+ *)
Index: patches/patch-src_corelib_tools_tools_pri
===================================================================
RCS file: patches/patch-src_corelib_tools_tools_pri
diff -N patches/patch-src_corelib_tools_tools_pri
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ patches/patch-src_corelib_tools_tools_pri 7 Apr 2019 20:59:51 -0000
@@ -0,0 +1,23 @@
+$OpenBSD$
+ICU >= 59 requires C++11 for its header files.
+Qt can't be compiled with -std=c++11 as a whole, so only enable
+it for qlocale_icu.cpp.
+Index: src/corelib/tools/tools.pri
+--- src/corelib/tools/tools.pri.orig
++++ src/corelib/tools/tools.pri
+@@ -102,7 +102,14 @@ contains(QT_CONFIG, zlib):include($$PWD/../../3rdparty
+ else:include($$PWD/../../3rdparty/zlib_dependency.pri)
+
+ contains(QT_CONFIG,icu) {
+- SOURCES += tools/qlocale_icu.cpp
++ cpp11.name = cpp11
++ cpp11.input = SOURCES_CPP11
++ cpp11.dependency_type = TYPE_C
++ cpp11.variable_out = OBJECTS
++ cpp11.output = ${QMAKE_VAR_OBJECTS_DIR}${QMAKE_FILE_IN_BASE}$${first(QMAKE_EXT_OBJ)}
++ cpp11.commands = $${QMAKE_CXX} $(CXXFLAGS) -std=c++11 $(INCPATH) -c ${QMAKE_FILE_IN} -o ${QMAKE_FILE_OUT}
++ QMAKE_EXTRA_COMPILERS += cpp11
++ SOURCES_CPP11 += tools/qlocale_icu.cpp
+ DEFINES += QT_USE_ICU
+ }
+
Index: patches/patch-src_xmlpatterns_api_qcoloroutput_p_h
===================================================================
RCS file: patches/patch-src_xmlpatterns_api_qcoloroutput_p_h
diff -N patches/patch-src_xmlpatterns_api_qcoloroutput_p_h
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ patches/patch-src_xmlpatterns_api_qcoloroutput_p_h 7 Apr 2019 20:59:51 -0000
@@ -0,0 +1,16 @@
+$OpenBSD$
+Fix a shift overflow with ports-gcc>=6
+Index: src/xmlpatterns/api/qcoloroutput_p.h
+--- src/xmlpatterns/api/qcoloroutput_p.h.orig
++++ src/xmlpatterns/api/qcoloroutput_p.h
+@@ -70,8 +70,8 @@ namespace QPatternist
+ ForegroundShift = 10,
+ BackgroundShift = 20,
+ SpecialShift = 20,
+- ForegroundMask = ((1 << ForegroundShift) - 1) << ForegroundShift,
+- BackgroundMask = ((1 << BackgroundShift) - 1) << BackgroundShift
++ ForegroundMask = 0x1f << ForegroundShift,
++ BackgroundMask = 0x7 << BackgroundShift
+ };
+
+ public:
Index: pkg/DESCR-main
===================================================================
RCS file: /cvs/ports/x11/qt4/pkg/DESCR-main,v
retrieving revision 1.3
diff -u -p -r1.3 DESCR-main
--- pkg/DESCR-main 6 Nov 2011 12:44:04 -0000 1.3
+++ pkg/DESCR-main 7 Apr 2019 20:59:51 -0000
@@ -1,4 +1,4 @@
-Qt is a toolkit for building a GUI for X in C++.
+Qt is a toolkit for building a GUI for X in C++.
There are some user documentation files in ${QT_DOC}, but
the main documentation is in the qt4-html package.

@@ -15,13 +15,13 @@ should note that qt4's installation conf
TrollTech's recommendations.
Accordingly:
- libs are separated from includes.
-- moc is installed as ${PREFIX}/bin/moc4, in order not to conflict
+- moc is installed as ${PREFIX}/bin/moc4, in order not to conflict
with other qt versions.
- uic is installed as ${PREFIX}/bin/uic4

-Generally, it's just a question of invoking
+Generally, it's just a question of invoking

-env MOC=moc4 UIC=uic4 configure --with-qt-includes=${PREFIX}/include/X11/qt4
+env MOC=moc4 UIC=uic4 configure --with-qt-includes=${PREFIX}/include/X11/qt4
--with-qt-libraries=${PREFIX}/lib/qt4

Or to force MOC/UIC in your make/gmake invocation:
@@ -30,5 +30,5 @@ will override the Makefile contents.

Warning: the qt4 library also appears under ${PREFIX}/lib, but you
*must* make sure your application sees ${PREFIX}/lib/qt4 *first*, because
-${PREFIX}/lib may also contain a later incarnation of Qt, in which case
+${PREFIX}/lib may also contain a later incarnation of Qt, in which case
the linker will pick up the most recent library.

No comments:

Post a Comment