#!/bin/zsh # This file is maintained at http://git.mdcc.cx/draai # copyright: COPYRIGHT='Copyright (C) 2007, 2008, 2009, 2010, 2011, 2012, 2013 Joost van Baal-Ilić' # This program is freely distributable per the following license: LICENSE=" This file is part of draai. Draai is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License, as published by the Free Software Foundation on http://www.gnu.org/licenses/gpl.html. You should have received a copy of the GNU General Public License along with draai. There is NO warranty." PACKAGE=draai prefix=/usr/local typeset -a docfiles dist_docfiles man1files dist_man1files scriptfiles \ dist_scriptfiles libexecfiles dist_libexecfiles zshfiles dist_zshfiles \ dist_files manhtmlfiles=(man/draai.html man/dr_symlinks.html man/dr_unsort.html \ man/dr_watch.html) docfiles=(COPYING ChangeLog NEWS README) dist_docfiles=($docfiles $manhtmlfiles TODO INSTALL) man1files=(man/draai.1 man/dr_permutate.1 man/dr_symlinks.1 \ man/dr_unsort.1 man/dr_watch.1) dist_man1files=($man1files man/include.zmm.in man/*.azm) scriptfiles=(script/draai script/dr_init script/dr_permutate \ script/dr_symlinks script/dr_unsort script/dr_watch) dist_scriptfiles=($scriptfiles script/draai.in) libexecfiles=(script/dr_file2tag script/dr_radio \ script/oggsymlinks script/draai123) dist_libexecfiles=($libexecfiles) zshfiles=(zsh/_draai) dist_zshfiles=($zshfiles) dist_helpfiles=(help/{command,option,shortoption}/*) dist_files=($dist_docfiles $dist_man1files $dist_scriptfiles \ $dist_libexecfiles $dist_zshfiles $dist_helpfiles VERSION \ setup man/Makefile) dist_subdirs=(man script zsh help/{command,option,shortoption}) prog=`basename $0` usage() { cat <VERSION fi { cat <$f fi done distdir=$PACKAGE-$version tgz=$distdir.tar.gz } buildhelp() { # create # -V, --version show program's version number and exit # -h, --help show this help message and exit # -d, --debug be very verbose # from # % cat help/option/raw/description # Print raw stuff, suitable for postprocessing (if combined with tail, peek or # list). # % cat help/option/raw/option # r # % cat help/option/time/argument # TIME cd help/option for f in * do # FIXME probably could better use full printf unset argument test -f "$f/argument" && argument="$( echo -n $( cat $f/argument ) )" # why does this not do what i think it would do? # echo -n '-' # anyway, this behaves the way i want printf ' -' echo -n "$( cat $f/option )" test "$argument" && echo -n " $argument" echo -n ', --' echo -n "$f" test "$argument" && echo -n "=$argument" echo -n "\\\n" while read l; do echo -n " $l\\\n"; done <$f/description done cd - echo -n "\\\ncommands:\\\n\\\n" cd help/command for f in * do # yes, we want a literal \n in the output: sed should be able to grok it echo -n " $f:\\\n" while read l; do echo -n " $l\\\n"; done <$f echo -n "\\\n" done cd - } build_cmds() { cd help/command # create output like: # draai:"play music (now or later)" # init:"start a bunch of x terminals setting up some draai jobs" for f in * do echo -n " $f:"'"' while read l; do echo -n "$l "; done < $f echo -n '"'"\\\n" done cd - } build_opts() { # merge with buildhelp()? cd help/option for f in * do # '--noshuffle[do not shuffle tracks]' \ # '--playlist[playlist file]:playlist:_draai_playlist' \ unset argument test -f "$f/argument" && argument="$( echo -n $( cat $f/argument ) )" printf " '--" echo -n "$f"'[' # FIXME # test "$argument" && echo -n "[=$argument]" while read l; do echo -n "$l "; done <$f/description # make sure literal \ ends up in zsh/_draai # echo -n ']'"' \\\n" just \n # echo -n ']'"' \\\\\\\n" just \\n # yes, we need 11 \'s here... echo -n ']'"' \\\\\\\\\\\n" done cd - } configure() { buildhelp >help.txt echo generated help.txt build_cmds >cmds.txt echo generated cmds.txt # '--noshuffle[do not shuffle tracks]' \ # '--playlist[playlist file]:playlist:_draai_playlist' \ build_opts >opts.txt echo generated opts.txt for f in script/draai.in man/include.zmm.in zsh/_draai.in do # FIXME test this sed "s/@VERSION@/$version/; s|@top_srcdir@|`pwd`|; s/@HELPTEXT@/`cat help.txt`/; s/@CMDSTEXT@/`cat cmds.txt`/; s|@OPTSTEXT@|`cat opts.txt`|" $f >${f%.in} echo generated ${f%.in} from $f done # rm help.txt cmds.txt } changelog() { # we want no unprotected emailadresses in the cl git log --pretty --numstat --summary | sed 's/<[^>][^>]*>//g' | git2cl >ChangeLog } all() { ( cd man && make ) } OPTS=$(getopt -o h,l,p: --long help,license,prefix:,libexecdir: -- "$@") eval set -- "$OPTS" while true; do case "$1" in -h|--help) usage exit 0 ;; -p|--prefix) prefix="$2" shift 2 ;; --libexecdir) libexecdir="$2" shift 2 ;; -l|--license) echo $COPYRIGHT echo $LICENSE exit 0 ;; --) shift break ;; *) usage exit 1 ;; esac done shift $(($OPTIND - 1)) command=$1 shift exec_prefix=$prefix bindir=${exec_prefix}/bin mandir=$prefix/man man1dir=$mandir/man1 datarootdir=$prefix/share datadir=$datarootdir docdir=$datadir/doc/$PACKAGE : ${libexecdir:=${exec_prefix}/libexec} libexecpdir=$libexecdir/$PACKAGE zshdir=$datadir/zsh/site-functions case $command in install) for d in $DESTDIR$bindir $DESTDIR$man1dir $DESTDIR$docdir $DESTDIR$libexecpdir $DESTDIR$zshdir do test -d "$d" || { mkdir -p "$d" && echo created $d } done for p in $scriptfiles do if test -f $p then install -c "$p" "$DESTDIR$bindir/$(basename $p)" && \ echo installed $DESTDIR$bindir/$(basename $p) fi done for p in $man1files do if test -f $p then install -c -m 644 "$p" "$DESTDIR$man1dir/$(basename $p)" && \ echo installed $DESTDIR$man1dir/$(basename $p) fi done for p in $docfiles do if test -f $p then install -c -m 644 "$p" "$DESTDIR$docdir/$(basename $p)" && \ echo installed $DESTDIR$docdir/$(basename $p) fi done for p in $libexecfiles do if test -f $p then install -c "$p" "$DESTDIR$libexecpdir/$(basename $p)" && \ echo installed $DESTDIR$libexecpdir/$(basename $p) fi done for p in $zshfiles do if test -f $p then install -c -m 644 "$p" "$DESTDIR$zshdir/$(basename $p)" && \ echo installed $DESTDIR$zshdir/$(basename $p) fi done ;; uninstall) # FIXME echo not yet implemented ;; dist) cp /usr/share/common-licenses/GPL COPYING init echo $version >VERSION configure changelog all if head NEWS | grep -q $version then : else echo error: NEWS does not mention release $version exit 1 fi rm -rf $distdir mkdir $distdir for dir in $dist_subdirs do mkdir -p $distdir/$dir done for file in $dist_files do dir=$(echo "$file" | sed -e 's,/[^/]*$,,') cp -pR $file $distdir/$dir done tar chof - $distdir | gzip -c >$distdir.tar.gz ls -l $distdir.tar.gz ;; publish) init scp $tgz beskar.mdcc.cx:www/mdcc.cx/pub/draai/ ;; # sign: for i in $(DIST_ARCHIVES); do echo "gpg --armor --detach-sign $$i"; gpg --armor --detach-sign $$i; done # # publish: for i in $(DIST_ARCHIVES); do echo "scp $$i $$i.asc $(MY_RDIR)"; scp $$i $$i.asc $(MY_RDIR); done # @echo now run: ssh beskar update-tar-symlinks uruk # @echo '( or: ssh beskar.mdcc.cx ./bin/update-tar-symlinks uruk )' configure) # not for users, merely convenience for developers init configure ;; changelog) changelog ;; *) usage exit 1 ;; esac