#!/bin/sh
if ! [ -x /usr/sbin/dkms ]; then
 [ -x /usr/sbin/unfreeze-rc.d ] && unfreeze-rc.d
 apt-get install dkms
 [ -x /usr/sbin/freeze-rc.d ] && freeze-rc.d
fi
if ! [ -x /usr/bin/hg ]; then
 apt-get install --yes mercurial
fi
#module=gspca
#hg_url=http://linuxtv.org/hg/~jfrancois
#hg_dir=gspca
#module=dvb-s2api-liplianin
#hg_url=http://mercurial.intuxication.org/hg
#hg_dir=s2-liplianin
module=dvb-v4l-testing
hg_url=http://linuxtv.org/hg
hg_dir=v4l-dvb
#module=dvb-mantis
#hg_url=http://www.jusst.de/hg
#hg_dir=mantis
modules="adv7170 adv7175 adv7180 adv7343 af9013 atbm8830 au0828 au8522 b2c2-flexcop b2c2-flexcop-pci b2c2-flexcop-usb bcm3510 bt819 bt856 bt866 bt878 btcx-risc bttv budget budget-av budget-ci budget-core budget-patch bw-qcam cafe_ccic cpia cpia2 cpia_pp cpia_usb c-qcam cs5345 cs53l32a cx18 cx18-alsa cx22700 cx22702 cx231xx cx231xx-alsa cx231xx-dvb cx2341x cx23885 cx24110 cx24113 cx24116 cx24123 cx25840 cx8800 cx8802 cx88-alsa cx88-blackbird cx88-dvb cx88-vp3054-i2c cx88xx dabusb dib0070 dib0090 dib3000mb dib3000mc dib7000m dib7000p dib8000 dibx000_common dm1105 drx397xD ds3000 dsbr100 dst dst_ca dvb-bt8xx dvb-core dvb_dummy_fe dvb-pll dvb-ttpci dvb-ttusb-budget dvb-usb dvb-usb-a800 dvb-usb-af9005 dvb-usb-af9005-remote dvb-usb-af9015 dvb-usb-anysee dvb-usb-au6610 dvb-usb-ce6230 dvb-usb-cinergyT2 dvb-usb-cxusb dvb-usb-dib0700 dvb-usb-dibusb-common dvb-usb-dibusb-mb dvb-usb-dibusb-mc dvb-usb-digitv dvb-usb-dtt200u dvb-usb-dtv5100 dvb-usb-dw2102 dvb-usb-ec168 dvb-usb-friio dvb-usb-gl861 dvb-usb-gp8psk dvb-usb-m920x dvb-usb-nova-t-usb2 dvb-usb-opera dvb-usb-ttusb2 dvb-usb-umt-010 dvb-usb-vp702x dvb-usb-vp7045 earth-pt1 ec100 em28xx em28xx-alsa em28xx-dvb et61x251 firedtv gspca_benq gspca_conex gspca_cpia1 gspca_etoms gspca_finepix gspca_gl860 gspca_jeilinj gspca_m5602 gspca_main gspca_mars gspca_mr97310a gspca_ov519 gspca_ov534 gspca_ov534_9 gspca_pac207 gspca_pac7302 gspca_pac7311 gspca_sn9c2028 gspca_sn9c20x gspca_sonixb gspca_sonixj gspca_spca500 gspca_spca501 gspca_spca505 gspca_spca506 gspca_spca508 gspca_spca561 gspca_sq905 gspca_sq905c gspca_stk014 gspca_stv0680 gspca_stv06xx gspca_sunplus gspca_t613 gspca_tv8532 gspca_vc032x gspca_zc3xx hdpvr hexium_gemini hexium_orion hopper ibmcam ir-common ir-core ir-kbd-i2c isl6405 isl6421 isl6423 itd1000 ivtv ivtvfb konicawc ks0127 l64781 lgdt3304 lgdt3305 lgdt330x lgs8gl5 lgs8gxx lnbp21 m52790 mantis mantis_core max2165 mb86a16 mc44s803 meye msp3400 mt2060 mt20xx mt2131 mt2266 mt312 mt352 mt9m001 mt9m111 mt9t031 mt9t112 mt9v011 mt9v022 mxb mxl5005s mxl5007t nxt200x nxt6000 or51132 or51211 ov511 ov7670 ov772x ov9640 ovcamchip pluto2 pvrusb2 pwc qt1010 quickcam_messenger radio-gemtek-pci radio-maestro radio-maxiradio radio-mr800 radio-si4713 radio-tea5764 radio-usb-si470x rj54n1cb0c s2255drv s5h1409 s5h1411 s5h1420 s921 saa5246a saa5249 saa6588 saa6752hs saa7110 saa7115 saa7127 saa7134 saa7134-alsa saa7134-dvb saa7134-empress saa7146 saa7146_vv saa7164 saa717x saa7185 saa7191 se401 si21xx si4713-i2c smsdvb smsmdtv smssdio smsusb sn9c102 snd-bt87x snd-tea575x-tuner soc_camera soc_camera_platform soc_mediabus sp8870 sp887x stb0899 stb6000 stb6100 stkwebcam stradis stv0288 stv0297 stv0299 stv0900 stv090x stv6110 stv6110x stv680 tcm825x tda10021 tda10023 tda10048 tda1004x tda10086 tda18271 tda665x tda7432 tda8083 tda8261 tda826x tda827x tda8290 tda9840 tda9875 tda9887 tea5761 tea5767 tea6415c tea6420 tef6862 ths7303 tlv320aic23b ttpci-eeprom ttusb_dec ttusbdecfe tua6100 tuner tuner-simple tuner-types tuner-xc2028 tvaudio tveeprom tvp514x tvp5150 tw9910 ultracam upd64031a upd64083 usbvideo usbvision uvcvideo v4l1-compat v4l2-common v4l2-compat-ioctl32 v4l2-int-device ves1820 ves1x93 vicam videobuf-core videobuf-dma-contig videobuf-dma-sg videobuf-dvb videobuf-vmalloc videocodec videodev vivi vp27smpx vpx3220 w9966 w9968cf wm8739 wm8775 xc5000 zc0301 zl10036 zl10039 zl10353 zr36016 zr36050 zr36060 zr36067 zr364xx"
dpkg --purge $module-dkms 2>/dev/null
dkms remove `dkms status 2>/dev/null|awk '/^'$module'/{print "-m "$1" -v "$2}'|sed 's/,//g;s/:$//'|uniq` --all >/dev/null 2>&1
rm -rf /var/lib/dkms/$module
rm -rf /tmp/$hg_dir
cd /tmp
VERSION_DATE=0~`/bin/date --utc +%0Y-%0m-%0d`
hg clone $hg_url/$hg_dir
cd $hg_dir
HG_REV=`hg identify -n`
HG_SHA=`hg identify -i`
ver=$VERSION_DATE.hg$HG_REV
cat <<EOT > dkms.conf
PACKAGE_NAME="$module"
PACKAGE_VERSION="$ver"
MAKE[0]="make -Cv4l all SRCDIR=\$kernel_source_dir -j`grep -c ^processor /proc/cpuinfo 2>/dev/null||echo 1`"
CLEAN="make -Cv4l clean"
AUTOINSTALL=YES
EOT
i=0
for x in $modules; do
 echo BUILT_MODULE_NAME[$i]=\"$x\"
 echo BUILT_MODULE_LOCATION[$i]=\"v4l\"
 if y=`/sbin/modinfo -F filename $x 2>/dev/null`; then
  echo DEST_MODULE_LOCATION[$i]=\"$(dirname $y|sed s#/lib/modules/`uname -r`##)\"
 else
  echo DEST_MODULE_LOCATION[$i]=\"/updates/dkms\"
 fi
 let i=i+1
