As I had written in [0], using /usr/bin/install instead of install-sh can significantly speed up the time to run make install, and hence make check. Using /usr/bin/install is standard in all autotools-using projects. PostgreSQL has removed the use of /usr/bin/install because of the incident described in [1], which was basically configure picking up some random "install" program in the path, which didn't do what we wanted. The Autoconf test has been much improved in the meantime, it checks whether calling the program actually installs a file now, so it's unlikely that another false positive would be picked up.
Therefore I propose to put back the AC_PROG_INSTALL configure check and associated bits that were taken out back then. See attached patch. [0]: http://petereisentraut.blogspot.fi/2012/03/postgresql-make-install-times.html [1]: http://archives.postgresql.org/pgsql-hackers/2001-03/msg00312.php
diff --git a/configure b/configure index 6f8ebd8..fd29770 100755 --- a/configure +++ b/configure @@ -693,6 +693,9 @@ MKDIR_P AWK LN_S TAR +INSTALL_DATA +INSTALL_SCRIPT +INSTALL_PROGRAM WINDRES DLLWRAP DLLTOOL @@ -6855,6 +6858,106 @@ fi fi +# Find a good install program. We prefer a C program (faster), +# so one script is as good as another. But avoid the broken or +# incompatible versions: +# SysV /etc/install, /usr/sbin/install +# SunOS /usr/etc/install +# IRIX /sbin/install +# AIX /bin/install +# AmigaOS /C/install, which installs bootblocks on floppy discs +# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag +# AFS /usr/afsws/bin/install, which mishandles nonexistent args +# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" +# OS/2's system install, which has a completely different semantic +# ./install, which can be erroneously created by make from ./install.sh. +# Reject install programs that cannot install multiple files. +{ $as_echo "$as_me:$LINENO: checking for a BSD-compatible install" >&5 +$as_echo_n "checking for a BSD-compatible install... " >&6; } +if test -z "$INSTALL"; then +if test "${ac_cv_path_install+set}" = set; then + $as_echo_n "(cached) " >&6 +else + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + # Account for people who put trailing slashes in PATH elements. +case $as_dir/ in + ./ | .// | /cC/* | \ + /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ + ?:\\/os2\\/install\\/* | ?:\\/OS2\\/INSTALL\\/* | \ + /usr/ucb/* ) ;; + *) + # OSF1 and SCO ODT 3.0 have their own names for install. + # Don't use installbsd from OSF since it installs stuff as root + # by default. + for ac_prog in ginstall scoinst install; do + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; }; then + if test $ac_prog = install && + grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then + # AIX install. It has an incompatible calling convention. + : + elif test $ac_prog = install && + grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then + # program-specific install script used by HP pwplus--don't use. + : + else + rm -rf conftest.one conftest.two conftest.dir + echo one > conftest.one + echo two > conftest.two + mkdir conftest.dir + if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" && + test -s conftest.one && test -s conftest.two && + test -s conftest.dir/conftest.one && + test -s conftest.dir/conftest.two + then + ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" + break 3 + fi + fi + fi + done + done + ;; +esac + +done +IFS=$as_save_IFS + +rm -rf conftest.one conftest.two conftest.dir + +fi + if test "${ac_cv_path_install+set}" = set; then + INSTALL=$ac_cv_path_install + else + # As a last resort, use the slow shell script. Don't cache a + # value for INSTALL within a source directory, because that will + # break other packages using the cache if that directory is + # removed, or if the value is a relative name. + INSTALL=$ac_install_sh + fi +fi +{ $as_echo "$as_me:$LINENO: result: $INSTALL" >&5 +$as_echo "$INSTALL" >&6; } + +# Use test -z because SunOS4 sh mishandles braces in ${var-val}. +# It thinks the first close brace ends the variable substitution. +test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' + +test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' + +test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' + +# When Autoconf chooses install-sh as install program it tries to generate +# a relative path to it in each makefile where it subsitutes it. This clashes +# with our Makefile.global concept. This workaround helps. +case $INSTALL in + *install-sh*) INSTALL='';; +esac + # Extract the first word of "tar", so it can be a program name with args. set dummy tar; ac_word=$2 { $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 @@ -30284,6 +30387,7 @@ gives unlimited permission to copy, distribute and modify it." ac_pwd='$ac_pwd' srcdir='$srcdir' +INSTALL='$INSTALL' MKDIR_P='$MKDIR_P' AWK='$AWK' test -n "\$AWK" || AWK=awk @@ -30897,6 +31001,10 @@ ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix # CONFIG_FILE # + case $INSTALL in + [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; + *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; + esac ac_MKDIR_P=$MKDIR_P case $MKDIR_P in [\\/$]* | ?:[\\/]* ) ;; @@ -30957,6 +31065,7 @@ s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t s&@builddir@&$ac_builddir&;t t s&@abs_builddir@&$ac_abs_builddir&;t t s&@abs_top_builddir@&$ac_abs_top_builddir&;t t +s&@INSTALL@&$ac_INSTALL&;t t s&@MKDIR_P@&$ac_MKDIR_P&;t t $ac_datarootdir_hack " diff --git a/configure.in b/configure.in index 30e9c1b..0186930 100644 --- a/configure.in +++ b/configure.in @@ -809,6 +809,14 @@ if test "$PORTNAME" = "win32"; then AC_CHECK_TOOL(WINDRES, windres, windres) fi +AC_PROG_INSTALL +# When Autoconf chooses install-sh as install program it tries to generate +# a relative path to it in each makefile where it subsitutes it. This clashes +# with our Makefile.global concept. This workaround helps. +case $INSTALL in + *install-sh*) INSTALL='';; +esac + AC_PATH_PROG(TAR, tar) AC_PROG_LN_S AC_PROG_AWK diff --git a/src/Makefile.global.in b/src/Makefile.global.in index e10c86c..97dea8a 100644 --- a/src/Makefile.global.in +++ b/src/Makefile.global.in @@ -289,7 +289,8 @@ BZIP2 = bzip2 # Installation. -INSTALL = $(SHELL) $(top_srcdir)/config/install-sh -c +install_sh = $(SHELL) $(top_srcdir)/config/install-sh -c +INSTALL = $(if $(use_install_sh),$(install_sh),$(or @INSTALL@,$(install_sh))) INSTALL_SCRIPT_MODE = 755 INSTALL_DATA_MODE = 644 @@ -561,7 +562,10 @@ endif # not PGXS install-strip: - @$(MAKE) INSTALL_PROGRAM_ENV="STRIPPROG='$(STRIP)'" \ +# install-strip always uses install-sh, so that strip options can be +# passed. + $(MAKE) use_install_sh=yes \ + INSTALL_PROGRAM_ENV="STRIPPROG='$(STRIP)'" \ INSTALL_STLIB_ENV="STRIPPROG='$(STRIP_STATIC_LIB)'" \ INSTALL_SHLIB_ENV="STRIPPROG='$(STRIP_SHARED_LIB)'" \ INSTALL_STRIP_FLAG=-s \
-- Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-hackers