# Maintainer: Natanael Copa <ncopa@alpinelinux.org>
pkgname=qt
pkgver=4.8.5
pkgrel=2
pkgdesc="A cross-platform application and UI framework"
url="http://qt-project.org/"
arch="all"
license="GPL3 LGPL"
depends="ca-certificates"
subpackages="$pkgname-dev $pkgname-doc $pkgname-assistant $pkgname-config
	$pkgname-sqlite $pkgname-odbc $pkgname-postgresql $pkgname-mysql
	$pkgname-tds $pkgname-webkit $pkgname-x11 $pkgname-private-dev:private
	$pkgname-lang"

depends_dev="mesa-dev libice-dev libsm-dev libx11-dev libxext-dev
	libxrender-dev alsa-lib-dev openssl-dev fontconfig-dev freetype-dev
	glib-dev libpng-dev zlib-dev sqlite-dev dbus-dev"
makedepends="$depends_dev postgresql-dev mysql-dev unixodbc-dev cups-dev
	gtk+-dev tiff-dev libmng-dev libxrandr-dev libxv-dev libxi-dev perl
	gawk paxctl rsync freetds-dev hicolor-icon-theme"
install=
source="http://download.qt-project.org/official_releases/qt/4.8/$pkgver/qt-everywhere-opensource-src-4.8.5.tar.gz
	qt-gtk-theme-fix.patch
	qt-musl.patch
	qt-musl-iconv-no-bom.patch
	qt-clucene-timeb.patch
	qsettings-recursive-global-mutex.patch
	assistant.desktop
	designer.desktop
	linguist.desktop
	qtconfig.desktop
	"

_builddir="$srcdir"/qt-everywhere-opensource-src-$pkgver
prepare() {
	cd "$_builddir"
	for i in $source; do
		case $i in
		*.patch)
			msg "Applying $i"
			patch -p1 -i "$srcdir"/$i || return 1
			;;
		esac
	done
	sed -i "s|-O2|$CXXFLAGS|" mkspecs/common/g++.conf
	sed -i "/^QMAKE_RPATH/s| -Wl,-rpath,||g" mkspecs/common/g++.conf
	sed -i "/^QMAKE_LFLAGS\s/s|+=|+= $LDFLAGS|g" mkspecs/common/g++.conf
}

build() {
	cd "$_builddir"
	unset QMAKESPEC
	export QT4DIR="$_builddir"
	export PATH="${QT4DIR}/bin:${PATH}"
	export LD_LIBRARY_PATH=${QT4DIR}/lib:${LD_LIBRARY_PATH}
	# note: not autotools
	./configure -confirm-license -opensource \
		-prefix /usr \
		-docdir /usr/share/doc/qt \
		-plugindir /usr/lib/qt/plugins \
		-importdir /usr/lib/qt/imports \
		-datadir /usr/share/qt \
		-translationdir /usr/share/qt/translations \
		-sysconfdir /etc \
		-examplesdir /usr/share/doc/qt/examples \
		-demosdir /usr/share/doc/qt/demos \
		-largefile \
		-no-pch \
		-plugin-sql-psql \
		-plugin-sql-mysql \
		-plugin-sql-sqlite \
		-plugin-sql-odbc \
		-plugin-sql-tds \
		-system-sqlite \
		-xmlpatterns \
		-no-phonon \
		-no-phonon-backend \
		-svg \
		-webkit \
		-script \
		-scripttools \
		-system-zlib \
		-system-libtiff \
		-system-libpng \
		-system-libmng \
		-system-libjpeg \
		-nomake demos \
		-nomake examples \
		-nomake docs \
		-no-rpath \
		-openssl-linked \
		-silent \
		-optimized-qmake \
		-dbus \
		-reduce-relocations \
		-no-separate-debug-info \
		-gtkstyle \
		-opengl \
		-no-openvg \
		-glib \
		|| return 1
	qmake && make
}

