#!/bin/sh

. /etc/init.d/tc-functions

checkroot

export CFLAGS="-march=i486 -mtune=i686 -Os -pipe"
export CXXFLAGS="-march=i486 -mtune=i686 -Os -pipe -fno-exceptions -fno-rtti"
export CPPFLAGS="-I/usr/local/include"
export LDFLAGS="-L/usr/local/lib"
export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:/usr/lib/pkgconfig

TODAY=`date +%Y/%m/%d`
PACKAGE="ffmpeg-ffserver"
MIRROR="http://ffmpeg.org/releases/"
SEP="-"
VERSION="0.6.1"
DESCRIPTION="a complete, cross-platform solution to record, convert and stream audio and video"
AUTHORS="Fabrice Bellard"
HOMEPAGE="http://ffmpeg.org/"
LICENSE="GNU Lesser General Public License version 2.1"
ME="jls_legalize (unsenepopiu at tin dot it)"
DEPS="libasound.tcz \
libavcodec.tcz \
libavdevice.tcz \
libavformat.tcz \
libavutil.tcz \
libpostproc.tcz \
libswscale.tcz \
libvpx.tcz \
jack.tcz"
BUILDDEPS="libvorbis-dev.tcz \
libvpx-dev.tcz \
mktemp.tcz"
FLAGS="--prefix=/usr/local --enable-postproc --enable-gpl --enable-libvpx --enable-libvorbis --enable-shared"
DOCS=""
TCUSER=`cat /etc/sysconfig/tcuser`
SRC="ffmpeg${SEP}${VERSION}.tar.bz2"
THISDIR=`pwd`
PKGDIR="${THISDIR}/${PACKAGE}"
SRCDIR="${PKGDIR}/ffmpeg${SEP}${VERSION}"
TCEDIR="$(cat /opt/.tce_dir)"
COPYING="LICENSE"

clean(){
	rm -rf ${THISDIR}/${PACKAGE}
}
environment(){
	for each in compiletc.tcz squashfs-tools-4.x.tcz ${DEPS} ${BUILDDEPS}; do
		APPNAME=$(getbasefile "$each" 1)
		if [ ! -f /usr/local/tce.installed/"${APPNAME}" ]; then
			if [ ! -e ${TCEDIR}/optional/${each} ]; then
				sudo -u ${TCUSER} tce-load -w ${each}
			fi
			sudo -u ${TCUSER} tce-load -i ${TCEDIR}/optional/${each}
		fi
	done
	[ -d "${PKGDIR}" ] && rm -rf ${PKGDIR}
	mkdir -p ${PKGDIR}/tmp
	cd ${PKGDIR} && wget ${MIRROR}${SRC}
	tar xjf ${SRC}
}

buildit(){
   cd ${SRCDIR}
   #./configure ${FLAGS}
   #make
   #touch /tmp/mark
   make DESTDIR=${PKGDIR}/tmp install
}

