Add qt5-qtbase with OpenGL ES2 enabled (#996)

Add qt5-qtbase with OpenGL ES2 enabled and adjust the
upstream compatibility test case.
* Test case: don't get the qt5-qtbase version from any APKINDEX, but
  only from Alpine's community APKINDEX
* Test case: If the pkgver is 9999, look at _pkgver
This commit is contained in:
Bart Ribbers 2017-12-11 21:24:30 +01:00 committed by Oliver Smith
parent 5e7de79b90
commit fbb4704bdb
7 changed files with 411 additions and 2 deletions

View File

@ -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"

View File

@ -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 <openssl/ssl.h>
-#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

View File

@ -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 <openssl/bn.h>.
#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<QSslEllipticCurve> 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<unsigned char *>(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

View File

@ -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"

View File

@ -0,0 +1,47 @@
# Maintainer: Natanael Copa <ncopa@alpinelinux.org>
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"

View File

@ -198,6 +198,9 @@ apkbuild_attributes = {
# mesa
"_llvmver": {"array": False},
# Overridden packages
"_pkgver": {"array": False},
}
# Variables from deviceinfo. Reference: <https://postmarketos.org/deviceinfo>

View File

@ -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 + " != " +