#!/bin/sh ###################################################################### url="ftp://metalab.unc.edu/pub/Linux/games/bsd-games-2.17.tar.gz" pkgbase=bsd-games vers=2.17 arch=i386 build=P1 src="$pkgbase-$vers" OPT_CONFIG="" DOCS="AUTHORS BUGS COPYING ChangeLog* INSTALL NEWS PACKAGING README SECURITY THANKS TODO YEAR2000" pkgs="bsdgames-$vers" pkgl="bsdgames-$vers-$arch-$build" patch1="bsd-games-2.17-patch" words="words" ###################################################################### fscheck() { PANGRAM="The quick brown fox jumps over the lazy dog." echo -n "Checking for the filesystem ... " mkdir pangram ; ( cd pangram ; touch $PANGRAM ) mv pangram pangram~ ; mkdir pangram ; touch -r pangram~ pangram tar cpf pangram.tar pangram ; rmdir pangram ; mv pangram~ pangram for i in $PANGRAM ; do tar rpf pangram.tar pangram/$i ; done touch -t `date '+%m%d0900'` pangram.tar ; gzip pangram.tar touch pangram.tar.gz ; mv pangram.tar.gz pangram1.tgz tar cpf pangram.tar pangram touch -t `date '+%m%d0900'` pangram.tar ; gzip pangram.tar touch pangram.tar.gz ; mv pangram.tar.gz pangram2.tgz if cmp -s pangram1.tgz pangram2.tgz ; then echo "OK" rm -rf pangram pangram1.tgz pangram2.tgz else echo "NG" cat <<- "EOF" Hmm, packaging may not be done properly on this filesystem. Would you please try again on a default filesystem, thanks! Happy packaging!! Quitting... EOF exit fi } installscore() { scorefile=$1 perms=0644 mkdir -p "$(dirname "$scorefile")" test -e "$scorefile" || touch "$scorefile" chown root:root "$scorefile" chmod "$perms" "$scorefile" } install2() { install -d ${2%/*} ; install -m 644 $1 $2 } strip_bindir() { echo "compressing in $1" if [ -d $1 ] ; then ( shopt -s nullglob cd $1 for i in * ; do echo "$i" if [ -h $i ] ; then continue ; fi chk=`file $i | grep "not stripped"` if [ "x$chk" != "x" ] ; then echo "stripping -p $i" strip -p $i fi done ) fi } strip_libdir() { echo "compressing in $1" if [ -d $1 ] ; then ( shopt -s nullglob cd $1 for i in *.so *.so.* *.a ; do echo "$i" if [ -h $i ] ; then continue ; fi chk=`nm -a $i | grep " a "` if [ "x$chk" != "x" ] ; then if [ "x$i" != "x${i%.a}" ] ; then echo -n "ranlib and " touch -r $i $i.mt ; ranlib $i ; touch -r $i.mt $i ; rm $i.mt fi echo "stripping -gp $i" strip -gp $i fi done ) fi } gzip_dir() { echo "compressing in $1" if [ -d $1 ] ; then ( cd $1 files=`ls -f --indicator-style=none | tail +3` for i in $files ; do echo "$i" if [ ! -f $i -a ! -h $i -o "x$i" != "x${i%.gz}" ] ; then continue ; fi lnks=`ls -l $i | awk '{print $2}'` if [ $lnks -gt 1 ] ; then inum=`ls -i $i | awk '{print $1}'` for j in `find . -maxdepth 1 -inum $inum` ; do if [ ${j#./} == $i ] ; then gzip -f $i else rm ${j#./} ; ln $i.gz ${j#./}.gz fi done elif [ -h $i ] ; then ln_target=`ls -l $i | awk '{print $11}'` rm $i ; ln -s $ln_target.gz $i.gz else gzip $i fi done for i in $files ; do mv ${i%.gz}.gz $C ; done for i in $files ; do mv $C/${i%.gz}.gz . ; done ) fi } gzip_one() { gzip $1 ; mv $1.gz $C ; mv $C/${1##*/}.gz ${1%/*} } compress() { for i in {$P/usr,$P}/{bin,sbin} ; do strip_bindir $i ; done for i in {$P/usr,$P}/lib ; do strip_libdir $i ; done if [ -f $infodir/dir ] ; then rm -f $infodir/dir ; fi gzip_dir $infodir for i in `seq 8` ; do gzip_dir $mandir/man$i ; done } #fscheck W=`pwd` for i in `seq 0 $((${#src[@]} - 1))` ; do S[$i]=$W/${src[$i]} ; B[$i]=$W/build`test ${#src[@]} -eq 1 || echo $i` done P=$W/work ; C=$W/pivot infodir=$P/usr/share/info mandir=$P/usr/share/man docdir=$P/usr/share/doc if [ $# -eq 0 ] ; then opt_download=1 opt_config=1 opt_build=1 opt_package=1 else for i in "$@" ; do case $i in download) opt_download=1 ;; config) opt_config=1 ;; build) opt_build=1 ;; package) opt_package=1 ;; esac done fi if [ "$opt_download" == "1" ] ; then for i in $url ; do if [ ! -f ${i##*/} ] ; then wget $i ; fi done for i in $url ; do case ${i##*.} in tar) tar xvpf ${i##*/} ;; gz) tar xvpzf ${i##*/} ;; bz2) tar xvpjf ${i##*/} ;; esac done fi if [ "$opt_config" == "1" ] ; then for i in `seq 0 $((${#B[@]} - 1))` ; do if [ -d ${B[$i]} ] ; then rm -rf ${B[$i]} ; fi ; cp -a ${S[$i]} ${B[$i]} done ###################################################################### # * ./configure を行う前に適用したい設定やパッチなどがある場合はここに # 記述します。 ###################################################################### for i in `seq 0 $((${#B[@]} - 1))` ; do cd ${B[$i]} patch -p1 < ../$patch1 echo "configure finished. proceed to build" opt_build=1 done fi if [ "$opt_build" == "1" ] ; then for i in `seq 0 $((${#B[@]} - 1))` ; do cd ${B[$i]} if [ -f Makefile ] ; then make fi done fi if [ "$opt_package" == "1" ] ; then if [ `id -u` -ne 0 ] ; then read -p "Do you want to package as root? [y/N] " ans if [ "x$ans" == "xY" -o "x$ans" == "xy" ] ; then cd $W ; /bin/su -c "$0 package" ; exit fi fi if [ -d $P ] ; then rm -rf $P ; fi ; mkdir -p $P if [ -d $C ] ; then rm -rf $C ; fi ; mkdir -p $C touch $W/i.st ; sleep 1 for i in `seq 0 $((${#B[@]} - 1))` ; do cd ${B[$i]} mkdir -p $P/usr/games mkdir -p $P/usr/share/man/man6 mkdir -p $P/usr/share/doc/$pkgs for i in adventure arithmetic atc banner battlestar bcd caesar \ countmail cribbage dab factor fish gomoku hack hangman mille \ monop number phantasia pig pom primes quiz rain random robots sail \ trek wargames worm worms wtf wump ; do install -m 0755 -o root -g root $i/$i $P/usr/games/$i install -m 0644 $i/$i.6 $P/usr/share/man/man6 done for i in morse ppt ; do install -m 0755 -o root -g root $i/$i $P/usr/games/$i done mkdir -p $P/usr/share/dict install -m 0644 ../$words $P/usr/share/dict mkdir -p $P/usr/share/games/atc for g in Game_List `cat atc/games/Game_List` ; do install -c -m 0644 -o root -g root atc/games/$g $P/usr/share/games/atc/$g; done mkdir -p $P/var/games installscore $P/var/games/atc_score install -c -m 0755 -o root -g root backgammon/teachgammon/teachgammon $P/usr/games/teachgammon install -c -m 0755 -o root -g root backgammon/backgammon/backgammon $P/usr/games/backgammon install -m 0644 backgammon/backgammon/backgammon.6 $P/usr/share/man/man6 mkdir -p $P/usr/share/games/boggle install -c -m 0644 -o root -g root boggle/mkindex/dictindex $P/usr/share/games/boggle/dictindex install -c -m 0755 -o root -g root boggle/boggle/boggle $P/usr/games/boggle install -m 0644 boggle/boggle/boggle.6 $P/usr/share/man/man6 install -c -m 0644 -o root -g root boggle/boggle/helpfile $P/usr/share/games/boggle/helpfile install -c -m 0644 -o root -g root boggle/mkdict/dictionary $P/usr/share/games/boggle/dictionary install -c -m 0644 -o root -g root boggle/README $P/usr/share/doc/$pkgs/README.boggle install -c -m 0755 -o root -g root caesar/rot13 $P/usr/games/rot13 install -m 0644 caesar/caesar.6 $P/usr/share/man/man6/rot13.6 install -c -m 0755 -o root -g root canfield/canfield/canfield $P/usr/games/canfield install -c -m 0755 -o root -g root canfield/cfscores/cfscores $P/usr/games/cfscores install -m 0644 canfield/canfield/canfield.6 $P/usr/share/man/man6 install -c -m 0644 -o root -g root cribbage/cribbage.n $P/usr/share/games/cribbage.instr installscore $P/var/games/criblog mkdir -p $P/usr/share/man/man8 mkdir -p $P/usr/share/man/man5 install -c -m 2755 -o root -g games dm/dm $P/usr/games/dm install -m 0644 dm/dm.8 $P/usr/share/man/man8 install -m 0644 dm/dm.conf.5 $P/usr/share/man/man5 install -m 0644 -o root -g root fish/fish.instr $P/usr/share/games/fish.instr mkdir $P/usr/share/games/fortune for f in farber fortunes fortunes2 limerick startrek zippy \ fortunes-o fortunes2-o limerick-o unamerican-o farber.dat fortunes.dat fortunes2.dat limerick.dat startrek.dat zippy.dat \ fortunes-o.dat fortunes2-o.dat limerick-o.dat unamerican-o.dat; do \ install -m 0644 -o root -g root fortune/datfiles/$f $P/usr/share/games/fortune/$f; \ done mkdir -p $P/usr/bin install -c -m 0755 -o root -g root fortune/strfile/strfile $P/usr/bin/strfile install -c -m 0755 -o root -g root fortune/fortune/fortune $P/usr/bin/fortune ( cd $P/usr/games ; ln -sf ../bin/fortune ./fortune ) install -m 0644 -o root -g root fortune/README $P/usr/share/doc/$pkgs/README.fortune mkdir -p $P/var/games/hack for f in data help hh rumors; do install -c -m 0644 -o root -g root hack/$f $P/var/games/hack/$f; done installscore $P/var/games/hack/perm installscore $P/var/games/hack/record install -c -m 0755 -o root -g root hunt/hunt/hunt $P/usr/games/hunt install -c -m 0755 -o root -g root hunt/huntd/huntd $P/usr/games/huntd install -c -m 0644 -o root -g root hunt/hunt/hunt.6 $P/usr/share/man/man6 install -c -m 0644 -o root -g root hunt/huntd/huntd.6 $P/usr/share/man/man6 install -c -m 0644 -o root -g root monop/cards.pck $P/usr/share/games/monop-cards.pck mkdir -p $P/var/games/phantasia (set -e; for f in gold lastdead mess monsters motd void; do \ cp phantasia/$f $P/var/games/phantasia/$f; \ installscore $P/var/games/phantasia/$f; done) (set -e; for f in scoreboard characs; do \ if [ ! -e $P/var/games/phantasia/$f ]; then \ cp phantasia/$f $P/var/games/phantasia/$f; fi; done; \ installscore $P/var/games/phantasia/scoreboard; \ installscore -p $p/var/games/phantasia/characs) install -m 0644 -o root -g root phantasia/README $P/usr/share/doc/$pkgs/README.phantasia mkdir -p $P/usr/share/games/quiz for c in africa america areas arith asia babies bard chinese collectives ed elements europe flowers greek inca index latin locomotive midearth morse mult murders poetry posneg pres province seq-easy seq-hard sexes sov spell state trek ucc; do install -c -m 0644 -o root -g root quiz/datfiles/$c $P/usr/share/games/quiz/$c; done installscore $P/var/games/robots_roll installscore $P/var/games/saillog installscore $P/var/games/snake.log installscore $P/var/games/snakerawscores install -m 0755 -o root -g root snake/snscore/snscore $P/usr/share/games install -c -m 0755 -o root -g root tetris/tetris $P/usr/games/tetris-bsd installscore $P/var/games/tetris-bsd.scores install -m 0644 -o root -g root tetris/tetris.6 $P/usr/share/man/man6/tetris-bsd.6 mkdir -p $P/usr/share/doc/$pkgs install -c -m 0644 -o root -g root trek/USD.doc/trek.me $P/usr/share/doc/$pkgs/trek.me mkdir -p $P/usr/share/misc install -c -m 0644 -o root -g root wtf/acronyms $P/usr/share/misc/acronyms install -c -m 0644 -o root -g root wtf/acronyms.comp $P/usr/share/misc/acronyms.comp install -c -m 0644 -o root -g root wump/wump.info $P/usr/share/games/wump.info done ###################################################################### # * make install でコピーされないファイルがある場合はここに記述します。 ###################################################################### touch $W/i.et cd $W find $P -newer i.st ! -newer i.et -exec touch -t `date '+%m%d0900'` {} \; compress ###################################################################### # * compress 対象以外で圧縮したいディレクトリやファイルがある場合はここ # に記述します(strip_{bin,lib}dir や gzip_{dir,one} を使います)。 # * 他のアーカイブから追加したいファイルがある場合はここに記述します。 ###################################################################### for i in `seq 0 $((${#DOCS[@]} - 1))` ; do for j in ${DOCS[$i]} ; do for k in ${S[$i]}/$j ; do install2 $k $docdir/${src[$i]}/${k#${S[$i]}/} touch -r $k $docdir/${src[$i]}/${k#${S[$i]}/} gzip_one $docdir/${src[$i]}/${k#${S[$i]}/} done done if [ $i -eq 0 ] ; then install PlamoBuild.$pkgs $docdir/$src touch -t `date '+%m%d0900'` $docdir/$src/PlamoBuild.$pkgs gzip_one $docdir/$src/PlamoBuild.$pkgs else ln $docdir/$src/PlamoBuild.$pkgs.gz $docdir/${src[$i]} fi ( cd $docdir ; find ${src[$i]} -type d -exec touch -r $W/{} {} \; ) done ###################################################################### # * 完成した作業ディレクトリから tar イメージを作成する手順を以降に記述 # します(こだわりを求めないなら単に makepkg でも良いです)。 ###################################################################### # tar cvpf $pkgl.tar -C $P usr/bin/hoge # tar rvpf $pkgl.tar -C $P usr/share/man/man1/hoge.1.gz # tar rvpf $pkgl.tar -C $P usr/share/doc/$src # touch -t `date '+%m%d0900'` $pkgl.tar ; gzip $pkgl.tar ; touch $pkgl.tar.gz # mv $pkgl.tar.gz $pkgl.tgz pushd $P mkdir -p install /sbin/makepkg ../$pkgl.tgz << EOF y EOF popd fi