#!/bin/sh

set -e

BUILDDIR=`pwd`
cd `dirname $0`/../..
TOPSRC=`pwd`
cd $BUILDDIR
if test -z "$DEST" ; then
    DEST=$BUILDDIR/dist
fi
if test -z "$PFX" ; then
    PFX=/Library/OpenNX
fi
ALLPKG="nxcomp nxproxy nxssh"
CACHEDIR=$HOME/savebuild
CACHEDBUILD=$CACHEDIR/nx-prebuild.tgz

NEEDREBUILD=yes
if [ -f $CACHEDBUILD ] ; then
    NEEDREBUILD=no
	tar xzf $CACHEDBUILD
	for TARBALL in `$TOPSRC/getnxsrcpkg -l $ALLPKG` ; do
		test -f $TARBALL || NEEDREBUILD=yes
	done
	if [ $NEEDREBUILD = yes ] ; then
		rm -rf *
	fi
fi

fetch() {
	if [ -n "`which wget`" ] ; then
		wget -q $1
	else
		if [ -n "`which curl`" ] ; then
			curl -s -f -L -o `echo "$1"|sed -e 's!.*/\([^?]*\).*!\1!'` "$1"
		else
			echo "Need wget or curl" >&2
			exit 1
		fi
	fi
}

if [ $NEEDREBUILD = yes ] ; then
	$TOPSRC/getnxsrcpkg $ALLPKG
	for pkg in $ALLPKG ; do
        tar xzf ${pkg}-*.tar.gz
	done

    # Prerequisite: libjpeg (for x86: libjpeg-turbo)
    test -f libjpeg-turbo-1.1.1.tar.gz || fetch http://downloads.sourceforge.net/project/libjpeg-turbo/1.1.1/libjpeg-turbo-1.1.1.tar.gz
    tar xzf libjpeg-turbo-1.1.1.tar.gz
    cd libjpeg-turbo-1.1.1
    CFLAGS="-O3 -m32" CXXFLAGS="-O3 -m32" LDFLAGS="-m32" ./configure \
            --prefix=$PFX --libdir=$PFX/lib/private --disable-static --enable-shared
	mkdir -p $DEST$PFX/include $DEST$PFX/lib/private/{ppc,i386}
	make && make DESTDIR=$DEST install-libLTLIBRARIES
    mv $DEST$PFX/lib/private/libjpeg.62.0.0.dylib $DEST$PFX/lib/private/i386/libjpeg.62.dylib
    rm -f $DEST$PFX/lib/private/*.dylib $DEST$PFX/lib/private/libturbojpeg.la
	cd ..
    # Prerequisite: libjpeg (for PPC: the original)
	test -f jpegsrc.v6b.tar.gz || fetch http://downloads.sourceforge.net/project/libjpeg/libjpeg/6b/jpegsrc.v6b.tar.gz
	tar xzf jpegsrc.v6b.tar.gz
	cd jpeg-6b
	patch -p1 < $TOPSRC/patches/jpeg-autoconf.patch
	./configure \
        	--prefix=$PFX --libdir=$PFX/lib/private --disable-static --enable-shared
	make CFLAGS="-arch ppc $OSX_SDKFLAGS" CXXFLAGS="-arch ppc $OSX_SDKFLAGS" LDFLAGS="-arch ppc" DESTDIR=$DEST install-lib
    mv $DEST$PFX/lib/private/libjpeg.62.dylib $DEST$PFX/lib/private/ppc/
	cd ..
    # Create universal libjpeg
    lipo -create -arch i386 $DEST$PFX/lib/private/i386/* -arch ppc $DEST$PFX/lib/private/ppc/* \
            -output $DEST$PFX/lib/private/libjpeg.62.dylib
    rm -rf $DEST$PFX/lib/private/ppc $DEST$PFX/lib/private/i386
	# Prerequisite: libpng
	test -f libpng-1.2.44.tar.gz || fetch 'http://prdownloads.sourceforge.net/libpng/libpng-1.2.44.tar.gz?download'
	tar xzf libpng-1.2.44.tar.gz
	cd libpng-1.2.44
	CFLAGS="-arch i386 -arch ppc $OSX_SDKFLAGS" LDFLAGS="-arch i386 -arch ppc" ./configure \
        	--prefix=$PFX --enable-static --disable-shared --disable-dependency-tracking
	make DESTDIR=$DEST install
	cd ..

	ncver=`ls nxcomp-*.tar.gz|perl -ne 'printf("%02d%02d%02d%02d\n",$1,$2,$3,$4)if(/nxcomp-(\d+)\.(\d+)\.(\d+)-(\d+)\.tar.*/);'`
	for pkg in nxcomp nxproxy ; do
    		cd $pkg
    		for p in $TOPSRC/patches/${pkg}-*.patch ; do
        		bn=`basename $p`
				if [ $bn = nxcomp-gcc44.patch -a $ncver -ge 03040006 ] ; then
            			echo === Skipping $bn in $pkg
        		else
            			echo === Applying $bn in $pkg
            			patch -p1 < $p
        		fi
    		done
            test -f configure.in -a -f configure.ac && rm -f configure.in
    		autoreconf -f -i
    		cargs=
    		cenv="CFLAGS=\"$OSX_SDKFLAGS\" CXXFLAGS=\"$OSX_SDKFLAGS\""
    		margs=
    		case $pkg in
        		nxcomp)
                        cenv="CFLAGS=\"$OSX_SDKFLAGS\" CXXFLAGS=\"$OSX_SDKFLAGS\" LDFLAGS=-L$DEST$PFX/lib/private"
            			cargs="--with-libjpeg=$DEST$PFX --with-libpng=$DEST$PFX"
            			;;
    		esac
    		echo === Configuring $pkg ...
    		echo $cenv ./configure --prefix=$PFX $cargs
    		eval $cenv ./configure --prefix=$PFX $cargs
    		echo === Building $pkg ...
    		echo make $margs
    		make $margs
    		echo === Installing $pkg ...
    		echo make DESTDIR=$DEST $margs install
    		make DESTDIR=$DEST $margs install
    		cd ..
    		echo === Build of $pkg complete
	done

	cd nxssh
	patch -p1 < $TOPSRC/patches/openssh-scard-pin.patch
	patch -p1 < $TOPSRC/patches/nxssh-dynopensc.patch
	autoreconf -f -i
	# When building nxssh on OSX10.6, we need to forcibly add -lresolv
	R=
	case "`uname -r`" in
		10.*)
			R="-lresolv"
			;;
	esac
    echo === Configuring nxssh ...
	echo LIBS="$R" \
	LDFLAGS="-L$DEST$PFX/lib -L$DEST$PFX/lib/private" \
	CPPFLAGS="-I$TOPSRC" \
	./configure --prefix=$PFX \
  		--with-opensc=$BUILDDIR/../scbuild/dist$PFX \
  		--enable-opensc-dynamic \
  		--with-cflags="-arch i386 -arch ppc $OSX_SDKFLAGS" \
  		--with-ldflags="-arch i386 -arch ppc $OSX_SDKFLAGS"
	LIBS="$R" \
	LDFLAGS="-L$DEST$PFX/lib -L$DEST$PFX/lib/private" \
	CPPFLAGS="-I$TOPSRC" \
	./configure --prefix=$PFX \
  		--with-opensc=$BUILDDIR/../scbuild/dist$PFX \
  		--enable-opensc-dynamic \
  		--with-cflags="-arch i386 -arch ppc $OSX_SDKFLAGS" \
  		--with-ldflags="-arch i386 -arch ppc $OSX_SDKFLAGS"
    echo === Building nxssh ...
	make
	cp nxssh $DEST$PFX/bin/nxssh
	cd ..
    mkdir -p $CACHEDIR
	tar czf $CACHEDBUILD .
