[pacman-dev] [PATCH 1/3] Add --with-bsdtar-bin configure option
This will enable us to use a custom name and/or location of bsdtar binary in scripts. Signed-off-by: Nezmer <git@nezmer.info> --- configure.ac | 6 ++++++ contrib/Makefile.am | 1 + contrib/bacman.in | 4 ++-- contrib/pacscripts.in | 4 ++-- scripts/Makefile.am | 1 + scripts/makepkg.sh.in | 12 ++++++------ scripts/pacman-optimize.sh.in | 4 ++-- scripts/pkgdelta.sh.in | 2 +- scripts/repo-add.sh.in | 14 +++++++------- 9 files changed, 28 insertions(+), 20 deletions(-) diff --git a/configure.ac b/configure.ac index 6f601f4..50d4a04 100644 --- a/configure.ac +++ b/configure.ac @@ -98,6 +98,11 @@ AC_ARG_WITH(fetch, AS_HELP_STRING([--with-fetch], [use libfetch as an internal downloader]), [], [with_fetch=check]) +# Custom bsdtar binary name and/or location +AC_ARG_WITH(bsdtar_bin, + AS_HELP_STRING([--with-bsdtar-bin=BSDTAR], [use bsdtar_bin as the bsdtar binary in scripts]), + BSDTAR_BIN=$with_bsdtar_bin) + # Help line for documentation AC_ARG_ENABLE(doc, AS_HELP_STRING([--disable-doc], [prevent make from looking at doc/ dir]), @@ -128,6 +133,7 @@ AC_PROG_MAKE_SET AC_PROG_LIBTOOL AC_CHECK_PROGS([PYTHON], [python2.7 python2.6 python2.5 python2 python], [false]) AC_PATH_PROGS([BASH_SHELL], [bash bash4 bash3], [false]) +AC_PATH_PROGS([BSDTAR_BIN], [bsdtar], [false]) # find installed gettext AM_GNU_GETTEXT([external]) diff --git a/contrib/Makefile.am b/contrib/Makefile.am index 55366b4..985b19f 100644 --- a/contrib/Makefile.am +++ b/contrib/Makefile.am @@ -29,6 +29,7 @@ MOSTLYCLEANFILES = $(OURFILES) *.tmp edit = sed \ -e 's|@sysconfdir[@]|$(sysconfdir)|g' \ -e 's|@localstatedir[@]|$(localstatedir)|g' \ + -e 's|@BSDTAR_BIN[@]|$(BSDTAR_BIN)|g' \ -e 's|@BASH_SHELL[@]|$(BASH_SHELL)|g' $(OURFILES): Makefile diff --git a/contrib/bacman.in b/contrib/bacman.in index b4e3b4b..1891ef6 100755 --- a/contrib/bacman.in +++ b/contrib/bacman.in @@ -133,7 +133,7 @@ while read i; do %FILES%) ret=0 if [ -e "/$i" ]; then - bsdtar -cnf - "/$i" 2> /dev/null | bsdtar -xpf - + @BSDTAR_BIN@ -cnf - "/$i" 2> /dev/null | @BSDTAR_BIN@ -xpf - # Workaround to bsdtar not reporting a missing file as an error if [ ! -e "$work_dir/$i" -a ! -L "$work_dir/$i" ]; then @@ -288,7 +288,7 @@ ret=0 shopt -s nullglob # TODO: Maybe this can be set globally for robustness shopt -s -o pipefail -bsdtar -cf - $comp_files * | +@BSDTAR_BIN@ -cf - $comp_files * | case "$PKGEXT" in *tar.gz) gzip -c -f -n ;; *tar.bz2) bzip2 -c -f ;; diff --git a/contrib/pacscripts.in b/contrib/pacscripts.in index d366409..6faf964 100755 --- a/contrib/pacscripts.in +++ b/contrib/pacscripts.in @@ -85,7 +85,7 @@ print_db() { } print_pkg() { - if ! bsdtar -xOf "$1" .INSTALL 2>/dev/null; then + if ! @BSDTAR_BIN@ -xOf "$1" .INSTALL 2>/dev/null; then error "Package $1 does not include any .INSTALL script" return 1 fi @@ -94,7 +94,7 @@ print_pkg() { print_scriptlet() { if [ -f "$1" ]; then - if bsdtar tf "$1" .PKGINFO &>/dev/null; then + if @BSDTAR_BIN@ tf "$1" .PKGINFO &>/dev/null; then print_pkg "$1" return fi diff --git a/scripts/Makefile.am b/scripts/Makefile.am index 78deb0b..4668ad1 100644 --- a/scripts/Makefile.am +++ b/scripts/Makefile.am @@ -35,6 +35,7 @@ edit = sed \ -e 's|@sysconfdir[@]|$(sysconfdir)|g' \ -e 's|@localstatedir[@]|$(localstatedir)|g' \ -e 's|@prefix[@]|$(prefix)|g' \ + -e 's|@BSDTAR_BIN[@]|$(BSDTAR_BIN)|g' \ -e 's|@BASH_SHELL[@]|$(BASH_SHELL)|g' \ -e 's|@PACKAGE_VERSION[@]|$(REAL_PACKAGE_VERSION)|g' \ -e 's|@PACKAGE_BUGREPORT[@]|$(PACKAGE_BUGREPORT)|g' \ diff --git a/scripts/makepkg.sh.in b/scripts/makepkg.sh.in index bdf63ef..2731dbf 100644 --- a/scripts/makepkg.sh.in +++ b/scripts/makepkg.sh.in @@ -671,7 +671,7 @@ extract_sources() { local cmd='' case "$file_type" in *application/x-tar*|*application/zip*|*application/x-zip*|*application/x-cpio*) - cmd="bsdtar" ;; + cmd="@BSDTAR_BIN@" ;; *application/x-gzip*) case "$ext" in gz|z|Z) cmd="gzip" ;; @@ -689,8 +689,8 @@ extract_sources() { esac ;; *) # See if bsdtar can recognize the file - if bsdtar -tf "$file" -q '*' &>/dev/null; then - cmd="bsdtar" + if @BSDTAR_BIN@ -tf "$file" -q '*' &>/dev/null; then + cmd="@BSDTAR_BIN@" else continue fi ;; @@ -698,7 +698,7 @@ extract_sources() { local ret=0 msg2 "$(gettext "Extracting %s with %s")" "$file" "$cmd" - if [[ $cmd = bsdtar ]]; then + if [[ $cmd = @BSDTAR_BIN@ ]]; then $cmd -xf "$file" || ret=$? else rm -f "${file%.*}" @@ -1043,7 +1043,7 @@ create_package() { shopt -s nullglob # TODO: Maybe this can be set globally for robustness shopt -s -o pipefail - bsdtar -cf - $comp_files * | + @BSDTAR_BIN@ -cf - $comp_files * | case "$PKGEXT" in *tar.gz) gzip -c -f -n ;; *tar.bz2) bzip2 -c -f ;; @@ -1135,7 +1135,7 @@ create_srcpackage() { # tar it up msg2 "$(gettext "Compressing source package...")" cd "${srclinks}" - if ! bsdtar -c${TAR_OPT}Lf "$pkg_file" ${pkgbase}; then + if ! @BSDTAR_BIN@ -c${TAR_OPT}Lf "$pkg_file" ${pkgbase}; then error "$(gettext "Failed to create source package file.")" exit 1 # TODO: error code fi diff --git a/scripts/pacman-optimize.sh.in b/scripts/pacman-optimize.sh.in index f4642ab..a0026b7 100644 --- a/scripts/pacman-optimize.sh.in +++ b/scripts/pacman-optimize.sh.in @@ -129,7 +129,7 @@ find "$dbroot" -type f | sort | xargs md5sum > "$workdir/pacsums.old" # step 2: tar it up msg "$(gettext "Tar'ing up %s...")" "$dbroot" cd "$dbroot" -bsdtar -czf "$workdir/pacman-db.tar.gz" ./ +@BSDTAR_BIN@ -czf "$workdir/pacman-db.tar.gz" ./ if (( $? )); then rm -rf "$workdir" die_r "$(gettext "Tar'ing up %s failed.")" "$dbroot" @@ -138,7 +138,7 @@ fi # step 3: make and sum the new db side-by-side with the old msg "$(gettext "Making and MD5sum'ing the new database...")" mkdir "$dbroot.new" -bsdtar -xpf "$workdir/pacman-db.tar.gz" -C "$dbroot.new" +@BSDTAR_BIN@ -xpf "$workdir/pacman-db.tar.gz" -C "$dbroot.new" if (( $? )); then rm -rf "$workdir" die_r "$(gettext "Untar'ing %s failed.")" "$dbroot" diff --git a/scripts/pkgdelta.sh.in b/scripts/pkgdelta.sh.in index 6bc3f5d..b569ea4 100644 --- a/scripts/pkgdelta.sh.in +++ b/scripts/pkgdelta.sh.in @@ -76,7 +76,7 @@ read_pkginfo() IFS=" " local line var val - for line in $(bsdtar -xOf "$1" .PKGINFO 2>/dev/null | + for line in $(@BSDTAR_BIN@ -xOf "$1" .PKGINFO 2>/dev/null | grep -v "^#" | sed 's|\(\w*\)\s*=\s*\(.*\)|\1="\2"|'); do eval "$line" if [[ -n $pkgname && -n $pkgver && -n $arch ]]; then diff --git a/scripts/repo-add.sh.in b/scripts/repo-add.sh.in index d09d1b4..8b6a028 100644 --- a/scripts/repo-add.sh.in +++ b/scripts/repo-add.sh.in @@ -198,7 +198,7 @@ db_write_entry() # read info from the zipped package local line var val - for line in $(bsdtar -xOqf "$pkgfile" .PKGINFO | + for line in $(@BSDTAR_BIN@ -xOqf "$pkgfile" .PKGINFO | grep -v '^#' | sed 's|\(\w*\)\s*=\s*\(.*\)|\1 \2|'); do # bash awesomeness here- var is always one word, val is everything else var=${line%% *} @@ -337,15 +337,15 @@ check_repo_db() if [[ -f $REPO_DB_FILE ]]; then # there are two situations we can have here- a DB with some entries, # or a DB with no contents at all. - if ! bsdtar -tqf "$REPO_DB_FILE" '*/desc' >/dev/null 2>&1; then + if ! @BSDTAR_BIN@ -tqf "$REPO_DB_FILE" '*/desc' >/dev/null 2>&1; then # check empty case - if [[ -n $(bsdtar -tqf "$REPO_DB_FILE" '*' 2>/dev/null) ]]; then + if [[ -n $(@BSDTAR_BIN@ -tqf "$REPO_DB_FILE" '*' 2>/dev/null) ]]; then error "$(gettext "Repository file '%s' is not a proper pacman database.")" "$REPO_DB_FILE" exit 1 fi fi msg "$(gettext "Extracting database to a temporary location...")" - bsdtar -xf "$REPO_DB_FILE" -C "$tmpdir" + @BSDTAR_BIN@ -xf "$REPO_DB_FILE" -C "$tmpdir" else case "$cmd" in repo-remove) @@ -386,7 +386,7 @@ add() fi pkgfile=$1 - if ! bsdtar -tqf "$pkgfile" .PKGINFO >/dev/null 2>&1; then + if ! @BSDTAR_BIN@ -tqf "$pkgfile" .PKGINFO >/dev/null 2>&1; then error "$(gettext "'%s' is not a package file, skipping")" "$pkgfile" return 1 fi @@ -505,11 +505,11 @@ if (( success )); then cd "$tmpdir" if [[ -n $(ls) ]]; then - bsdtar -c${TAR_OPT}f "$filename" * + @BSDTAR_BIN@ -c${TAR_OPT}f "$filename" * else # we have no packages remaining? zip up some emptyness warning "$(gettext "No packages remain, creating empty database.")" - bsdtar -c${TAR_OPT}f "$filename" -T /dev/null + @BSDTAR_BIN@ -c${TAR_OPT}f "$filename" -T /dev/null fi cd "$startdir" -- 1.7.3.1
This will allow us to build against libarchive wherever It is installed in the system. Signed-off-by: Nezmer <git@nezmer.info> --- configure.ac | 10 ++++++++++ 1 files changed, 10 insertions(+), 0 deletions(-) diff --git a/configure.ac b/configure.ac index 50d4a04..a12adb1 100644 --- a/configure.ac +++ b/configure.ac @@ -98,6 +98,16 @@ AC_ARG_WITH(fetch, AS_HELP_STRING([--with-fetch], [use libfetch as an internal downloader]), [], [with_fetch=check]) +# Custom libarchive prefix +AC_ARG_WITH(libarchive_prefix, + AS_HELP_STRING([--with-libarchive-prefix=[DIR]], [Prefix of libarchive installation])) + +if test "x$with_libarchive_prefix" != "x";then + CFLAGS="$CFLAGS -I$with_libarchive_prefix/include" + LDFLAGS="$LDFLAGS -L$with_libarchive_prefix/lib" + BSDTAR_BIN="$with_libarchive_prefix/bin/bsdtar" +fi + # Custom bsdtar binary name and/or location AC_ARG_WITH(bsdtar_bin, AS_HELP_STRING([--with-bsdtar-bin=BSDTAR], [use bsdtar_bin as the bsdtar binary in scripts]), -- 1.7.3.1
On Thu, Oct 14, 2010 at 8:56 AM, Nezmer <git@nezmer.info> wrote:
This will allow us to build against libarchive wherever It is installed in the system.
Signed-off-by: Nezmer <git@nezmer.info>
Why not just do things like this? Less hassle for us to maintain, we don't do this for any other library, etc. ./configure CPPFLAGS=-I/non-standard-dir/include LDFLAGS=-L/non-standard-dir/lib -Dan
On Thu, Oct 14, 2010 at 09:05:45AM -0500, Dan McGee wrote:
On Thu, Oct 14, 2010 at 8:56 AM, Nezmer <git@nezmer.info> wrote:
This will allow us to build against libarchive wherever It is installed in the system.
Signed-off-by: Nezmer <git@nezmer.info>
Why not just do things like this? Less hassle for us to maintain, we don't do this for any other library, etc.
./configure CPPFLAGS=-I/non-standard-dir/include LDFLAGS=-L/non-standard-dir/lib
-Dan
That's how I'm already doing it: http://gitorious.org/pacman-bsd/srcpkgs/blobs/untested/pacman-bsd/PKGBUILD So, I don't mind If you send this strait to trash. I'm just sharing patches.
On Thu, Oct 14, 2010 at 9:24 AM, Nezmer <git@nezmer.info> wrote:
On Thu, Oct 14, 2010 at 09:05:45AM -0500, Dan McGee wrote:
On Thu, Oct 14, 2010 at 8:56 AM, Nezmer <git@nezmer.info> wrote:
This will allow us to build against libarchive wherever It is installed in the system.
Signed-off-by: Nezmer <git@nezmer.info>
Why not just do things like this? Less hassle for us to maintain, we don't do this for any other library, etc.
./configure CPPFLAGS=-I/non-standard-dir/include LDFLAGS=-L/non-standard-dir/lib
-Dan
That's how I'm already doing it: http://gitorious.org/pacman-bsd/srcpkgs/blobs/untested/pacman-bsd/PKGBUILD
So, I don't mind If you send this strait to trash.
I'm just sharing patches.
Ahh, OK. I was just looking around at what is recommended in this situation and I didn't know what was up. I think it would be best to just leave this out, as it is tied to this one library and doesn't seem like something that many people are going to have to worry about. Those that do can just use the CFLAGS/LDFLAGS override. -Dan
Fix white space issues while at it. Signed-off-by: Nezmer <git@nezmer.info> --- configure.ac | 9 ++++++--- 1 files changed, 6 insertions(+), 3 deletions(-) diff --git a/configure.ac b/configure.ac index a12adb1..312b975 100644 --- a/configure.ac +++ b/configure.ac @@ -398,10 +398,13 @@ ${PACKAGE_NAME}: source code location : ${srcdir} prefix : ${prefix} sysconfdir : $(eval echo ${sysconfdir}) - conf file : $(eval echo ${sysconfdir})/pacman.conf + conf file : $(eval echo ${sysconfdir})/pacman.conf localstatedir : $(eval echo ${localstatedir}) - database dir : $(eval echo ${localstatedir})/lib/pacman/ - cache dir : $(eval echo ${localstatedir})/cache/pacman/pkg/ + database dir : $(eval echo ${localstatedir})/lib/pacman/ + cache dir : $(eval echo ${localstatedir})/cache/pacman/pkg/ + libarchive prefix : ${with_libarchive_prefix} + bsdtar : ${BSDTAR_BIN} + bash : ${BASH_SHELL} compiler : ${CC} compiler flags : ${CFLAGS} defines : ${DEFS} -- 1.7.3.1
On Thu, Oct 14, 2010 at 04:56:17PM +0300, Nezmer wrote:
This will enable us to use a custom name and/or location of bsdtar binary in scripts.
Signed-off-by: Nezmer <git@nezmer.info> --- configure.ac | 6 ++++++ contrib/Makefile.am | 1 + contrib/bacman.in | 4 ++-- contrib/pacscripts.in | 4 ++-- scripts/Makefile.am | 1 + scripts/makepkg.sh.in | 12 ++++++------ scripts/pacman-optimize.sh.in | 4 ++-- scripts/pkgdelta.sh.in | 2 +- scripts/repo-add.sh.in | 14 +++++++------- 9 files changed, 28 insertions(+), 20 deletions(-)
diff --git a/configure.ac b/configure.ac index 6f601f4..50d4a04 100644 --- a/configure.ac +++ b/configure.ac @@ -98,6 +98,11 @@ AC_ARG_WITH(fetch, AS_HELP_STRING([--with-fetch], [use libfetch as an internal downloader]), [], [with_fetch=check])
+# Custom bsdtar binary name and/or location +AC_ARG_WITH(bsdtar_bin, + AS_HELP_STRING([--with-bsdtar-bin=BSDTAR], [use bsdtar_bin as the bsdtar binary in scripts]), + BSDTAR_BIN=$with_bsdtar_bin) + # Help line for documentation AC_ARG_ENABLE(doc, AS_HELP_STRING([--disable-doc], [prevent make from looking at doc/ dir]), @@ -128,6 +133,7 @@ AC_PROG_MAKE_SET AC_PROG_LIBTOOL AC_CHECK_PROGS([PYTHON], [python2.7 python2.6 python2.5 python2 python], [false]) AC_PATH_PROGS([BASH_SHELL], [bash bash4 bash3], [false]) +AC_PATH_PROGS([BSDTAR_BIN], [bsdtar], [false])
# find installed gettext AM_GNU_GETTEXT([external]) diff --git a/contrib/Makefile.am b/contrib/Makefile.am index 55366b4..985b19f 100644 --- a/contrib/Makefile.am +++ b/contrib/Makefile.am @@ -29,6 +29,7 @@ MOSTLYCLEANFILES = $(OURFILES) *.tmp edit = sed \ -e 's|@sysconfdir[@]|$(sysconfdir)|g' \ -e 's|@localstatedir[@]|$(localstatedir)|g' \ + -e 's|@BSDTAR_BIN[@]|$(BSDTAR_BIN)|g' \ -e 's|@BASH_SHELL[@]|$(BASH_SHELL)|g'
$(OURFILES): Makefile diff --git a/contrib/bacman.in b/contrib/bacman.in index b4e3b4b..1891ef6 100755 --- a/contrib/bacman.in +++ b/contrib/bacman.in @@ -133,7 +133,7 @@ while read i; do %FILES%) ret=0 if [ -e "/$i" ]; then - bsdtar -cnf - "/$i" 2> /dev/null | bsdtar -xpf - + @BSDTAR_BIN@ -cnf - "/$i" 2> /dev/null | @BSDTAR_BIN@ -xpf -
# Workaround to bsdtar not reporting a missing file as an error if [ ! -e "$work_dir/$i" -a ! -L "$work_dir/$i" ]; then @@ -288,7 +288,7 @@ ret=0 shopt -s nullglob # TODO: Maybe this can be set globally for robustness shopt -s -o pipefail -bsdtar -cf - $comp_files * | +@BSDTAR_BIN@ -cf - $comp_files * | case "$PKGEXT" in *tar.gz) gzip -c -f -n ;; *tar.bz2) bzip2 -c -f ;; diff --git a/contrib/pacscripts.in b/contrib/pacscripts.in index d366409..6faf964 100755 --- a/contrib/pacscripts.in +++ b/contrib/pacscripts.in @@ -85,7 +85,7 @@ print_db() { }
print_pkg() { - if ! bsdtar -xOf "$1" .INSTALL 2>/dev/null; then + if ! @BSDTAR_BIN@ -xOf "$1" .INSTALL 2>/dev/null; then error "Package $1 does not include any .INSTALL script" return 1 fi @@ -94,7 +94,7 @@ print_pkg() {
print_scriptlet() { if [ -f "$1" ]; then - if bsdtar tf "$1" .PKGINFO &>/dev/null; then + if @BSDTAR_BIN@ tf "$1" .PKGINFO &>/dev/null; then print_pkg "$1" return fi diff --git a/scripts/Makefile.am b/scripts/Makefile.am index 78deb0b..4668ad1 100644 --- a/scripts/Makefile.am +++ b/scripts/Makefile.am @@ -35,6 +35,7 @@ edit = sed \ -e 's|@sysconfdir[@]|$(sysconfdir)|g' \ -e 's|@localstatedir[@]|$(localstatedir)|g' \ -e 's|@prefix[@]|$(prefix)|g' \ + -e 's|@BSDTAR_BIN[@]|$(BSDTAR_BIN)|g' \ -e 's|@BASH_SHELL[@]|$(BASH_SHELL)|g' \ -e 's|@PACKAGE_VERSION[@]|$(REAL_PACKAGE_VERSION)|g' \ -e 's|@PACKAGE_BUGREPORT[@]|$(PACKAGE_BUGREPORT)|g' \ diff --git a/scripts/makepkg.sh.in b/scripts/makepkg.sh.in index bdf63ef..2731dbf 100644 --- a/scripts/makepkg.sh.in +++ b/scripts/makepkg.sh.in @@ -671,7 +671,7 @@ extract_sources() { local cmd='' case "$file_type" in *application/x-tar*|*application/zip*|*application/x-zip*|*application/x-cpio*) - cmd="bsdtar" ;; + cmd="@BSDTAR_BIN@" ;; *application/x-gzip*) case "$ext" in gz|z|Z) cmd="gzip" ;; @@ -689,8 +689,8 @@ extract_sources() { esac ;; *) # See if bsdtar can recognize the file - if bsdtar -tf "$file" -q '*' &>/dev/null; then - cmd="bsdtar" + if @BSDTAR_BIN@ -tf "$file" -q '*' &>/dev/null; then + cmd="@BSDTAR_BIN@" else continue fi ;; @@ -698,7 +698,7 @@ extract_sources() {
local ret=0 msg2 "$(gettext "Extracting %s with %s")" "$file" "$cmd" - if [[ $cmd = bsdtar ]]; then + if [[ $cmd = @BSDTAR_BIN@ ]]; then $cmd -xf "$file" || ret=$? else rm -f "${file%.*}" @@ -1043,7 +1043,7 @@ create_package() { shopt -s nullglob # TODO: Maybe this can be set globally for robustness shopt -s -o pipefail - bsdtar -cf - $comp_files * | + @BSDTAR_BIN@ -cf - $comp_files * | case "$PKGEXT" in *tar.gz) gzip -c -f -n ;; *tar.bz2) bzip2 -c -f ;; @@ -1135,7 +1135,7 @@ create_srcpackage() { # tar it up msg2 "$(gettext "Compressing source package...")" cd "${srclinks}" - if ! bsdtar -c${TAR_OPT}Lf "$pkg_file" ${pkgbase}; then + if ! @BSDTAR_BIN@ -c${TAR_OPT}Lf "$pkg_file" ${pkgbase}; then error "$(gettext "Failed to create source package file.")" exit 1 # TODO: error code fi diff --git a/scripts/pacman-optimize.sh.in b/scripts/pacman-optimize.sh.in index f4642ab..a0026b7 100644 --- a/scripts/pacman-optimize.sh.in +++ b/scripts/pacman-optimize.sh.in @@ -129,7 +129,7 @@ find "$dbroot" -type f | sort | xargs md5sum > "$workdir/pacsums.old" # step 2: tar it up msg "$(gettext "Tar'ing up %s...")" "$dbroot" cd "$dbroot" -bsdtar -czf "$workdir/pacman-db.tar.gz" ./ +@BSDTAR_BIN@ -czf "$workdir/pacman-db.tar.gz" ./ if (( $? )); then rm -rf "$workdir" die_r "$(gettext "Tar'ing up %s failed.")" "$dbroot" @@ -138,7 +138,7 @@ fi # step 3: make and sum the new db side-by-side with the old msg "$(gettext "Making and MD5sum'ing the new database...")" mkdir "$dbroot.new" -bsdtar -xpf "$workdir/pacman-db.tar.gz" -C "$dbroot.new" +@BSDTAR_BIN@ -xpf "$workdir/pacman-db.tar.gz" -C "$dbroot.new" if (( $? )); then rm -rf "$workdir" die_r "$(gettext "Untar'ing %s failed.")" "$dbroot" diff --git a/scripts/pkgdelta.sh.in b/scripts/pkgdelta.sh.in index 6bc3f5d..b569ea4 100644 --- a/scripts/pkgdelta.sh.in +++ b/scripts/pkgdelta.sh.in @@ -76,7 +76,7 @@ read_pkginfo() IFS=" " local line var val - for line in $(bsdtar -xOf "$1" .PKGINFO 2>/dev/null | + for line in $(@BSDTAR_BIN@ -xOf "$1" .PKGINFO 2>/dev/null | grep -v "^#" | sed 's|\(\w*\)\s*=\s*\(.*\)|\1="\2"|'); do eval "$line" if [[ -n $pkgname && -n $pkgver && -n $arch ]]; then diff --git a/scripts/repo-add.sh.in b/scripts/repo-add.sh.in index d09d1b4..8b6a028 100644 --- a/scripts/repo-add.sh.in +++ b/scripts/repo-add.sh.in @@ -198,7 +198,7 @@ db_write_entry()
# read info from the zipped package local line var val - for line in $(bsdtar -xOqf "$pkgfile" .PKGINFO | + for line in $(@BSDTAR_BIN@ -xOqf "$pkgfile" .PKGINFO | grep -v '^#' | sed 's|\(\w*\)\s*=\s*\(.*\)|\1 \2|'); do # bash awesomeness here- var is always one word, val is everything else var=${line%% *} @@ -337,15 +337,15 @@ check_repo_db() if [[ -f $REPO_DB_FILE ]]; then # there are two situations we can have here- a DB with some entries, # or a DB with no contents at all. - if ! bsdtar -tqf "$REPO_DB_FILE" '*/desc' >/dev/null 2>&1; then + if ! @BSDTAR_BIN@ -tqf "$REPO_DB_FILE" '*/desc' >/dev/null 2>&1; then # check empty case - if [[ -n $(bsdtar -tqf "$REPO_DB_FILE" '*' 2>/dev/null) ]]; then + if [[ -n $(@BSDTAR_BIN@ -tqf "$REPO_DB_FILE" '*' 2>/dev/null) ]]; then error "$(gettext "Repository file '%s' is not a proper pacman database.")" "$REPO_DB_FILE" exit 1 fi fi msg "$(gettext "Extracting database to a temporary location...")" - bsdtar -xf "$REPO_DB_FILE" -C "$tmpdir" + @BSDTAR_BIN@ -xf "$REPO_DB_FILE" -C "$tmpdir" else case "$cmd" in repo-remove) @@ -386,7 +386,7 @@ add() fi
pkgfile=$1 - if ! bsdtar -tqf "$pkgfile" .PKGINFO >/dev/null 2>&1; then + if ! @BSDTAR_BIN@ -tqf "$pkgfile" .PKGINFO >/dev/null 2>&1; then error "$(gettext "'%s' is not a package file, skipping")" "$pkgfile" return 1 fi @@ -505,11 +505,11 @@ if (( success )); then
cd "$tmpdir" if [[ -n $(ls) ]]; then - bsdtar -c${TAR_OPT}f "$filename" * + @BSDTAR_BIN@ -c${TAR_OPT}f "$filename" * else # we have no packages remaining? zip up some emptyness warning "$(gettext "No packages remain, creating empty database.")" - bsdtar -c${TAR_OPT}f "$filename" -T /dev/null + @BSDTAR_BIN@ -c${TAR_OPT}f "$filename" -T /dev/null fi cd "$startdir"
-- 1.7.3.1
Any thoughts on this one?
On Thu, Oct 14, 2010 at 11:57:00PM +0300, Nezmer wrote:
On Thu, Oct 14, 2010 at 04:56:17PM +0300, Nezmer wrote:
This will enable us to use a custom name and/or location of bsdtar binary in scripts.
Signed-off-by: Nezmer <git@nezmer.info> --- configure.ac | 6 ++++++ contrib/Makefile.am | 1 + contrib/bacman.in | 4 ++-- contrib/pacscripts.in | 4 ++-- scripts/Makefile.am | 1 + scripts/makepkg.sh.in | 12 ++++++------ scripts/pacman-optimize.sh.in | 4 ++-- scripts/pkgdelta.sh.in | 2 +- scripts/repo-add.sh.in | 14 +++++++------- 9 files changed, 28 insertions(+), 20 deletions(-)
diff --git a/configure.ac b/configure.ac index 6f601f4..50d4a04 100644 --- a/configure.ac +++ b/configure.ac @@ -98,6 +98,11 @@ AC_ARG_WITH(fetch, AS_HELP_STRING([--with-fetch], [use libfetch as an internal downloader]), [], [with_fetch=check])
+# Custom bsdtar binary name and/or location +AC_ARG_WITH(bsdtar_bin, + AS_HELP_STRING([--with-bsdtar-bin=BSDTAR], [use bsdtar_bin as the bsdtar binary in scripts]), + BSDTAR_BIN=$with_bsdtar_bin) + # Help line for documentation AC_ARG_ENABLE(doc, AS_HELP_STRING([--disable-doc], [prevent make from looking at doc/ dir]), @@ -128,6 +133,7 @@ AC_PROG_MAKE_SET AC_PROG_LIBTOOL AC_CHECK_PROGS([PYTHON], [python2.7 python2.6 python2.5 python2 python], [false]) AC_PATH_PROGS([BASH_SHELL], [bash bash4 bash3], [false]) +AC_PATH_PROGS([BSDTAR_BIN], [bsdtar], [false])
# find installed gettext AM_GNU_GETTEXT([external]) diff --git a/contrib/Makefile.am b/contrib/Makefile.am index 55366b4..985b19f 100644 --- a/contrib/Makefile.am +++ b/contrib/Makefile.am @@ -29,6 +29,7 @@ MOSTLYCLEANFILES = $(OURFILES) *.tmp edit = sed \ -e 's|@sysconfdir[@]|$(sysconfdir)|g' \ -e 's|@localstatedir[@]|$(localstatedir)|g' \ + -e 's|@BSDTAR_BIN[@]|$(BSDTAR_BIN)|g' \ -e 's|@BASH_SHELL[@]|$(BASH_SHELL)|g'
$(OURFILES): Makefile diff --git a/contrib/bacman.in b/contrib/bacman.in index b4e3b4b..1891ef6 100755 --- a/contrib/bacman.in +++ b/contrib/bacman.in @@ -133,7 +133,7 @@ while read i; do %FILES%) ret=0 if [ -e "/$i" ]; then - bsdtar -cnf - "/$i" 2> /dev/null | bsdtar -xpf - + @BSDTAR_BIN@ -cnf - "/$i" 2> /dev/null | @BSDTAR_BIN@ -xpf -
# Workaround to bsdtar not reporting a missing file as an error if [ ! -e "$work_dir/$i" -a ! -L "$work_dir/$i" ]; then @@ -288,7 +288,7 @@ ret=0 shopt -s nullglob # TODO: Maybe this can be set globally for robustness shopt -s -o pipefail -bsdtar -cf - $comp_files * | +@BSDTAR_BIN@ -cf - $comp_files * | case "$PKGEXT" in *tar.gz) gzip -c -f -n ;; *tar.bz2) bzip2 -c -f ;; diff --git a/contrib/pacscripts.in b/contrib/pacscripts.in index d366409..6faf964 100755 --- a/contrib/pacscripts.in +++ b/contrib/pacscripts.in @@ -85,7 +85,7 @@ print_db() { }
print_pkg() { - if ! bsdtar -xOf "$1" .INSTALL 2>/dev/null; then + if ! @BSDTAR_BIN@ -xOf "$1" .INSTALL 2>/dev/null; then error "Package $1 does not include any .INSTALL script" return 1 fi @@ -94,7 +94,7 @@ print_pkg() {
print_scriptlet() { if [ -f "$1" ]; then - if bsdtar tf "$1" .PKGINFO &>/dev/null; then + if @BSDTAR_BIN@ tf "$1" .PKGINFO &>/dev/null; then print_pkg "$1" return fi diff --git a/scripts/Makefile.am b/scripts/Makefile.am index 78deb0b..4668ad1 100644 --- a/scripts/Makefile.am +++ b/scripts/Makefile.am @@ -35,6 +35,7 @@ edit = sed \ -e 's|@sysconfdir[@]|$(sysconfdir)|g' \ -e 's|@localstatedir[@]|$(localstatedir)|g' \ -e 's|@prefix[@]|$(prefix)|g' \ + -e 's|@BSDTAR_BIN[@]|$(BSDTAR_BIN)|g' \ -e 's|@BASH_SHELL[@]|$(BASH_SHELL)|g' \ -e 's|@PACKAGE_VERSION[@]|$(REAL_PACKAGE_VERSION)|g' \ -e 's|@PACKAGE_BUGREPORT[@]|$(PACKAGE_BUGREPORT)|g' \ diff --git a/scripts/makepkg.sh.in b/scripts/makepkg.sh.in index bdf63ef..2731dbf 100644 --- a/scripts/makepkg.sh.in +++ b/scripts/makepkg.sh.in @@ -671,7 +671,7 @@ extract_sources() { local cmd='' case "$file_type" in *application/x-tar*|*application/zip*|*application/x-zip*|*application/x-cpio*) - cmd="bsdtar" ;; + cmd="@BSDTAR_BIN@" ;; *application/x-gzip*) case "$ext" in gz|z|Z) cmd="gzip" ;; @@ -689,8 +689,8 @@ extract_sources() { esac ;; *) # See if bsdtar can recognize the file - if bsdtar -tf "$file" -q '*' &>/dev/null; then - cmd="bsdtar" + if @BSDTAR_BIN@ -tf "$file" -q '*' &>/dev/null; then + cmd="@BSDTAR_BIN@" else continue fi ;; @@ -698,7 +698,7 @@ extract_sources() {
local ret=0 msg2 "$(gettext "Extracting %s with %s")" "$file" "$cmd" - if [[ $cmd = bsdtar ]]; then + if [[ $cmd = @BSDTAR_BIN@ ]]; then $cmd -xf "$file" || ret=$? else rm -f "${file%.*}" @@ -1043,7 +1043,7 @@ create_package() { shopt -s nullglob # TODO: Maybe this can be set globally for robustness shopt -s -o pipefail - bsdtar -cf - $comp_files * | + @BSDTAR_BIN@ -cf - $comp_files * | case "$PKGEXT" in *tar.gz) gzip -c -f -n ;; *tar.bz2) bzip2 -c -f ;; @@ -1135,7 +1135,7 @@ create_srcpackage() { # tar it up msg2 "$(gettext "Compressing source package...")" cd "${srclinks}" - if ! bsdtar -c${TAR_OPT}Lf "$pkg_file" ${pkgbase}; then + if ! @BSDTAR_BIN@ -c${TAR_OPT}Lf "$pkg_file" ${pkgbase}; then error "$(gettext "Failed to create source package file.")" exit 1 # TODO: error code fi diff --git a/scripts/pacman-optimize.sh.in b/scripts/pacman-optimize.sh.in index f4642ab..a0026b7 100644 --- a/scripts/pacman-optimize.sh.in +++ b/scripts/pacman-optimize.sh.in @@ -129,7 +129,7 @@ find "$dbroot" -type f | sort | xargs md5sum > "$workdir/pacsums.old" # step 2: tar it up msg "$(gettext "Tar'ing up %s...")" "$dbroot" cd "$dbroot" -bsdtar -czf "$workdir/pacman-db.tar.gz" ./ +@BSDTAR_BIN@ -czf "$workdir/pacman-db.tar.gz" ./ if (( $? )); then rm -rf "$workdir" die_r "$(gettext "Tar'ing up %s failed.")" "$dbroot" @@ -138,7 +138,7 @@ fi # step 3: make and sum the new db side-by-side with the old msg "$(gettext "Making and MD5sum'ing the new database...")" mkdir "$dbroot.new" -bsdtar -xpf "$workdir/pacman-db.tar.gz" -C "$dbroot.new" +@BSDTAR_BIN@ -xpf "$workdir/pacman-db.tar.gz" -C "$dbroot.new" if (( $? )); then rm -rf "$workdir" die_r "$(gettext "Untar'ing %s failed.")" "$dbroot" diff --git a/scripts/pkgdelta.sh.in b/scripts/pkgdelta.sh.in index 6bc3f5d..b569ea4 100644 --- a/scripts/pkgdelta.sh.in +++ b/scripts/pkgdelta.sh.in @@ -76,7 +76,7 @@ read_pkginfo() IFS=" " local line var val - for line in $(bsdtar -xOf "$1" .PKGINFO 2>/dev/null | + for line in $(@BSDTAR_BIN@ -xOf "$1" .PKGINFO 2>/dev/null | grep -v "^#" | sed 's|\(\w*\)\s*=\s*\(.*\)|\1="\2"|'); do eval "$line" if [[ -n $pkgname && -n $pkgver && -n $arch ]]; then diff --git a/scripts/repo-add.sh.in b/scripts/repo-add.sh.in index d09d1b4..8b6a028 100644 --- a/scripts/repo-add.sh.in +++ b/scripts/repo-add.sh.in @@ -198,7 +198,7 @@ db_write_entry()
# read info from the zipped package local line var val - for line in $(bsdtar -xOqf "$pkgfile" .PKGINFO | + for line in $(@BSDTAR_BIN@ -xOqf "$pkgfile" .PKGINFO | grep -v '^#' | sed 's|\(\w*\)\s*=\s*\(.*\)|\1 \2|'); do # bash awesomeness here- var is always one word, val is everything else var=${line%% *} @@ -337,15 +337,15 @@ check_repo_db() if [[ -f $REPO_DB_FILE ]]; then # there are two situations we can have here- a DB with some entries, # or a DB with no contents at all. - if ! bsdtar -tqf "$REPO_DB_FILE" '*/desc' >/dev/null 2>&1; then + if ! @BSDTAR_BIN@ -tqf "$REPO_DB_FILE" '*/desc' >/dev/null 2>&1; then # check empty case - if [[ -n $(bsdtar -tqf "$REPO_DB_FILE" '*' 2>/dev/null) ]]; then + if [[ -n $(@BSDTAR_BIN@ -tqf "$REPO_DB_FILE" '*' 2>/dev/null) ]]; then error "$(gettext "Repository file '%s' is not a proper pacman database.")" "$REPO_DB_FILE" exit 1 fi fi msg "$(gettext "Extracting database to a temporary location...")" - bsdtar -xf "$REPO_DB_FILE" -C "$tmpdir" + @BSDTAR_BIN@ -xf "$REPO_DB_FILE" -C "$tmpdir" else case "$cmd" in repo-remove) @@ -386,7 +386,7 @@ add() fi
pkgfile=$1 - if ! bsdtar -tqf "$pkgfile" .PKGINFO >/dev/null 2>&1; then + if ! @BSDTAR_BIN@ -tqf "$pkgfile" .PKGINFO >/dev/null 2>&1; then error "$(gettext "'%s' is not a package file, skipping")" "$pkgfile" return 1 fi @@ -505,11 +505,11 @@ if (( success )); then
cd "$tmpdir" if [[ -n $(ls) ]]; then - bsdtar -c${TAR_OPT}f "$filename" * + @BSDTAR_BIN@ -c${TAR_OPT}f "$filename" * else # we have no packages remaining? zip up some emptyness warning "$(gettext "No packages remain, creating empty database.")" - bsdtar -c${TAR_OPT}f "$filename" -T /dev/null + @BSDTAR_BIN@ -c${TAR_OPT}f "$filename" -T /dev/null fi cd "$startdir"
-- 1.7.3.1
Any thoughts on this one?
Is this rejected?
On Sat, Nov 6, 2010 at 4:26 PM, Nezmer <git@nezmer.info> wrote:
On Thu, Oct 14, 2010 at 11:57:00PM +0300, Nezmer wrote:
On Thu, Oct 14, 2010 at 04:56:17PM +0300, Nezmer wrote:
This will enable us to use a custom name and/or location of bsdtar binary in scripts.
Signed-off-by: Nezmer <git@nezmer.info> --- configure.ac | 6 ++++++ contrib/Makefile.am | 1 + contrib/bacman.in | 4 ++-- contrib/pacscripts.in | 4 ++-- scripts/Makefile.am | 1 + scripts/makepkg.sh.in | 12 ++++++------ scripts/pacman-optimize.sh.in | 4 ++-- scripts/pkgdelta.sh.in | 2 +- scripts/repo-add.sh.in | 14 +++++++------- 9 files changed, 28 insertions(+), 20 deletions(-)
-- 1.7.3.1
Any thoughts on this one?
Is this rejected?
Old, sorry about this. I'm going to -1 this one- it prevents someone from later changing the path (like installing a newer version in /usr/local, for instance). We could be smarter in some of our main scripts and bail early if bsdtar doesn't exist, like the gettext check. -Dan
participants (2)
-
Dan McGee
-
Nezmer