diff --git a/configure.ac b/configure.ac index 45f40f01..0a7b2546 100644 --- a/configure.ac +++ b/configure.ac @@ -319,6 +319,8 @@ GCC_VISIBILITY_CC # Host-dependant definitions INODECMD="stat -c '%i %n'" +OWNERCMD="stat -c '%u:%g'" +MODECMD="stat -c '%a'" SIZECMD="stat -c %s" SEDINPLACE="sed --follow-symlinks -i" DUFLAGS="-sk --apparent-size" @@ -328,6 +330,8 @@ STRIP_STATIC="--strip-debug" case "${host_os}" in *bsd*) INODECMD="stat -f '%i %N'" + OWNERCMD="stat -f '%u:%g'" + MODECMD="stat -f '%Lp'" SIZECMD="stat -f %z" SEDINPLACE="sed -i \"\"" DUFLAGS="-sk" @@ -335,6 +339,8 @@ case "${host_os}" in darwin*) host_os_darwin=yes INODECMD="/usr/bin/stat -f '%i %N'" + OWNERCMD="/usr/bin/stat -f '%u:%g'" + MODECMD="/usr/bin/stat -f '%Lp'" SIZECMD="/usr/bin/stat -f %z" SEDINPLACE="/usr/bin/sed -i ''" DUFLAGS="-sk" @@ -347,6 +353,8 @@ esac AM_CONDITIONAL([DARWIN], test "x$host_os_darwin" = "xyes") AC_PATH_PROGS([DUPATH], [du], [du], [/usr/bin$PATH_SEPARATOR/bin] ) AC_SUBST(INODECMD) +AC_SUBST(OWNERCMD) +AC_SUBST(MODECMD) AC_SUBST(SIZECMD) AC_SUBST(SEDINPLACE) AC_SUBST(DUFLAGS) @@ -528,6 +536,8 @@ ${PACKAGE_NAME}: Architecture : ${CARCH} Host Type : ${CHOST} File inode command : ${INODECMD} + File owner command : ${OWNERCMD} + File mode command : ${MODECMD} Filesize command : ${SIZECMD} In-place sed command : ${SEDINPLACE} diff --git a/scripts/Makefile.am b/scripts/Makefile.am index bc1dc10c..4ef3ce0e 100644 --- a/scripts/Makefile.am +++ b/scripts/Makefile.am @@ -69,6 +69,8 @@ edit = sed \ -e 's|@TEMPLATE_DIR[@]|$(TEMPLATE_DIR)|g' \ -e 's|@DEBUGSUFFIX[@]|$(DEBUGSUFFIX)|g' \ -e "s|@INODECMD[@]|$(INODECMD)|g" \ + -e "s|@OWNERCMD[@]|$(OWNERCMD)|g" \ + -e "s|@MODECMD[@]|$(MODECMD)|g" \ -e 's|@SIZECMD[@]|$(SIZECMD)|g' \ -e 's|@SEDINPLACE[@]|$(SEDINPLACE)|g' \ -e 's|@DUFLAGS[@]|$(DUFLAGS)|g' \ diff --git a/scripts/pacman-optimize.sh.in b/scripts/pacman-optimize.sh.in index 93742695..7c809193 100644 --- a/scripts/pacman-optimize.sh.in +++ b/scripts/pacman-optimize.sh.in @@ -168,8 +168,8 @@ msg "$(gettext "Rotating database into place...")" fail=0 mv "$localdb" "$localdb.old" || fail=1 mv "$localdb.new" "$localdb" || fail=1 -chmod --reference="$localdb.old" "$localdb" || fail=1 -chown --reference="$localdb.old" "$localdb" || fail=1 +chmod $(@MODECMD@ "$localdb.old") "$localdb" || fail=1 +chown $(@OWNERCMD@ "$localdb.old") "$localdb" || fail=1 if (( fail )); then # failure with our directory shuffle die_r "$(gettext "New database substitution failed. Check for %s, %s, and %s directories.")" "$localdb" "$localdb.old" "$localdb.new"