diff --git a/pkgmk.in b/pkgmk.in index 997453d..8c02f79 100755 --- a/pkgmk.in +++ b/pkgmk.in @@ -102,7 +102,7 @@ download_file() { exit $E_GENERAL fi - LOCAL_FILENAME=`get_filename $1` + LOCAL_FILENAME=$2 LOCAL_FILENAME_PARTIAL="$LOCAL_FILENAME.partial" DOWNLOAD_OPTS="--passive-ftp --no-directories --tries=3 --waitretry=3 \ --directory-prefix=$PKGMK_SOURCE_DIR \ @@ -148,62 +148,102 @@ download_file() { } download_source() { - local FILE LOCAL_FILENAME + _() { + local FILE LOCAL_FILENAME + + while (( $# > 0 )); do + FILE=$1 - for FILE in ${source[@]}; do - LOCAL_FILENAME=`get_filename $FILE` - if [ ! -e $LOCAL_FILENAME ]; then - if [ "$LOCAL_FILENAME" = "$FILE" ]; then - error "Source file '$LOCAL_FILENAME' not found (can not be downloaded, URL not specified)." - exit $E_DOWNLOAD + if [ "$2" = "as" ]; then + LOCAL_FILENAME="$PKGMK_SOURCE_DIR/$3" else - if [ "$PKGMK_DOWNLOAD" = "yes" ]; then - download_file $FILE - else - error "Source file '$LOCAL_FILENAME' not found (use option -d to download)." + LOCAL_FILENAME=`get_filename $FILE` + fi + + if [ ! -e $LOCAL_FILENAME ]; then + if [ "$LOCAL_FILENAME" = "$FILE" ]; then + error "Source file '$LOCAL_FILENAME' not found (can not be downloaded, URL not specified)." exit $E_DOWNLOAD + else + if [ "$PKGMK_DOWNLOAD" = "yes" ]; then + download_file $FILE $LOCAL_FILENAME + else + error "Source file '$LOCAL_FILENAME' not found (use option -d to download)." + exit $E_DOWNLOAD + fi fi fi - fi - done + + [ "$2" = "as" ] && shift 3 || shift + done + } + + _ "${source[@]}" } unpack_source() { - local FILE LOCAL_FILENAME COMMAND - - for FILE in ${source[@]}; do - LOCAL_FILENAME=`get_filename $FILE` - case $LOCAL_FILENAME in - *.tar|*.tar.gz|*.tar.Z|*.tgz|*.tar.bz2|*.tbz2|*.tar.xz|*.txz|*.tar.lzma|*.zip|*.rpm) - COMMAND="bsdtar -p -o -C $SRC -xf $LOCAL_FILENAME" ;; - *) - COMMAND="cp $LOCAL_FILENAME $SRC" ;; - esac + _ () { + local FILE LOCAL_FILENAME COMMAND - echo "$COMMAND" + while (( $# > 0)); do + FILE="$1" - $COMMAND + if [ "$2" = "as" ]; then + LOCAL_FILENAME="$PKGMK_SOURCE_DIR/$3" + else + LOCAL_FILENAME=`get_filename $FILE` + fi - if [ $? != 0 ]; then - if [ "$PKGMK_KEEP_WORK" = "no" ]; then - rm -rf $PKGMK_WORK_DIR + case $LOCAL_FILENAME in + *.tar|*.tar.gz|*.tar.Z|*.tgz|*.tar.bz2|*.tbz2|*.tar.xz|*.txz|*.tar.lzma|*.zip|*.rpm) + COMMAND="bsdtar -p -o -C $SRC -xf $LOCAL_FILENAME" ;; + *) + COMMAND="cp $LOCAL_FILENAME $SRC" ;; + esac + + echo "$COMMAND" + + $COMMAND + + if [ $? != 0 ]; then + if [ "$PKGMK_KEEP_WORK" = "no" ]; then + rm -rf $PKGMK_WORK_DIR + fi + error "Building '$TARGET' failed." + exit $E_UNPACK fi - error "Building '$TARGET' failed." - exit $E_UNPACK - fi - done + + [ "$2" = "as" ] && shift 3 || shift + done + } + + _ "${source[@]}" } make_md5sum() { - local FILE LOCAL_FILENAMES + _ () { + local FILE LOCAL_FILENAMES - if [ "$source" ]; then - for FILE in ${source[@]}; do - LOCAL_FILENAMES="$LOCAL_FILENAMES `get_filename $FILE`" - done + if (( $# > 0 )); then + while (( $# > 0 )); do + FILE=$1 + + warning "$# $FILE" + + if [[ "$2" = "as" ]]; then + LOCAL_FILENAMES="$LOCAL_FILENAMES $PKGMK_SOURCE_DIR/$3" + shift 3 + else + LOCAL_FILENAMES="$LOCAL_FILENAMES `get_filename $FILE`" + shift + fi + done - md5sum $LOCAL_FILENAMES | sed -e 's| .*/| |' | sort -k 2 - fi + md5sum $LOCAL_FILENAMES | sed -e 's| .*/| |' | sort -k 2 + fi + } + + _ "${source[@]}" } make_footprint() { @@ -475,13 +515,26 @@ clean() { rm -f $TARGET fi - for FILE in ${source[@]}; do - LOCAL_FILENAME=`get_filename $FILE` - if [ -e $LOCAL_FILENAME ] && [ "$LOCAL_FILENAME" != "$FILE" ]; then - info "Removing $LOCAL_FILENAME" - rm -f $LOCAL_FILENAME - fi - done + _ () { + while (( $# > 0 )); do + FILE=$1 + + if [ "$2" = "as" ]; then + LOCAL_FILENAME="$PKGMK_SOURCE_DIR/$3" + else + LOCAL_FILENAME=`get_filename $FILE` + fi + + if [ -e $LOCAL_FILENAME ] && [ "$LOCAL_FILENAME" != "$FILE" ]; then + info "Removing $LOCAL_FILENAME" + rm -f $LOCAL_FILENAME + fi + + [ "$2" = "as" ] && shift 3 || shift + done + } + + _ "${source[@]}" } update_footprint() { @@ -499,17 +552,31 @@ update_footprint() { build_needed() { local FILE RESULT - - RESULT="yes" - if [ -f $TARGET ]; then - RESULT="no" - for FILE in $PKGMK_PKGFILE ${source[@]}; do - FILE=`get_filename $FILE` + + _ () { + local M=$# + + while (( $# > 0 )); do + if [ "$2" = "as" ]; then + FILE=$3 + else + FILE=`get_filename $1` + fi + if [ ! -e $FILE ] || [ ! $TARGET -nt $FILE ]; then RESULT="yes" break fi + + [ "$M" != "$#" && "$2" = "as" ] && shift 3 || shift done + } + + RESULT="yes" + if [ -f $TARGET ]; then + RESULT="no" + + _ $PKGMK_PKGFILE "${source[@]}" fi echo $RESULT