# Maintainer: Natanael Copa <ncopa@alpinelinux.org>
pkgname=mesa
pkgver=12.0.3
pkgrel=0
pkgdesc="Mesa DRI OpenGL library"
url="http://www.mesa3d.org"
arch="all"
license="LGPL"
depends=
subpackages="$pkgname-dev
	$pkgname-dri-ati:ati
	$pkgname-dri-nouveau:nouveau
	$pkgname-dri-swrast:swrast
	$pkgname-dri-vmwgfx:vmwgfx
	$pkgname-dricore $pkgname-glapi $pkgname-egl $pkgname-gl $pkgname-gles
	$pkgname-xatracker $pkgname-osmesa $pkgname-gbm
	$pkgname-libwayland-egl:_wayland
	"

depends_dev="libdrm-dev dri2proto libx11-dev libxext-dev libxxf86vm-dev
	libxdamage-dev libxfixes-dev libxcb-dev glproto dri3proto presentproto
	libxshmfence-dev"
makedepends="$depends_dev expat-dev xextproto python2 libxt-dev makedepend
	talloc-dev py-libxml2 flex bison llvm-dev eudev-dev libvdpau-dev
	libxvmc-dev gettext zlib-dev wayland-dev libelf-dev py-mako
	autoconf automake libtool"
source="ftp://ftp.freedesktop.org/pub/mesa/${pkgver}/mesa-$pkgver.tar.xz
	glx_ro_text_segm.patch
	musl-fixes.patch
	"

_dri_driverdir=/usr/lib/xorg/modules/dri
_dri_drivers="r200,radeon,nouveau,swrast"
_gallium_drivers="r300,r600,radeonsi,nouveau,svga,swrast"

_builddir="$srcdir/mesa-$pkgver"

_intel_dri=
case "$CARCH" in
x86*)
	_dri_drivers="${_dri_drivers},i915,i965"
	subpackages="$subpackages $pkgname-dri-intel:intel"
	;;
arm*)
	_gallium_drivers="${_gallium_drivers},vc4"
	;;
esac

prepare() {
	cd "$_builddir"
	for i in $source; do
		case $i in
		*.patch) msg $i; patch -p1 -i "$srcdir"/$i || return 1;;
		esac
	done
	libtoolize --force \
		&& aclocal \
		&& automake --add-missing \
		&& autoreconf || return 1
}

build() {
	cd "$_builddir"

	[ "$CLIBC" = "musl" ] && export CFLAGS="$CFLAGS -D_XOPEN_SOURCE=700"
	./configure \
		--build=$CBUILD \
		--host=$CHOST \
		--prefix=/usr \
		--sysconfdir=/etc \
		--with-dri-driverdir=$_dri_driverdir \
		--disable-asm \
		--disable-xvmc \
		--enable-glx-rts \
		--with-gallium-drivers=${_gallium_drivers} \
		--with-dri-drivers=${_dri_drivers} \
		--enable-llvm-shared-libs \
		--enable-gallium-llvm \
		--with-egl-platforms=x11,drm,wayland \
		--enable-shared-glapi \
		--enable-gbm \
		--disable-glx-tls \
		--enable-dri \
		--enable-glx \
		--enable-osmesa \
		--enable-gles1 \
		--enable-gles2 \
		--enable-egl \
		--enable-texture-float \
		--enable-xa \
		--enable-vdpau \
		|| return 1

	make || return 1
}

package() {
	cd "$_builddir"
	make -j1 DESTDIR="$pkgdir" install || return 1
}

dricore() {
	pkgdesc="Mesa dricore runtime libraries"
	install -d "$subpkgdir"/usr/lib "$subpkgdir"/etc
	mv "$pkgdir"/usr/lib/libdricore*.so.* \
		"$subpkgdir"/usr/lib/
	mv "$pkgdir"/etc/drirc "$subpkgdir"/etc/drirc
}

egl() {
	replaces="mesa"
	pkgdesc="Mesa libEGL runtime libraries"
	install -d "$subpkgdir"/usr/lib
	mv "$pkgdir"/usr/lib/libEGL.so* \
		"$subpkgdir"/usr/lib/
}

gl() {
	replaces="mesa"
	pkgdesc="Mesa libGL runtime libraries"
	install -d "$subpkgdir"/usr/lib
	mv "$pkgdir"/usr/lib/libGL.so* \
		"$subpkgdir"/usr/lib/
}

glapi() {
	replaces="$pkgname-gles"
	pkgdesc="Mesa shared glapi"
	install -d "$subpkgdir"/usr/lib
	mv "$pkgdir"/usr/lib/libglapi.so.* \
		"$subpkgdir"/usr/lib/
}

