summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAllan McRae <allan@archlinux.org>2012-12-16 13:32:54 +0100
committerAllan McRae <allan@archlinux.org>2013-01-03 03:03:10 +0100
commit241d6b884a3a6c883b6c61a3b175d17e7d317fc5 (patch)
tree0e45b5375174c4b1fceb5a00657875657fd4d793
parentd5a6ce8ca124d1eea343314b23110e006eb313d5 (diff)
downloadpacman-241d6b884a3a6c883b6c61a3b175d17e7d317fc5.tar.gz
pacman-241d6b884a3a6c883b6c61a3b175d17e7d317fc5.tar.xz
makepkg: use --apparent-size when du supports it
Amazingly, using "sleep 1" to convince btrfs to report correct file sizes is only a 90% fix. Sometimes more sleep is needed. Instead we use the --apparent-size argument to du to get actual file sizes. This is used only on Linux as the various BSDs do not support this argument. Signed-off-by: Allan McRae <allan@archlinux.org>
-rw-r--r--configure.ac4
-rw-r--r--scripts/Makefile.am1
-rw-r--r--scripts/makepkg.sh.in7
3 files changed, 6 insertions, 6 deletions
diff --git a/configure.ac b/configure.ac
index 8ec0eab8..6059fe5e 100644
--- a/configure.ac
+++ b/configure.ac
@@ -300,6 +300,7 @@ GCC_GNU89_INLINE_CC
INODECMD="stat -c '%i %n'"
SIZECMD="stat -c %s"
SEDINPLACE="sed -i"
+DUFLAGS="-sk --apparent-size"
STRIP_BINARIES="--strip-all"
STRIP_SHARED="--strip-unneeded"
STRIP_STATIC="--strip-debug"
@@ -308,12 +309,14 @@ case "${host_os}" in
INODECMD="stat -f '%i %n'"
SIZECMD="stat -f %z"
SEDINPLACE="sed -i \"\""
+ DUFLAGS="-sk"
;;
darwin*)
host_os_darwin=yes
INODECMD="/usr/bin/stat -f '%i %n'"
SIZECMD="/usr/bin/stat -f %z"
SEDINPLACE="/usr/bin/sed -i ''"
+ DUFLAGS="-sk"
STRIP_BINARIES=""
STRIP_SHARED="-S"
STRIP_STATIC="-S"
@@ -325,6 +328,7 @@ AC_PATH_PROGS([DUPATH], [du], [du], [/usr/bin$PATH_SEPARATOR/bin] )
AC_SUBST(INODECMD)
AC_SUBST(SIZECMD)
AC_SUBST(SEDINPLACE)
+AC_SUBST(DUFLAGS)
AC_SUBST(STRIP_BINARIES)
AC_SUBST(STRIP_SHARED)
AC_SUBST(STRIP_STATIC)
diff --git a/scripts/Makefile.am b/scripts/Makefile.am
index 2bd64118..c3c1d73a 100644
--- a/scripts/Makefile.am
+++ b/scripts/Makefile.am
@@ -57,6 +57,7 @@ edit = sed \
-e "s|@INODECMD[@]|$(INODECMD)|g" \
-e 's|@SIZECMD[@]|$(SIZECMD)|g' \
-e 's|@SEDINPLACE[@]|$(SEDINPLACE)|g' \
+ -e 's|@DUFLAGS[@]|$(DUFLAGS)|g' \
-e 's|@DUPATH[@]|$(DUPATH)|g' \
-e 's|@SCRIPTNAME[@]|$@|g' \
-e 's|@configure_input[@]|Generated from $@.sh.in; do not edit by hand.|g'
diff --git a/scripts/makepkg.sh.in b/scripts/makepkg.sh.in
index ff3fa5b8..ceaab612 100644
--- a/scripts/makepkg.sh.in
+++ b/scripts/makepkg.sh.in
@@ -1704,12 +1704,7 @@ write_pkginfo() {
local packager="Unknown Packager"
fi
- # btrfs's delayed allocation causes the stat buffers from the kernel to "lie"
- # to us momentarily and report 0 blocks allocated (which is how du calculates
- # size). Sleeping for a second here is about the dirtiest thing possible,
- # but avoids reporting entirely bogus install sizes.
- sleep 1
- local size="$(@DUPATH@ -sk)"
+ local size="$(@DUPATH@ @DUFLAGS@)"
size="$(( ${size%%[^0-9]*} * 1024 ))"
msg2 "$(gettext "Generating %s file...")" ".PKGINFO"