workit(){
	if [ "`ls -A ${PKGDIR}/tmp`" ]; then
		rm /tmp/mark
	else
		cd /
		find usr/ -newer /tmp/mark -not -type d > /tmp/${PACKAGE}.list
			tar czO -T /tmp/${PACKAGE}.list | tar xzf - -C ${PKGDIR}/tmp
			rm /tmp/${PACKAGE}.list
	fi
	cd ${PKGDIR}/tmp
	rm -rf ${DOCS}

	mkdir -p usr/local/share/doc/License
	cp "${SRCDIR}/${COPYING}"  "usr/local/share/doc/License/${PACKAGE}.txt"

	find usr/ | xargs file | grep "executable" | grep ELF | grep "not stripped" | cut -f 1 -d : | xargs strip --strip-unneeded 2> /dev/null
	find usr/ | xargs file | grep "shared object" | grep ELF | grep "not stripped" | cut -f 1 -d : | xargs strip -g 2> /dev/null
   
	#dev
	for I in $(find `ls` -name *.h); do 
		export DIR=`dirname "$I"`; 
		[ -d ../dev/"$DIR" ] || mkdir -p ../dev/"$DIR"; 
		mv "$I" ../dev/"$DIR"/; 
	done

	for I in $(find `ls` -name *.a); do 
		export DIR=`dirname "$I"`; 
		[ -d ../dev/"$DIR" ] || mkdir -p ../dev/"$DIR"; 
		mv "$I" ../dev/"$DIR"/; 
	done

	for I in $(find `ls` -name *.la); do 
		export DIR=`dirname "$I"`; 
		[ -d ../dev/"$DIR" ] || mkdir -p ../dev/"$DIR"; 
		mv "$I" ../dev/"$DIR"/; 
	done
	
	for I in $(find `ls` -name *.pc); do 
		export DIR=`dirname "$I"`; 
		[ -d ../dev/"$DIR" ] || mkdir -p ../dev/"$DIR"; 
		mv "$I" ../dev/"$DIR"/; 
	done
	cd ../dev/usr/local/include
		
	rm -rf ${PKGDIR}/tmp/usr/local/include
	rm -rf ${PKGDIR}/tmp/usr/local/lib/pkgconfig
	
	#libavcodec
	mkdir -p ${PKGDIR}/libavcodec/usr/local/lib
	mv ${PKGDIR}/tmp/usr/local/lib/libavcodec* ${PKGDIR}/libavcodec/usr/local/lib
	#libavdevice
	mkdir -p ${PKGDIR}/libavdevice/usr/local/lib
	mv ${PKGDIR}/tmp/usr/local/lib/libavdevice* ${PKGDIR}/libavdevice/usr/local/lib
	#libavformat
	mkdir -p ${PKGDIR}/libavformat/usr/local/lib
	mv ${PKGDIR}/tmp/usr/local/lib/libavformat* ${PKGDIR}/libavformat/usr/local/lib
	#libavutil
	mkdir -p ${PKGDIR}/libavutil/usr/local/lib
	mv ${PKGDIR}/tmp/usr/local/lib/libavutil* ${PKGDIR}/libavutil/usr/local/lib
	#libpostproc
	mkdir -p ${PKGDIR}/libpostproc/usr/local/lib
	mv ${PKGDIR}/tmp/usr/local/lib/libpostproc* ${PKGDIR}/libpostproc/usr/local/lib
	#libswscale
	mkdir -p ${PKGDIR}/libswscale/usr/local/lib
	mv ${PKGDIR}/tmp/usr/local/lib/libswscale* ${PKGDIR}/libswscale/usr/local/lib
}

