# Maintainer: Daniel Bermond < yahoo-com: danielbermond >

pkgname=wine-staging-git
pkgver=2.3.r1.g3b947eae+wine.2.3.r0.ga2460b2424
pkgrel=1
pkgdesc="A compatibility layer for running Windows programs (staging branch, Git version)"
arch=('i686' 'x86_64')
url="https://github.com/wine-compholio/wine-staging/"
license=('LGPL')
_depends=(
  'attr'             'lib32-attr'
  'fontconfig'       'lib32-fontconfig'
  'lcms2'            'lib32-lcms2'
  'libxml2'          'lib32-libxml2'
  'libxcursor'       'lib32-libxcursor'
  'libxrandr'        'lib32-libxrandr'
  'libxdamage'       'lib32-libxdamage'
  'libxi'            'lib32-libxi'
  'gettext'          'lib32-gettext'
  'freetype2'        'lib32-freetype2'
  'glu'              'lib32-glu'
  'libsm'            'lib32-libsm'
  'gcc-libs'         'lib32-gcc-libs'
  'libpcap'          'lib32-libpcap'
  'desktop-file-utils'
)
makedepends=('git' 'autoconf' 'ncurses' 'bison' 'perl' 'fontforge' 'flex'
  'gcc>=4.5.0-2'          'gcc-multilib>=4.5.0-2'
  'giflib'                'lib32-giflib'
  'libpng'                'lib32-libpng'
  'gnutls'                'lib32-gnutls'
  'libxinerama'           'lib32-libxinerama'
  'libxcomposite'         'lib32-libxcomposite'
  'libxmu'                'lib32-libxmu'
  'libxxf86vm'            'lib32-libxxf86vm'
  'libldap'               'lib32-libldap'
  'mpg123'                'lib32-mpg123'
  'openal'                'lib32-openal'
  'v4l-utils'             'lib32-v4l-utils'
  'alsa-lib'              'lib32-alsa-lib'
  'libxcomposite'         'lib32-libxcomposite'
  'mesa'                  'lib32-mesa'
  'libgl'                 'lib32-libgl'
  'opencl-icd-loader'     'lib32-opencl-icd-loader'
  'libxslt'               'lib32-libxslt'
  'libpulse'              'lib32-libpulse'
  'libva'                 'lib32-libva'
  'gst-plugins-base-libs' 'lib32-gst-plugins-base-libs'
  'samba'
  'opencl-headers'
)
optdepends=(
  'giflib'                'lib32-giflib'
  'libpng'                'lib32-libpng'
  'libldap'               'lib32-libldap'
  'gnutls'                'lib32-gnutls'
  'mpg123'                'lib32-mpg123'
  'openal'                'lib32-openal'
  'v4l-utils'             'lib32-v4l-utils'
  'libpulse'              'lib32-libpulse'
  'alsa-plugins'          'lib32-alsa-plugins'
  'alsa-lib'              'lib32-alsa-lib'
  'libjpeg-turbo'         'lib32-libjpeg-turbo'
  'libxcomposite'         'lib32-libxcomposite'
  'libxinerama'           'lib32-libxinerama'
  'ncurses'               'lib32-ncurses'
  'opencl-icd-loader'     'lib32-opencl-icd-loader'
  'libxslt'               'lib32-libxslt'
  'libtxc_dxtn'           'lib32-libtxc_dxtn'
  'libva'                 'lib32-libva'
  'gtk3'                  'lib32-gtk3'
  'gst-plugins-base-libs' 'lib32-gst-plugins-base-libs'
  'vulkan-icd-loader'     'lib32-vulkan-icd-loader'
  'cups'
  'samba'
  'dosbox'
)
options=('staticlibs')
source=(wine-git::'git://source.winehq.org/git/wine.git'
        "$pkgname"::'git+https://github.com/wine-compholio/wine-staging.git'
        #'bleed-patches.tar.gz'
        '30-win32-aliases.conf'
        custompatch_default-documents-dir.patch
        custompatch_glsl_shader.patch
        custompatch_msi-add-dummyactionthreads.patch
        custompatch_photoshop_getticks_input.c.patch
        custompatch_photoshop_keepfocus_message.c.patch
        custompatch_photoshop_tooltip_win.c.patch
        custompatch_steam.patch
        custompatch_disable_automatic_menubuilding.patch
        )
sha256sums=('SKIP'
            'SKIP'
            '9901a5ee619f24662b241672a7358364617227937d5f6d3126f70528ee5111e7'
            '0bd6ae866253e446fc631b080e90dc0a500274e62175f9298277256e7c8eae8e'
            'ca0dbe562eb43e4049c06f12b9352cb732ef14137c7da3d8fb71d9872c81aa60'
            '05b21e50c3942acfbedd274dfe4ee454f64cb03ada3a00e46f1d23bead06ff39'
            'e934579174bc3f4d05f72fb02e6b4ec081e97f375f1965541465e83a8bc77cfe'
            '7f379b5fc985c8c87531c02ebd120b52b0f8801fbbb3dcd2a958f6550696c22f'
            'bbbb3ab76dc1769d1e0a5253964aaf20e9db0eef6e02f2094df7c9fca3a870bc'
            '972d6b114f7621c5f3bd34b1105dd390b318db18fbc76328001c984db488a9b0'
            '11ddb9d6a4e1fd12f5e92d66458cc44aecfcc789efd04c1ed15d1f9b14c0efad')

if [ "$CARCH" = "i686" ]; then
	# Strip lib32 etc. on i686
	_depends=(${_depends[@]/*32-*/})
	makedepends=(${makedepends[@]/*32-*/} ${_depends[@]})
	makedepends=(${makedepends[@]/*-multilib*/})
	optdepends=(${optdepends[@]/*32-*/})
	provides=(
	          "wine=$(echo ${pkgver} | grep -o '+.*' | cut -c7-)"
	          "wine-staging=$(echo ${pkgver} | grep -o '.*+' | sed 's/.\{1\}$//')"
	          'wine-git'
	          )
	conflicts=('wine' 'wine-staging' 'wine-git')