gles() {
	replaces="mesa"
	pkgdesc="Mesa libGLESv2 runtime libraries"
	install -d "$subpkgdir"/usr/lib
	mv "$pkgdir"/usr/lib/libGLES*.so* \
		"$subpkgdir"/usr/lib/
}

xatracker() {
	pkgdesc="Mesa XA state tracker for vmware"
	install -d "$subpkgdir"/usr/lib
	mv "$pkgdir"/usr/lib/libxatracker*.so.* \
		"$subpkgdir"/usr/lib/
}

osmesa() {
	pkgdesc="Mesa offscreen rendering libraries"
	install -d "$subpkgdir"/usr/lib
	mv "$pkgdir"/usr/lib/libOSMesa.so.* \
		"$subpkgdir"/usr/lib/
}

gbm() {
	pkgdesc="Mesa gbm library"
	replaces="mesa"
	install -d "$subpkgdir"/usr/lib
	mv "$pkgdir"/usr/lib/libgbm.so.* \
		"$subpkgdir"/usr/lib/
}

_mv_dri() {
	pkgdesc="Mesa DRI driver for $@"
	install -d "$subpkgdir"/$_dri_driverdir

	while [ $# -gt 0 ]; do
		mv "$pkgdir"/$_dri_driverdir/${1}.so \
			"$subpkgdir"/$_dri_driverdir/ || return 1
		shift
	done
}

_mv_vdpau() {
	local i
	install -d "$subpkgdir"/usr/lib/vdpau
	for i in "$@"; do
		mv "$pkgdir"/usr/lib/vdpau/libvdpau_$i.* \
			"$subpkgdir"/usr/lib/vdpau/ || return 1
	done
}

_mv_gpipe() {
	return 0
	# http://cgit.freedesktop.org/mesa/mesa/commit/?id=44ec468e8033553c26a112cebba41c343db00eb1
	# https://code.google.com/p/chromium/issues/detail?id=412089
#	local i
#	install -d "$subpkgdir"/usr/lib/gallium-pipe
#	for i in "$@"; do
#		mv "$pkgdir"/usr/lib/gallium-pipe/pipe_$i.* \
#			"$subpkgdir"/usr/lib/gallium-pipe/ || return 1
#	done
}

ati() {		_mv_dri radeon_dri r200_dri r300_dri r600_dri radeonsi_dri \
		&& _mv_vdpau r300 r600 radeonsi \
		&& _mv_gpipe r300 r600; }
intel() {	_mv_dri i915_dri i965_dri; }
nouveau() {	_mv_dri nouveau_dri nouveau_vieux_dri \
		&& _mv_vdpau nouveau \
		&& _mv_gpipe nouveau; }
swrast() {	_mv_dri swrast_dri kms_swrast_dri && _mv_gpipe swrast; }
vmwgfx() {	_mv_dri vmwgfx_dri && _mv_gpipe vmwgfx; }

_wayland() {
	pkgdesc="Mesa libwayland-egl library"
	mkdir -p "$subpkgdir"/usr/lib
	mv "$pkgdir"/usr/lib/libwayland-egl.so.* "$subpkgdir"/usr/lib/ \
		|| return 1
}

md5sums="1113699c714042d8c4df4766be8c57d8  mesa-12.0.3.tar.xz
a1a766b4c6a96d67cad9bd7ad5c578e8  glx_ro_text_segm.patch
924983cef0c3ede76e5011a179bac155  musl-fixes.patch"
sha256sums="1dc86dd9b51272eee1fad3df65e18cda2e556ef1bc0b6e07cd750b9757f493b1  mesa-12.0.3.tar.xz
004f52adefaeccfd4553e0b1d09ad769891d69d05880094c7a45d19623e674a6  glx_ro_text_segm.patch
aecc3d03d00d34bfb26f54679000fdb8719571b14161e4be4db962fba0f96d24  musl-fixes.patch"
sha512sums="7d6525b5ed75e1361f3586aaf7f058de06b5038900a6379ab5f713ee879a0b3cecd253d6f3fb799673ef097bcd6866d61b46c33c0059f6636bb06fb5ceb5d750  mesa-12.0.3.tar.xz
c3d4804ebc24c7216e4c9d4995fb92e116be7f478024b44808ee134a4c93bb51d1f66fe5fb6eca254f124c4abf6f81272b027824b3e2650a9607818bf793035a  glx_ro_text_segm.patch
9f7a050f09571a2b17098d495b82e2e85b293fb7285e7d6d7c3c48cd4220a1bdcc61a7321ba78dd14860939ecabe7e89b32d6110f3728f793273e1e26b78a553  musl-fixes.patch"
