diff --git a/aports/main/qt5-qtbase/APKBUILD b/aports/main/qt5-qtbase/APKBUILD new file mode 100644 index 00000000..3ea4345c --- /dev/null +++ b/aports/main/qt5-qtbase/APKBUILD @@ -0,0 +1,207 @@ +pkgname=qt5-qtbase +_pkgname=${pkgname/qt5-//}-opensource-src +pkgver=9999 +_pkgver=5.9.3 +_ver=${_pkgver/_p/-} +_ver=${_ver/_/-} +_ver=${_ver/beta0/beta} +_ver=${_ver/rc0/rc} +_V=${_ver/rc/RC} +pkgrel=0 +pkgdesc="Qt5 - QtBase components" +url="http://qt-project.org/" +arch="all" +license="LGPLv2 with exceptions or GPLv3 with exceptions" +_sub="$pkgname-sqlite $pkgname-odbc $pkgname-postgresql $pkgname-mysql + $pkgname-tds $pkgname-x11" +depends_dev="mesa-dev libice-dev libsm-dev libx11-dev libxext-dev + libressl-dev fontconfig-dev freetype-dev glib-dev libpng-dev zlib-dev + sqlite-dev dbus-dev perl $_sub" +makedepends="$depends_dev + bison + cups-dev + eudev-dev + flex + freetds-dev + gawk + gperf + gtk+2.0-dev + hicolor-icon-theme + icu-dev + libinput-dev + libjpeg-turbo-dev + libxkbcommon-dev + libxi-dev + libxrandr-dev + libxrender-dev + libxslt-dev + libxv-dev + mariadb-dev + mtdev-dev + pcre2-dev + postgresql-dev + unixodbc-dev + xcb-util-dev + xcb-util-image-dev + xcb-util-keysyms-dev + xcb-util-wm-dev + xcb-util-renderutil-dev + " +subpackages="$pkgname-dev $pkgname-doc $_sub" + +case $pkgver in +*_beta*|*_rc*) _rel=development_releases;; +*) _rel=official_releases;; +esac +source="http://download.qt-project.org/$_rel/qt/${_pkgver%.*}/$_ver/submodules/$_pkgname-$_V.tar.xz + qt-musl-iconv-no-bom.patch + libressl-compat.patch + " + +_qt5_prefix=/usr/lib/qt5 +_qt5_datadir=/usr/share/qt5 +builddir="$srcdir"/$_pkgname-${_V%-*} + +prepare() { + default_prepare + cd "$builddir" + sed -i -e "s|-O2|$CXXFLAGS|" \ + -e "/^QMAKE_RPATH/s| -Wl,-rpath,||g" \ + -e "/^QMAKE_LFLAGS\s/s|+=|+= $LDFLAGS|g" \ + mkspecs/common/*.conf +} + +build() { + local _arch + cd "$builddir" + ./configure -confirm-license -opensource \ + -archdatadir "$_qt5_prefix" \ + -bindir "$_qt5_prefix"/bin \ + -datadir "$_qt5_datadir" \ + -dbus-linked \ + -docdir /usr/share/doc/qt5 \ + -examplesdir /usr/share/doc/qt5/examples \ + -glib \ + -icu \ + -importdir "$_qt5_prefix"/imports \ + -libexecdir "$_qt5_prefix"/libexec \ + -no-rpath \ + -no-separate-debug-info \ + -no-pch \ + -nomake examples \ + -opengl es2 \ + -openssl-linked \ + -optimized-qmake \ + -plugin-sql-mysql \ + -plugin-sql-odbc \ + -plugin-sql-psql \ + -plugin-sql-sqlite \ + -plugin-sql-tds \ + -plugindir "$_qt5_prefix"/plugins \ + -prefix /usr \ + -silent \ + -sysconfdir /etc/xdg \ + -system-libjpeg \ + -system-libpng \ + -system-pcre \ + -system-sqlite \ + -system-xcb \ + -system-zlib \ + -translationdir "$_qt5_datadir"/translations \ + -no-reduce-relocations + make +} + +check() { + cd "$builddir" + make check +} + +package() { + cd "$builddir" + make INSTALL_ROOT="$pkgdir" install + mkdir -p "$pkgdir"/usr/bin/ + for i in "$pkgdir"/$_qt5_prefix/bin/*; do + _name=${i##*/} + case $_name in + *.*) _dest="$pkgdir"/usr/bin/${_name%.*}-qt5.${_name##*.};; + *) _dest="$pkgdir"/usr/bin/${_name%.*}-qt5;; + esac + ln -s ../lib/qt5/bin/"${_name}" "$_dest" + done +} + +_mv_files() { + local i + for i; do + mkdir -p "$subpkgdir"/${i%/*} + mv "$pkgdir"/$i "$subpkgdir"/$i + done +} + +dev() { + cd "$pkgdir" + _mv_files usr/lib/qt5/mkspecs \ + usr/lib/cmake \ + usr/lib/qt5/bin \ + usr/bin \ + $(find usr/ -name '*.prl') + default_dev +} + +sqlite() { + pkgdesc="SQLite driver for Qt5's SQL classes" + cd "$pkgdir" + _mv_files usr/lib/qt5/plugins/sqldrivers/libqsqlite* +} + +odbc() { + pkgdesc="ODBC driver for Qt5's SQL classes" + cd "$pkgdir" + _mv_files usr/lib/qt5/plugins/sqldrivers/libqsqlodbc* +} + +postgresql() { + pkgdesc="PostgreSQL driver for Qt5's SQL classes" + cd "$pkgdir" + _mv_files usr/lib/qt5/plugins/sqldrivers/libqsqlpsql* +} + +mysql() { + pkgdesc="MySQL driver for Qt5's SQL classes" + cd "$pkgdir" + _mv_files usr/lib/qt5/plugins/sqldrivers/libqsqlmysql* +} + +tds() { + pkgdesc="TDS driver for Qt5's SQL classes" + cd "$pkgdir" + _mv_files usr/lib/qt5/plugins/sqldrivers/libqsqltds* +} + +x11() { + pkgdesc="Qt5 GUI-related libraries" + depends="hicolor-icon-theme" + cd "$pkgdir" + _mv_files \ + usr/lib/libQt5EglFSDeviceIntegration.so.* \ + usr/lib/libQt5EglFsKmsSupport.so.* \ + usr/lib/libQt5Gui.so.* \ + usr/lib/libQt5OpenGL.so.* \ + usr/lib/libQt5PrintSupport.so.* \ + usr/lib/libQt5Widgets.so.* \ + usr/lib/libQt5XcbQpa.so.* \ + usr/lib/qt5/plugins/egldeviceintegrations \ + usr/lib/qt5/plugins/generic \ + usr/lib/qt5/plugins/image* \ + usr/lib/qt5/plugins/platform* \ + usr/lib/qt5/plugins/printsupport* \ + usr/lib/qt5/plugins/xcbglintegrations + + scanelf -Rn usr/ | egrep '(libX|libQt5Gui|libGL)' && return 1 + return 0 +} + +sha512sums="256ffb8760e94c0f87790ed35e210d0c9613e14314ff442dd763cc93fbd5caa6c11c95f5d44b12a7687fb93c9f857878132cf6d76e5933f647ca7beb54b18c7c qtbase-opensource-src-5.9.3.tar.xz +7d68421a14f0259535c977d8a521c98918193c107b76ac664571b12f5b0d7588a0d0e1297af412a26753a393b21f3f44c3274fa8ab5bc87f03705a3a03acb444 qt-musl-iconv-no-bom.patch +95061cfb0924e26b123308c188c4bc5639d3f4d041dd48e5f8e399347d9b74278d0166e0889f32df112c0195d222ad024284830d6423b7061a32da0a7ebd04c5 libressl-compat.patch" diff --git a/aports/main/qt5-qtbase/hack-openssl_test.patch b/aports/main/qt5-qtbase/hack-openssl_test.patch new file mode 100644 index 00000000..8f6593bd --- /dev/null +++ b/aports/main/qt5-qtbase/hack-openssl_test.patch @@ -0,0 +1,10 @@ +--- qtbase/config.tests/unix/openssl/openssl.cpp 2016-09-16 07:49:42.000000000 +0200 ++++ qtbase/config.tests/unix/openssl/openssl.cpp 2016-10-21 19:05:10.099362793 +0200 +@@ -39,7 +39,7 @@ + + #include + +-#if OPENSSL_VERSION_NUMBER-0 >= 0x10002000L && !defined(OPENSSL_NO_EC) && !defined(SSL_CTRL_SET_CURVES) ++#if (OPENSSL_VERSION_NUMBER-0 >= 0x10002000L) && !defined(LIBRESSL_VERSION_NUMBER) && !defined(OPENSSL_NO_EC) && !defined(SSL_CTRL_SET_CURVES) + # error "OpenSSL was reported as >= 1.0.2 but is missing required features, possibly it's libressl which is unsupported" + #endif diff --git a/aports/main/qt5-qtbase/libressl-compat.patch b/aports/main/qt5-qtbase/libressl-compat.patch new file mode 100644 index 00000000..70471af8 --- /dev/null +++ b/aports/main/qt5-qtbase/libressl-compat.patch @@ -0,0 +1,119 @@ +--- qtbase/src/network/ssl/qsslellipticcurve_openssl.cpp 2017-01-18 15:20:58.000000000 +0100 ++++ qtbase/src/network/ssl/qsslellipticcurve_openssl.cpp 2017-02-21 16:25:56.477986158 +0100 +@@ -82,7 +82,7 @@ + + int nid = q_OBJ_sn2nid(curveNameLatin1.data()); + +-#if OPENSSL_VERSION_NUMBER >= 0x10002000L ++#if (OPENSSL_VERSION_NUMBER >= 0x10002000L) && !defined(LIBRESSL_VERSION_NUMBER) + if (nid == 0 && q_SSLeay() >= 0x10002000L) + nid = q_EC_curve_nist2nid(curveNameLatin1.data()); + #endif // OPENSSL_VERSION_NUMBER >= 0x10002000L +--- qtbase/src/network/ssl/qsslsocket_openssl.cpp 2017-01-18 15:20:58.000000000 +0100 ++++ qtbase/src/network/ssl/qsslsocket_openssl.cpp 2017-02-21 19:12:22.200604090 +0100 +@@ -1626,7 +1626,7 @@ + } + #endif // OPENSSL_VERSION_NUMBER >= 0x1000100fL ... + +-#if OPENSSL_VERSION_NUMBER >= 0x10002000L ++#if (OPENSSL_VERSION_NUMBER >= 0x10002000L) && !defined(LIBRESSL_VERSION_NUMBER) + if (q_SSLeay() >= 0x10002000L && mode == QSslSocket::SslClientMode) { + EVP_PKEY *key; + if (q_SSL_get_server_tmp_key(ssl, &key)) +--- qtbase/src/network/ssl/qsslsocket_openssl_symbols.cpp 2017-01-18 15:20:58.000000000 +0100 ++++ qtbase/src/network/ssl/qsslsocket_openssl_symbols.cpp 2017-02-21 19:14:32.805677245 +0100 +@@ -151,7 +151,7 @@ + DEFINEFUNC(BIO_METHOD *, BIO_s_mem, void, DUMMYARG, return 0, return) + DEFINEFUNC3(int, BIO_write, BIO *a, a, const void *b, b, int c, c, return -1, return) + DEFINEFUNC(int, BN_num_bits, const BIGNUM *a, a, return 0, return) +-#if OPENSSL_VERSION_NUMBER >= 0x10100000L ++#if (OPENSSL_VERSION_NUMBER >= 0x10100000L) && !defined(LIBRESSL_VERSION_NUMBER) + DEFINEFUNC2(int, BN_is_word, BIGNUM *a, a, BN_ULONG w, w, return 0, return) + #endif + DEFINEFUNC2(BN_ULONG, BN_mod_word, const BIGNUM *a, a, BN_ULONG w, w, return -1, return) +@@ -451,7 +451,7 @@ + DEFINEFUNC(EC_KEY *, EC_KEY_new_by_curve_name, int nid, nid, return 0, return) + DEFINEFUNC(void, EC_KEY_free, EC_KEY *ecdh, ecdh, return, DUMMYARG) + DEFINEFUNC2(size_t, EC_get_builtin_curves, EC_builtin_curve * r, r, size_t nitems, nitems, return 0, return) +-#if OPENSSL_VERSION_NUMBER >= 0x10002000L ++#if (OPENSSL_VERSION_NUMBER >= 0x10002000L) && !defined(LIBRESSL_VERSION_NUMBER) + DEFINEFUNC(int, EC_curve_nist2nid, const char *name, name, return 0, return) + #endif // OPENSSL_VERSION_NUMBER >= 0x10002000L + #endif // OPENSSL_NO_EC +@@ -791,7 +791,7 @@ + RESOLVEFUNC(EC_GROUP_get_degree) + #endif + RESOLVEFUNC(BN_num_bits) +-#if OPENSSL_VERSION_NUMBER >= 0x10100000L ++#if (OPENSSL_VERSION_NUMBER >= 0x10100000L) && !defined(LIBRESSL_VERSION_NUMBER) + RESOLVEFUNC(BN_is_word) + #endif + RESOLVEFUNC(BN_mod_word) +@@ -1020,7 +1020,7 @@ + RESOLVEFUNC(EC_KEY_new_by_curve_name) + RESOLVEFUNC(EC_KEY_free) + RESOLVEFUNC(EC_get_builtin_curves) +-#if OPENSSL_VERSION_NUMBER >= 0x10002000L ++#if (OPENSSL_VERSION_NUMBER >= 0x10002000L) && !defined(LIBRESSL_VERSION_NUMBER) + if (q_SSLeay() >= 0x10002000L) + RESOLVEFUNC(EC_curve_nist2nid) + #endif // OPENSSL_VERSION_NUMBER >= 0x10002000L +--- qtbase/src/network/ssl/qsslsocket_openssl_symbols_p.h 2017-01-18 15:20:58.000000000 +0100 ++++ qtbase/src/network/ssl/qsslsocket_openssl_symbols_p.h 2017-02-21 19:15:38.083714302 +0100 +@@ -228,7 +228,7 @@ + Q_AUTOTEST_EXPORT BIO_METHOD *q_BIO_s_mem(); + Q_AUTOTEST_EXPORT int q_BIO_write(BIO *a, const void *b, int c); + int q_BN_num_bits(const BIGNUM *a); +-#if OPENSSL_VERSION_NUMBER >= 0x10100000L ++#if (OPENSSL_VERSION_NUMBER >= 0x10100000L) && !defined(LIBRESSL_VERSION_NUMBER) + int q_BN_is_word(BIGNUM *a, BN_ULONG w); + #else + // BN_is_word is implemented purely as a +@@ -241,7 +241,7 @@ + // + // Users are required to include . + #define q_BN_is_word BN_is_word +-#endif // OPENSSL_VERSION_NUMBER >= 0x10100000L ++#endif // (OPENSSL_VERSION_NUMBER >= 0x10100000L) && !defined(LIBRESSL_VERSION_NUMBER) + BN_ULONG q_BN_mod_word(const BIGNUM *a, BN_ULONG w); + #ifndef OPENSSL_NO_EC + const EC_GROUP* q_EC_KEY_get0_group(const EC_KEY* k); +@@ -509,13 +509,13 @@ + + // EC curves management + size_t q_EC_get_builtin_curves(EC_builtin_curve *r, size_t nitems); +-#if OPENSSL_VERSION_NUMBER >= 0x10002000L ++#if (OPENSSL_VERSION_NUMBER >= 0x10002000L) && !defined(LIBRESSL_VERSION_NUMBER) + int q_EC_curve_nist2nid(const char *name); +-#endif // OPENSSL_VERSION_NUMBER >= 0x10002000L ++#endif // (OPENSSL_VERSION_NUMBER >= 0x10002000L) && !defined(LIBRESSL_VERSION_NUMBER) + #endif // OPENSSL_NO_EC +-#if OPENSSL_VERSION_NUMBER >= 0x10002000L ++#if (OPENSSL_VERSION_NUMBER >= 0x10002000L) && !defined(LIBRESSL_VERSION_NUMBER) + #define q_SSL_get_server_tmp_key(ssl, key) q_SSL_ctrl((ssl), SSL_CTRL_GET_SERVER_TMP_KEY, 0, (char *)key) +-#endif // OPENSSL_VERSION_NUMBER >= 0x10002000L ++#endif // (OPENSSL_VERSION_NUMBER >= 0x10002000L) && !defined(LIBRESSL_VERSION_NUMBER) + + // PKCS#12 support + int q_PKCS12_parse(PKCS12 *p12, const char *pass, EVP_PKEY **pkey, X509 **cert, STACK_OF(X509) **ca); +--- qtbase/src/network/ssl/qsslcontext_openssl.cpp 2017-01-18 15:20:58.000000000 +0100 ++++ qtbase/src/network/ssl/qsslcontext_openssl.cpp 2017-02-21 19:23:04.291975945 +0100 +@@ -344,7 +344,7 @@ + + const QVector qcurves = sslContext->sslConfiguration.ellipticCurves(); + if (!qcurves.isEmpty()) { +-#if OPENSSL_VERSION_NUMBER >= 0x10002000L && !defined(OPENSSL_NO_EC) ++#if (OPENSSL_VERSION_NUMBER >= 0x10002000L) && !defined(OPENSSL_NO_EC) && !defined(LIBRESSL_VERSION_NUMBER) + // Set the curves to be used + if (q_SSLeay() >= 0x10002000L) { + // SSL_CTX_ctrl wants a non-const pointer as last argument, +@@ -462,7 +462,7 @@ + m_npnContext.data = reinterpret_cast(m_supportedNPNVersions.data()); + m_npnContext.len = m_supportedNPNVersions.count(); + m_npnContext.status = QSslConfiguration::NextProtocolNegotiationNone; +-#if OPENSSL_VERSION_NUMBER >= 0x10002000L ++#if (OPENSSL_VERSION_NUMBER >= 0x10002000L) && !defined(LIBRESSL_VERSION_NUMBER) + if (q_SSLeay() >= 0x10002000L) { + // Callback's type has a parameter 'const unsigned char ** out' + // since it was introduced in 1.0.2. Internally, OpenSSL's own code + diff --git a/aports/main/qt5-qtbase/qt-musl-iconv-no-bom.patch b/aports/main/qt5-qtbase/qt-musl-iconv-no-bom.patch new file mode 100644 index 00000000..8bf35ec1 --- /dev/null +++ b/aports/main/qt5-qtbase/qt-musl-iconv-no-bom.patch @@ -0,0 +1,11 @@ +--- qtbase/src/corelib/codecs/qiconvcodec.cpp 2017-01-18 15:20:58.000000000 +0100 ++++ qtbase/src/corelib/codecs/qiconvcodec.cpp 2017-02-21 14:33:32.423808603 +0100 +@@ -64,7 +64,7 @@ + #elif defined(Q_OS_AIX) + # define NO_BOM + # define UTF16 "UCS-2" +-#elif defined(Q_OS_FREEBSD) ++#elif defined(Q_OS_FREEBSD) || (defined(Q_OS_LINUX) && !defined(__GLIBC__)) + # define NO_BOM + # if Q_BYTE_ORDER == Q_BIG_ENDIAN + # define UTF16 "UTF-16BE" diff --git a/aports/main/qt5-qtdeclarative/APKBUILD b/aports/main/qt5-qtdeclarative/APKBUILD new file mode 100644 index 00000000..d3263c47 --- /dev/null +++ b/aports/main/qt5-qtdeclarative/APKBUILD @@ -0,0 +1,47 @@ +# Maintainer: Natanael Copa +pkgname=qt5-qtdeclarative +_pkgname=${pkgname/qt5-//}-opensource-src +pkgver=5.9.3 +_ver=${pkgver/_p/-} +_ver=${_ver/_/-} +_ver=${_ver/beta0/beta} +_ver=${_ver/rc0/rc} +_V=${_ver/rc/RC} +pkgrel=1 +pkgdesc="Qt5 - QtDeclarative component" +url="http://qt-project.org/" +arch="all" +license="LGPLv2 with exceptions or GPLv3 with exceptions" +makedepends="qt5-qtbase-dev" +subpackages="$pkgname-dev" + +case $pkgver in +*_beta*|*_rc*) _rel=development_releases;; +*) _rel=official_releases;; +esac +source="http://download.qt-project.org/$_rel/qt/${pkgver%.*}/$_ver/submodules/$_pkgname-$_V.tar.xz" + +_qt5_prefix=/usr/lib/qt5 +builddir="$srcdir"/$_pkgname-${_V%-*} + +build() { + cd "$builddir" + qmake-qt5 && make +} + +check() { + cd "$builddir" + make check +} + +package() { + cd "$builddir" + make install INSTALL_ROOT="$pkgdir" + + mkdir -p "$pkgdir"/usr/bin/ + for i in "$pkgdir"/$_qt5_prefix/bin/*; do + ln -s ../lib/qt5/bin/${i##*/} "$pkgdir"/usr/bin/${i##*/}-qt5 + done +} + +sha512sums="933caf5848437cde45b4bbf0c70b6cafbc690657c651508b28138b2f90d2f823f4842bc709f4726e2c88d3913a92240b0dcd9248d83af0d06d7127b9a8211b24 qtdeclarative-opensource-src-5.9.3.tar.xz" diff --git a/pmb/config/__init__.py b/pmb/config/__init__.py index 41bb81b0..f11414e9 100644 --- a/pmb/config/__init__.py +++ b/pmb/config/__init__.py @@ -198,6 +198,9 @@ apkbuild_attributes = { # mesa "_llvmver": {"array": False}, + + # Overridden packages + "_pkgver": {"array": False}, } # Variables from deviceinfo. Reference: diff --git a/test/test_upstream_compatibility.py b/test/test_upstream_compatibility.py index 85bd7d48..05fb2c52 100644 --- a/test/test_upstream_compatibility.py +++ b/test/test_upstream_compatibility.py @@ -47,15 +47,27 @@ def test_qt_versions(args): """ # Upstream version pmb.helpers.repo.update(args) - index_data = pmb.parse.apkindex.read_any_index(args, "qt5-qtbase", "x86_64") + repository = args.mirror_alpine + args.alpine_version + "/community" + hash = pmb.helpers.repo.hash(repository) + index_path = (args.work + "/cache_apk_armhf/APKINDEX." + hash + + ".tar.gz") + index_data = pmb.parse.apkindex.read(args, "qt5-qtbase", index_path) pkgver_upstream = index_data["version"].split("-r")[0] - # Check our packages + # Iterate over our packages failed = [] for path in glob.glob(args.aports + "/*/qt5-*/APKBUILD"): + # Read the pkgver apkbuild = pmb.parse.apkbuild(args, path) pkgname = apkbuild["pkgname"] pkgver = apkbuild["pkgver"] + + # When we temporarily override packages from Alpine, we set the pkgver + # to 9999 and _pkgver contains the real version (see #994). + if pkgver == "9999": + pkgver = apkbuild["_pkgver"] + + # Compare if pkgver == pkgver_upstream: continue failed.append(pkgname + ": " + pkgver + " != " +