[pacman-dev] [PATCH] makepkg: make in-place sed portable

Allan McRae allan at archlinux.org
Sun Apr 26 07:13:19 EDT 2009


Do a sed replacement in-place is not very portable.  On Mac OSX and
BSDs, the syntax is "sed -i ''" where as with GNU sed the command is
"sed -i''" or just "sed -i".  This patch detects which command should
be used during configure.

Credit to Kevin Barry who researched this issue and provided a patch
to work around this using temporary backup files.

Signed-off-by: Allan McRae <allan at archlinux.org>
---
 configure.ac          |    5 +++++
 scripts/Makefile.am   |    1 +
 scripts/makepkg.sh.in |    4 ++--
 3 files changed, 8 insertions(+), 2 deletions(-)

diff --git a/configure.ac b/configure.ac
index 5dcbe79..a83d5e4 100644
--- a/configure.ac
+++ b/configure.ac
@@ -180,9 +180,11 @@ GCC_GNU89_INLINE_CC
 
 # Host-dependant definitions
 SIZECMD="stat -c %s"
+SEDINPLACE="sed -i"
 case "${host_os}" in
 	*bsd*)
 		SIZECMD="stat -f %z"
+		SEDINPLACE="sed -i ''"
 		;;
 	cygwin*)
 		host_os_cygwin=yes
@@ -191,12 +193,14 @@ case "${host_os}" in
 	darwin*)
 		host_os_darwin=yes
 		SIZECMD="/usr/bin/stat -f %z"
+		SEDINPLACE="sed -i ''"
 		;;
 esac
 
 AM_CONDITIONAL([CYGWIN], test "x$host_os_cygwin" = "xyes")
 AM_CONDITIONAL([DARWIN], test "x$host_os_darwin" = "xyes")
 AC_SUBST(SIZECMD)
+AC_SUBST(SEDINPLACE)
 
 # Check for architecture, used in default makepkg.conf
 # (Note single space left after CARCHFLAGS)
@@ -356,6 +360,7 @@ ${PACKAGE_NAME}:
     Architecture flags     : ${CARCHFLAGS}
     Host Type              : ${CHOST}
     Filesize command       : ${SIZECMD}
+    In-place sed command   : ${SEDINPLACE}
 
     libalpm version        : ${LIB_VERSION}
     libalpm version info   : ${LIB_VERSION_INFO}
diff --git a/scripts/Makefile.am b/scripts/Makefile.am
index 5a2b780..5d65653 100644
--- a/scripts/Makefile.am
+++ b/scripts/Makefile.am
@@ -41,6 +41,7 @@ edit = sed \
 	-e 's|@DBEXT[@]|$(DBEXT)|g' \
 	-e 's|@BUILDSCRIPT[@]|$(BUILDSCRIPT)|g' \
 	-e 's|@SIZECMD[@]|$(SIZECMD)|g' \
+	-e 's|@SEDINPLACE[@]|$(SEDINPLACE)|g' \
 	-e 's|@configure_input[@]|Generated from $@.in; do not edit by hand.|g'
 
 ## All the scripts depend on Makefile so that they are rebuilt when the
diff --git a/scripts/makepkg.sh.in b/scripts/makepkg.sh.in
index c97eff2..ca25fbb 100644
--- a/scripts/makepkg.sh.in
+++ b/scripts/makepkg.sh.in
@@ -1171,8 +1171,8 @@ devel_update() {
 	if [ -n "$newpkgver" ]; then
 		if [ "$newpkgver" != "$pkgver" ]; then
 			if [ -f "./$BUILDSCRIPT" ]; then
-				sed -i "s/^pkgver=[^ ]*/pkgver=$newpkgver/" "./$BUILDSCRIPT"
-				sed -i "s/^pkgrel=[^ ]*/pkgrel=1/" "./$BUILDSCRIPT"
+				@SEDINPLACE@ "s/^pkgver=[^ ]*/pkgver=$newpkgver/" "./$BUILDSCRIPT"
+				@SEDINPLACE@ "s/^pkgrel=[^ ]*/pkgrel=1/" "./$BUILDSCRIPT"
 				source "$BUILDSCRIPT"
 			fi
 		fi
-- 
1.6.2.4



More information about the pacman-dev mailing list