20 дек. 2014 г. 1:37 пользователь "Vadim Zhukov" <[email protected]>
написал:
>
> 1. When Qt4 came in, there were almost no qmake4 users.
> Now there are many:
>
> cad/fritzing/Makefile: ${LOCALBASE}/bin/qmake4 -o Makefile
phoenix.pro
> cad/openscad/Makefile: ${SETENV} ${QMAKE_ENV} qmake4 ${QMAKE_FLAGS}
openscad.pro
> devel/beediff/Makefile: cd ${WRKSRC} && ${LOCALBASE}/bin/qmake4
beediff.pro
> devel/qt-creator/Makefile: cd ${WRKBUILD} && QTDIR=${WRKDIR}/bin
qmake4 ${WRKSRC}/qtcreator.pro #CONFIG+=debug
> devel/qt-creator/Makefile: qmake4 ${QTCDH_SRC_DIR}/gdbmacros.pro; \
> devel/qt4-eventsview/Makefile: cd ${WRKDIST} && env -i ${CONFIGURE_ENV}
qmake4
> devel/qt4-qtsolutions-singleinstance/Makefile: cd ${WRKSRC} &&
${LOCALBASE}/bin/qmake4
> editors/focuswriter/Makefile: cd ${WRKSRC} && ${SETENV} ${MAKE_ENV}
${CONFIGURE_ENV} ${LOCALBASE}/bin/qmake4
> editors/qscintilla/Makefile: cd ${WRKSRC} && ${SETENV}
${CONFIGURE_ENV} ${LOCALBASE}/bin/qmake4 \
> editors/teaqt/Makefile: cd ${WRKSRC} && qmake4
> editors/texmaker/Makefile: qmake4 -spec
${MODQT_LIBDIR}/mkspecs/openbsd-g++ \
> editors/tiled/Makefile: qmake4 -makefile tiled.pro -config release
> games/jag/Makefile: cd ${WRKSRC} && ${LOCALBASE}/bin/qmake4 Game.pro
> games/pokerth/Makefile: env -i ${CONFIGURE_ENV} qmake4
${MAKE_FLAGS} \
> geo/gpsbabel/Makefile: cd ${WRKSRC}/gui && ${SETENV} ${CONFIGURE_ENV}
qmake4 \
> geo/merkaartor/Makefile: cd ${WRKSRC} && env ${CONFIGURE_ENV}
qmake4 PROJ=1 NODEBUG=1 RELEASE=1 \
> graphics/opencsg/Makefile: cd ${WRKSRC} && qmake4 src.pro
> multimedia/mlt/Makefile: cd ${WRKSRC}/src/tests; ${SETENV}
${ALL_TEST_ENV} qmake4 tests.pro
> net/qsynergy/Makefile: @cd ${WRKSRC} && ${LOCALBASE}/bin/qmake4
> net/retroshare/Makefile: cd ${WRKSRC} && ${LOCALBASE}/bin/qmake4
RetroShare.pro
> productivity/entomologist/Makefile: ${LOCALBASE}/bin/qmake4
${CONFIGURE_ARGS}
> productivity/fet/Makefile: cd ${WRKSRC} && ${LOCALBASE}/bin/qmake4
fet.pro
> productivity/vym/Makefile: ${LOCALBASE}/bin/qmake4
DOCDIR="${PREFIX}/share/doc/vym" vym.pro
> security/fwbuilder/Makefile: --with-qmake=qmake4 \
> security/kqoauth/Makefile: cd ${WRKDIST} && ${LOCALBASE}/bin/qmake4 \
> security/qca-gnupg/Makefile:QMAKE =
${LOCALBASE}/bin/qmake4
> security/qoauth/Makefile: cd ${WRKDIST} && ${LOCALBASE}/bin/qmake4 \
> security/yubikey-personalization-gui/Makefile: cd ${WRKSRC};
CXXFLAGS="${CXXFLAGS}" qmake4
> sysutils/bacula/Makefile:
QMAKE=${LOCALBASE}/bin/qmake4
> www/arora/Makefile: @cd ${WRKSRC} && ${LOCALBASE}/bin/qmake4 -r
> www/minitube/Makefile: ${LOCALBASE}/bin/qmake4 PREFIX=${PREFIX}
> x11/lumina/Makefile: cd ${WRKSRC} && ${LOCALBASE}/bin/qmake4
> x11/py-qt4/Makefile: --qmake="${LOCALBASE}/bin/qmake4" \
> x11/qrfcview/Makefile: ${LOCALBASE}/bin/qmake4 rfcview.pro
> x11/qwt/files/Makefile.examples: qmake4 $$I.pro && env
LOCALBASE=${LOCALBASE} gmake; \
> x11/qwt/Makefile: @cd ${WRKSRC} && qmake4 -d -d -d
>
> 2. Now that Qt5 is coming in, and given that some ports already (and
> many more will) support both Qt4 and Qt5, it may result in
> maintaince burden, to tweak each such port in the way:
>
> .if ${FLAVOR:Mqt5}
> ...
> .else
> ...
> .endif
>
>
> I think everything above is job for port modules instead. So I
> propose to create x11/qt/qt.port.mk, that will call the right qmake.
> I left out all other logic duplicated between qt4.port.mk and
> qt5.port.mk, to allow print/poppler build (Qt5 support is on its
> way there already).
>
> The only real change is that MODQT*_WANTLIB becomes a trick itself:
> you can set up both MODQT4_WANLTIB and MODQT5_WANTLIB in a port,
> and use MODQT_WANTLIB in actual WANTLIB. This way you'll get the
> WANTLIB you want depending on Qt version you're using.
>
> The obvious downside is that we'll have a lot of "-qt5" FLAVORed
> ports...
>
> An alternative approach could be switching all Qt4 users to Qt5,
> or, at least, making sure that Qt4 won't mix in otherwise Qt5-ready
> software. Please remember that Qt4 will come out-of-support after
> 2015 ends, so we have to move quickly, and get everything clean
> at the 5.8 release lock.
>
> I don't insist on getting this in right now, but asking for ideas
> and comments for now. Thank you for your time.
So it looks like the consensus is that FLAVOR part shouldn't go in.
What about "qmake" CONFIGURE_STYLE then? Or just use "qt4" and "qt5"
instead?
> Index: qt/qt.port.mk
> ===================================================================
> RCS file: qt/qt.port.mk
> diff -N qt/qt.port.mk
> --- /dev/null 1 Jan 1970 00:00:00 -0000
> +++ qt/qt.port.mk 19 Dec 2014 22:22:51 -0000
> @@ -0,0 +1,30 @@
> +# $OpenBSD$
> +# This module is designed for ports that could use both Qt4 and Qt5.
> +# Almost all MODQT_* logic lives in x11/qt? modules.
> +# This allows simple transition between them and x11/qt port modules.
> +
> +MODQT_MANAGE_FLAVORS ?= Yes
> +.if ${MODQT_MANAGE_FLAVORS:L} == "yes"
> +FLAVORS += qt5
> +.endif
> +
> +FLAVOR ?=
> +.if ${FLAVOR:Mqt5}
> +MODQT_FLAVOR ?= qt5
> +.else
> +MODQT_FLAVOR ?= qt4
> +.endif
> +
> +_MODQT_FLAVORS = qt4 qt5
> +.if !${_MODQT_FLAVORS:M${MODQT_FLAVOR}}
> +ERRORS += "Fatal: Unsupported
MODQT_FLAVOR=${MODQT_FLAVOR}.\n"
> +.endif
> +
> +.if empty(CONFIGURE_STYLE)
> +CONFIGURE_STYLE += qmake
> +.endif
> +.if ${CONFIGURE_STYLE:Mqmake}
> +CONFIGURE_STYLE += ${MODQT_FLAVOR}
> +.endif
> +
> +MODULES += x11/${MODQT_FLAVOR}
> Index: qt4/qt4.port.mk
> ===================================================================
> RCS file: /cvs/ports/x11/qt4/qt4.port.mk,v
> retrieving revision 1.7
> diff -u -p -r1.7 qt4.port.mk
> --- qt4/qt4.port.mk 22 Nov 2010 08:37:04 -0000 1.7
> +++ qt4/qt4.port.mk 19 Dec 2014 22:22:51 -0000
> @@ -1,7 +1,7 @@
> # $OpenBSD: qt4.port.mk,v 1.7 2010/11/22 08:37:04 espie Exp $
>
> # This fragment defines MODQT_* variables to make it easier to substitute
> -# qt1/qt2/qt3 in a port.
> +# Qt3/Qt4/Qt5 in a port.
> MODQT_OVERRIDE_UIC ?= Yes
> MODQT4_OVERRIDE_UIC ?= ${MODQT_OVERRIDE_UIC}
>
> @@ -10,9 +10,6 @@ MODQT_LIBDIR ?= ${MODQT4_LIBDIR}
> MODQT4_INCDIR = ${LOCALBASE}/include/X11/qt4
> MODQT_INCDIR ?= ${MODQT4_INCDIR}
> MODQT_PKG_CONFIG_PATH ?= ${LOCALBASE}/lib/qt4/pkgconfig
> -MODQT4_CONFIGURE_ARGS = --with-qt-includes=${MODQT4_INCDIR} \
> - --with-qt-libraries=${MODQT4_LIBDIR}
> -MODQT_CONFIGURE_ARGS ?= ${MODQT4_CONFIGURE_ARGS}
> _MODQT4_SETUP = MOC=${MODQT4_MOC} \
> MODQT_INCDIR=${MODQT4_INCDIR} \
> MODQT_LIBDIR=${MODQT4_LIBDIR} \
> @@ -26,6 +23,8 @@ MODQT4_MOC = ${LOCALBASE}/bin/moc4
> MODQT_MOC ?= ${MODQT4_MOC}
> MODQT4_UIC = ${LOCALBASE}/bin/uic4
> MODQT_UIC ?= ${MODQT4_UIC}
> +MODQT4_QMAKE = ${MODQT4_LIBDIR}/bin/qmake
> +MODQT_QMAKE ?= ${MODQT4_QMAKE}
> MODQT4_QTDIR = ${LOCALBASE}/lib/qt4
> MODQT_QTDIR ?= ${MODQT4_QTDIR}
>
> @@ -33,10 +32,58 @@ MODQT4_LIB_DEPENDS = x11/qt4
> MODQT_LIB_DEPENDS ?= ${MODQT4_LIB_DEPENDS}
> LIB_DEPENDS += ${MODQT4_LIB_DEPENDS}
>
> -MODQT4_WANTLIB = lib/qt4/QtCore
> +MODQT4_WANTLIB += lib/qt4/QtCore
> MODQT_WANTLIB ?= ${MODQT4_WANTLIB}
> WANTLIB += ${MODQT4_WANTLIB}
>
> CONFIGURE_ENV +=${_MODQT4_SETUP}
> MAKE_ENV += ${_MODQT4_SETUP}
> MAKE_FLAGS += ${_MODQT4_SETUP}
> +
> +MODQT_QMAKE_ARGS ?= ${CONFIGURE_ARGS}
> +MODQT4_QMAKE_ARGS ?= ${MODQT_QMAKE_ARGS}
> +
> +MODQT_PROJECTS ?=
> +MODQT4_PROJECTS ?= ${MODQT_PROJECTS}
> +.if ${CONFIGURE_STYLE:Mqt4}
> + ALL_TARGET ?=
> + MODQT4_ALL_TARGET ?= ${ALL_TARGET}
> + SEPARATE_BUILD ?= No
> +. if ${SEPARATE_BUILD:L} == "flavored"
> + ERRORS += "Fatal: flavored builds are not supported by qmake.\n"
> +. elif ${SEPARATE_BUILD:L} != "no"
> + WRKBUILD ?= ${WRKSRC}/build
> +. endif
> +
> +. if !empty(MODQT4_PROJECTS)
> +MODQT4_configure = cd ${WRKSRC}/$$d;
> +MODQT4_BUILD_TARGET =
> +. for _p in ${MODQT4_PROJECTS}
> +MODQT4_configure += \
> + d=${_p%/*}; \
> + mkdir -p ${WRKBUILD}/$$d; \
> + env ${CONFIGURE_ENV} ${MODQT4_QMAKE} ${MODQT4_QMAKE_ARGS} \
> + -o ${WRKBUILD}/$$d/${MAKE_FILE} ${_p};
> +MODQT4_BUILD_TARGET += \
> + d=${_p%/*}; \
> + cd ${WRKBUILD}/$$d; \
> + ${_SYSTRACE_CMD} ${SETENV} ${MAKE_ENV} \
> + ${MAKE_PROGRAM} ${MAKE_FLAGS} -f ${MAKE_FILE}
${MODQT4_ALL_TARGET};
> +. endfor
> +. else
> +# assume there is only one QMake project, as recommended by Qt guideline
> +MODQT4_configure = \
> + cd ${WRKSRC}; \
> + ${SETENV} ${CONFIGURE_ENV} ${MODQT4_QMAKE} ${MODQT4_QMAKE_ARGS} \
> + -o ${WRKBUILD}/${MAKE_FILE} *.pro;
> +MODQT4_BUILD_TARGET += \
> + cd ${WRKBUILD}; \
> + ${_SYSTRACE_CMD} ${SETENV} ${MAKE_ENV} \
> + ${MAKE_PROGRAM} ${MAKE_FLAGS} -f ${MAKE_FILE}
${MODQT4_ALL_TARGET};
> +. endif
> +
> +. if !target(do-build)
> +do-build:
> + @${MODQT4_BUILD_TARGET}
> +. endif
> +.endif
> Index: qt5/qt5.port.mk
> ===================================================================
> RCS file: /cvs/ports/x11/qt5/qt5.port.mk,v
> retrieving revision 1.6
> diff -u -p -r1.6 qt5.port.mk
> --- qt5/qt5.port.mk 11 Dec 2014 17:45:04 -0000 1.6
> +++ qt5/qt5.port.mk 19 Dec 2014 22:22:51 -0000
> @@ -1,7 +1,7 @@
> # $OpenBSD: qt5.port.mk,v 1.6 2014/12/11 17:45:04 zhuk Exp $
>
> # This fragment defines MODQT_* variables to make it easier to substitute
> -# qt4/qt5 in a port.
> +# Qt3/Qt4/Qt5 in a port.
> MODQT_OVERRIDE_UIC ?= Yes
> MODQT5_OVERRIDE_UIC ?= ${MODQT_OVERRIDE_UIC}
>
> @@ -10,10 +10,6 @@ MODQT_LIBDIR ?= ${MODQT5_LIBDIR}
> MODQT5_INCDIR = ${LOCALBASE}/include/X11/qt5
> MODQT_INCDIR ?= ${MODQT5_INCDIR}
>
> -MODQT5_CONFIGURE_ARGS = --with-qt-includes=${MODQT5_INCDIR} \
> - --with-qt-libraries=${MODQT5_LIBDIR}
> -MODQT_CONFIGURE_ARGS ?= ${MODQT5_CONFIGURE_ARGS}
> -
> _MODQT5_SETUP = MOC=${MODQT5_MOC} \
> MODQT_INCDIR=${MODQT5_INCDIR} \
> MODQT_LIBDIR=${MODQT5_LIBDIR}
> @@ -27,6 +23,8 @@ MODQT5_MOC = ${LOCALBASE}/bin/moc-qt5
> MODQT_MOC ?= ${MODQT5_MOC}
> MODQT5_UIC = ${LOCALBASE}/bin/uic-qt5
> MODQT_UIC ?= ${MODQT5_UIC}
> +MODQT5_QMAKE = ${LOCALBASE}/bin/qmake-qt5
> +MODQT_QMAKE ?= ${MODQT5_QMAKE}
> MODQT5_QTDIR = ${LOCALBASE}/lib/qt5
> MODQT_QTDIR ?= ${MODQT5_QTDIR}
>
> @@ -77,6 +75,10 @@ MODQT5_LIB_DEPENDS = x11/qt5
> MODQT_LIB_DEPENDS ?= ${MODQT5_LIB_DEPENDS}
> LIB_DEPENDS += ${MODQT5_LIB_DEPENDS}
>
> +MODQT5_WANTLIB += Qt5Core ${MODGCC4_CPPWANTLIB}
> +MODQT_WANTLIB ?= ${MODQT5_WANTLIB}
> +WANTLIB += ${MODQT5_WANTLIB}
> +
> CONFIGURE_ENV +=${_MODQT5_SETUP}
> MAKE_ENV += ${_MODQT5_SETUP}
> MAKE_FLAGS += ${_MODQT5_SETUP}
> @@ -86,4 +88,52 @@ MODQT5_USE_GCC4_MODULE ?= Yes
> MODULES += gcc4
> MODGCC4_LANGS += c++
> MODGCC4_ARCHS ?= *
> +.endif
> +
> +MODQT_QMAKE_ARGS ?= ${CONFIGURE_ARGS}
> +MODQT5_QMAKE_ARGS ?= ${MODQT_QMAKE_ARGS}
> +
> +MODQT_PROJECTS ?=
> +MODQT5_PROJECTS ?= ${MODQT_PROJECTS}
> +.if ${CONFIGURE_STYLE:Mqt5}
> + ALL_TARGET ?=
> + MODQT5_ALL_TARGET ?= ${ALL_TARGET}
> + SEPARATE_BUILD ?= No
> +. if ${SEPARATE_BUILD:L} == "flavored"
> + ERRORS += "Fatal: flavored builds are not supported by qmake.\n"
> +. elif ${SEPARATE_BUILD:L} != "no"
> + WRKBUILD ?= ${WRKSRC}/build
> +. endif
> +
> +. if !empty(MODQT5_PROJECTS)
> +MODQT5_configure = cd ${WRKSRC}/$$d;
> +MODQT5_BUILD_TARGET =
> +. for _p in ${MODQT5_PROJECTS}
> +MODQT5_configure += \
> + d=${_p%/*}; \
> + mkdir -p ${WRKBUILD}/$$d; \
> + env ${CONFIGURE_ENV} ${MODQT5_QMAKE} ${MODQT5_QMAKE_ARGS} \
> + -o ${WRKBUILD}/$$d/${MAKE_FILE} ${_p};
> +MODQT5_BUILD_TARGET += \
> + d=${_p%/*}; \
> + cd ${WRKBUILD}/$$d; \
> + ${_SYSTRACE_CMD} ${SETENV} ${MAKE_ENV} \
> + ${MAKE_PROGRAM} ${MAKE_FLAGS} -f ${MAKE_FILE}
${MODQT5_ALL_TARGET};
> +. endfor
> +. else
> +# assume there is only one QMake project, as recommended by Qt guideline
> +MODQT5_configure = \
> + cd ${WRKSRC}; \
> + ${SETENV} ${CONFIGURE_ENV} ${MODQT5_QMAKE} ${MODQT5_QMAKE_ARGS} \
> + -o ${WRKBUILD}/${MAKE_FILE} *.pro;
> +MODQT5_BUILD_TARGET += \
> + cd ${WRKBUILD}; \
> + ${_SYSTRACE_CMD} ${SETENV} ${MAKE_ENV} \
> + ${MAKE_PROGRAM} ${MAKE_FLAGS} -f ${MAKE_FILE}
${MODQT5_ALL_TARGET};
> +. endif
> +
> +. if !target(do-build)
> +do-build:
> + @${MODQT5_BUILD_TARGET}
> +. endif
> .endif
--
Vadim Zhukov