From 3b326c79a89e9fb337c48a00eeb7f6124bb59e42 Mon Sep 17 00:00:00 2001 From: tcberner Date: Sat, 18 Feb 2017 19:48:05 +0000 Subject: Update Qt5 to 5.7.1, and unify the Qt4 and Qt5 ports some more * Update Qt5 to 5.7.1 * Move Qt4 binaries to lib/qt4/bin * Move Qt5 libraries to lib/qt5/lib By moving the libraries we should finally be able to get rid of the inplace upgrade bug (see ports bugs 194088, 195105 and 198720): when Qt5's libraries were lying in /usr/local/lib, which would often get added by pkgconfig to the linker paths via dependencies, the already installed libraries were linked against, instead of the ones that were being built. This forced us to make sure, that -L${WRKSRC}/lib was always coming before -L/usr/local/lib in the linker flags. With this change this should no longer be the case. * Rename some ports to match the rest (foo-qtX -> qtX-foo) * Depend on new port misc/qtchooser [see UPDATING & CHANGES] There are several new Qt5 ports which all have been created by Marie Loise Nolden . Thanks again. PR: 216797 Exp-Run by: antoine Reviewed by: rakuco, mat, groot_kde.org Approved by: rakuco (mentor) Differential Revision: https://reviews.freebsd.org/D9213 --- Mk/bsd.qt.mk | 154 ++++++++++++++++++++++++++++++++++++++++------------------- 1 file changed, 104 insertions(+), 50 deletions(-) (limited to 'Mk') diff --git a/Mk/bsd.qt.mk b/Mk/bsd.qt.mk index 67e7769533fa..60e5b0ec6b5a 100644 --- a/Mk/bsd.qt.mk +++ b/Mk/bsd.qt.mk @@ -27,7 +27,7 @@ Qt_Pre_Include= bsd.qt.mk # Qt versions currently supported by the framework. _QT_SUPPORTED?= 4 5 QT4_VERSION?= 4.8.7 -QT5_VERSION?= 5.6.2 +QT5_VERSION?= 5.7.1 _QT_RELNAME= qt${_QT_VERSION:R:R} _QT_VERSION= # empty @@ -51,9 +51,6 @@ IGNORE?= can't be installed: bsd.qt.mk may only be included via USE_QT[${_QT_SU QT_NONSTANDARD= yes MASTER_SITES= ${MASTER_SITE_QT} -# Useless, as it must be defined before including bsd.port.pre.mk (at least -# because of bsd.options.mk). -#PKGNAMEPREFIX?= ${_QT_RELNAME}- DISTINFO_FILE?= ${.CURDIR:H:H}/devel/${_QT_RELNAME}/distinfo LICENSE?= LGPL21 @@ -91,9 +88,12 @@ LDFLAGS+= -Wl,--as-needed # Ensure that the "makesum" target (with its inner "fetch" one) uses # devel/qt*/distinfo for every port. . if ${DISTINFO_FILE:H} == ${.CURDIR:H:H}/devel/${_QT_RELNAME} -QT_DIST= 3d base canvas3d connectivity declarative graphicaleffects imageformats \ - location multimedia quickcontrols quickcontrols2 script sensors serialbus serialport svg tools \ - translations webchannel websockets x11extras xmlpatterns +QT_DIST= 3d base canvas3d charts connectivity datavis3d declarative \ + declarative-render2d gamepad graphicaleffects imageformats \ + location multimedia quickcontrols quickcontrols2 script scxml \ + sensors serialbus serialport svg tools translations \ + virtualkeyboard webchannel webkit websockets x11extras \ + xmlpatterns . endif . endif @@ -147,6 +147,7 @@ CONFIGURE_ARGS+=-nomake examples -nomake tests \ . if ${ARCH} == i386 && empty(MACHINE_CPU:Msse2) CONFIGURE_ARGS+=-no-sse2 . endif + . endif . if defined(WANT_QT_DEBUG) || defined(WITH_DEBUG) @@ -173,7 +174,7 @@ CONFIGURE_ARGS+=-verbose _EXTRA_PATCHES_QT4= ${.CURDIR:H:H}/devel/${_QT_RELNAME}/files/extrapatch-src-corelib-global-qglobal.h \ ${.CURDIR:H:H}/devel/${_QT_RELNAME}/files/extrapatch-libtool . else -_EXTRA_PATCHES_QT5= ${.CURDIR:H:H}/devel/${_QT_RELNAME}/files/extrapatch-src_corelib_global_qcompilerdetection.h \ +_EXTRA_PATCHES_QT5= ${.CURDIR:H:H}/devel/${_QT_RELNAME}/files/extrapatch-mkspecs_features_create__cmake.prf \ ${.CURDIR:H:H}/devel/${_QT_RELNAME}/files/extrapatch-mkspecs_features_qt__module.prf . endif EXTRA_PATCHES?= ${.CURDIR:H:H}/devel/${_QT_RELNAME}/files/extrapatch-configure \ @@ -205,22 +206,24 @@ QMAKE_ARGS+= QT_CONFIG+="${QT_CONFIG:N-*:O:u}" QMAKE_ARGS+= QT_CONFIG-="${QT_CONFIG:M-*:O:u:C/^-//}" . endif +# Add a RUN_DEPENDS on misc/qtchooser to select the binaries. +# The binaries of both supported Qt versions are installed to +# ${LOCALBASE}/lib/qt[45]/bin. The port misc/qtchooser installs +# wrapper binaries into ${LOCALBASE}/bin, and chooses the correct +# one depending on the value of QT_SELECT (which we pass to both +# CONFIGURE_ENV and MAKE_ENV). Therefore make all QT_DIST ports +# RUN_DEPEND on it. +RUN_DEPENDS+= qtchooser:misc/qtchooser + PLIST_SUB+= SHORTVER=${DISTVERSION:R} \ FULLVER=${DISTVERSION:C/-.*//} .endif # defined(QT_DIST) -.if ${_QT_VERSION:M4*} -QT_BINDIR_REL?= bin -QT_LIBDIR_REL?= lib/${_QT_RELNAME} -QT_PLUGINDIR_REL?= ${QT_LIBDIR_REL}/plugins -QT_IMPORTDIR_REL?= ${QT_LIBDIR_REL}/imports -.endif - # A wrapper (qtchooser) is used to invoke binaries. QT_BINDIR_REL?= ${QT_ARCHDIR_REL}/bin QT_INCDIR_REL?= include/${_QT_RELNAME} -QT_LIBDIR_REL?= lib -QT_ARCHDIR_REL?=${QT_LIBDIR_REL}/${_QT_RELNAME} +QT_LIBDIR_REL?= lib/${_QT_RELNAME} +QT_ARCHDIR_REL?=${QT_LIBDIR_REL} QT_PLUGINDIR_REL?= ${QT_ARCHDIR_REL}/plugins QT_LIBEXECDIR_REL?= libexec/${_QT_RELNAME} QT_IMPORTDIR_REL?= ${QT_ARCHDIR_REL}/imports @@ -231,26 +234,26 @@ QT_L10NDIR_REL?=${QT_DATADIR_REL}/translations QT_ETCDIR_REL?= etc/xdg QT_EXAMPLEDIR_REL?= share/examples/${_QT_RELNAME} QT_TESTDIR_REL?=${QT_DATADIR_REL}/tests +QT_CMAKEDIR_REL?= lib/cmake +QT_QTCHOOSERDIR_REL?= ${QT_ETCDIR_REL}/qtchooser # Not customizable. .if ${_QT_VERSION:M4*} QT_MKSPECDIR_REL= ${QT_DATADIR_REL}/mkspecs _QT_LIBVER= # empty -_QT_BINSUFX= -${_QT_RELNAME} .else QT_MKSPECDIR_REL= ${QT_ARCHDIR_REL}/mkspecs _QT_LIBVER= ${_QT_VERSION:R:R} -_QT_BINSUFX= # empty .endif -LRELEASE?= ${QT_BINDIR}/lrelease${_QT_BINSUFX} -LUPDATE?= ${QT_BINDIR}/lupdate${_QT_BINSUFX} -MOC?= ${QT_BINDIR}/moc${_QT_BINSUFX} +LRELEASE?= ${QT_BINDIR}/lrelease +LUPDATE?= ${QT_BINDIR}/lupdate +MOC?= ${QT_BINDIR}/moc RCC?= ${QT_BINDIR}/rcc -UIC?= ${QT_BINDIR}/uic${_QT_BINSUFX} -QMAKE?= ${QT_BINDIR}/qmake${_QT_BINSUFX} +UIC?= ${QT_BINDIR}/uic +QMAKE?= ${QT_BINDIR}/qmake # Needed to redefine the qmake target for internal Qt configuration. _QMAKE?= ${QMAKE} QMAKESPEC?= ${QT_MKSPECDIR}/freebsd-${QMAKE_COMPILER} @@ -264,19 +267,21 @@ QMAKE_COMPILER= $$(ccver="$$(${CXX} --version)"; case "$$ccver" in *clang*) echo # Import QMAKE_ENV and QMAKE_ARGS definitions. USES+= qmake:_env -.for dir in INC ARCH PLUGIN LIBEXEC IMPORT \ - QML DATA DOC L10N ETC EXAMPLE TEST MKSPEC +.for dir in BIN INC LIB ARCH PLUGIN LIBEXEC IMPORT \ + QML DATA DOC L10N ETC EXAMPLE TEST MKSPEC \ + CMAKE QTCHOOSER QT_${dir}DIR= ${PREFIX}/${QT_${dir}DIR_REL} +# Export all directories to the plist substituion for QT_DIST ports. +# For the others, exclude QT_CMAKEDIR and QT_ETCDIR. +. if (${dir:NCMAKE} && ${dir:NETC}) || defined(QT_DIST) PLIST_SUB+= QT_${dir}DIR="${QT_${dir}DIR_REL}" -.endfor - -.for dir in BIN LIB -QT_${dir}DIR= ${PREFIX}/${QT_${dir}DIR_REL} -. if defined(QT_DIST) -PLIST_SUB+= QT_${dir}DIR="${QT_${dir}DIR_REL}" . endif .endfor +# Pass the chosen Qt version to the environment for qtchooser. +CONFIGURE_ENV+= QT_SELECT=${_QT_RELNAME} +MAKE_ENV+= QT_SELECT=${_QT_RELNAME} + .endif # !defined(_POSTMKINCLUDED) && !defined(Qt_Pre_Include) .if defined(_POSTMKINCLUDED) && !defined(Qt_Post_Include) @@ -284,7 +289,7 @@ PLIST_SUB+= QT_${dir}DIR="${QT_${dir}DIR_REL}" Qt_Post_Include= bsd.qt.mk .if !defined(QT_NONSTANDARD) -CONFIGURE_ENV+= QTDIR="${PREFIX}" QMAKE="${QMAKE}" \ +CONFIGURE_ENV+= QTDIR="${QT_ARCHDIR}" QMAKE="${QMAKE}" \ MOC="${MOC}" RCC="${RCC}" UIC="${UIC}" \ QMAKESPEC="${QMAKESPEC}" CONFIGURE_ARGS+=--with-qt-includes=${QT_INCDIR} \ @@ -306,11 +311,13 @@ _USE_QT4_ONLY= accessible assistant-adp assistantclient clucene codecs-cn codecs phonon-gst porting qdoc3 qmlviewer qt3support qtconfig \ qtestlib qvfb rcc uic uic3 xmlpatterns-tool -_USE_QT5_ONLY= 3d buildtools canvas3d concurrent connectivity core \ - examples graphicaleffects location paths phonon4 \ - printsupport qdbus qdoc qdoc-data qev qml quick quickcontrols \ - quickcontrols2 sensors serialbus serialport sql-tds \ - uiplugin uitools webchannel websockets widgets x11extras +_USE_QT5_ONLY= 3d buildtools canvas3d charts concurrent connectivity \ + core datavis3d declarative-render2d examples gamepad \ + graphicaleffects location paths phonon4 printsupport \ + qdbus qdoc qdoc-data qev qml quick quickcontrols \ + quickcontrols2 scxml sensors serialbus serialport \ + sql-tds uiplugin uitools virtualkeyboard webchannel \ + websockets widgets x11extras 3d_PORT= graphics/${_QT_RELNAME}-3d 3d_LIB= libQt${_QT_LIBVER}3DCore.so @@ -319,10 +326,10 @@ accessible_PORT= accessibility/${_QT_RELNAME}-accessible accessible_PATH= ${QT_PLUGINDIR}/accessible/libqtaccessiblewidgets.so assistant_PORT= devel/${_QT_RELNAME}-assistant -assistant_PATH= ${QT_BINDIR}/assistant${_QT_BINSUFX} +assistant_PATH= ${QT_BINDIR}/assistant assistant-adp_PORT= devel/${_QT_RELNAME}-assistant-adp -assistant-adp_PATH= ${QT_BINDIR}/assistant_adp +assistant-adp_PATH= ${PREFIX}/bin/assistant_adp assistantclient_PORT= devel/${_QT_RELNAME}-libqtassistantclient assistantclient_LIB= libQt${_QT_LIBVER}AssistantClient.so @@ -333,7 +340,10 @@ buildtools_PATH= ${MOC} canvas3d_PORT= x11-toolkits/${_QT_RELNAME}-canvas3d canvas3d_PATH= ${QT_QMLDIR}/QtCanvas3D/qmldir -clucene_PORT= textproc/clucene-${_QT_RELNAME} +charts_PORT= x11-toolkits/${_QT_RELNAME}-charts +charts_LIB= libQt${_QT_LIBVER}Charts.so + +clucene_PORT= textproc/${_QT_RELNAME}-clucene clucene_LIB= libQt${_QT_LIBVER}CLucene.so codecs-cn_PORT= chinese/${_QT_RELNAME}-codecs-cn @@ -360,17 +370,23 @@ core_LIB= libQt${_QT_LIBVER}Core.so corelib_PORT= devel/${_QT_RELNAME}-corelib corelib_LIB= ${core_LIB} -dbus_PORT= devel/dbus-${_QT_RELNAME} +datavis3d_PORT= x11-toolkits/${_QT_RELNAME}-datavis3d +datavis3d_LIB= libQt${_QT_LIBVER}DataVisualization.so + +dbus_PORT= devel/${_QT_RELNAME}-dbus dbus_LIB= libQt${_QT_LIBVER}DBus.so declarative_PORT= x11-toolkits/${_QT_RELNAME}-declarative declarative_LIB= libQt${_QT_LIBVER}Declarative.so +declarative-render2d_PORT= x11-toolkits/${_QT_RELNAME}-declarative-render2d +declarative-render2d_PATH= ${QT_PLUGINDIR}/scenegraph/libsoftwarecontext.so + demo_PORT= misc/${_QT_RELNAME}-qtdemo demo_PATH= ${QT_BINDIR}/qtdemo designer_PORT= devel/${_QT_RELNAME}-designer -designer_PATH= ${QT_BINDIR}/designer${_QT_BINSUFX} +designer_PATH= ${QT_BINDIR}/designer doc_PORT= misc/${_QT_RELNAME}-doc doc_PATH= ${_QT_RELNAME}-doc>=${_QT_VERSION:R:R} @@ -378,6 +394,9 @@ doc_PATH= ${_QT_RELNAME}-doc>=${_QT_VERSION:R:R} examples_PORT= misc/${_QT_RELNAME}-examples examples_PATH= ${_QT_RELNAME}-examples>=${_QT_VERSION:R:R} +gamepad_PORT= x11-toolkits/${_QT_RELNAME}-gamepad +gamepad_LIB= libQt${_QT_LIBVER}Gamepad.so + graphicaleffects_PORT= graphics/${_QT_RELNAME}-graphicaleffects graphicaleffects_PATH= ${QT_QMLDIR}/QtGraphicalEffects/qmldir @@ -403,7 +422,7 @@ inputmethods_PORT= x11/${_QT_RELNAME}-inputmethods inputmethods_PATH= ${QT_PLUGINDIR}/inputmethods/libqimsw-multi.so linguist_PORT= devel/${_QT_RELNAME}-linguist -linguist_PATH= ${QT_BINDIR}/linguist${_QT_BINSUFX} +linguist_PATH= ${QT_BINDIR}/linguist linguisttools_PORT= devel/${_QT_RELNAME}-linguisttools linguisttools_PATH= ${LRELEASE} @@ -415,7 +434,7 @@ l10n_PORT= misc/${_QT_RELNAME}-l10n l10n_PATH= ${_QT_RELNAME}-l10n>=${_QT_VERSION:R:R} makeqpf_PORT= devel/${_QT_RELNAME}-makeqpf -makeqpf_PATH= ${QT_BINDIR}/makeqpf${_QT_BINSUFX} +makeqpf_PATH= ${QT_BINDIR}/makeqpf moc_PORT= devel/${_QT_RELNAME}-moc moc_PATH= ${MOC} @@ -468,7 +487,7 @@ qdoc3_PATH= ${QT_BINDIR}/qdoc3 qev_PORT= x11/${_QT_RELNAME}-qev qev_PATH= ${QT_BINDIR}/qev -qmake_PORT= devel/qmake${_QT_VERSION:R:R} +qmake_PORT= devel/${_QT_RELNAME}-qmake qmake_PATH= ${QMAKE} qml_PORT= lang/${_QT_RELNAME}-qml @@ -481,7 +500,7 @@ qt3support_PORT= devel/${_QT_RELNAME}-qt3support qt3support_LIB= libQt${_QT_LIBVER}3Support.so qtconfig_PORT= misc/${_QT_RELNAME}-qtconfig -qtconfig_PATH= ${QT_BINDIR}/qtconfig${_QT_BINSUFX} +qtconfig_PATH= ${QT_BINDIR}/qtconfig qtestlib_PORT= ${testlib_PORT} qtestlib_LIB= ${testlib_LIB} @@ -493,10 +512,10 @@ quickcontrols_PORT= x11-toolkits/${_QT_RELNAME}-quickcontrols quickcontrols_PATH= ${QT_QMLDIR}/QtQuick/Controls/qmldir quickcontrols2_PORT= x11-toolkits/${_QT_RELNAME}-quickcontrols2 -quickcontrols2_LIB= libQt${_QT_LIBVER}LabsTemplates.so +quickcontrols2_LIB= libQt${_QT_LIBVER}QuickControls2.so qvfb_PORT= devel/${_QT_RELNAME}-qvfb -qvfb_PATH= ${QT_BINDIR}/qvfb${_QT_BINSUFX} +qvfb_PATH= ${QT_BINDIR}/qvfb rcc_PORT= devel/${_QT_RELNAME}-rcc rcc_PATH= ${RCC} @@ -510,6 +529,9 @@ script_LIB= libQt${_QT_LIBVER}Script.so scripttools_PORT= devel/${_QT_RELNAME}-scripttools scripttools_LIB= libQt${_QT_LIBVER}ScriptTools.so +scxml_PORT= devel/${_QT_RELNAME}-scxml +scxml_LIB= libQt${_QT_LIBVER}Scxml.so + serialbus_PORT= comms/${_QT_RELNAME}-serialbus serialbus_LIB= libQt${_QT_LIBVER}SerialBus.so @@ -554,13 +576,16 @@ uiplugin_PATH= ${QT_INCDIR}/QtUiPlugin/QtUiPlugin uitools_PORT= devel/${_QT_RELNAME}-uitools uitools_PATH= ${QT_LIBDIR}/libQt${_QT_LIBVER}UiTools.a +virtualkeyboard_PORT= x11-toolkits/${_QT_RELNAME}-virtualkeyboard +virtualkeyboard_PATH= ${QT_PLUGINDIR}/platforminputcontexts/libqtvirtualkeyboardplugin.so + webchannel_PORT= www/${_QT_RELNAME}-webchannel webchannel_LIB= libQt${_QT_LIBVER}WebChannel.so websockets_PORT= www/${_QT_RELNAME}-websockets websockets_LIB= libQt${_QT_LIBVER}WebSockets.so -webkit_PORT= www/webkit-${_QT_RELNAME} +webkit_PORT= www/${_QT_RELNAME}-webkit webkit_LIB= libQt${_QT_LIBVER}WebKit.so widgets_PORT= x11-toolkits/${_QT_RELNAME}-widgets @@ -639,6 +664,10 @@ _QT_TOOLS+= qdbuscpp2xml qdbusxml2cpp _QT_TOOLS+= ${UIC} . endif +# The list of QtBase components that need to be linked into WRKSRC/lib for +# other QtBase ports. See below. +_QT5_BASE= core dbus gui network sql widgets + pre-configure: qtbase-pre-configure qtbase-pre-configure: . for tool in ${_QT_TOOLS} @@ -647,6 +676,28 @@ qtbase-pre-configure: ${TRUE} . endfor +# The following is a fix for the inplace upgrade problem we faced (see +# QTBUG-40825 and ports bugs 194088, 195105 and 198720) previously, +# which previously was adressed by making sure, that ${LOCALBASE}/lib, which +# would often gets added by pkgconf for the dependencies, was passed after +# ${WRKSRC}/lib. +# * We fix the inplace upgrade problem by moving the Qt5 libraries into +# ${LOCALBASE}/lib/qt5. Therefore a -L${LOCALBASE}/lib does no harm anymore. +# * However, this means, that the ports belonging to the split up QtBase package +# now no longer can find their depending QtBase libraries. We fix this by +# linking these into ${CONFIGURE_WRKSRC}/lib if the given QtBase port depends +# on them. +. if ${QT_DIST:Mbase} +. for basedep in ${_QT5_BASE} +. if ${USE_QT5:M${basedep}} + ${LN} -sf ${QT_LIBDIR}/${${basedep}_LIB} ${CONFIGURE_WRKSRC}/lib +. endif +. endfor +. endif + +# +# **** THIS PART IS OBSOLETE FOR THE NEXT QT UPGRADE **** +# # Add ${LOCALBASE}/lib to DEFAULT_LIBDIRS, which we use to filter out # certain paths from pkg-config calls (see the explanation in # devel/qt5/files/patch-configure) as well as for setting @@ -674,6 +725,9 @@ qt5-pre-configure: # value through to the configure script in qtbase). ${MKDIR} ${CONFIGURE_WRKSRC} ${ECHO_CMD} 'CMAKE_MODULE_TESTS = -' > ${CONFIGURE_WRKSRC}/.qmake.cache +# +# **** THIS PART IS OBSOLETE FOR THE NEXT QT UPGRADE **** +# # We piggyback on QMAKE_LIBDIR_FLAGS to make sure -L${WRKSRC}/lib is passed to # the linker before -L/usr/local/lib. By default, the opposite happens, which # is a problem when a Qt port is being upgraded, since an existing library -- cgit