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

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

setvar replaces = ""mesa-dricore""

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

setvar builddir = ""$srcdir/mesa-$pkgver""

setvar _arch_opts = ''

case (CARCH) {
x86* {
	setvar _dri_drivers = ""${_dri_drivers},i915,i965""
	setvar _vulcan_drivers = ""$_vulcan_drivers,intel""
	setvar subpackages = ""$subpackages $pkgname-dri-intel:_dri""
	setvar _arch_opts = ""--enable-dri3""
	}
arm* {
	setvar _gallium_drivers = ""${_gallium_drivers},vc4""
	case (CARCH) {
	armhf { setvar CFLAGS = ""$CFLAGS -mfpu=neon""}
	}
	}
}

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

proc build {
	cd $builddir

	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} \
		--with-vulcan-drivers=${_vulkan_drivers} \
		--with-llvm-prefix=/usr/lib/llvm$_llvmver \
		--enable-llvm-shared-libs \
		--enable-gallium-llvm \
		--with-egl-platforms=x11,drm,wayland \
		--enable-shared-glapi \
		--enable-gbm \
		--disable-glx-tls \
		--disable-nine \
		--enable-dri \
		--enable-glx \
		--enable-osmesa \
		--enable-gles1 \
		--enable-gles2 \
		--enable-egl \
		--enable-texture-float \
		--enable-xa \
		--enable-vdpau \
		$_arch_opts \
		|| return 1

	make || return 1
}

proc package {
	cd $builddir
	make -j1 DESTDIR="$pkgdir" install || return 1
}

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

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

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

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

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

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

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

proc _mv_dri {
	install -d "$subpkgdir"/$_dri_driverdir

	while test $Argc -gt 0 {
		mv "$pkgdir"/$_dri_driverdir/${1}.so \
			"$subpkgdir"/$_dri_driverdir/ || return 1
		shift
	}
}

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

proc _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
}

proc _dri {
	local n=${subpkgname##*-dri-}
	setvar pkgdesc = ""Mesa DRI driver for $n""
	case (n) {
	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
		}
	freedreno {
		_mv_dri msm_dri kgsl_dri 
		}
	swrast {
		_mv_dri swrast_dri kms_swrast_dri && _mv_gpipe swrast
		}
	vmwgfx {
		_mv_dri vmwgfx_dri && _mv_gpipe vmwgfx
		}
	virtio {
		_mv_dri virtio_gpu_dri
		}
	}
}

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

setvar sha512sums = ""cb8369f0edd3e17b4eee8da159b9dc487f8144d69fe4b95901e9aa6a924759866f26f91fc2ead7036707eecea41582185e7ce73d54f97bf310f198b72ee0a8e4  mesa-17.1.4.tar.xz
c3d4804ebc24c7216e4c9d4995fb92e116be7f478024b44808ee134a4c93bb51d1f66fe5fb6eca254f124c4abf6f81272b027824b3e2650a9607818bf793035a  glx_ro_text_segm.patch
163bb96773686a7446f40a8415acef762910afb2f4f2271d429d9cbd9e3048111c8c0023c1f072fa63f33b68b2aea9d066efd9083904265151eeccbe8ccb7227  musl-fixes.patch
c7d91a660a033df91fac9c557039efc8669f0c26b2d35997d50753938b70d1af0bd110dcab3f8236eafab7d4be5dd7cd128a3e057e67e7e6a38a73fd6a7ef62e  musl-fix-includes.patch
1b2edb267d8bf54f68a8d886b838933d3aed91a1a19805ed9235c3e715a1a27847891279aa9a87fa8f799d2b39a18f12072b579e7d0c39fe7901c07b5fa64e8a  drmdeps.patch""