else
	mkdir -p $DEST$PFX/include $DEST$PFX/lib/private/{ppc,i386}
    make -C libjpeg-turbo-1.1.1 DESTDIR=$DEST install-libLTLIBRARIES
    mv $DEST$PFX/lib/private/libjpeg.62.0.0.dylib $DEST$PFX/lib/private/i386/libjpeg.62.dylib
    rm -f $DEST$PFX/lib/private/*.dylib $DEST$PFX/lib/private/libturbojpeg.la
	make -C jpeg-6b DESTDIR=$DEST install-lib
    mv $DEST$PFX/lib/private/libjpeg.62.dylib $DEST$PFX/lib/private/ppc/
    lipo -create -arch i386 $DEST$PFX/lib/private/i386/* -arch ppc $DEST$PFX/lib/private/ppc/* \
            -output $DEST$PFX/lib/private/libjpeg.62.dylib
    rm -rf $DEST$PFX/lib/private/ppc $DEST$PFX/lib/private/i386
	make -C libpng-1.2.44 DESTDIR=$DEST install
	make -C nxcomp DESTDIR=$DEST install
	make -C nxproxy DESTDIR=$DEST install
	cp nxssh/nxssh $DEST$PFX/bin/nxssh
fi

rm -rf $DEST$PFX/{include,etc,share} \
       $DEST$PFX/lib/*.la \
       $DEST$PFX/lib/*.a \
       $DEST$PFX/lib/pkgconfig \
       $DEST$PFX/bin/esd* \
       $DEST$PFX/bin/*-config \
       $DEST$PFX/bin/sf*
