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

Dan McGee dpmcgee at gmail.com
Sun Apr 26 10:22:37 EDT 2009


On Sun, Apr 26, 2009 at 6:13 AM, Allan McRae <allan at archlinux.org> wrote:
> 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>
Signed-off-by: Dan McGee <dan at archlinux.org>

Of course I didn't test it too extensively, but the concept looks just fine.

> ---
>  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
>
> _______________________________________________
> pacman-dev mailing list
> pacman-dev at archlinux.org
> http://www.archlinux.org/mailman/listinfo/pacman-dev
>


More information about the pacman-dev mailing list