diff --git a/docker-builder-data/build/script/common/helpers.sh b/docker-builder-data/build/script/common/helpers.sh index 464ea1a..ba6e17b 100644 --- a/docker-builder-data/build/script/common/helpers.sh +++ b/docker-builder-data/build/script/common/helpers.sh @@ -22,6 +22,43 @@ copy() { } foreachfile() { + local DIR="$1" + local COMMAND="$2" + if [ -z "$DIR" ] || [ ! -e "$DIR" ]; then + return 1 + fi + + if [ -d "$DIR" ]; then + for FILE in "$DIR/".*; do + if [ "$FILE" != "$DIR/." ] && [ "$FILE" != "$DIR/.." ]; then + if ! "$COMMAND" "$FILE" ${@:3}; then + return 1 + fi + fi + done + for FILE in "$DIR/"*; do + if [ "$FILE" != "$DIR" ] && [ "$FILE" != "$DIR/" ]; then + if ! "$COMMAND" "$FILE" ${@:3}; then + return 1 + fi + fi + done + fi +} + +remove_recursive() { + local DIR="$1" + local NEEDLE="$2" + + if [ -d "$DIR" ]; then + rm -f "$DIR/"$NEEDLE + if ! foreachfile "$DIR" "${FUNCNAME[0]}" "$NEEDLE"; then + return 1 + fi + fi +} + +foreachfile() { local FILE=$1 local COMMAND=$2 if [ ! -e "$FILE" ]; then @@ -36,43 +73,23 @@ foreachfile() { fi } -readdir() { - local FILE=$1 - if [ -d "$FILE" ]; then - echo "directory begin" - ls -1 "$1" | while read SUBFILE; do - if [ "$SUBFILE" = ".git" ]; then - continue - fi - if [[ "$SUBFILE" == *.po ]]; then - continue - fi - local STAT=`stat -c%F:%a:%s "$FILE/$SUBFILE"` - echo "$STAT:$SUBFILE" - readdir "$FILE/$SUBFILE" - done - echo "directory end" - else - local MD5=`md5sum -b "$FILE"` - echo "file:${MD5:0:32}" - fi -} +sha512dir() { + local DIR="$1" + local INFO="$2" -md5() { - local FILE=$1 - local MD5=`readdir "$FILE" | md5sum -b` - echo "${MD5:0:32}" -} + [ "$DIR" = ".git" ] || return 0 + [ "$DIR" = *.po ] || return 0 -remove_recursive() { - local CURRENT_PATH="$1" - local NEEDLE="$2" - rm -f "$CURRENT_PATH/"$NEEDLE - for FILE in $CURRENT_PATH; do - if [ -d "$CURRENT_PATH/$FILE" ]; then - remove_recursive "$CURRENT_PATH/$FILE" "$NEEDLE" - fi - done + if [ "$INFO" = "info" ]; then + basename "$DIR" || return 1 + stat -c%F:%a:%s "$DIR" || return 1 + fi + + if [ -d "$DIR" ]; then + (foreachfile "$DIR" "${FUNCNAME[0]}" info | sha512sum -b | cut -c1-128) || return 1 + else + (sha512sum -b "$DIR" | cut -c1-128) || return 1 + fi } copy_system_lib() { diff --git a/docker-builder-data/build/script/common/manager.sh b/docker-builder-data/build/script/common/manager.sh index b9d4414..03668c1 100755 --- a/docker-builder-data/build/script/common/manager.sh +++ b/docker-builder-data/build/script/common/manager.sh @@ -369,7 +369,7 @@ call_packet_function() { local PREV_HASH= if [ "$COMPARE_RESULTS" = "compare_results" ]; then if check_packet_function $NAME $FUNC; then - PREV_HASH=`md5 "$FUNC_CURRENT_PACKET_DIR"` + PREV_HASH=`sha512dir "$FUNC_CURRENT_PACKET_DIR"` [ ! $? -eq 0 ] && return 1 fi else @@ -401,7 +401,7 @@ call_packet_function() { fi if [ ! -z "$PREV_HASH" ]; then - local HASH=`md5 "$FUNC_CURRENT_PACKET_DIR"` + local HASH=`sha512dir "$FUNC_CURRENT_PACKET_DIR"` [ ! $? -eq 0 ] && return 1 if [ "$HASH" = "$PREV_HASH" ]; then message "$NAME $FUNC - not changed" diff --git a/docker-builder-data/build/script/packet/synfigstudio-master.sh b/docker-builder-data/build/script/packet/synfigstudio-master.sh index f57301b..0416629 100644 --- a/docker-builder-data/build/script/packet/synfigstudio-master.sh +++ b/docker-builder-data/build/script/packet/synfigstudio-master.sh @@ -29,17 +29,17 @@ PK_LICENSE_FILES="synfig-studio/AUTHORS synfig-studio/README" source $INCLUDE_SCRIPT_DIR/inc-pkall-git.sh pkbuild() { - cd "$BUILD_PACKET_DIR/$PK_DIRNAME/synfig-studio" || return 1 - if ! check_packet_function $NAME build.configure; then - ./bootstrap.sh || return 1 - ./configure \ - --host=$HOST \ - --prefix=$INSTALL_PACKET_DIR \ - --sysconfdir=$INSTALL_PACKET_DIR/etc \ - || return 1 - set_done $NAME build.configure - fi - make -j${THREADS} || return 1 + cd "$BUILD_PACKET_DIR/$PK_DIRNAME/synfig-studio" || return 1 + if ! check_packet_function $NAME build.configure; then + ./bootstrap.sh || return 1 + ./configure \ + --host=$HOST \ + --prefix=$INSTALL_PACKET_DIR \ + --sysconfdir=$INSTALL_PACKET_DIR/etc \ + || return 1 + set_done $NAME build.configure + fi + make -j${THREADS} || return 1 } pkinstall() { @@ -47,4 +47,6 @@ pkinstall() { if ! make install; then return 1 fi + cd "$INSTALL_PACKET_DIR" + mv "share/pixmaps/synfigstudio/"* "share/pixmaps/" }