package() {
	cd "$_builddir"
	make INSTALL_ROOT="$pkgdir" install
	rm -r "$pkgdir"/usr/lib/*.la \
		"$pkgdir"/usr/tests || return 1

	paxctl -cm "$pkgdir"/usr/bin/qmlviewer "$pkgdir"/usr/bin/designer \
		|| return 1

	# install missing icons and desktop files
	for icon in tools/linguist/linguist/images/icons/linguist-*-32.png ; do
		size=$(echo $(basename ${icon}) | cut -d- -f2)
		install -p -D -m644 ${icon} "${pkgdir}"/usr/share/icons/hicolor/${size}x${size}/apps/linguist.png
	done
	install -p -Dm644 src/gui/dialogs/images/qtlogo-64.png \
		"${pkgdir}"/usr/share/icons/hicolor/64x64/apps/qtlogo.png
	install -p -Dm644 tools/assistant/tools/assistant/images/assistant.png \
		"${pkgdir}"/usr/share/icons/hicolor/32x32/apps/assistant.png
	install -p -Dm644 tools/designer/src/designer/images/designer.png \
		"${pkgdir}"/usr/share/icons/hicolor/128x128/apps/designer.png
	install -d ${pkgdir}/usr/share/applications
	for i in linguist designer assistant qtconfig; do
		install -m644 "${srcdir}"/$i.desktop \
			"${pkgdir}"/usr/share/applications/ || return 1
	done

	# install license addition
	install -D -m644 LGPL_EXCEPTION.txt \
		"${pkgdir}"/usr/share/licenses/qt/LGPL_EXCEPTION.txt

	# Fix wrong path in pkgconfig files
	find "${pkgdir}"/usr/lib/pkgconfig -type f -name '*.pc' \
		-exec perl -pi -e "s, -L${srcdir}/?\S+,,g" {} \; \
		|| return 1
	# Fix wrong path in prl files
	find "${pkgdir}"/usr/lib -type f -name '*.prl' -exec sed -i \
		-e '/^QMAKE_PRL_BUILD_DIR/d;s/\(QMAKE_PRL_LIBS =\).*/\1/' {} \;\
		|| return 1
}

