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 | 11 +++++------ 7 files changed, 35 insertions(+), 17 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 c9da667..d9a101f 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 <<EOF @@ -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)/" + $(INSTALL) -m0644 "$(lib)/$(LIBNAME)" "$(DESTDIR)$(libdir)/" ln -sf $(LIBNAME) "$(DESTDIR)$(libdir)/$(SONAME)" ln -sf $(LIBNAME) "$(DESTDIR)$(libdir)/$(LINKER_NAME)" mkdir -p "$(DESTDIR)$(includedir)" - install -m0644 "$(srcdir)/$(lib)/notmuch.h" "$(DESTDIR)$(includedir)/" + $(INSTALL) -m0644 "$(srcdir)/$(lib)/notmuch.h" "$(DESTDIR)$(includedir)/" $(LIBRARY_INSTALL_POST_COMMAND) SRCS := $(SRCS) $(libnotmuch_c_srcs) $(libnotmuch_cxx_srcs) diff --git a/man/Makefile.local b/man/Makefile.local index 72e2a18..07dcf4c 100644 --- a/man/Makefile.local +++ b/man/Makefile.local @@ -38,9 +38,9 @@ install-man: $(COMPRESSED_MAN) mkdir -p "$(DESTDIR)$(mandir)/man1" mkdir -p "$(DESTDIR)$(mandir)/man5" mkdir -p "$(DESTDIR)$(mandir)/man7" - install -m0644 $(MAN1_GZ) $(DESTDIR)/$(mandir)/man1 - install -m0644 $(MAN5_GZ) $(DESTDIR)/$(mandir)/man5 - install -m0644 $(MAN7_GZ) $(DESTDIR)/$(mandir)/man7 + $(INSTALL) -m0644 $(MAN1_GZ) $(DESTDIR)/$(mandir)/man1 + $(INSTALL) -m0644 $(MAN5_GZ) $(DESTDIR)/$(mandir)/man5 + $(INSTALL) -m0644 $(MAN7_GZ) $(DESTDIR)/$(mandir)/man7 cd $(DESTDIR)/$(mandir)/man1 && ln -sf notmuch.1.gz notmuch-setup.1.gz update-man-versions: $(MAN_SOURCE) diff --git a/vim/Makefile b/vim/Makefile index f17bebf..2e4b785 100644 --- a/vim/Makefile +++ b/vim/Makefile @@ -1,11 +1,10 @@ .PHONY: all help install link symlink +include ../Makefile.config + files = plugin/notmuch.vim \ $(wildcard syntax/notmuch-*.vim) prefix = $(HOME)/.vim -destdir = $(prefix)/plugin - -INSTALL = install -D -m644 all: help @@ -17,7 +16,7 @@ help: @echo " make symlink - create symlinks in ~/.vim (useful for development)" install: - @for x in $(files); do $(INSTALL) $(CURDIR)/$$x $(prefix)/$$x; done + @for x in $(files); do $(INSTALL) -D -m644 $(CURDIR)/$$x $(prefix)/$$x; done -link symlink: INSTALL = ln -fs -link symlink: install +link symlink: + @for x in $(files); do ln -fs $(CURDIR)/$$x $(prefix)/$$x; done -- 1.7.3.2