done >> dkms.conf
rm -rf /usr/src/$module-$ver
mkdir -p /usr/src/$module-$ver
mv -v dkms.conf linux v4l v4l_experimental /usr/src/$module-$ver
mkdir -p /usr/src/$module-$ver/patches
cd /usr/src/$module-$ver/patches
#wget -N ftp://ftp.cadsoft.de/vdr/Developer/av7110_ts_replay__1.diff
#cat >> ../dkms.conf << 'EOT'
#PATCH[0]="av7110_ts_replay__1.diff"
#EOT
if false; then
 cat > v4l-clean-fix.diff << 'EOT'
diff -r 56cf0f1772f7 v4l/Makefile
--- a/v4l/Makefile	Mon Mar 23 19:18:34 2009 -0300
+++ b/v4l/Makefile	Tue Mar 24 11:35:47 2009 +0100
@@ -292,9 +292,6 @@
 	-rm -f *~ *.o *.ko .*.o.cmd .*.ko.cmd *.mod.c av7110_firm.h fdump \
 		config-compat.h Module.symvers Module.markers modules.order
 	$(MAKE) -C firmware $@
-	$(MAKE) -C ../v4l2-spec $@
-	$(MAKE) -C ../dvb-spec/dvbapi $@
-	$(MAKE) -C ../v4l2-apps $@
 
 distclean:: clean
 	-rm -f .version .*.o.flags .*.o.d Makefile.media \

EOT
 cat >> ../dkms.conf << 'EOT'
PATCH[0]="v4l-clean-fix.diff"
EOT
fi
cd
dkms add -m $module -v $ver
sed -i 's|\(dkms install\) \(-m $NAME -v $VERSION\)|\1 --force \2|' /etc/dkms/template-dkms-mkdeb/debian/postinst
sed -i 's|\(dkms install\) \(-m $module_in_tree -v $version_in_tree\)|\1 --force \2|' /etc/init.d/dkms_autoinstaller
LANG= dkms mkdeb -m $module -v $ver --source-only
time dpkg -i /var/lib/dkms/$module/$ver/deb/$module-dkms_${ver}_all.deb
rm -rf /tmp/$hg_dir
