2018-06-28 17:39:53 +00:00
# $FreeBSD$
#
# There are three Qt related USES files with different access to Qt.
# - qmake: The port requires Qt's qmake to build -- creates the configure target
# - auto includes qt.mk
# - qt-dist: The port is a port for an part of Qt4 or Qt5
# - auto includes qt.mk and qmake.mk
# - qt.mk - Dependency handling. USE_QT=foo bar
#
# Usage:
# USES=qt:<version>[,no_env]
#
# Versions: 4 5
#
# Port variables:
# USE_QT - List of Qt modules to depend on, with optional '_build'
# and '_run' suffixes. Define it empty to include this file
# without depending on Qt ports.
. i f ! d e f i n e d ( _ Q T _ M K _ I N C L U D E D )
_QT_MK_INCLUDED = qt.mk
# Qt versions currently supported by the framework.
2019-03-17 07:48:27 +00:00
_QT_SUPPORTED ?= 5
2019-02-12 17:43:00 +00:00
QT5_VERSION ?= 5.12.1
2018-06-28 17:39:53 +00:00
# We accept the Qt version to be passed by either or all of the three mk files.
. i f e m p t y ( q t _ A R G S ) & & e m p t y ( q m a k e _ A R G S ) & & e m p t y ( q t - d i s t _ A R G S )
IGNORE = qt needs a version ( ${ _QT_SUPPORTED } ) passed via qt, qmake or qt-dist.
. e n d i f
# Gather all the args together
_QT_GLOBAL_ARGS = ${ qt_ARGS } ${ qmake_ARGS } ${ qt -dist_ARGS }
# Check fo the Qt version to be used
_QT_VER = # empty
. for ver in ${_QT_SUPPORTED : O :u }
. if ${_QT_GLOBAL_ARGS : M ${ver }}
. i f ! d e f i n e d ( _ Q T _ V E R S I O N )
_QT_VER = ${ ver }
. e l s e
. i f ${_QT_VERSION} != ${ ver }
IGNORE ?= cannot be installed: different Qt versions specified via qt:[ ${ _QT_SUPPORTED : S / //g } ] , qmake:[ ${ _QT_SUPPORTED : S / //g } ] a qt-dist:[ ${ _QT_SUPPORTED : S / //g } ]
. e n d i f
. e n d i f
. e n d i f
. e n d f o r
. i f e m p t y ( _ Q T _ V E R )
IGNORE ?= cannot decide what Qt version to use: specify one via qt:[ ${ _QT_SUPPORTED : S / //g } ] , qmake:[ ${ _QT_SUPPORTED : S / //g } ] or qt-dist:[ ${ _QT_SUPPORTED : S / //g } ]
. e n d i f
# Set the shortcuts used from now on
_QT_RELNAME = qt${ _QT_VER }
_QT_VERSION = ${ QT ${ _QT_VER } _VERSION }
# 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_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
QT_QMLDIR_REL ?= ${ QT_ARCHDIR_REL } /qml
QT_DATADIR_REL ?= share/${ _QT_RELNAME }
QT_DOCDIR_REL ?= share/doc/${ _QT_RELNAME }
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.
QT_MKSPECDIR_REL = ${ QT_ARCHDIR_REL } /mkspecs
_QT_LIBVER = ${ _QT_VERSION : R : R }
LRELEASE ?= ${ QT_BINDIR } /lrelease
LUPDATE ?= ${ QT_BINDIR } /lupdate
MOC ?= ${ QT_BINDIR } /moc
RCC ?= ${ QT_BINDIR } /rcc
UIC ?= ${ QT_BINDIR } /uic
QMAKE ?= ${ QT_BINDIR } /qmake
# Needed to redefine the qmake target for internal Qt configuration.
_QMAKE ?= ${ QMAKE }
QMAKESPECNAME ?= freebsd-${ QMAKE_COMPILER }
QMAKESPEC ?= ${ QT_MKSPECDIR } /${ QMAKESPECNAME }
# The whole Qt distribution should be built with the same compiler, but it's
# better to support custom settings. Dereferencing the detection allows to
# avoid forking a shell on each inclusion of this file, and to catch any CXX
# customization (via USE_GCC, etc.).
QMAKE_COMPILER = $$ ( ccver = " $$ ( ${ CXX } --version) " ; case " $$ ccver " in *clang*) echo clang ; ; *) echo g++ ; ; esac )
. f o r d i r i n B I N I N C L I B A R C H P L U G I N L I B E X E C I M P O R T \
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 }
PLIST_SUB += QT_${ dir } DIR = " ${ QT_ ${ dir } DIR_REL } "
. e n d i f
. e n d f o r
# Pass the chosen Qt version to the environment for qtchooser.
CONFIGURE_ENV += QT_SELECT = ${ _QT_RELNAME }
MAKE_ENV += QT_SELECT = ${ _QT_RELNAME }
# Make sure both the installed mkspecs as well as the ones being built are
# found, with the ones from the port being built having preference.
CONFIGURE_ENV += QMAKEMODULES = " ${ WRKSRC } /mkspecs/modules: ${ LOCALBASE } / ${ QT_MKSPECDIR_REL } /modules "
MAKE_ENV += QMAKEMODULES = " ${ WRKSRC } /mkspecs/modules: ${ LOCALBASE } / ${ QT_MKSPECDIR_REL } /modules "
_USES_POST += qt
. e n d i f # _QT_MK_INCLUDED
# =============================================================================
#
# =============================================================================
. i f d e f i n e d ( _ P O S T M K I N C L U D E D ) & & ! d e f i n e d ( _ Q T _ M K _ P O S T _ I N C L U D E D )
_QT_MK_POST_INCLUDED = qt.mk
# The Qt components supported by qt.mk: list of shared, and version specific ones
2018-11-04 19:00:53 +00:00
_USE_QT_ALL = assistant dbus declarative designer doc gui help \
2018-06-28 17:39:53 +00:00
imageformats l10n linguist linguisttools multimedia \
network opengl pixeltool qdbusviewer qmake script \
2019-03-10 10:02:38 +00:00
scripttools sql sql-mysql sql-odbc sql-pgsql \
2018-06-28 17:39:53 +00:00
sql-sqlite2 sql-sqlite3 svg testlib webkit \
xml xmlpatterns
2019-03-10 10:02:38 +00:00
. i f ${ARCH} = = amd64 || ${ ARCH } = = i386
_USE_QT_ALL += sql-ibase
. e n d i f
2018-06-28 17:39:53 +00:00
_USE_QT5_ONLY = 3d buildtools canvas3d charts concurrent connectivity \
core datavis3d diag examples gamepad \
2018-12-26 19:34:59 +00:00
graphicaleffects location networkauth paths phonon4 plugininfo printsupport \
2018-11-04 19:00:53 +00:00
qdbus qdoc qdoc-data qev quickcontrols \
2019-01-13 10:25:31 +00:00
quickcontrols2 remoteobjects scxml sensors serialbus serialport speech \
2018-06-28 17:39:53 +00:00
sql-tds uiplugin uitools virtualkeyboard wayland webchannel \
2019-01-13 10:14:23 +00:00
webengine websockets websockets-qml webview widgets x11extras
2018-06-28 17:39:53 +00:00
# Dependency tuples: _LIB should be preferred if possible.
3d_PORT = graphics/${ _QT_RELNAME } -3d
3d_LIB = libQt${ _QT_LIBVER } 3DCore.so
assistant_PORT = devel/${ _QT_RELNAME } -assistant
assistant_PATH = ${ LOCALBASE } /${ QT_BINDIR_REL } /assistant
buildtools_PORT = devel/${ _QT_RELNAME } -buildtools
buildtools_PATH = ${ LOCALBASE } /${ QT_BINDIR_REL } /moc
canvas3d_PORT = x11-toolkits/${ _QT_RELNAME } -canvas3d
canvas3d_PATH = ${ LOCALBASE } /${ QT_QMLDIR_REL } /QtCanvas3D/qmldir
charts_PORT = x11-toolkits/${ _QT_RELNAME } -charts
charts_LIB = libQt${ _QT_LIBVER } Charts.so
concurrent_PORT = devel/${ _QT_RELNAME } -concurrent
concurrent_LIB = libQt${ _QT_LIBVER } Concurrent.so
connectivity_PORT = comms/${ _QT_RELNAME } -connectivity
connectivity_LIB = libQt${ _QT_LIBVER } Bluetooth.so
core_PORT = devel/${ _QT_RELNAME } -core
core_LIB = libQt${ _QT_LIBVER } Core.so
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
2018-11-04 19:00:53 +00:00
declarative_LIB = libQt${ _QT_LIBVER } Qml.so
2018-06-28 17:39:53 +00:00
designer_PORT = devel/${ _QT_RELNAME } -designer
designer_PATH = ${ LOCALBASE } /${ QT_BINDIR_REL } /designer
diag_PORT = sysutils/${ _QT_RELNAME } -qtdiag
diag_PATH = ${ LOCALBASE } /${ QT_BINDIR_REL } /qtdiag
doc_PORT = misc/${ _QT_RELNAME } -doc
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 = ${ LOCALBASE } /${ QT_QMLDIR_REL } /QtGraphicalEffects/qmldir
gui_PORT = x11-toolkits/${ _QT_RELNAME } -gui
gui_LIB = libQt${ _QT_LIBVER } Gui.so
help_PORT = devel/${ _QT_RELNAME } -help
help_LIB = libQt${ _QT_LIBVER } Help.so
imageformats_PORT = graphics/${ _QT_RELNAME } -imageformats
imageformats_PATH = ${ LOCALBASE } /${ QT_PLUGINDIR_REL } /imageformats/libqtiff.so
linguist_PORT = devel/${ _QT_RELNAME } -linguist
linguist_PATH = ${ LOCALBASE } /${ QT_BINDIR_REL } /linguist
linguisttools_PORT = devel/${ _QT_RELNAME } -linguisttools
linguisttools_PATH = ${ LOCALBASE } /${ QT_BINDIR_REL } /lrelease
location_PORT = devel/${ _QT_RELNAME } -location
location_LIB = libQt${ _QT_LIBVER } Location.so
l10n_PORT = misc/${ _QT_RELNAME } -l10n
l10n_PATH = ${ _QT_RELNAME } -l10n>= ${ _QT_VERSION : R : R }
multimedia_PORT = multimedia/${ _QT_RELNAME } -multimedia
multimedia_LIB = libQt${ _QT_LIBVER } Multimedia.so
network_PORT = net/${ _QT_RELNAME } -network
network_LIB = libQt${ _QT_LIBVER } Network.so
2018-12-26 19:34:59 +00:00
networkauth_PORT = net/${ _QT_RELNAME } -networkauth
networkauth_LIB = libQt${ _QT_LIBVER } NetworkAuth.so
2018-06-28 17:39:53 +00:00
opengl_PORT = graphics/${ _QT_RELNAME } -opengl
opengl_LIB = libQt${ _QT_LIBVER } OpenGL.so
paths_PORT = sysutils/${ _QT_RELNAME } -qtpaths
paths_PATH = ${ LOCALBASE } /${ QT_BINDIR_REL } /qtpaths
pixeltool_PORT = graphics/${ _QT_RELNAME } -pixeltool
pixeltool_PATH = ${ LOCALBASE } /${ QT_BINDIR_REL } /pixeltool
2019-03-16 21:32:52 +00:00
phonon4_PORT = multimedia/phonon
2018-06-28 17:39:53 +00:00
phonon4_LIB = libphonon4${ _QT_RELNAME } .so
plugininfo_PORT = sysutils/${ _QT_RELNAME } -qtplugininfo
plugininfo_PATH = ${ LOCALBASE } /${ QT_BINDIR_REL } /qtplugininfo
printsupport_PORT = print/${ _QT_RELNAME } -printsupport
printsupport_LIB = libQt${ _QT_LIBVER } PrintSupport.so
qdbus_PORT = devel/${ _QT_RELNAME } -qdbus
qdbus_PATH = ${ LOCALBASE } /${ QT_BINDIR_REL } /qdbus
qdbusviewer_PORT = devel/${ _QT_RELNAME } -qdbusviewer
qdbusviewer_PATH = ${ LOCALBASE } /${ QT_BINDIR_REL } /qdbusviewer
qdoc_PORT = devel/${ _QT_RELNAME } -qdoc
qdoc_PATH = ${ LOCALBASE } /${ QT_BINDIR_REL } /qdoc
qdoc-data_PORT = devel/${ _QT_RELNAME } -qdoc-data
qdoc-data_PATH = ${ LOCALBASE } /${ QT_DOCDIR_REL } /global/config.qdocconf
qev_PORT = x11/${ _QT_RELNAME } -qev
qev_PATH = ${ LOCALBASE } /${ QT_BINDIR_REL } /qev
qmake_PORT = devel/${ _QT_RELNAME } -qmake
qmake_PATH = ${ LOCALBASE } /${ QT_BINDIR_REL } /qmake
quickcontrols_PORT = x11-toolkits/${ _QT_RELNAME } -quickcontrols
quickcontrols_PATH = ${ LOCALBASE } /${ QT_QMLDIR_REL } /QtQuick/Controls/qmldir
quickcontrols2_PORT = x11-toolkits/${ _QT_RELNAME } -quickcontrols2
quickcontrols2_LIB = libQt${ _QT_LIBVER } QuickControls2.so
2019-01-13 11:42:09 +00:00
remoteobjects_PORT = devel/${ _QT_RELNAME } -remoteobjects
2019-01-13 10:25:31 +00:00
remoteobjects_LIB = libQt${ _QT_LIBVER } RemoteObjects.so
2018-06-28 17:39:53 +00:00
sensors_PORT = comms/${ _QT_RELNAME } -sensors
sensors_LIB = libQt${ _QT_LIBVER } Sensors.so
script_PORT = devel/${ _QT_RELNAME } -script
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
serialport_PORT = comms/${ _QT_RELNAME } -serialport
serialport_LIB = libQt${ _QT_LIBVER } SerialPort.so
speech_PORT = accessibility/${ _QT_RELNAME } -speech
speech_LIB = libQt${ _QT_LIBVER } TextToSpeech.so
sql_PORT = databases/${ _QT_RELNAME } -sql
sql_LIB = libQt${ _QT_LIBVER } Sql.so
sql-pgsql_PATH = ${ LOCALBASE } /${ QT_PLUGINDIR_REL } /sqldrivers/libqsqlpsql.so
sql-sqlite3_PATH = ${ LOCALBASE } /${ QT_PLUGINDIR_REL } /sqldrivers/libqsqlite.so
. f o r d b i n i b a s e m y s q l o d b c p g s q l s q l i t e 2 s q l i t e 3 t d s
2019-03-18 20:00:33 +00:00
sql-${db}_PORT = databases/${ _QT_RELNAME } -sqldrivers-${ db }
2018-06-28 17:39:53 +00:00
sql-${db}_PATH ?= ${ LOCALBASE } /${ QT_PLUGINDIR_REL } /sqldrivers/libqsql${ db : C /^sql// } .so
. e n d f o r
svg_PORT = graphics/${ _QT_RELNAME } -svg
svg_LIB = libQt${ _QT_LIBVER } Svg.so
testlib_PORT = devel/${ _QT_RELNAME } -testlib
testlib_LIB = libQt${ _QT_LIBVER } Test.so
uiplugin_PORT = x11-toolkits/${ _QT_RELNAME } -uiplugin
uiplugin_PATH = ${ LOCALBASE } /${ QT_INCDIR_REL } /QtUiPlugin/QtUiPlugin
uitools_PORT = devel/${ _QT_RELNAME } -uitools
uitools_PATH = ${ LOCALBASE } /${ QT_LIBDIR_REL } /libQt${ _QT_LIBVER } UiTools.a
virtualkeyboard_PORT = x11-toolkits/${ _QT_RELNAME } -virtualkeyboard
virtualkeyboard_PATH = ${ LOCALBASE } /${ QT_PLUGINDIR_REL } /platforminputcontexts/libqtvirtualkeyboardplugin.so
webchannel_PORT = www/${ _QT_RELNAME } -webchannel
webchannel_LIB = libQt${ _QT_LIBVER } WebChannel.so
webengine_PORT = www/${ _QT_RELNAME } -webengine
webengine_LIB = libQt${ _QT_LIBVER } WebEngine.so
websockets_PORT = www/${ _QT_RELNAME } -websockets
websockets_LIB = libQt${ _QT_LIBVER } WebSockets.so
websockets-qml_PORT = www/${ _QT_RELNAME } -websockets-qml
websockets-qml_PATH = ${ LOCALBASE } /${ QT_QMLDIR_REL } /QtWebSockets/qmldir
webkit_PORT = www/${ _QT_RELNAME } -webkit
webkit_LIB = libQt${ _QT_LIBVER } WebKit.so
2019-01-13 10:14:23 +00:00
webview_PORT = www/${ _QT_RELNAME } -webview
webview_LIB = libQt${ _QT_LIBVER } WebView.so
2018-06-28 17:39:53 +00:00
widgets_PORT = x11-toolkits/${ _QT_RELNAME } -widgets
widgets_LIB = libQt${ _QT_LIBVER } Widgets.so
x11extras_PORT = x11/${ _QT_RELNAME } -x11extras
x11extras_LIB = libQt${ _QT_LIBVER } X11Extras.so
xml_PORT = textproc/${ _QT_RELNAME } -xml
xml_LIB = libQt${ _QT_LIBVER } Xml.so
xmlpatterns_PORT = textproc/${ _QT_RELNAME } -xmlpatterns
xmlpatterns_LIB = libQt${ _QT_LIBVER } XmlPatterns.so
# Actually add the dependencies to the proper lists.
_USE_QT_ALL += ${ _USE_QT ${ _QT_VER } _ONLY }
_USE_QT = ${ USE_QT }
# Iterate through components deprived of suffix.
2019-02-20 21:24:33 +00:00
. for component in ${_USE_QT : O :u :C /_ (build | run )$//}
2018-06-28 17:39:53 +00:00
# Check that the component is valid.
. if ${_USE_QT_ALL : M ${component }} != ""
# Skip meta-components (currently none).
. i f d e f i n e d ( $ { c o m p o n e n t } _ P O R T ) & & ( d e f i n e d ( $ { c o m p o n e n t } _ P A T H ) | | d e f i n e d ( $ { c o m p o n e n t } _ L I B ) )
# Check if a dependency type is explicitly requested.
. if ${_USE_QT : M ${component }_ *} != "" && ${_USE_QT :M ${component }} == ""
${component}_TYPE = # empty
. if ${_USE_QT : M ${component }_build } != ""
${component}_TYPE += build
. e n d i f
. if ${_USE_QT : M ${component }_run } != ""
${component}_TYPE += run
. e n d i f
. endif # ${_USE_QT : M ${component }_ *} != "" && ${_USE_QT :M ${component }} == ""
# If no dependency type is set, default to full dependency.
. i f ! d e f i n e d ( $ { c o m p o n e n t } _ T Y P E )
${component}_TYPE = build run
. e n d i f
# Set real dependencies.
. if defined(${component}_LIB) && ${${component}_TYPE : Mbuild } && ${${component }_TYPE :Mrun }
LIB_DEPENDS += ${ ${ component } _LIB } :${ ${ component } _PORT }
. e l s e
${component}_PATH ?= ${ QT_LIBDIR } /${ ${ component } _LIB }
${component}_DEPENDS = ${ ${ component } _PATH } :${ ${ component } _PORT }
. if ${${component}_TYPE : Mbuild } != ""
BUILD_DEPENDS += ${ ${ component } _DEPENDS }
. e n d i f
. if ${${component}_TYPE : Mrun } != ""
RUN_DEPENDS += ${ ${ component } _DEPENDS }
. e n d i f
. endif # ${${component}_LIB} && ${${component}_TYPE : Mbuild } && ${${component }_TYPE :Mrun }
. e n d i f # defined(${component}_PORT) && defined(${component}_PATH)
. else # ! ${_USE_QT_ALL : M ${component }} != ""
IGNORE = cannot be installed: unknown USE_QT component '${component}'
. endif # ${_USE_QT_ALL : M ${component }} != ""
. e n d f o r
. e n d i f # defined(_QT_MK_POST_INCLUDED)