#!/bin/bash
POL_WineBuilder_exists()
{
	# Determine if a builder exists
	POL_FunctionExists "POL_WineBuilder_$1"
}

POL_WineBuilder_CleanEnv()
{
	export PATH="$PATH_ORIG"
	unset FRAMEWORK
	unset CC
	unset CFLAGS
	unset LDFLAGS
	unset CPPFLAGS
}


POL_WineBuilder()
{
	ARCH="$3"
	setState "$1" "$ARCH" "$2"

	if [ "$2" != "" ]; then
		buildName="$1-$2"
	else
		buildName="$1"
	fi

	addToNews "$buildName" "- $ARCH building started at $(cdate)"
	echo "[$3] STARTING BUILD ($1) AT: $(date -R)"
	notify "[Winebuild $ARCH] STARTING BUILD ($buildName) AT : $(date -R)"

	POL_WineBuild_CleanGIT 
	POL_WineBuild_CheckoutGIT "" "$1"
	
	POL_WineBuild_CleanGIT "$WINE_TOOLS"
	POL_WineBuild_CheckoutGIT "$WINE_TOOLS" "$1"
	
	POL_WineBuild_applyAllPatch "$1" "$2" "$ARCH" || return 230

	POL_WineBuilder_make_$ARCH "$INSTALL_DIR/$ARCH/$buildName/wineversion/${buildName:5}" || return $?

	POL_WineBuild_Package "$1" "$2" "$ARCH"


	echo "[$ARCH] END PACKAGE AT: $(date -R)"
	setState "ready"
	notify "[Winebuild $ARCH] END package $buidName"
	addToNews "$buildName" "- $ARCH building finished at $(cdate)"

	return 0
}

# Linux x86

POL_WineBuilder_linux-x86()
{
	POL_WineBuilder "$1" "$2" "linux-x86"
}
POL_WineBuilder_make_linux-x86()
{
	POL_WineBuilder_CleanEnv
	CURRENT_BUILD_INSTALL_DIR="$1"
	ARCH="linux-x86"
	
	if [ "$CURRENT_BUILD_INSTALL_DIR" = "" ]; then
		echo "CURRENT_BUILD_INSTALL_DIR not set."
		return 254
	fi
	export CC="ccache gcc -m32" 
	# export CFLAGS="-O3 -pipe -fno-strict-aliasing -fomit-frame-pointer -ffunction-sections -fdata-sections -maccumulate-outgoing-args -mno-push-args -freorder-blocks-and-partition"

	LDFLAGS="-m32 -L/lib32 -L/usr/lib32 -Wl,-rpath,/lib32 -Wl,-rpath,/usr/lib32"
	cd "$WINE_GIT"
	
	notify "[Winebuild] ./configure"
	./configure --prefix=/ || return 1
	
	notify "[Winebuild] make"
	make -j 4 || return 2
	
	notify "[Winebuild] make install"
	mkdir -p "$CURRENT_BUILD_INSTALL_DIR"
	make install DESTDIR="$CURRENT_BUILD_INSTALL_DIR" || return 3

	return 0
}





POL_WineBuilder_linux-amd64()
{
	POL_WineBuilder "$1" "$2" "linux-amd64"
}