packageit(){
   cd ${PKGDIR}/tmp
   for dir in `ls -A`; do
      find ${dir} -not -type d | sort >> ../${PACKAGE}.tcz.list
   done

   mksquashfs . ../${PACKAGE}.tcz

   cd ${PKGDIR}
   md5sum ${PACKAGE}.tcz > ${PACKAGE}.tcz.md5.txt

   [ -f "${PACKAGE}.tcz.dep" ] && rm -f ${PACKAGE}.tcz.dep
   for each in ${DEPS}; do echo ${each} >> ${PACKAGE}.tcz.dep; done

   size=`du -h ${PACKAGE}.tcz | cut -f 1`

cat <<EOF> ${PACKAGE}.tcz.info
Title:		${PACKAGE}.tcz
Description:	${DESCRIPTION}
Version:	${VERSION}
Author:		${AUTHORS}
Original-site:	${HOMEPAGE}
Copying-policy:	${LICENSE}
Size:		${size}
Extension_by:	juanito, ${ME}
Comments: 	This extension is PPI compatible
Change-log:	2009/02/26 First Version
		2009/04/07 Updated 2 SVN 2009/04/07
		2010/03/08 Updated 2 0.5.1
		2010/06/05 Updated 2 0.5.2
		2010/06/29 Recompiled with --enable-postproc --enable-gpl
	    	2010/07/16 Updated 2 0.6, added sopport for webm files
Current:	${TODAY} Updated 2 0.6.1
EOF


   #dev
   cd ${PKGDIR}/dev
   for dir in `ls -A`; do
      find ${dir} -not -type d | sort >> ../${PACKAGE}-dev.tcz.list
   done

   mksquashfs . ../${PACKAGE}-dev.tcz

   cd ${PKGDIR}
   md5sum ${PACKAGE}-dev.tcz > ${PACKAGE}-dev.tcz.md5.txt

   echo ${PACKAGE}.tcz > ${PACKAGE}-dev.tcz.dep
   for each in ${BUILDDEPS}; do echo ${each} >> ${PACKAGE}-dev.tcz.dep; done

   size=`du -h ${PACKAGE}-dev.tcz | cut -f 1`

   cat <<EOF> ${PACKAGE}-dev.tcz.info
Title:		${PACKAGE}-dev.tcz
Description:	${DESCRIPTION} dev files
Version:	${VERSION}
Author:		${AUTHORS}
Original-site:	${HOMEPAGE}
Copying-policy:	${LICENSE}
Size:		${size}
Extension_by:	juanito, ${ME}
Comments:	dev files
				
		This extension is PPI compatible
Change-log:	2009/02/26 First Version
		2009/04/07 Updated 2 SVN 2009/04/07
		2010/03/08 Updated 2 0.5.1
		2010/06/05 Updated 2 0.5.2
		2010/06/29 Recompiled with --enable-postproc --enable-gpl
	    	2010/07/16 Updated 2 0.6, added sopport for webm files
Current:	${TODAY} Updated 2 0.6.1
EOF
   
   #libavcodec
   cd ${PKGDIR}/libavcodec
   for dir in `ls -A`; do
      find ${dir} -not -type d | sort >> ../libavcodec.tcz.list
   done

   mksquashfs . ../libavcodec.tcz

   cd ${PKGDIR}
   md5sum libavcodec.tcz > libavcodec.tcz.md5.txt

   echo libavutil.tcz > libavcodec.tcz.dep
   echo libvorbis.tcz >> libavcodec.tcz.dep
   echo libvpx.tcz >> libavcodec.tcz.dep
   echo libogg.tcz >> libavcodec.tcz.dep

   size=`du -h libavcodec.tcz | cut -f 1`

   cat <<EOF> libavcodec.tcz.info
Title:		libavcodec.tcz
Description:	ffmpeg codec library
Version:	${VERSION}
Author:		${AUTHORS}
Original-site:	${HOMEPAGE}
Copying-policy:	${LICENSE}
Size:		${size}
Extension_by:	juanito, ${ME}
Comments:	dev files are in ffmpeg-ffserver-dev.tcz
				
		This extension is PPI compatible
Change-log:	2009/02/26 First Version
		2009/04/07 Updated 2 SVN 2009/04/07
		2010/03/08 Updated 2 0.5.1
		2010/06/05 Updated 2 0.5.2
		2010/06/29 Recompiled with --enable-postproc --enable-gpl
	    	2010/07/16 Updated 2 0.6, added sopport for webm files
Current:	${TODAY} Updated 2 0.6.1
EOF

   #libavdevice
   cd ${PKGDIR}/libavdevice
   for dir in `ls -A`; do
      find ${dir} -not -type d | sort >> ../libavdevice.tcz.list
   done

   mksquashfs . ../libavdevice.tcz

   cd ${PKGDIR}
   md5sum libavdevice.tcz > libavdevice.tcz.md5.txt

   echo libavformat.tcz > libavdevice.tcz.dep
   echo libavcodec.tcz >> libavdevice.tcz.dep
   echo libavutil.tcz >> libavdevice.tcz.dep

   size=`du -h libavdevice.tcz | cut -f 1`

   cat <<EOF> libavdevice.tcz.info
Title:		libavdevice.tcz
Description:	ffmpeg codec library
Version:	${VERSION}
Author:		${AUTHORS}
Original-site:	${HOMEPAGE}
Copying-policy:	${LICENSE}
Size:		${size}
Extension_by:	juanito, ${ME}
Comments:	dev files are in ffmpeg-ffserver-dev.tcz
				
		This extension is PPI compatible
Change-log:	2009/02/26 First Version
		2009/04/07 Updated 2 SVN 2009/04/07
		2010/03/08 Updated 2 0.5.1
		2010/06/05 Updated 2 0.5.2
		2010/06/29 Recompiled with --enable-postproc --enable-gpl
	    	2010/07/16 Updated 2 0.6, added sopport for webm files
Current:	${TODAY} Updated 2 0.6.1
EOF

   #libavformat
   cd ${PKGDIR}/libavformat
   for dir in `ls -A`; do
      find ${dir} -not -type d | sort >> ../libavformat.tcz.list
   done

   mksquashfs . ../libavformat.tcz

   cd ${PKGDIR}
   md5sum libavformat.tcz > libavformat.tcz.md5.txt

   echo libavcodec.tcz > libavformat.tcz.dep

   size=`du -h libavformat.tcz | cut -f 1`

   cat <<EOF> libavformat.tcz.info
Title:		libavformat.tcz
Description:	ffmpeg codec library
Version:	${VERSION}
Author:		${AUTHORS}
Original-site:	${HOMEPAGE}
Copying-policy:	${LICENSE}
Size:		${size}
Extension_by:	juanito, ${ME}
Comments:	dev files are in ffmpeg-ffserver-dev.tcz
				
		This extension is PPI compatible
Change-log:	2009/02/26 First Version
		2009/04/07 Updated 2 SVN 2009/04/07
		2010/03/08 Updated 2 0.5.1
		2010/06/05 Updated 2 0.5.2
		2010/06/29 Recompiled with --enable-postproc --enable-gpl
	    	2010/07/16 Updated 2 0.6, added sopport for webm files
Current:	${TODAY} Updated 2 0.6.1
EOF

   #libavutil
   cd ${PKGDIR}/libavutil
   for dir in `ls -A`; do
      find ${dir} -not -type d | sort >> ../libavutil.tcz.list
   done

   mksquashfs . ../libavutil.tcz

   cd ${PKGDIR}
   md5sum libavutil.tcz > libavutil.tcz.md5.txt

   size=`du -h libavutil.tcz | cut -f 1`

   cat <<EOF> libavutil.tcz.info
Title:		libavutil.tcz
Description:	ffmpeg codec library
Version:	${VERSION}
Author:		${AUTHORS}
Original-site:	${HOMEPAGE}
Copying-policy:	${LICENSE}
Size:		${size}
Extension_by:	juanito, ${ME}
Comments:	dev files are in ffmpeg-ffserver-dev.tcz
				
		This extension is PPI compatible
Change-log:	2009/02/26 First Version
		2009/04/07 Updated 2 SVN 2009/04/07
		2010/03/08 Updated 2 0.5.1
		2010/06/05 Updated 2 0.5.2
		2010/06/29 Recompiled with --enable-postproc --enable-gpl
	    	2010/07/16 Updated 2 0.6, added sopport for webm files
Current:	${TODAY} Updated 2 0.6.1
EOF

   #libpostproc
   cd ${PKGDIR}/libpostproc
   for dir in `ls -A`; do
      find ${dir} -not -type d | sort >> ../libpostproc.tcz.list
   done

   mksquashfs . ../libpostproc.tcz

   cd ${PKGDIR}
   md5sum libpostproc.tcz > libpostproc.tcz.md5.txt

   echo libavutil.tcz > libipostproc.tcz.dep

   size=`du -h libpostproc.tcz | cut -f 1`

   cat <<EOF> libpostproc.tcz.info
Title:		libpostproc.tcz
Description:	ffmpeg codec library
Version:	${VERSION}
Author:		${AUTHORS}
Original-site:	${HOMEPAGE}
Copying-policy:	${LICENSE}
Size:		${size}
Extension_by:	juanito, ${ME}
Comments:	dev files are in ffmpeg-ffserver-dev.tcz
				
		This extension is PPI compatible
Change-log:	2010/07/16 Updated 2 0.6, added sopport for webm files
Current:	${TODAY} Updated 2 0.6.1
EOF

   #libswscale
   cd ${PKGDIR}/libswscale
   for dir in `ls -A`; do
      find ${dir} -not -type d | sort >> ../libswscale.tcz.list
   done

   mksquashfs . ../libswscale.tcz

   cd ${PKGDIR}
   md5sum libswscale.tcz > libswscale.tcz.md5.txt

   echo libavutil.tcz > libipostproc.tcz.dep

   size=`du -h libswscale.tcz | cut -f 1`

   cat <<EOF> libswscale.tcz.info
Title:		libswscale.tcz
Description:	ffmpeg codec library
Version:	${VERSION}
Author:		${AUTHORS}
Original-site:	${HOMEPAGE}
Copying-policy:	${LICENSE}
Size:		${size}
Extension_by:	juanito, ${ME}
Comments:	dev files are in ffmpeg-ffserver-dev.tcz
				
		This extension is PPI compatible
Change-log:	2009/02/26 First Version
		2009/04/07 Updated 2 SVN 2009/04/07
		2010/03/08 Updated 2 0.5.1
		2010/06/05 Updated 2 0.5.2
		2010/06/29 Recompiled with --enable-postproc --enable-gpl
		2010/07/16 Updated 2 0.6, added sopport for webm files
Current:	${TODAY} Updated 2 0.6.1
EOF
}
tarit(){	
	cd ${PKGDIR}
	cp ../${PACKAGE}.tcbuild .
	tar	cjvf ${PACKAGE}.tar.bz2 \
		${PACKAGE}.tcz* \
		${PACKAGE}-dev.tcz* \
		libavcodec.tcz* \
		libavdevice.tcz* \
		libavformat.tcz* \
		libavutil.tcz* \
		libpostproc.tcz* \
		libswscale.tcz* \
		${PACKAGE}.tcbuild \
		${SRC}
}

#here we go
#clean
#environment
#buildit
#workit
#packageit
tarit
