diff options
Diffstat (limited to 'packages/x11-libs/qtbase/qtbase.exlib')
-rw-r--r-- | packages/x11-libs/qtbase/qtbase.exlib | 405 |
1 files changed, 405 insertions, 0 deletions
diff --git a/packages/x11-libs/qtbase/qtbase.exlib b/packages/x11-libs/qtbase/qtbase.exlib new file mode 100644 index 0000000..2016f53 --- /dev/null +++ b/packages/x11-libs/qtbase/qtbase.exlib @@ -0,0 +1,405 @@ +# Copyright 2008-2010 Bo Ørsted Andresen <zlin@exherbo.org> +# Copyright 2008-2009, 2010 Ingmar Vanhassel +# Copyright 2013-2018 Heiko Becker <heirecka@exherbo.org> +# Distributed under the terms of the GNU General Public License v2 +# Based in part upon 'qt-4.3.4-r1.ebuild' from Gentoo, which is: +# Copyright 1999-2008 Gentoo Foundation + +require qt +require option-renames [ renames=[ 'systemd journald' ] ] + +export_exlib_phases src_prepare src_configure src_compile src_install + +SUMMARY="Qt Cross-platform application framework for desktop and embedded development" +DESCRIPTION="Contains the following modules: +- QtCore: non-graphical classes used by other modules +- QtConcurrent: Classes for writing multi-threaded programs w/o using low-level threading primitives +- QtDBus: Classes for inter-process communication over the D-Bus protocol +- QtGui: Base classes for graphical user interface (GUI) components +- QtNetwork: Classes to make network programming easier and more portable +- QtOpenGL: OpenGL support classes +- QtPrintSupport: Classes to make printing easier and more portable +- QtSql: Classes for database integration using SQL +- QtTest: Classes for unit testing Qt applications and libraries +- QtWidgets: Classes to extend Qt GUI with C++ widgets (belonged to QtGui in 4.x) +- QtXml: C++ implementations of SAX and DOM" + +MYOPTIONS_PARTS="doc examples" +SQL_BACKENDS="mysql postgresql sqlite" # firebird odbc +MYOPTIONS="cups debug glib gui journald kms opengles sql + ${MYOPTIONS_PARTS} + ( ${SQL_BACKENDS} ) [[ requires = sql ]] + sql? ( + ( ${SQL_BACKENDS} ) [[ number-selected = at-least-one ]] + ) + cups [[ requires = gui ]] + examples [[ requires = gui ]] + glib [[ description = [ Add support for the glib eventloop ] ]] + gtk [[ description = [ Enable GTK+ style support, this will install a Qt4 style that renders using GTK+, to blend in with a GTK+ desktop ] + requires = [ glib gui ] ]] + gui [[ description = [ Build GUI related modules ] + presumed = true ]] + journald [[ description = [ Support sending logging output directly to systemd-journald ] ]] + kms [[ description = [ KMS platform plugin to run a single-window per screen without X11 ] + requires = opengles ]] + libinput [[ description = [ Support input devices via libinput ] + requires = gui ]] + libproxy [[ description = [ Use libproxy for system proxy settings ] ]] + opengles [[ description = [ Use OpenGL ES2 rather than standard desktop OpenGL ] + requires = gui ]] + sql [[ description = [ Build the QtSQL module ] ]] + + ( platform: amd64 x86 ) + ( providers: ijg-jpeg jpeg-turbo ) [[ number-selected = exactly-one ]] + ( providers: libressl openssl ) [[ number-selected = exactly-one ]] +" + +if ever at_least 5.10.0-beta4 ; then + MYOPTIONS+=" + vulkan [[ description = [ Support for rendering via the Vulkan graphics API ] + requires = gui ]] + " +fi + +MYOPTIONS+=" + amd64_cpu_features: sse3 ssse3 sse4.1 sse4.2 avx avx2 avx512 f16c + arm_cpu_features: neon + x86_cpu_features: sse2 sse3 ssse3 sse4.1 sse4.2 avx avx2 avx512 f16c +" + +DEPENDENCIES=" + build: + virtual/pkg-config + doc? ( + x11-libs/qttools:${SLOT}[>=5.8.0-rc] [[ + note = [ qtattributionsscanner (5.8.0-rc), qhelpgenerator ] + ]] + ) + build+run: + app-admin/eclectic[>=2.0.18] [[ note = [ Split ld-*.path, @TARGET@ substitution ] ]] + dev-libs/double-conversion + dev-libs/icu:= + dev-libs/pcre2[>=10.20] + sys-apps/dbus[>=1.2.0] [[ note = [ besides QtDBUs also needed for accessibility and xcb ] ]] + sys-libs/zlib[>=1.0.8] + cups? ( net-print/cups[>=1.4] ) + glib? ( dev-libs/glib:2 ) + gtk? ( + dev-libs/atk + x11-libs/gtk+:3[>=3.6] + x11-libs/pango + ) + gui? ( + dev-libs/at-spi2-core + media-libs/fontconfig + media-libs/freetype:2[>=2.2] + media-libs/libpng:= + x11-dri/mesa + x11-libs/harfbuzz[>=0.9.42] + x11-libs/libICE + x11-libs/libSM + x11-libs/libX11 + x11-libs/libXext + x11-libs/libXi + x11-libs/libxcb[>=1.10] + x11-libs/libxkbcommon[>=0.4.1][X] + x11-libs/mtdev + x11-utils/xcb-util-image + x11-utils/xcb-util-keysyms + x11-utils/xcb-util-renderutil + x11-utils/xcb-util-wm + providers:ijg-jpeg? ( media-libs/jpeg:= ) + providers:jpeg-turbo? ( media-libs/libjpeg-turbo ) + ) + journald? ( sys-apps/systemd ) [[ note = [ wanted for journald logging ] ]] + kms? ( x11-dri/libdrm ) + libinput? ( sys-libs/libinput ) + libproxy? ( net-libs/libproxy ) + mysql? ( virtual/mysql ) + postgresql? ( dev-db/postgresql ) + providers:libressl? ( dev-libs/libressl:= ) + providers:openssl? ( dev-libs/openssl ) + sqlite? ( dev-db/sqlite:3 ) +" + +if ever at_least 5.10.0-beta4 ; then + DEPENDENCIES+=" + build+run: + gui? ( x11-libs/libXrender[>=0.6] ) + vulkan? ( sys-libs/vulkan ) + " +fi + +# Packages that need QtSQL should depend on x11-libs/qtbase:5[sql] +# option='sql' needs at least one SQL plugin, any-of mysql, postgresql, sqlite, (firebird, odbc) + +# Tests need a running X server and network access (last checked: 5.1.1) +RESTRICT="test" + +qconf5() { + local myconf=() host=$(exhost --target) + + # paths + myconf+=( + -platform $(qt_mkspecs_dir) + -prefix /usr/${host} + -bindir /usr/${host}/lib/qt5/bin + -docdir /usr/share/doc/qt-${PVR} + -headerdir /usr/${host}/include/qt5 + -libdir /usr/${host}/lib + -archdatadir /usr/${host}/lib/qt5 + -plugindir /usr/${host}/lib/qt5/plugins + -libexecdir /usr/${host}/lib/qt5/libexec + -datadir /usr/share/qt5 + -qmldir /usr/${host}/lib/qt5/qml + -translationdir /usr/share/qt5/translations + -sysconfdir /etc/qt5 + -examplesdir /usr/share/qt5/examples + -importdir /usr/${host}/lib/qt5/imports + -testsdir /usr/share/qt5/tests + ) + + edo "${ECONF_SOURCE:-.}"/configure "${myconf[@]}" "$@" +} + +qtbase_src_prepare() { + default + + # Don't prestrip. + edo sed -e "/^CONFIG +=/s:$: nostrip:" -i qmake/qmake.pro + + # With -gcc and -g++ Qt fails to recognize gcc's version, which leads to + # build failures with qtwebengine. It's safe to use -gcc and -g++ instead + # of -cc -and -cxx here, because we only modifiy gcc mkspecs files. + edo sed -e "s:gcc:$(exhost --target)-gcc:" \ + -e "s:g++:$(exhost --target)-g++:" \ + -i "${WORK}"/mkspecs/common/g++-base.conf + + edo sed -e "s:QMAKE_CFLAGS_RELEASE.*=.*:QMAKE_CFLAGS_RELEASE=${CPPFLAGS} ${CFLAGS} ${ASFLAGS}:" \ + -e "s:QMAKE_CXXFLAGS_RELEASE.*=.*:QMAKE_CXXFLAGS_RELEASE=${CPPFLAGS} ${CXXFLAGS} ${ASFLAGS}:" \ + -i "${WORK}"/mkspecs/common/gcc-base.conf + + edo sed -e "s:QMAKE_LFLAGS_RELEASE.*=.*:QMAKE_LFLAGS_RELEASE=${LDFLAGS}:" \ + -i "${WORK}"/mkspecs/common/g++-unix.conf + + # Workaround to allow other projects to find Qt's private headers via CMake + # https://bugreports.qt-project.org/browse/QTBUG-37417 + edo sed -e "/CMAKE_NO_PRIVATE_INCLUDES = true/d" \ + -i mkspecs/features/create_cmake.prf + + # Fix the names of some unprefixed executables + edo sed -e "s:\(PKG_CONFIG.*=.\)\(pkg-config\):\1${PKG_CONFIG}:" \ + -i mkspecs/features/qt_functions.prf + + edo sed -e "s:^\(QMAKE_AR.*=.\)\(ar.*\):\1$(exhost --tool-prefix)\2:" \ + -i mkspecs/common/linux.conf + + # Fix a non-fatal "sh: readelf: command not found" during src_compile + edo sed -e "s:\(readelf\).*-l.*/bin/ls:$(exhost --tool-prefix)\1 -l /usr/$(exhost --target)/bin/ls:" \ + -i src/corelib/global/global.pri + + # Work around https://bugreports.qt.io/browse/QTBUG-47240 which prevents + # knewstuff to build successfully if attica:0 and attica:5 are installed + # at the same time. + edo sed -e "/\!isEmpty(QMAKE_INCDIR_OPENGL)/d" \ + -i src/gui/gui.pro +} + +qtbase_src_configure() { + local myconf=( + -confirm-license + -opensource + -release + -verbose + + -accessibility + -dbus-linked + $(option debug && echo "-debug") + -icu + -no-ccache + -no-eglfs # EGL Full Screen/Single Surface, probably only useful on embedded devices + -no-directfb + -no-imf + -no-lgmon # Both are only useful on QNX + -no-linuxfb + -no-mirclient # No need for stuff which is only used by Canonical + -no-optimize-size + -no-rpath + -no-separate-debug-info + -no-tslib # Touchscreen access library - unwritten + -no-use-gold-linker # let eclectic ld choose this + -openssl-linked + -pch + -pkg-config + $(if [[ $(exhost --target) =~ (i686-*|x86_64-*) ]] ; then + echo '-reduce-relocations' + fi) + -syslog + -system-doubleconversion + -system-pcre + -system-proxies + -system-xcb + -system-xkbcommon-x11 + -system-zlib + $(qt_enable cups) + $(qt_enable glib) + $(qt_enable gtk) + $(qt_enable gui) + $(option gui && echo '-system-freetype') + $(option gui && echo '-system-harfbuzz' || echo -no-harfbuzz) + $(option gui && echo '-system-libjpeg') + $(option gui && echo '-system-libpng') + $(qt_enable journald) + $(qt_enable kms) + $(qt_enable libinput) + $(qt_enable libproxy) + $(ever at_least 5.10.0-beta4 && qt_enable vulkan) + ) + + # Avoid auto detection of CPU features: + # sse2, sse3, ssse3, sse4.1, sse4.2, avx, avx2, avx512 neon + # Always enable sse2 on amd64 + # FIXME: needs to be handled on cross (heirecka) + if option !platform:amd64 && option !x86_cpu_features:sse2 ; then + myconf+=( -no-sse2 ) + fi + for feature in sse3 ssse3 sse4.1 sse4.2 avx avx2 avx512 ; do + if option !amd64_cpu_features:${feature} && option !x86_cpu_features:${feature} ; then + myconf+=( -no-${feature} ) + fi + done + + # X + local o X_options="fontconfig sm xkb" + for o in ${X_options}; do + myconf+=( $(qt_enable gui ${o}) ) + done + + # Other GUI options + local g GUI_options="egl evdev gbm mtdev widgets xcb xcb-xlib xinput2 xkbcommon-evdev" + for g in ${GUI_options}; do + myconf+=( $(qt_enable gui ${g}) ) + done + + if option gui ; then + myconf+=( $(option opengles && echo -opengl es2 || echo -opengl desktop) ) + else + myconf+=( -no-opengl ) + fi + + myconf+=( + -no-sql-db2 # IBM DB2 (version 7.1 and above) + -no-sql-ibase # Borland InterBase + -no-sql-oci # Open Database Connectivity (ODBC) (e.g. MS SQL Server) + -no-sql-odbc # Oracle Call Interface Driver + -no-sql-sqlite2 # SQLite version 2 + -no-sql-tds # Sybase Adaptive Server + $(qt_enable mysql sql-mysql plugin "") + $(option mysql && echo "-I/usr/$(exhost --target)/include/mysql -L/usr/$(exhost --target)/lib/mysql/") + $(qt_enable postgresql sql-psql plugin "") + $(option postgresql && echo "-I/usr/$(exhost --target)/include/postgresql/server/") + $(qt_enable sqlite sql-sqlite plugin "" -system-sqlite) + ) + + # optional parts + myconf+=( + -make libs + -make tools + $(qt_build examples) + $(expecting_tests && echo "-make tests" || echo "-nomake tests") + ) + + # Set {C,CXX,LD}FLAGS. + # Do not link with -rpath (Gentoo bug #75181). + edo sed -e "s:QMAKE_CFLAGS_RELEASE.*=.*:QMAKE_CFLAGS_RELEASE=${CFLAGS}:" \ + -e "s:QMAKE_CXXFLAGS_RELEASE.*=.*:QMAKE_CXXFLAGS_RELEASE=${CXXFLAGS}:" \ + -e "s:QMAKE_LFLAGS_RELEASE.*=.*:QMAKE_LFLAGS_RELEASE=${LDFLAGS}:" \ + -e "/CONFIG/s:$: nostrip:" \ + -e "s:QMAKE_RPATH.*=.*:QMAKE_RPATH=:" \ + -e "s:X11R6/::" \ + -i "${WORK}"/mkspecs/$(qt_mkspecs_dir)/qmake.conf + + # use gcc for linking + unset LD + + qconf5 "${myconf[@]}" + + edo sed -e "s:^CXXFLAGS.*=:CXXFLAGS = ${CXXFLAGS} $(EXTRA_CXXFLAGS) $(CONFIG_CXXFLAGS) $(CPPFLAGS):" \ + -e "s:^LFLAGS.*=:LFLAGS = ${LDFLAGS} $(EXTRA_LFLAGS) $(CONFIG_LFLAGS):" \ + -i "${WORK}"/qmake/Makefile +} + +qtbase_src_compile() { + default + + if option doc; then + # qt expects qhelpgenerator from qttools in workdir/bin, so symlink it to there + edo ln -s /usr/$(exhost --target)/lib/qt5/bin/qhelpgenerator \ + "${WORK}"/bin/qhelpgenerator + # html_docs target builds html docs, qch_docs QCH files (assistant), docs both + option doc && emake docs + fi +} + +qtbase_src_install() { + default + + local host=$(exhost --target) + + # remove build dir from libraries + edo sed -i -e "s:${WORK}/lib:/usr/${host}/lib/qt5:g" "${IMAGE}"/usr/${host}/lib/{*.la,*.prl,pkgconfig/*.pc} + + hereenvd 44qt5 <<EOF +LDPATH=/usr/@TARGET@/lib/qt5 +QT_PLUGIN_PATH=/usr/host/lib/qt5/plugins +EOF + + if option examples ; then + # The examples might add some empty dirs. Since the examples are additional documentation, + # there shouldn't be any empty dirs we might want to keep, so we remove them all in + # one go. + edo find "${IMAGE}"/usr/share/qt5/examples -type d -empty -delete + fi + + # install documentation + if option doc ; then + local modules + modules=( qtcore qtconcurrent qtdbus qtnetwork qttestlib qtxml ) + option gui && modules+=( qtgui qtopengl qtprintsupport qtwidgets ) + option sql && modules+=( qtsql ) + + # QCH-Files e.g. for Qt Assistant... + for i in ${modules[@]} ; do + dodoc "${WORK}"/doc/${i}.qch + done + + # ... and HTML documentation + docinto html + edo pushd "${WORK}"/doc + for i in ${modules[@]} ; do + dodoc -r ${i} + done + edo popd + fi + + # remove references to build dir + edo sed -i -e "/^QMAKE_PRL_BUILD_DIR/d" "${IMAGE}"/usr/${host}/lib/libQt5*.prl + + # install symlinks for some binaries to /usr/bin + local binaries + edo mkdir "${IMAGE}"/usr/${host}/bin + binaries=( moc qmake rcc $(option gui && echo "uic") ) + + for i in ${binaries[@]} ; do + [[ -e "${IMAGE}"/usr/${host}/lib/qt5/bin/${i} ]] || die "/usr/${host}/lib/qt5/bin/${i} does not exist in ${IMAGE}" + dosym /usr/${host}/lib/qt5/bin/${i} /usr/${host}/bin/${i}-qt5 + done + + # disable debug output from applications by default + insinto /etc/xdg/QtProject + hereins qtlogging.ini <<EOF +[Rules] +*.debug=false +EOF +} + |