[Libguestfs] [nbdkit PATCH] build: Allow 'make install' into non-root --prefix: bash-completion
Eric Blake
eblake at redhat.com
Fri Dec 7 22:01:23 UTC 2018
On 12/7/18 2:17 PM, Eric Blake wrote:
> In general, autotooled packages are supposed to allow
> './configure --prefix=$HOME/subdir' as a way to then get
> 'make install' to run as non-root. In fact, 'make distcheck'
> tests that this scenario works; alas, we fail due to:
>
> /usr/bin/install -c -m 644 ../../../bash/nbdkit '/usr/share/bash-completion/completions'
> /usr/bin/install: cannot remove '/usr/share/bash-completion/completions/nbdkit': Permission denied
>
> The culprit? We use pkg-config to ask bash-completion where it
> would install user completion scripts. bash-completion.pc states:
>
> prefix=/usr
> completionsdir=${prefix}/share/bash-completion/completions
>
> but pkg-config --variable defaults to flattening the ${prefix}
> in our use of the PKG_CHECK_VAR() macro, which in turn means
> that './configure --prefix=$HOME/subdir' still uses an absolute
> path pointing to a root-owned directory (rather than one relative
> to our desired ${prefix}) in our definition of bashcompsdir.
>
> The solution? Tell pkg-config to NOT flatten the prefix variable.
Well, it's _a_ solution. Another one would be to NOT ask pkg-config
ANYTHING, and just _always_ default to installing into ${sysconfdir},
since the patch already shows that to be our default if pkg-config is
not around:
> AS_IF([test -z "$bashcompdir"], [
> bashcompdir="${sysconfdir}/bash_completion.d"
>
But that has its own drawbacks - that expands to
/usr/local/etc/bash_completions.d by default (or to
/etc/bash_completion.d if you use --prefix=/usr with Fedora's
/usr/share/config.site), but that name does NOT match the pkg-config
name of /usr/share/bash-completion/completions (which would be more like
${datarootdir}/bash-completion/completions). Ultimately, we could still
punt the issue to the distro packagers, by stating:
"we will ALWAYS install relative to --prefix, and then leave it up to
you in your post-install munging to then move it into the location that
pkg-config recommends"
by merely doing this patch instead (compare it to my proposed patch for
fixing ocaml install, by just always picking a location relative to
--prefix):
diff --git i/configure.ac w/configure.ac
index 33ed4d5..4a3e5c9 100644
--- i/configure.ac
+++ w/configure.ac
@@ -335,15 +335,6 @@ AS_IF([test "x$enable_valgrind" = "xyes"],[
dnl Bash completion.
PKG_CHECK_MODULES([BASH_COMPLETION], [bash-completion >= 2.0], [
bash_completion=yes
- AC_MSG_CHECKING([for bash-completions directory])
- m4_ifdef([PKG_CHECK_VAR],[
- PKG_CHECK_VAR(bashcompdir, [bash-completion], [completionsdir])
- ])
- AS_IF([test -z "$bashcompdir"], [
- bashcompdir="${sysconfdir}/bash_completion.d"
- ])
- AC_MSG_RESULT([$bashcompdir])
- AC_SUBST([bashcompdir])
],[
bash_completion=no
AC_MSG_WARN([bash-completion not installed])
diff --git i/bash/Makefile.am w/bash/Makefile.am
index e46784c..3b20c1b 100644
--- i/bash/Makefile.am
+++ w/bash/Makefile.am
@@ -36,6 +36,8 @@ EXTRA_DIST = README
if HAVE_BASH_COMPLETION
+bashcompdir = $(sysconfdir)/bash_completion.d
+
dist_bashcomp_DATA = nbdkit
endif
--
Eric Blake, Principal Software Engineer
Red Hat, Inc. +1-919-301-3266
Virtualization: qemu.org | libvirt.org
More information about the Libguestfs
mailing list