[PATCH 05/10] install: check for non-SysV version (Solaris support)
On Mon, 05 Nov 2012, Blake Jones wrote: >> > +INSTALL="install" >> > +printf "Checking for working \"install\" program... " >> > +mkdir _tmp_ >> >> This doesn't feel like a hot idea. > > Out of curiosity, why not? Note that I'm only referring to creating temp directories like this to check for the install tool compatibility; otherwise I'm fine with the general approach. Jani.
Re: [PATCH 05/10] install: check for non-SysV version (Solaris support)
> On Mon, 05 Nov 2012, Blake Jones wrote: > >> > +INSTALL="install" > >> > +printf "Checking for working \"install\" program... " > >> > +mkdir _tmp_ > >> > >> This doesn't feel like a hot idea. > > > > Out of curiosity, why not? > > Note that I'm only referring to creating temp directories like this to > check for the install tool compatibility; otherwise I'm fine with the > general approach. Sure. But what's wrong with creating a temp directory? The configure script creates plenty of temp files for testing compiler features and library symbol availability. Blake ___ notmuch mailing list notmuch@notmuchmail.org http://notmuchmail.org/mailman/listinfo/notmuch
[PATCH 05/10] install: check for non-SysV version (Solaris support)
> On Mon, 05 Nov 2012, Blake Jones wrote: > >> > +INSTALL="install" > >> > +printf "Checking for working \"install\" program... " > >> > +mkdir _tmp_ > >> > >> This doesn't feel like a hot idea. > > > > Out of curiosity, why not? > > Note that I'm only referring to creating temp directories like this to > check for the install tool compatibility; otherwise I'm fine with the > general approach. Sure. But what's wrong with creating a temp directory? The configure script creates plenty of temp files for testing compiler features and library symbol availability. Blake
Re: [PATCH 05/10] install: check for non-SysV version (Solaris support)
On Mon, 05 Nov 2012, Blake Jones wrote: >> > +INSTALL="install" >> > +printf "Checking for working \"install\" program... " >> > +mkdir _tmp_ >> >> This doesn't feel like a hot idea. > > Out of curiosity, why not? Note that I'm only referring to creating temp directories like this to check for the install tool compatibility; otherwise I'm fine with the general approach. Jani. ___ notmuch mailing list notmuch@notmuchmail.org http://notmuchmail.org/mailman/listinfo/notmuch
[PATCH 05/10] install: check for non-SysV version (Solaris support)
On Sun, 04 Nov 2012, Blake Jones wrote: > Solaris ships a program called "install" in /usr/sbin, which performs a > task that's fairly similar to the GNU and BSD "install" programs but > which uses very different command line arguments. In particular, if it > is invoked without "-c", "-f", or "-n", it will search the target > directory for a file with the same name as the one being installed, and > it will only install the file if it finds a matching name. More > excitingly, if it doesn't find a match, it will look in /bin, /usr/bin, > /etc, /lib, and /usr/lib and try to do the same there. > > The standard workaround for this is to use GNU install. > It is available via the standard Solaris packaging system (in > "file/gnu-coreutils"), and installs itself as /usr/bin/ginstall. > > This patch adds a check to "configure" to see if "install" behaves in a > way that's compatible with GNU and BSD install, and if not, it uses a > program called "ginstall" instead. It also modifies "configure" to set > the $(INSTALL) variable, and changes various Makefiles to use it. > --- > Makefile.local|2 +- > completion/Makefile.local |4 ++-- > configure | 19 +++ > emacs/Makefile.local |6 +++--- > lib/Makefile.local|4 ++-- > man/Makefile.local|6 +++--- > vim/Makefile |6 ++ > 7 files changed, 32 insertions(+), 15 deletions(-) > > diff --git a/Makefile.local b/Makefile.local > index 2b91946..7ccb1cd 100644 > --- a/Makefile.local > +++ b/Makefile.local > @@ -286,7 +286,7 @@ notmuch-shared: $(notmuch_client_modules) > lib/$(LINKER_NAME) > .PHONY: install > install: all install-man > mkdir -p "$(DESTDIR)$(prefix)/bin/" > - install notmuch-shared "$(DESTDIR)$(prefix)/bin/notmuch" > + $(INSTALL) notmuch-shared "$(DESTDIR)$(prefix)/bin/notmuch" > ifeq ($(MAKECMDGOALS), install) > @echo "" > @echo "Notmuch is now installed to $(DESTDIR)$(prefix)" > diff --git a/completion/Makefile.local b/completion/Makefile.local > index dfc1271..a648a78 100644 > --- a/completion/Makefile.local > +++ b/completion/Makefile.local > @@ -14,9 +14,9 @@ install-$(dir): > @echo $@ > ifeq ($(WITH_BASH),1) > mkdir -p "$(DESTDIR)$(bash_completion_dir)" > - install -m0644 $(bash_script) "$(DESTDIR)$(bash_completion_dir)/notmuch" > + $(INSTALL) -m0644 $(bash_script) > "$(DESTDIR)$(bash_completion_dir)/notmuch" > endif > ifeq ($(WITH_ZSH),1) > mkdir -p "$(DESTDIR)$(zsh_completion_dir)" > - install -m0644 $(zsh_script) "$(DESTDIR)$(zsh_completion_dir)/_notmuch" > + $(INSTALL) -m0644 $(zsh_script) > "$(DESTDIR)$(zsh_completion_dir)/_notmuch" > endif > diff --git a/configure b/configure > index 5c5139f..dae837e 100755 > --- a/configure > +++ b/configure > @@ -591,6 +591,21 @@ for flag in -Wmissing-declarations; do > done > printf "\n\t${WARN_CFLAGS}\n" > > +INSTALL="install" > +printf "Checking for working \"install\" program... " > +mkdir _tmp_ This doesn't feel like a hot idea. Don't tell me you'd need to create a compatibility script for using mktemp --tmpdir too... Or how about just always using ginstall on Solaris? BR, Jani. > +cd _tmp_ > +echo 1 > 1 > +mkdir dest > +if install 1 dest > /dev/null 2>&1 ; then > + printf "\"install\" works fine.\n" > +else > + INSTALL="ginstall" > + printf "using \"ginstall\".\n" > +fi > +cd .. > +rm -rf _tmp_ > + > rm -f minimal minimal.c > > cat < @@ -777,4 +792,8 @@ CONFIGURE_CXXFLAGS = -DHAVE_GETLINE=\$(HAVE_GETLINE) > \$(GMIME_CFLAGS)\\ >-DSTD_ASCTIME=\$(STD_ASCTIME) > CONFIGURE_LDFLAGS = \$(GMIME_LDFLAGS) \$(TALLOC_LDFLAGS) \$(XAPIAN_LDFLAGS) > \\ >\$(LIBNSL_LDFLAGS) > + > +# Which "install" program to use > +INSTALL = ${INSTALL} > + > EOF > diff --git a/emacs/Makefile.local b/emacs/Makefile.local > index fb82247..ee778cb 100644 > --- a/emacs/Makefile.local > +++ b/emacs/Makefile.local > @@ -36,11 +36,11 @@ endif > .PHONY: install-emacs > install-emacs: > mkdir -p "$(DESTDIR)$(emacslispdir)" > - install -m0644 $(emacs_sources) "$(DESTDIR)$(emacslispdir)" > + $(INSTALL) -m0644 $(emacs_sources) "$(DESTDIR)$(emacslispdir)" > ifeq ($(HAVE_EMACS),1) > - install -m0644 $(emacs_bytecode) "$(DESTDIR)$(emacslispdir)" > + $(INSTALL) -m0644 $(emacs_bytecode) "$(DESTDIR)$(emacslispdir)" > endif > mkdir -p "$(DESTDIR)$(emacsetcdir)" > - install -m0644 $(emacs_images) "$(DESTDIR)$(emacsetcdir)" > + $(INSTALL) -m0644 $(emacs_images) "$(DESTDIR)$(emacsetcdir)" > > CLEAN := $(CLEAN) $(emacs_bytecode) > diff --git a/lib/Makefile.local b/lib/Makefile.local > index 7785944..0c6b258 100644 > --- a/lib/Makefile.local > +++ b/lib/Makefile.local > @@ -89,11 +89,11 @@ install: install-$(dir) > > install-$(dir): $(dir)/$(LIBNAME) > mkdir -p "$(DESTDIR)$(libdir)/" > - install -m0644 "$(lib)/$(LIBNAME)" "$(DESTDIR)$(libdir)/" > + $
Re: [PATCH 05/10] install: check for non-SysV version (Solaris support)
> > +INSTALL="install" > > +printf "Checking for working \"install\" program... " > > +mkdir _tmp_ > > This doesn't feel like a hot idea. Out of curiosity, why not? An "install" that behaves as expected is one of the first things that an autoconf-generated "configure" looks for. Now, autoconf-configure implements that check using some assumptions about where things are on different operating systems, but that sort of check runs the risk of becoming stale (see below). > Don't tell me you'd need to create a compatibility script for using > mktemp --tmpdir too... Yes I would, if it were used; not all the world's a GNU. But in the case of mktemp, the widely available "-p" and "-t" options seem to get you most of the way there. The SVR4 "install" in Solaris' /usr/sbin is different enough from the BSD/GNU versions that I wouldn't want to try to emulate it with a wrapper. > Or how about just always using ginstall on Solaris? I'd rather not do that. With the old UCB tools having been EOL'ed [1], /usr/ucb/install (which would have worked) will be going away. There is an open bug in the Sun bug tracking system about moving GNU install to /usr/bin/install, specifically motivated by this change. So while I don't know if/when that bug will be fixed, I would guess [2] that a future release of Solaris may have a BSD/GNU-compatible version of "install" in the default $PATH. Blake [1] http://www.oracle.com/technetwork/systems/end-of-notices/eonsolaris11-392732.html [2] Caveat: I work for Oracle in the Solaris kernel group, but I am not speaking for my employer. ___ notmuch mailing list notmuch@notmuchmail.org http://notmuchmail.org/mailman/listinfo/notmuch
[PATCH 05/10] install: check for non-SysV version (Solaris support)
> > +INSTALL="install" > > +printf "Checking for working \"install\" program... " > > +mkdir _tmp_ > > This doesn't feel like a hot idea. Out of curiosity, why not? An "install" that behaves as expected is one of the first things that an autoconf-generated "configure" looks for. Now, autoconf-configure implements that check using some assumptions about where things are on different operating systems, but that sort of check runs the risk of becoming stale (see below). > Don't tell me you'd need to create a compatibility script for using > mktemp --tmpdir too... Yes I would, if it were used; not all the world's a GNU. But in the case of mktemp, the widely available "-p" and "-t" options seem to get you most of the way there. The SVR4 "install" in Solaris' /usr/sbin is different enough from the BSD/GNU versions that I wouldn't want to try to emulate it with a wrapper. > Or how about just always using ginstall on Solaris? I'd rather not do that. With the old UCB tools having been EOL'ed [1], /usr/ucb/install (which would have worked) will be going away. There is an open bug in the Sun bug tracking system about moving GNU install to /usr/bin/install, specifically motivated by this change. So while I don't know if/when that bug will be fixed, I would guess [2] that a future release of Solaris may have a BSD/GNU-compatible version of "install" in the default $PATH. Blake [1] http://www.oracle.com/technetwork/systems/end-of-notices/eonsolaris11-392732.html [2] Caveat: I work for Oracle in the Solaris kernel group, but I am not speaking for my employer.
Re: [PATCH 05/10] install: check for non-SysV version (Solaris support)
On Sun, 04 Nov 2012, Blake Jones wrote: > Solaris ships a program called "install" in /usr/sbin, which performs a > task that's fairly similar to the GNU and BSD "install" programs but > which uses very different command line arguments. In particular, if it > is invoked without "-c", "-f", or "-n", it will search the target > directory for a file with the same name as the one being installed, and > it will only install the file if it finds a matching name. More > excitingly, if it doesn't find a match, it will look in /bin, /usr/bin, > /etc, /lib, and /usr/lib and try to do the same there. > > The standard workaround for this is to use GNU install. > It is available via the standard Solaris packaging system (in > "file/gnu-coreutils"), and installs itself as /usr/bin/ginstall. > > This patch adds a check to "configure" to see if "install" behaves in a > way that's compatible with GNU and BSD install, and if not, it uses a > program called "ginstall" instead. It also modifies "configure" to set > the $(INSTALL) variable, and changes various Makefiles to use it. > --- > Makefile.local|2 +- > completion/Makefile.local |4 ++-- > configure | 19 +++ > emacs/Makefile.local |6 +++--- > lib/Makefile.local|4 ++-- > man/Makefile.local|6 +++--- > vim/Makefile |6 ++ > 7 files changed, 32 insertions(+), 15 deletions(-) > > diff --git a/Makefile.local b/Makefile.local > index 2b91946..7ccb1cd 100644 > --- a/Makefile.local > +++ b/Makefile.local > @@ -286,7 +286,7 @@ notmuch-shared: $(notmuch_client_modules) > lib/$(LINKER_NAME) > .PHONY: install > install: all install-man > mkdir -p "$(DESTDIR)$(prefix)/bin/" > - install notmuch-shared "$(DESTDIR)$(prefix)/bin/notmuch" > + $(INSTALL) notmuch-shared "$(DESTDIR)$(prefix)/bin/notmuch" > ifeq ($(MAKECMDGOALS), install) > @echo "" > @echo "Notmuch is now installed to $(DESTDIR)$(prefix)" > diff --git a/completion/Makefile.local b/completion/Makefile.local > index dfc1271..a648a78 100644 > --- a/completion/Makefile.local > +++ b/completion/Makefile.local > @@ -14,9 +14,9 @@ install-$(dir): > @echo $@ > ifeq ($(WITH_BASH),1) > mkdir -p "$(DESTDIR)$(bash_completion_dir)" > - install -m0644 $(bash_script) "$(DESTDIR)$(bash_completion_dir)/notmuch" > + $(INSTALL) -m0644 $(bash_script) > "$(DESTDIR)$(bash_completion_dir)/notmuch" > endif > ifeq ($(WITH_ZSH),1) > mkdir -p "$(DESTDIR)$(zsh_completion_dir)" > - install -m0644 $(zsh_script) "$(DESTDIR)$(zsh_completion_dir)/_notmuch" > + $(INSTALL) -m0644 $(zsh_script) > "$(DESTDIR)$(zsh_completion_dir)/_notmuch" > endif > diff --git a/configure b/configure > index 5c5139f..dae837e 100755 > --- a/configure > +++ b/configure > @@ -591,6 +591,21 @@ for flag in -Wmissing-declarations; do > done > printf "\n\t${WARN_CFLAGS}\n" > > +INSTALL="install" > +printf "Checking for working \"install\" program... " > +mkdir _tmp_ This doesn't feel like a hot idea. Don't tell me you'd need to create a compatibility script for using mktemp --tmpdir too... Or how about just always using ginstall on Solaris? BR, Jani. > +cd _tmp_ > +echo 1 > 1 > +mkdir dest > +if install 1 dest > /dev/null 2>&1 ; then > + printf "\"install\" works fine.\n" > +else > + INSTALL="ginstall" > + printf "using \"ginstall\".\n" > +fi > +cd .. > +rm -rf _tmp_ > + > rm -f minimal minimal.c > > cat < @@ -777,4 +792,8 @@ CONFIGURE_CXXFLAGS = -DHAVE_GETLINE=\$(HAVE_GETLINE) > \$(GMIME_CFLAGS)\\ >-DSTD_ASCTIME=\$(STD_ASCTIME) > CONFIGURE_LDFLAGS = \$(GMIME_LDFLAGS) \$(TALLOC_LDFLAGS) \$(XAPIAN_LDFLAGS) > \\ >\$(LIBNSL_LDFLAGS) > + > +# Which "install" program to use > +INSTALL = ${INSTALL} > + > EOF > diff --git a/emacs/Makefile.local b/emacs/Makefile.local > index fb82247..ee778cb 100644 > --- a/emacs/Makefile.local > +++ b/emacs/Makefile.local > @@ -36,11 +36,11 @@ endif > .PHONY: install-emacs > install-emacs: > mkdir -p "$(DESTDIR)$(emacslispdir)" > - install -m0644 $(emacs_sources) "$(DESTDIR)$(emacslispdir)" > + $(INSTALL) -m0644 $(emacs_sources) "$(DESTDIR)$(emacslispdir)" > ifeq ($(HAVE_EMACS),1) > - install -m0644 $(emacs_bytecode) "$(DESTDIR)$(emacslispdir)" > + $(INSTALL) -m0644 $(emacs_bytecode) "$(DESTDIR)$(emacslispdir)" > endif > mkdir -p "$(DESTDIR)$(emacsetcdir)" > - install -m0644 $(emacs_images) "$(DESTDIR)$(emacsetcdir)" > + $(INSTALL) -m0644 $(emacs_images) "$(DESTDIR)$(emacsetcdir)" > > CLEAN := $(CLEAN) $(emacs_bytecode) > diff --git a/lib/Makefile.local b/lib/Makefile.local > index 7785944..0c6b258 100644 > --- a/lib/Makefile.local > +++ b/lib/Makefile.local > @@ -89,11 +89,11 @@ install: install-$(dir) > > install-$(dir): $(dir)/$(LIBNAME) > mkdir -p "$(DESTDIR)$(libdir)/" > - install -m0644 "$(lib)/$(LIBNAME)" "$(DESTDIR)$(libdir)/" > + $
[PATCH 05/10] install: check for non-SysV version (Solaris support)
Solaris ships a program called "install" in /usr/sbin, which performs a task that's fairly similar to the GNU and BSD "install" programs but which uses very different command line arguments. In particular, if it is invoked without "-c", "-f", or "-n", it will search the target directory for a file with the same name as the one being installed, and it will only install the file if it finds a matching name. More excitingly, if it doesn't find a match, it will look in /bin, /usr/bin, /etc, /lib, and /usr/lib and try to do the same there. The standard workaround for this is to use GNU install. It is available via the standard Solaris packaging system (in "file/gnu-coreutils"), and installs itself as /usr/bin/ginstall. This patch adds a check to "configure" to see if "install" behaves in a way that's compatible with GNU and BSD install, and if not, it uses a program called "ginstall" instead. It also modifies "configure" to set the $(INSTALL) variable, and changes various Makefiles to use it. --- Makefile.local|2 +- completion/Makefile.local |4 ++-- configure | 19 +++ emacs/Makefile.local |6 +++--- lib/Makefile.local|4 ++-- man/Makefile.local|6 +++--- vim/Makefile |6 ++ 7 files changed, 32 insertions(+), 15 deletions(-) diff --git a/Makefile.local b/Makefile.local index 2b91946..7ccb1cd 100644 --- a/Makefile.local +++ b/Makefile.local @@ -286,7 +286,7 @@ notmuch-shared: $(notmuch_client_modules) lib/$(LINKER_NAME) .PHONY: install install: all install-man mkdir -p "$(DESTDIR)$(prefix)/bin/" - install notmuch-shared "$(DESTDIR)$(prefix)/bin/notmuch" + $(INSTALL) notmuch-shared "$(DESTDIR)$(prefix)/bin/notmuch" ifeq ($(MAKECMDGOALS), install) @echo "" @echo "Notmuch is now installed to $(DESTDIR)$(prefix)" diff --git a/completion/Makefile.local b/completion/Makefile.local index dfc1271..a648a78 100644 --- a/completion/Makefile.local +++ b/completion/Makefile.local @@ -14,9 +14,9 @@ install-$(dir): @echo $@ ifeq ($(WITH_BASH),1) mkdir -p "$(DESTDIR)$(bash_completion_dir)" - install -m0644 $(bash_script) "$(DESTDIR)$(bash_completion_dir)/notmuch" + $(INSTALL) -m0644 $(bash_script) "$(DESTDIR)$(bash_completion_dir)/notmuch" endif ifeq ($(WITH_ZSH),1) mkdir -p "$(DESTDIR)$(zsh_completion_dir)" - install -m0644 $(zsh_script) "$(DESTDIR)$(zsh_completion_dir)/_notmuch" + $(INSTALL) -m0644 $(zsh_script) "$(DESTDIR)$(zsh_completion_dir)/_notmuch" endif diff --git a/configure b/configure index 5c5139f..dae837e 100755 --- a/configure +++ b/configure @@ -591,6 +591,21 @@ for flag in -Wmissing-declarations; do done printf "\n\t${WARN_CFLAGS}\n" +INSTALL="install" +printf "Checking for working \"install\" program... " +mkdir _tmp_ +cd _tmp_ +echo 1 > 1 +mkdir dest +if install 1 dest > /dev/null 2>&1 ; then + printf "\"install\" works fine.\n" +else + INSTALL="ginstall" + printf "using \"ginstall\".\n" +fi +cd .. +rm -rf _tmp_ + rm -f minimal minimal.c cat
[PATCH 05/10] install: check for non-SysV version (Solaris support)
Solaris ships a program called "install" in /usr/sbin, which performs a task that's fairly similar to the GNU and BSD "install" programs but which uses very different command line arguments. In particular, if it is invoked without "-c", "-f", or "-n", it will search the target directory for a file with the same name as the one being installed, and it will only install the file if it finds a matching name. More excitingly, if it doesn't find a match, it will look in /bin, /usr/bin, /etc, /lib, and /usr/lib and try to do the same there. The standard workaround for this is to use GNU install. It is available via the standard Solaris packaging system (in "file/gnu-coreutils"), and installs itself as /usr/bin/ginstall. This patch adds a check to "configure" to see if "install" behaves in a way that's compatible with GNU and BSD install, and if not, it uses a program called "ginstall" instead. It also modifies "configure" to set the $(INSTALL) variable, and changes various Makefiles to use it. --- Makefile.local|2 +- completion/Makefile.local |4 ++-- configure | 19 +++ emacs/Makefile.local |6 +++--- lib/Makefile.local|4 ++-- man/Makefile.local|6 +++--- vim/Makefile |6 ++ 7 files changed, 32 insertions(+), 15 deletions(-) diff --git a/Makefile.local b/Makefile.local index 2b91946..7ccb1cd 100644 --- a/Makefile.local +++ b/Makefile.local @@ -286,7 +286,7 @@ notmuch-shared: $(notmuch_client_modules) lib/$(LINKER_NAME) .PHONY: install install: all install-man mkdir -p "$(DESTDIR)$(prefix)/bin/" - install notmuch-shared "$(DESTDIR)$(prefix)/bin/notmuch" + $(INSTALL) notmuch-shared "$(DESTDIR)$(prefix)/bin/notmuch" ifeq ($(MAKECMDGOALS), install) @echo "" @echo "Notmuch is now installed to $(DESTDIR)$(prefix)" diff --git a/completion/Makefile.local b/completion/Makefile.local index dfc1271..a648a78 100644 --- a/completion/Makefile.local +++ b/completion/Makefile.local @@ -14,9 +14,9 @@ install-$(dir): @echo $@ ifeq ($(WITH_BASH),1) mkdir -p "$(DESTDIR)$(bash_completion_dir)" - install -m0644 $(bash_script) "$(DESTDIR)$(bash_completion_dir)/notmuch" + $(INSTALL) -m0644 $(bash_script) "$(DESTDIR)$(bash_completion_dir)/notmuch" endif ifeq ($(WITH_ZSH),1) mkdir -p "$(DESTDIR)$(zsh_completion_dir)" - install -m0644 $(zsh_script) "$(DESTDIR)$(zsh_completion_dir)/_notmuch" + $(INSTALL) -m0644 $(zsh_script) "$(DESTDIR)$(zsh_completion_dir)/_notmuch" endif diff --git a/configure b/configure index 5c5139f..dae837e 100755 --- a/configure +++ b/configure @@ -591,6 +591,21 @@ for flag in -Wmissing-declarations; do done printf "\n\t${WARN_CFLAGS}\n" +INSTALL="install" +printf "Checking for working \"install\" program... " +mkdir _tmp_ +cd _tmp_ +echo 1 > 1 +mkdir dest +if install 1 dest > /dev/null 2>&1 ; then + printf "\"install\" works fine.\n" +else + INSTALL="ginstall" + printf "using \"ginstall\".\n" +fi +cd .. +rm -rf _tmp_ + rm -f minimal minimal.c cat <