POL_WineBuilder_make_linux-amd64()
{
	POL_WineBuilder_CleanEnv
	CURRENT_BUILD_INSTALL_DIR="$1"
	ARCH="linux-amd64"
	
	if [ "$CURRENT_BUILD_INSTALL_DIR" = "" ]; then
		echo "CURRENT_BUILD_INSTALL_DIR not set."
		return 254
	fi
	export CC="ccache gcc"
	export CFLAGS="-O3 -pipe -fno-strict-aliasing -fomit-frame-pointer -ffunction-sections -fdata-sections -maccumulate-outgoing-args -mno-push-args -freorder-blocks-and-partition"
	
	#LDFLAGS="-m32 -L/lib32 -L/usr/lib32 -Wl,-rpath,/lib32 -Wl,-rpath,/usr/lib32"
	cd "$WINE_GIT"
	
	mkdir pol_amd64
	mkdir pol_x86
	mkdir -p "$CURRENT_BUILD_INSTALL_DIR"
	
	## 64 BITS part
	notify "[Winebuild] ./configure 64 bits"
	cd pol_amd64
	schroot -c winebuild_linux-amd64 -p -- ../configure --prefix=/ --enable-win64 || return 1
	
	notify "[Winebuild] make 64 bits"
	schroot -c winebuild_linux-amd64 -p -- make -j 4 || return 2
	cd ..
	
	## 32 BITS part
	# LDFLAGS="-m32 -L/lib32 -L/usr/lib32 -Wl,-rpath,/lib32 -Wl,-rpath,/usr/lib32"
	cd pol_x86
	notify "[Winebuild] ./configure 32 bits"
	../configure --host=x86_64-linux-gnu --build=x86_64-linux-gnu --prefix=/ --with-wine64=../pol_amd64 || return 3
	
	notify "[Winebuild] make 32 bits"
	make -j 4 || return 4
	cd ..
	
	
	## Make installs part
	cd pol_amd64
	notify "[Winebuild] make install 64 bits"
	schroot -c winebuild_linux-amd64 -p -- make install DESTDIR="$CURRENT_BUILD_INSTALL_DIR" || return 5
	cd ..
	
	cd pol_x86
	notify "[Winebuild] make install 32 bits"
	make install DESTDIR="$CURRENT_BUILD_INSTALL_DIR" || return 6
	
	
	
	return 0

}







POL_WineBuilder_darwin-x86()
{
	POL_WineBuilder "$1" "$2" "darwin-x86"
}
POL_WineBuilder_make_darwin-x86()
{
	POL_WineBuilder_CleanEnv
	CURRENT_BUILD_INSTALL_DIR="$1"
	ARCH="darwin-x86"
	export FRAMEWORK="10.6"
	export CC="ccache gcc" 
	
	if [ "$CURRENT_BUILD_INSTALL_DIR" = "" ]; then
		echo "CURRENT_BUILD_INSTALL_DIR not set."
		return 254
	fi

	cd "$WINE_TOOLS"
	notify "[Winebuild] Wine-tools : ./configure"
	./configure
	notify "[Winebuild] Wine-tools : make depend"
	#make depend || return 102
	notify "[Winebuild] Wine-tools : Updating makefile"	
	#python "$WINEBUILD_DIR/python/updateMakeFile.py"  "$WINE_TOOLS"/tools/winegcc/Makefile || return 103
	sleep 2
	notify "[Winebuild] Wine-tools : make __tooldeps__"
	export
	make __tooldeps__ || return 104	
	sleep 2
	notify "[Winebuild] Tools are built"
	sleep 2
	notify "[Winebuild] Setting Mac OS $FRAMEWORK cross building framework"
	sleep 2
	
	export PATH="/usr/i686-apple-darwin10/bin/:$PATH"
	export CC="ccache i686-apple-darwin10-gcc"
	export CFLAGS="-O3 -pipe -fno-strict-aliasing -fomit-frame-pointer -ffunction-sections -fdata-sections -maccumulate-outgoing-args -mno-push-args -freorder-blocks-and-partition"
	export LDFLAGS="-m32 -mmacosx-version-min=$FRAMEWORK -isysroot/usr/lib/apple/SDKs/MacOSX$FRAMEWORK.sdk -iframework/usr/lib/apple/SDKs/MacOSX$FRAMEWORK.sdk -F/usr/lib/apple/SDKs/MacOSX$FRAMEWORK.sdk/System/Library/Frameworks -F/usr/lib/apple/SDKs/MacOSX$FRAMEWORK.sdk/Library/Frameworks/OpenCL.framework/ -L/usr/lib/apple/SDKs/MacOSX$FRAMEWORK.sdk/usr/lib -L/usr/lib/apple/SDKs/MacOSX$FRAMEWORK.sdk/usr/lib/system  -I/usr/lib/apple/SDKs/MacOSX$FRAMEWORK.sdk/usr/lib/gcc/i686-apple-darwin10/4.0.1/include/ -L/usr/i686-apple-darwin10/local/lib -I/usr/i686-apple-darwin10/local/include -I/usr/lib/apple/SDKs/MacOSX$FRAMEWORK.sdk/usr/X11/include/ -L/usr/lib/apple/SDKs/MacOSX$FRAMEWORK.sdk/usr/X11/lib/ -I/usr/include/freetype2 -I/usr/lib/apple/SDKs/MacOSX$FRAMEWORK.sdk/usr/include/ -I/usr/lib/apple/SDKs/MacOSX$FRAMEWORK.sdk/usr/include/libxml2 -L/usr/lib/apple/SDKs/MacOSX$FRAMEWORK.sdk/usr/lib/"
	export CPPFLAGS="$LDFLAGS"
	
	
	cd "$WINE_GIT"
	notify "[Winebuild] ./configure"
	schroot -c winebuild_darwin-x86 -p -- ./configure --prefix=/ --host=i686-apple-darwin10 --with-wine-tools=$WINE_TOOLS || return 1
	
	notify "[Winebuild] make"
	schroot -c winebuild_darwin-x86 -p -- make || return 2
	
	notify "[Winebuild] make install"
	mkdir -p "$CURRENT_BUILD_INSTALL_DIR"
	schroot -c winebuild_darwin-x86 -p -- make install DESTDIR="$CURRENT_BUILD_INSTALL_DIR" || return 3

	return 0
}


