pkgname=oss-linux-free
pkgver=4.0_1016
pkgrel=12
_realname=oss-v4.0-build1016-src-gpl
pkgdesc="OSS/Open source driver"
arch=('i686' 'x86_64')
url="http://www.opensound.com/"
license=('GPL2')
depends=('gcc' 'make' 'gtk2' 'libtool' 'bc' 'sed')
makedepends=('gawk' 'pkgconfig')
conflicts=('oss-linux')
provides=('oss')
install=oss.install
source=(rc.oss-linux-free http://www.4front-tech.com/developer/sources/stable/gpl/$_realname.tar.bz2 oss4_1016-kernel2626.diff oss4_1016-moduleinc.diff)
md5sums=('f343bb70a4dbd1aabefabbea0f76e886'
         'b8c3409b477387dbe87118caf46773ed'
         '376fce5cfd92d7793ee90d7352c1cafa'
         '4077a972a6b26ae960ce15cfec8aa34f')

build() {

rm -rf build ; mkdir build ; cd build

sed -i "s|export HAVE_ALSA=1|# export HAVE_ALSA=1|g" $srcdir/$_realname/configure
sed -i "s|700|755|g" $srcdir/$_realname/setup/Linux/build.sh
unset CFLAGS

# Thanks to majeru of the OSS forums for this patch
cd $srcdir/$_realname
patch -p0 -i $srcdir/oss4_1016-kernel2626.diff || return 1
# Thanks to cesium of the OSS forums for this patch
patch -p1 -i $srcdir/oss4_1016-moduleinc.diff || return 1
cd $srcdir/build
$srcdir/$_realname/configure || return 1
make build || return 1

cp -r prototype/{etc,usr} $pkgdir/
install -Dm755 ../rc.oss-linux-free $pkgdir/etc/rc.d/oss-linux-free

if [ `uname -m` == "i686" ]; then
cd setup/Linux/oss/lib
gcc -m32 -shared -fPIC -O2 -Wall -Werror -lssl flashsupport.c -o libflashsupport.so || return 1
cp libflashsupport.so $pkgdir/usr/lib/oss/lib/
fi

#building modules
  PREFIX=$startdir/pkg
  OSSLIBDIR=$PREFIX/usr/lib/oss
cd $OSSLIBDIR/build
REGPARM=REGPARM
pushd $OSSLIBDIR
rm -rf objects
ln -s objects.regparm objects
rm -rf modules
ln -s modules.regparm modules
popd


if ! test -f $OSSLIBDIR/objects/osscore.o
then
	echo Error: OSS core module for $REGPARM kernel are not available
	exit 1
fi

if ! test -f $OSSLIBDIR/modules/ich.o
then
	echo Error: OSS driver modules for $REGPARM kernel are not available
	exit 1
fi

echo
echo OSS build environment set up for $REGPARM kernels
BASEKERNEL=/lib/modules/2.6.26-ARCH
PKGKERNEL=$startdir/pkg$BASEKERNEL
KERNELDIR=$BASEKERNEL/build

cp -f ../objects/osscore.o osscore_mainline.o

ln -sf ../include/sys/*.h ../include/sys/ossddk .

rm -f Makefile
ln -s Makefile.osscore Makefile

if ! test -d $OSSLIBDIR/logs
then
	mkdir $OSSLIBDIR/logs
fi

echo Building module osscore

if ! make KERNELDIR=$KERNELDIR> build.list 2>&1
then
	echo Failed to compile OSS
	cat build.list
	exit 2
fi

if ! test -d $PKGKERNEL/kernel/oss
then
  mkdir -p $PKGKERNEL/kernel/oss
fi

if ! test -d $PKGKERNEL/kernel/oss
then
	echo OSS module directory $PKGKERNEL/kernel/oss does not exist.
	exit 3
fi

if ! ld -r osscore.ko osscore_mainline.o -o $PKGKERNEL/kernel/oss/osscore.ko
then
	echo Linking the osscore module failed
	exit 5
fi

#depmod -a

for n in ../modules/*.o
do
	N=`basename $n .o`
	echo Building module $N 

	rm -f $N_mainline.o Makefile

	sed "s/MODNAME/$N/" < Makefile.tmpl > Makefile
	ln -s $n $N_mainline.o

	if ! make KERNELDIR=$KERNELDIR > build.list 2>&1
	then
		echo Compiling module $N failed
		cat build.list
		exit 4
	fi

	if ! ld -r $N.ko $N_mainline.o -o $PKGKERNEL/kernel/oss/$N.ko
	then
		echo Linking $N module failed
		exit 6
	fi

	rm -f $N_mainline.o
	make clean
done 

rm -f Makefile


}