[PATCH 05/10] install: check for non-SysV version (Solaris support)

2012-11-05 Thread Jani Nikula
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)

2012-11-05 Thread Blake Jones
> 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)

2012-11-05 Thread Blake Jones
> 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)

2012-11-05 Thread Jani Nikula
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)

2012-11-04 Thread Jani Nikula
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)

2012-11-04 Thread Blake Jones
> > +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)

2012-11-04 Thread Blake Jones
> > +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)

2012-11-04 Thread Jani Nikula
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)

2012-11-04 Thread Blake Jones
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)

2012-11-03 Thread Blake Jones
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 <