else
	makedepends=(${makedepends[@]} ${_depends[@]})
	provides=(
	          "wine=$(echo ${pkgver} | grep -o '+.*' | cut -c7-)"
	          "wine-wow64=$(echo ${pkgver} | grep -o '+.*' | cut -c7-)"
	          "wine-staging=$(echo ${pkgver} | grep -o '.*+' | sed 's/.\{1\}$//')"
	          'wine-git'
	          )
	conflicts=('wine' 'wine-wow64' 'wine-staging' 'wine-git')
fi

pkgver() {
	cd "${srcdir}/${pkgname}"
	_staging_tag="$(git tag | sort -r | head -n1 | sed 's/-/./g;s/^v//')"
	_staging_version="$(git describe --long \
	                             | sed 's/\([^-]*-g\)/r\1/;s/-/./g;s/^v//' \
	                             | sed "s/^latest.release/${_staging_tag}/")"
	cd "${srcdir}/wine-git"
	_wine_version="$(git describe --long | sed 's/\([^-]*-g\)/r\1/;s/-/./g')"
	
	printf "%s+%s" "$_staging_version" "$_wine_version"
}

prepare() {
	cd "$srcdir"/wine-git
	
	msg2 "Cleaning the wine source code tree..."
	
	# Restore the wine tree to its git origin state, without wine-staging patches
	#+(necessary for reapllying wine-staging patches in succedent builds,
	#+otherwise the patches will fail to be reapplied)
	git reset --hard HEAD      # Restore tracked files
	git clean -d -x -f         # Delete untracked files
	
	# Change back to the wine upstream commit that this version of wine-staging is based in
	git checkout $(../"$pkgname"/patches/patchinstall.sh --upstream-commit)
}

build() {
	msg2 "Applying custom patches..."
	mv $srcdir/custompatch_disable_automatic_menubuilding.patch $srcdir/custompatch_disable_automatic_menubuilding.patch.disabled #Just a hack, because this fails with Wine-Staging for now
	cd "${srcdir}"/wine-git
	for i in $srcdir/*.patch
	do 
		patch -Np1 < $i
	done

	cd "${srcdir}"
	
	# Delete old build dirs (from previous builds) and make new ones
	rm --recursive --force "$pkgname"-{32,64}-build
	mkdir --parents "$pkgname"-32-build
	
	# Apply all wine-staging patches
	msg2 "Applying wine-staging patches..."
	./"$pkgname"/patches/patchinstall.sh DESTDIR="${srcdir}/wine-git" --all
	
	# We must apply this patch AFTER all Wine Staging patches, otherwise it fails
	cd "${srcdir}"/wine-git
	mv $srcdir/custompatch_disable_automatic_menubuilding.patch.disabled $srcdir/custompatch_disable_automatic_menubuilding.patch
	patch -Np1 -i $srcdir/custompatch_disable_automatic_menubuilding.patch
	cd "${srcdir}"
	
	# Build wine 64-bit
	#+(according to the wine wiki this 64-bit/32-bit building order is mandatory)
	
	if [ "$CARCH" = "x86_64" ]; then
	    msg2 "Building Wine-64..."
	    
	    mkdir --parents "$pkgname"-64-build
	    cd  "$pkgname"-64-build
	    
	    ../wine-git/configure \
	                    --prefix=/usr \
	                    --libdir=/usr/lib \
	                    --with-x \
	                    --with-gstreamer \
	                    --enable-win64 \
	                    --with-xattr
	
	    make
	    
	    _wine32opts=(
	            --libdir=/usr/lib32
	            )
#	            --with-wine64="${srcdir}/${pkgname}-64-build"
	    
	    export PKG_CONFIG_PATH="/usr/lib32/pkgconfig"
	    
	fi
	
	
	# Build wine 32-bit
	
	msg2 "Building Wine-32..."
	
	cd "$srcdir"/"$pkgname"-32-build
	
	../wine-git/configure \
	                --prefix=/usr \
	                --with-x \
	                --with-gstreamer \
	                --with-xattr \
	                "${_wine32opts[@]}"
	                
	make
	
}

package() {
	depends=(${_depends[@]})
	
	# Package wine 32-bit
	#+(according to the wine wiki this reverse 32-bit/64-bit packaging order is important)
	
	msg2 "Packaging Wine-32..."
	
	cd "$srcdir"/"$pkgname"-32-build

    make prefix="${pkgdir}/usr32" \
	    libdir="${pkgdir}/usr32/lib" \
	    dlldir="${pkgdir}/usr32/lib/wine" install
	         
    # Package wine 64-bit
	    
    msg2 "Packaging Wine-64..."
	    
    cd "$srcdir"/"$pkgname"-64-build
	    
    make prefix="${pkgdir}/usr64" \
	    libdir="${pkgdir}/usr64/lib64" \
	    dlldir="${pkgdir}/usr64/lib64/wine" install
	         
        mkdir -p $pkgdir/usr32/lib64
        cp -R $pkgdir/usr64/share/{wine,applications} $pkgdir/usr32/share
	
	# Font aliasing settings for Win32 applications
	
	install -d "$pkgdir"/etc/fonts/conf.{avail,d}
	install -m644 "${srcdir}/30-win32-aliases.conf" "${pkgdir}/etc/fonts/conf.avail"
	ln -s ../conf.avail/30-win32-aliases.conf "${pkgdir}/etc/fonts/conf.d/30-win32-aliases.conf"
}