POL_WineBuilder_freebsd-x86()
{       
        POL_WineBuilder "$1" "$2" "freebsd-x86"
}

POL_WineBuilder_make_freebsd-x86()
{
        POL_WineBuilder_CleanEnv
        CURRENT_BUILD_INSTALL_DIR="$1"
        ARCH="freebsd-x86"
        
	export CC="ccache gcc"

        if [ "$CURRENT_BUILD_INSTALL_DIR" = "" ]; then
                echo "CURRENT_BUILD_INSTALL_DIR not set."
                return 254
        fi 
                
        cd "$WINE_TOOLS"
        notify "[Winebuild] Wine-tools : ./configure"
        ./configure
        notify "[Winebuild] Wine-tools : make __tooldeps__"     
        export
        make __tooldeps__ || return 104
        sleep 2
        notify "[Winebuild] Tools are built"
        sleep 2


	#export LDFLAGS="-L/usr/cross-freebsd/i386-pc-freebsd7/lib -L/usr/cross-freebsd/i386-pc-freebsd7/lib/X11 -I/usr/cross-freebsd/i386-pc-freebsd7/include/ -I/usr/cross-freebsd/i386-pc-freebsd7/include/X11 -I/usr/cross-freebsd/i386-pc-freebsd7/include/freetype2 -I/usr/cross-freebsd/i386-pc-freebsd7/include/freetype2/freetype"
	export LDFLAGS="-L/usr/cross-freebsd/i386-pc-freebsd7/lib -L/usr/cross-freebsd/i386-pc-freebsd7/lib/X11 -I/usr/cross-freebsd/i386-pc-freebsd7/include/ -I/usr/cross-freebsd/i386-pc-freebsd7/include/X11 -I/usr/cross-freebsd/i386-pc-freebsd7/include/freetype2 -I/usr/cross-freebsd/i386-pc-freebsd7/include/freetype2/freetype -L/usr/cross-freebsd/lib -I/usr/cross-freebsd/include"

	export CPPFLAGS="$LDFLAGS"
	export CFLAGS="$LDFLAGS"
	export PATH="/usr/cross-freebsd/bin:$PATH"
	export LD_LIBRARY_PATH="/usr/cross-freebsd/lib"
	export LD_RUN_PATH="/usr/cross-freebsd/i386-pc-freebsd7/lib"
	export CC="ccache i386-pc-freebsd7-gcc-4.9.0"

	cd "$WINE_GIT"

	
	notify "[Winebuild] ./configure"
	schroot -c winebuild_freebsd-x86 -p -- env LD_RUN_PATH="/usr/cross-freebsd/i386-pc-freebsd7/lib" LD_LIBRARY_PATH="/usr/cross-freebsd/lib" ./configure --prefix=/ --host=i386-pc-freebsd7 --with-wine-tools=$WINE_TOOLS || return 1
	
	notify "[Winebuild] make"
	schroot -c winebuild_freebsd-x86 -p -- env LD_RUN_PATH="/usr/cross-freebsd/i386-pc-freebsd7/lib" LD_LIBRARY_PATH="/usr/cross-freebsd/lib" make -j 4 || return 2

	notify "[Winebuild] make install"
	mkdir -p "$CURRENT_BUILD_INSTALL_DIR"
        schroot -c winebuild_freebsd-x86 -p -- make install DESTDIR="$CURRENT_BUILD_INSTALL_DIR" || return 3

}
