From 4d1198d68d43b66eac3e2ba7108de235039df338 Mon Sep 17 00:00:00 2001 From: Alan Mizrahi Date: Tue, 19 Mar 2019 21:32:18 +0900 Subject: [PATCH] Allow Pkgfile's source variable to be an associative array --- pkgmk.in | 65 +++++++++++++++++++++++++++++++++++++++++++++------------------- 1 file changed, 46 insertions(+), 19 deletions(-) diff --git a/pkgmk.in b/pkgmk.in index 7b88fb1..0b6a79a 100755 --- a/pkgmk.in +++ b/pkgmk.in @@ -106,7 +106,7 @@ check_file() { } download_file() { - info "Downloading '$1'." + info "Downloading '$1' as '$2'." PKGMK_DOWNLOAD_PROG=${PKGMK_DOWNLOAD_PROG:-wget} if [ ! "`type -p ${PKGMK_DOWNLOAD_PROG}`" ]; then @@ -114,7 +114,7 @@ download_file() { exit $E_GENERAL fi - LOCAL_FILENAME=`get_filename $1` + LOCAL_FILENAME="$2" LOCAL_FILENAME_PARTIAL="$LOCAL_FILENAME.partial" case ${PKGMK_DOWNLOAD_PROG} in @@ -138,7 +138,7 @@ download_file() { error=1 - BASENAME=`get_basename $1` + BASENAME=`get_basename $LOCAL_FILENAME` for REPO in ${PKGMK_SOURCE_MIRRORS[@]}; do REPO="`echo $REPO | sed 's|/$||'`" $PKGMK_DOWNLOAD_PROG $DOWNLOAD_OPTS $RESUME_OPTS $REPO/$BASENAME @@ -173,15 +173,21 @@ download_file() { download_source() { local FILE LOCAL_FILENAME - for FILE in ${source[@]}; do - LOCAL_FILENAME=`get_filename $FILE` + for FILE in ${!source[@]}; do + if [[ $FILE =~ ^[0-9]$ ]]; then + FILE=${source[$FILE]} + LOCAL_FILENAME=`get_filename $FILE` + else + LOCAL_FILENAME=$(dirname $(get_filename ${source[$FILE]}))/${FILE##*/} + FILE=${source[$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 + download_file $FILE $LOCAL_FILENAME else error "Source file '$LOCAL_FILENAME' not found (use option -d to download)." exit $E_DOWNLOAD @@ -194,8 +200,14 @@ download_source() { unpack_source() { local FILE LOCAL_FILENAME COMMAND - for FILE in ${source[@]}; do - LOCAL_FILENAME=`get_filename $FILE` + for FILE in ${!source[@]}; do + if [[ $FILE =~ ^[0-9]$ ]]; then + FILE=${source[$FILE]} + LOCAL_FILENAME=`get_filename $FILE` + else + LOCAL_FILENAME=$(dirname $(get_filename ${source[$FILE]}))/${FILE##*/} + FILE=${source[$FILE]} + fi case $LOCAL_FILENAME in *.tar|*.tar.gz|*.tar.Z|*.tgz|*.tar.bz2|*.tbz2|*.tar.xz|*.txz|*.tar.lzma|*.tar.lz|*.zip|*.rpm|*.7z) COMMAND="bsdtar -p -o -C $SRC -xf $LOCAL_FILENAME" ;; @@ -221,7 +233,8 @@ make_md5sum() { local FILE LOCAL_FILENAMES if [ "$source" ]; then - for FILE in ${source[@]}; do + for FILE in ${!source[@]}; do + [[ $FILE =~ ^[0-9]$ ]] && FILE=${source[$FILE]} LOCAL_FILENAMES="$LOCAL_FILENAMES `get_filename $FILE`" done @@ -294,7 +307,11 @@ check_signature() { if [ -f $PKGMK_ROOT/$PKGMK_SIGNATURE ]; then cd $SRC - for FILE in "$PKGMK_PKGFILE" "$PKGMK_FOOTPRINT" ${source[@]}; do + for FILE in "$PKGMK_PKGFILE" "$PKGMK_FOOTPRINT"; do + ln -s $(get_filename -a $FILE) . + done + for FILE in ${!source[@]}; do + [[ $FILE =~ ^[0-9]$ ]] && FILE=${source[$FILE]} ln -s $(get_filename -a $FILE) . done @@ -359,7 +376,11 @@ make_signature() { local FILE LOCAL_FILENAMES local REPO - for FILE in "$PKGMK_PKGFILE" "$PKGMK_FOOTPRINT" ${source[@]}; do + for FILE in "$PKGMK_PKGFILE" "$PKGMK_FOOTPRINT"; do + LOCAL_FILENAMES="$LOCAL_FILENAMES `get_filename $FILE`" + done + for FILE in ${source[@]}; do + [[ $FILE =~ ^[0-9]$ ]] && FILE=${source[$FILE]} LOCAL_FILENAMES="$LOCAL_FILENAMES `get_filename $FILE`" done @@ -628,7 +649,8 @@ clean() { rm -f $TARGET fi - for FILE in ${source[@]}; do + for FILE in ${!source[@]}; do + [[ $FILE =~ ^[0-9]$ ]] && FILE=${source[$FILE]} LOCAL_FILENAME=`get_filename $FILE` if [ -e $LOCAL_FILENAME ] && [ "$LOCAL_FILENAME" != "$FILE" ]; then info "Removing $LOCAL_FILENAME" @@ -656,13 +678,18 @@ build_needed() { RESULT="yes" if [ -f $TARGET ]; then RESULT="no" - for FILE in $PKGMK_PKGFILE ${source[@]}; do - FILE=`get_filename $FILE` - if [ -e $FILE ] && [ ! $TARGET -nt $FILE ]; then - RESULT="yes" - break - fi - done + if [ ! $TARGET -nt $PKGMK_PKGFILE ]; then + RESULT="yes" + else + for FILE in ${!source[@]}; do + [[ $FILE =~ ^[0-9]$ ]] && FILE=${source[$FILE]} + FILE=`get_filename $FILE` + if [ -e $FILE ] && [ ! $TARGET -nt $FILE ]; then + RESULT="yes" + break + fi + done + fi fi echo $RESULT -- 2.11.1