_mv_files() {
	local i
	for i in "$@"; do
		mkdir -p "$subpkgdir"/${i%/*}
		mv "$pkgdir"/$i "$subpkgdir"/$i || return 1
	done
}

dev() {
	mkdir -p "$subpkgdir"/usr/share/qt \
		"$subpkgdir"/usr/bin \
		"$subpkgdir"/usr/lib \

	mv "$pkgdir"/usr/share/qt/mkspecs \
		"$pkgdir"/usr/share/qt/q3porting.xml \
		"$subpkgdir"/usr/share/qt/ \
		|| return 1
	default_dev

	cd "$pkgdir"/usr/bin
	mv designer lconvert linguist lrelease lupdate moc pixeltool \
		qcollectiongenerator qdbuscpp2xml qdbusxml2cpp qdoc3 \
		qhelpconverter qhelpgenerator qmake qt3to4 qttracereplay \
		rcc uic uic3 xmlpatterns xmlpatternsvalidator \
		"$subpkgdir"/usr/bin/ || return 1

	cd "$pkgdir"
	_mv_files $(find * -name 'designer*') \
		$(find * -name 'linguist*')
}

assistant() {
	pkgdesc="Documentation browser for Qt"
	cd "$pkgdir"
	_mv_files $(find * -name 'assistant*') || return 1
}

config() {
	pkgdesc="Graphical configuration tool for programs using Qt"
	cd "$pkgdir"
	_mv_files $(find * -name 'qt*config*') || return 1
}

sqlite() {
	pkgdesc="SQLite driver for Qt's SQL classes"
	cd "$pkgdir"
	_mv_files usr/lib/qt/plugins/sqldrivers/libqsqlite*
}

odbc() {
	pkgdesc="ODBC driver for Qt's SQL classes"
	cd "$pkgdir"
	_mv_files usr/lib/qt/plugins/sqldrivers/libqsqlodbc*
}

postgresql() {
	pkgdesc="PostgreSQL driver for Qt's SQL classes"
	cd "$pkgdir"
	_mv_files usr/lib/qt/plugins/sqldrivers/libqsqlpsql*
}

mysql() {
	pkgdesc="MySQL driver for Qt's SQL classes"
	cd "$pkgdir"
	_mv_files usr/lib/qt/plugins/sqldrivers/libqsqlmysql*
}

tds() {
	pkgdesc="TDS driver for Qt's SQL classes"
	cd "$pkgdir"
	_mv_files usr/lib/qt/plugins/sqldrivers/libqsqltds*
}


webkit() {
	pkgdesc="Qt Webkit libraries"
	mkdir -p "$subpkgdir"/usr/lib/qt/imports
	mv "$pkgdir"/usr/lib/libQtWebKit.so.* \
		"$subpkgdir"/usr/lib/ || return 1
	mv "$pkgdir"/usr/lib/qt/imports/QtWebKit \
		"$subpkgdir"/usr/lib/qt/imports/ || return 1
}

x11() {
	pkgdesc="Qt GUI-related libraries"
	depends="hicolor-icon-theme"
	replaces="qt"
	cd "$pkgdir"
	_mv_files \
		usr/bin/qdbusviewer \
		usr/bin/qmlviewer \
		usr/bin/qmlplugindump \
		usr/lib/libQt3Support.so.* \
		usr/lib/libQtCLucene.so.* \
		usr/lib/libQtDesigner.so.* \
		usr/lib/libQtDeclarative.so.* \
		usr/lib/libQtDesignerComponents.so.* \
		usr/lib/libQtGui.so.* \
		usr/lib/libQtHelp.so.* \
		usr/lib/libQtMultimedia.so.* \
		usr/lib/libQtOpenGL.so.* \
		usr/lib/libQtScriptTools.so.* \
		usr/lib/libQtSvg.so.* \
		usr/share/icons \
		usr/lib/qt/imports \
		usr/lib/qt/plugins
}

private() {
	pkgdesc="Private headers for Qt toolkit"
	cd "$_builddir"
	mkdir -p "$subpkgdir"/usr
	rsync -aR \
		include/QtCore/private \
		include/QtDeclarative/private \
		include/QtGui/private \
		include/QtScript/private \
		src/corelib/*/*_p.h \
		src/declarative/*/*_p.h \
		src/gui/*/*_p.h \
		src/script/*/*_p.h \
		"$subpkgdir"/usr || return 1
}

lang() {
	pkgdesc="translations for Qt"
	mkdir -p "$subpkgdir"/usr/share/qt/
	mv "$pkgdir"/usr/share/qt/translations \
		"$subpkgdir"/usr/share/qt/
}

md5sums="1864987bdbb2f58f8ae8b350dfdbe133  qt-everywhere-opensource-src-4.8.5.tar.gz
8eeac363a5d9bc1ca06501a7cbe59b08  qt-gtk-theme-fix.patch
bc83dc99f866423b4803453a0e2949d2  qt-musl.patch
077e31e0cb0d25637a3b3638fffbef3c  qt-musl-iconv-no-bom.patch
14549e243772acfe2e9e0bf5d8d001f3  qt-clucene-timeb.patch
7467e168418c50b2737b4b2fab4448fe  qsettings-recursive-global-mutex.patch
a445c6917086d80f1cfc1e40cb6b0132  assistant.desktop
d457f0a0ad68a3861c3cadefe3b42ded  designer.desktop
668331d9798a0e2b94381efb7be4c513  linguist.desktop
c29f2993d6a0f73d756d2fa36e130e1c  qtconfig.desktop"
sha256sums="eb728f8268831dc4373be6403b7dd5d5dde03c169ad6882f9a8cb560df6aa138  qt-everywhere-opensource-src-4.8.5.tar.gz
b64ea69ca9ed18f464a3810964b340432c528ebb02c9c7851ecc8e99cfe74877  qt-gtk-theme-fix.patch
e70bdddf67c358c02099bebee460e3c5456666562bff9ef9ebaacf9f4ea7a6df  qt-musl.patch
40b337c16bbb1d259f315fe5a1b110f9917223aee53b82809934efa4fa5e62a3  qt-musl-iconv-no-bom.patch
0c74a82080bcb8f4a700e907f4f1ed98a0338c6954620ee42c82002b199acedc  qt-clucene-timeb.patch
8ef97783ff93a515a31c1e27c6b3b22e2ad2fd9cf0fa94965e5c413ae579e64c  qsettings-recursive-global-mutex.patch
1094300e3d69e55eb69d87cbaac6724f68b0618938c6eb1b0ddd22ba99c7f8a2  assistant.desktop
74c2c5d27a1c1ad08ab01122bcf333f75d0a014b4755d3ddd8764c2425f6e320  designer.desktop
1b9ecd839c1a5dfcec87653849287c31bf2f4044300958be802ebb943e896998  linguist.desktop
1e5cb7c2f12d4db35d668f01548a2bef131fe92133d76c78170fb74a377d5ef8  qtconfig.desktop"
sha512sums="47118d1aa30c59a1eb74e805023cd060edcb35bb0944fe6651889254b75acbd4b83700ba92a9bc215663474d26330cb44f084098c380fac9270742659e5864eb  qt-everywhere-opensource-src-4.8.5.tar.gz
4be22db63c27ce2fa8c4f0af47f951b3aebb1f41c63c1ff02cec429be26d86f869ce8d137e313ea59a7540ebf1866ef2245471b754588776d20f881041141b55  qt-gtk-theme-fix.patch
fb621e9e5a60bb5bd4ad86fa41772fd8db7e8ad3a6e8d36a3d720d493d462db618e4bf3187e3eb66d123fceca64bbbd2df2afba506cc4c79bafa456cd67e82aa  qt-musl.patch
a185ea5e984d2636e3f9f6c4ed8fad66a17575da0679724da60a3dc519468ab45aa9369f43ce5c64f07cb730910e36623164aefafca3aabe0359c62becca870e  qt-musl-iconv-no-bom.patch
a4947c7210f5b9a39f78b1056d2fe87bc9e25dda7d6287f138f8889ae8a3a8687ed7346261f219e9e39afb5143e895b52804347484d10c42907868c4eac9ef0a  qt-clucene-timeb.patch
277e5ceec4fcc5d77a8591eafdb24125a54770576b7997aee6df39d85a7f1deabf8547fb42127cb118ebb8e7f81e3a3624a75d461581052dadf7abb99f1c9bd7  qsettings-recursive-global-mutex.patch
005ed6fe50b237e4541c0f30cbd87ec5425eff7e7c8d55d2b9b24ea8469e75e1fc8a3f26296841ab4cbd566517b3f1aa1fa7b36e1a9677d284cfff615fd24614  assistant.desktop
731aae6a0d776c1be5a49dadc5480b205ba5c8e056d108e2bb96a19dd52b6c6ca22387b37505cf97a2575228cd5dd65c773d0fde1c26299e47fdc11a49f651fd  designer.desktop
70943d9ee9ac7ff6281079be14b741095c60428b30b27bafc42a8bb1729a6f7e8e163cff3d2b5d5a66bbdab464816eea479a3f822598ff2fe068d4025652a049  linguist.desktop
c38af96c9519767d09c36184d43c9177522f3a9e3eaa228f76e1dab324bbc462c3c135a3d51a1c8649c764d52196f27b8dd95e3780c5e79664136c03611dc13a  qtconfig.desktop"