#!/bin/bash # $HeadURL$ $LastChangedRevision$ # Modules . $(bs-config bs_share_prefix)/include/bssupport.sh || { echo "${0##*/}: INTERNAL ERROR: failed to load bssupport.sh" >&2; exit 3; } . $(miniade) || { echo "${0##*/}: ERROR: miniade failed (hint: run 'miniade' to see error)" >&2; exit 1; } # Configurable stuff # Other globals main() { local MY_ARGS local PROGRAM VERBOSELEVEL PROGNAME # Defaults for options # Process options miniade_process_options --help-handler=usage MY_ARGS "$@" && set -- "${MY_ARGS[@]}" # Process arguments # Sanity checks and derivations # bs sets PROGRAM, but passes it to us through environment as BS_PROGRAM, copy it back. PROGRAM=$BS_PROGRAM VERBOSELEVEL=$BS_VERBOSELEVEL AUTHEMAIL=$BS_AUTHEMAIL AUTHFULLNAME=$BS_AUTHFULLNAME SOURCES_SVNREPO_URL=$BS_SOURCES_SVNREPO_URL TARBALL_TGZREPO_DIR=$BS_TARBALL_TGZREPO_DIR SOURCES_SVNWC_DIR=$BS_SOURCES_SVNWC_DIR bssupport_checkset VERBOSELEVEL PROGRAM AUTHEMAIL AUTHFULLNAME SOURCES_SVNREPO_URL TARBALL_TGZREPO_DIR SOURCES_SVNWC_DIR miniade_get_progname PROGNAME miniade_set_verboselevel $VERBOSELEVEL bssupport_changestate --id=$PROGRAM --from=released,unreleased --step=$PROGNAME bssupport_sandbox bssupport_getstate $PROGRAM STATE # Guts miniade_info "working out version ..." if [ $STATE = released ]; then for TAG_DIR in $(svn ls $SOURCES_SVNREPO_URL/tags); do if ! [[ $TAG_DIR =~ ^(.*)/$ ]]; then miniade_warning "$TAG_DIR: badly named tag directory" continue elif [ "X$VERSION" != X ] && dpkg --compare-versions ${BASH_REMATCH[1]} le $VERSION; then miniade_debug 10 "$TAG_DIR: not higher than previously noted highest" continue fi VERSION=${BASH_REMATCH[1]} done elif [ $STATE = unreleased ]; then # verify source changelog is unreleased and extract version bssupport_get_unreleased_sources_version $SOURCES_SVNWC_DIR/doc/ChangeLog VERSION VERSION=$VERSION.UNRELEASED fi miniade_info "getting sources ..." if [ $STATE = released ]; then svn co --quiet $SOURCES_SVNREPO_URL/tags/$VERSION $PROGRAM elif [ $STATE = unreleased ]; then cp -r $SOURCES_SVNWC_DIR $PROGRAM make -s -C $PROGRAM clean # adebun will bauk if ChangeLog doesn't say sources are released. So frig that by # finalising the ChangeLog (remember, it's just a copy). adech --debug=$VERBOSELEVEL --finalise $PROGRAM/doc/ChangeLog fi #make miniade_info "making tarball ..." CMDLINE="adebun --author-email=\"$AUTHEMAIL\" --author-name=\"$AUTHFULLNAME\" --release-id=$VERSION $PROGRAM" miniade_debug 10 "CMDLINE=[$CMDLINE]" # ade requires special handling to use the source's adebun command. if [ $PROGRAM = ade ]; then make -sC $PROGRAM CMDLINE="$PROGRAM/bin/adedevsh $CMDLINE" fi eval "$CMDLINE" || miniade_error "bundling failed (hint: see messages above)" TGZ=$(echo *.tar.gz) chmod 644 $TGZ #upload miniade_info "uploading tarball ..." mkdir -p $TARBALL_TGZREPO_DIR cp -a $TGZ $TARBALL_TGZREPO_DIR/ #deloldunreleased # If we uploaded a tarball of released sources then delete any unreleased tarballs. if [ $STATE = released ]; then miniade_info "deleting old *unreleased* tarballs ..." rm -f $TARBALL_TGZREPO_DIR/$PROGRAM*UNRELEASED* fi } main "$@"