head	1.8;
access;
symbols
	REL9_0_0:1.8
	REL9_1_ALPHA1:1.8
	REL9_0_RC1:1.8
	REL9_0_BETA4:1.8
	REL9_0_STABLE:1.8.0.10
	REL9_0_BETA3:1.8
	REL9_0_BETA2:1.8
	REL7_4_29:1.1
	REL8_0_25:1.2
	REL8_1_21:1.3
	REL8_2_17:1.4
	REL8_3_11:1.7
	REL8_4_4:1.7
	REL9_0_BETA1:1.8
	REL9_0_ALPHA5_BRANCH:1.8.0.8
	REL9_0_ALPHA5:1.8
	REL7_4_28:1.1
	REL8_0_24:1.2
	REL8_1_20:1.3
	REL8_2_16:1.4
	REL8_3_10:1.7
	REL8_4_3:1.7
	REL9_0_ALPHA4:1.8
	REL9_0_ALPHA4_BRANCH:1.8.0.6
	REL8_5_ALPHA3:1.8
	REL8_5_ALPHA3_BRANCH:1.8.0.4
	REL7_4_27:1.1
	REL8_0_23:1.2
	REL8_1_19:1.3
	REL8_2_15:1.4
	REL8_3_9:1.7
	REL8_4_2:1.7
	REL8_5_ALPHA2:1.8
	REL8_5_ALPHA2_BRANCH:1.8.0.2
	REL7_4_26:1.1
	REL8_0_22:1.2
	REL8_1_18:1.3
	REL8_2_14:1.4
	REL8_3_8:1.7
	REL8_4_1:1.7
	REL8_5_ALPHA1:1.7
	REL8_5_ALPHA1_BRANCH:1.7.0.6
	REL8_4_STABLE:1.7.0.4
	REL8_4_0:1.7
	REL8_4_RC2:1.7
	REL8_4_RC1:1.7
	REL8_4_BETA2:1.7
	REL8_4_BETA1:1.7
	REL7_4_25:1.1
	REL8_0_21:1.2
	REL8_1_17:1.3
	REL8_2_13:1.4
	REL8_3_7:1.7
	REL7_4_24:1.1
	REL8_0_20:1.2
	REL8_1_16:1.3
	REL8_2_12:1.4
	REL8_3_6:1.7
	REL7_4_23:1.1
	REL8_0_19:1.2
	REL8_1_15:1.3
	REL8_2_11:1.4
	REL8_3_5:1.7
	REL7_4_22:1.1
	REL8_0_18:1.2
	REL8_1_14:1.3
	REL8_2_10:1.4
	REL8_3_4:1.7
	REL7_4_21:1.1
	REL8_0_17:1.2
	REL8_1_13:1.3
	REL8_2_9:1.4
	REL8_3_3:1.7
	REL7_4_20:1.1
	REL8_0_16:1.2
	REL8_1_12:1.3
	REL8_2_8:1.4
	REL8_3_2:1.7
	REL8_2_7:1.4
	REL8_3_1:1.7
	REL8_3_STABLE:1.7.0.2
	REL8_3_0:1.7
	REL8_3_RC2:1.7
	REL7_3_21:1.1
	REL7_4_19:1.1
	REL8_0_15:1.2
	REL8_1_11:1.3
	REL8_2_6:1.4
	REL8_3_RC1:1.7
	REL8_3_BETA4:1.7
	REL8_3_BETA3:1.7
	REL8_3_BETA2:1.4
	REL8_3_BETA1:1.4
	REL7_3_20:1.1
	REL7_4_18:1.1
	REL8_0_14:1.2
	REL8_1_10:1.3
	REL8_2_5:1.4
	REL7_3_19:1.1
	REL7_4_17:1.1
	REL8_0_13:1.2
	REL8_1_9:1.3
	REL8_2_4:1.4
	REL8_0_12:1.2
	REL8_1_8:1.3
	REL8_2_3:1.4
	REL7_3_18:1.1
	REL7_4_16:1.1
	REL8_0_11:1.2
	REL8_1_7:1.3
	REL8_2_2:1.4
	REL8_0_10:1.2
	REL8_1_6:1.3
	REL8_2_1:1.4
	REL7_4_15:1.1
	REL7_3_17:1.1
	REL8_2_STABLE:1.4.0.2
	REL8_2_0:1.4
	REL8_2_RC1:1.4
	REL8_2_BETA3:1.4
	REL8_2_BETA2:1.4
	REL8_1_5:1.3
	REL8_0_9:1.2
	REL7_4_14:1.1
	REL7_3_16:1.1
	REL8_2_BETA1:1.4
	REL7_3_15:1.1
	REL7_4_13:1.1
	REL8_0_8:1.2
	REL8_1_4:1.3
	REL7_3_14:1.1
	REL7_4_12:1.1
	REL8_0_7:1.2
	REL8_1_3:1.3
	REL7_3_13:1.1
	REL7_4_11:1.1
	REL8_0_6:1.2
	REL8_1_2:1.3
	REL7_3_12:1.1
	REL7_4_10:1.1
	REL8_0_5:1.2
	REL8_1_1:1.3
	REL8_1_STABLE:1.3.0.2
	REL8_1_0:1.3
	REL8_1_0RC1:1.3
	REL8_1_0BETA4:1.3
	REL8_1_0BETA3:1.3
	REL7_3_11:1.1
	REL7_4_9:1.1
	REL8_0_4:1.2
	REL8_1_0BETA2:1.3
	REL8_1_0BETA1:1.3
	REL7_2_8:1.1
	REL7_3_10:1.1
	REL7_4_8:1.1
	REL8_0_3:1.2
	REL8_0_2:1.2
	REL7_2_7:1.1
	REL7_3_9:1.1
	REL7_4_7:1.1
	REL8_0_1:1.2
	REL8_0_STABLE:1.2.0.4
	REL8_0_0:1.2.0.2
	REL8_0_0RC5:1.2
	REL8_0_0RC4:1.2
	REL8_0_0RC3:1.2
	REL8_0_0RC2:1.2
	REL8_0_0RC1:1.2
	REL8_0_0BETA5:1.2
	REL8_0_0BETA4:1.2
	REL7_4_6:1.1
	REL7_3_8:1.1
	REL7_2_6:1.1
	REL8_0_0BETA3:1.2
	REL8_0_0BETA2:1.2
	REL7_2_5:1.1
	REL7_4_5:1.1
	REL7_3_7:1.1
	REL7_4_4:1.1
	REL8_0_0BETA1:1.2
	REL7_4_3:1.1
	REL7_4_2:1.1
	REL7_3_6:1.1
	REL7_4_1:1.1
	REL7_3_5:1.1
	REL7_4:1.1
	REL7_4_RC2:1.1
	REL7_4_STABLE:1.1.0.10
	REL7_4_RC1:1.1
	REL7_4_BETA5:1.1
	REL7_4_BETA4:1.1
	REL7_4_BETA3:1.1
	REL7_4_BETA2:1.1
	WIN32_DEV:1.1.0.8
	REL7_4_BETA1:1.1
	REL7_3_4:1.1
	REL7_3_2:1.1
	REL7_2_4:1.1
	REL7_3_STABLE:1.1.0.6
	REL7_2_3:1.1
	REL7_2_STABLE:1.1.0.4
	REL7_2:1.1
	REL7_2_RC2:1.1
	REL7_2_RC1:1.1
	REL7_2_BETA5:1.1
	REL7_2_BETA4:1.1
	REL7_2_BETA3:1.1
	REL7_2_BETA2:1.1
	REL7_2_BETA1:1.1
	REL7_1_2:1.1
	REL7_1_STABLE:1.1.0.2
	REL7_1_BETA:1.1
	REL7_1_BETA3:1.1
	REL7_1_BETA2:1.1
	REL7_1:1.1;
locks; strict;
comment	@# @;


1.8
date	2009.08.26.22.24.42;	author petere;	state Exp;
branches;
next	1.7;

1.7
date	2007.11.13.18.50.54;	author momjian;	state Exp;
branches;
next	1.6;

1.6
date	2007.11.13.18.15.01;	author momjian;	state Exp;
branches;
next	1.5;

1.5
date	2007.11.10.16.15.23;	author momjian;	state Exp;
branches;
next	1.4;

1.4
date	2006.03.11.04.38.28;	author momjian;	state Exp;
branches;
next	1.3;

1.3
date	2005.07.01.18.17.31;	author petere;	state Exp;
branches;
next	1.2;

1.2
date	2003.11.04.10.59.58;	author petere;	state Exp;
branches;
next	1.1;

1.1
date	2000.06.06.22.00.45;	author petere;	state Exp;
branches;
next	;


desc
@@


1.8
log
@Update of install-sh, mkinstalldirs, and associated configury

Update install-sh to that from Autoconf 2.63, plus our Darwin-specific
changes (which I simplified a bit).  install-sh is now able to install
multiple files in one run, so we could simplify our makefiles sometime.

install-sh also now has a -d option to create directories, so we don't need
mkinstalldirs anymore.

Use AC_PROG_MKDIR_P in configure.in, so we can use mkdir -p when available
instead of install-sh -d.  For consistency with the rest of the world,
the corresponding make variable has been renamed from $(mkinstalldirs) to
$(MKDIR_P).
@
text
@#!/bin/sh
# install - install a program, script, or datafile

# $PostgreSQL$

scriptversion=2009-08-26.20

# This originates from X11R5 (mit/util/scripts/install.sh), which was
# later released in X11R6 (xc/config/util/install.sh) with the
# following copyright and license.
#
# Copyright (C) 1994 X Consortium
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to
# deal in the Software without restriction, including without limitation the
# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
# sell copies of the Software, and to permit persons to whom the Software is
# furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in
# all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
# X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
# AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC-
# TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#
# Except as contained in this notice, the name of the X Consortium shall not
# be used in advertising or otherwise to promote the sale, use or other deal-
# ings in this Software without prior written authorization from the X Consor-
# tium.
#
#
# FSF changes to this file are in the public domain.
#
# Calling this script install-sh is preferred over install.sh, to prevent
# `make' implicit rules from creating a file called install from it
# when there is no Makefile.
#
# This script is compatible with the BSD install script, but was written
# from scratch.

nl='
'
IFS=" ""	$nl"

# set DOITPROG to echo to test this script

# Don't use :- since 4.3BSD and earlier shells don't like it.
doit=${DOITPROG-}
if test -z "$doit"; then
  doit_exec=exec
else
  doit_exec=$doit
fi

# Put in absolute file names if you don't have them in your path;
# or use environment vars.

chgrpprog=${CHGRPPROG-chgrp}
chmodprog=${CHMODPROG-chmod}
chownprog=${CHOWNPROG-chown}
cmpprog=${CMPPROG-cmp}
cpprog=${CPPROG-cp}
mkdirprog=${MKDIRPROG-mkdir}
mvprog=${MVPROG-mv}
rmprog=${RMPROG-rm}
stripprog=${STRIPPROG-strip}
# Darwin normal strip removes symbols from shared libraries that are
# later needed for dynamic linking, so use strip -x.
# http://archives.postgresql.org/pgsql-hackers/2007-10/msg01470.php
case `uname -s` in
  Darwin) stripprog="${STRIPPROG-strip -x}";;
esac

posix_glob='?'
initialize_posix_glob='
  test "$posix_glob" != "?" || {
    if (set -f) 2>/dev/null; then
      posix_glob=
    else
      posix_glob=:
    fi
  }
'

posix_mkdir=

# Desired mode of installed file.
mode=0755

chgrpcmd=
chmodcmd=$chmodprog
chowncmd=
mvcmd=$mvprog
rmcmd="$rmprog -f"
stripcmd=

src=
dst=
dir_arg=
dst_arg=

copy_on_change=false
no_target_directory=

usage="\
Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE
   or: $0 [OPTION]... SRCFILES... DIRECTORY
   or: $0 [OPTION]... -t DIRECTORY SRCFILES...
   or: $0 [OPTION]... -d DIRECTORIES...

In the 1st form, copy SRCFILE to DSTFILE.
In the 2nd and 3rd, copy all SRCFILES to DIRECTORY.
In the 4th, create DIRECTORIES.

Options:
     --help     display this help and exit.
     --version  display version info and exit.

  -c            (ignored)
  -C            install only if different (preserve the last data modification time)
  -d            create directories instead of installing files.
  -g GROUP      $chgrpprog installed files to GROUP.
  -m MODE       $chmodprog installed files to MODE.
  -o USER       $chownprog installed files to USER.
  -s            $stripprog installed files.
  -t DIRECTORY  install into DIRECTORY.
  -T            report an error if DSTFILE is a directory.

Environment variables override the default commands:
  CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG
  RMPROG STRIPPROG
"

while test $# -ne 0; do
  case $1 in
    -c) ;;

    -C) copy_on_change=true;;

    -d) dir_arg=true;;

    -g) chgrpcmd="$chgrpprog $2"
	shift;;

    --help) echo "$usage"; exit $?;;

    -m) mode=$2
	case $mode in
	  *' '* | *'	'* | *'
'*	  | *'*'* | *'?'* | *'['*)
	    echo "$0: invalid mode: $mode" >&2
	    exit 1;;
	esac
	shift;;

    -o) chowncmd="$chownprog $2"
	shift;;

    -s) stripcmd=$stripprog;;

    -t) dst_arg=$2
	shift;;

    -T) no_target_directory=true;;

    --version) echo "$0 $scriptversion"; exit $?;;

    --)	shift
	break;;

    -*)	echo "$0: invalid option: $1" >&2
	exit 1;;

    *)  break;;
  esac
  shift
done

if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then
  # When -d is used, all remaining arguments are directories to create.
  # When -t is used, the destination is already specified.
  # Otherwise, the last argument is the destination.  Remove it from $@@.
  for arg
  do
    if test -n "$dst_arg"; then
      # $@@ is not empty: it contains at least $arg.
      set fnord "$@@" "$dst_arg"
      shift # fnord
    fi
    shift # arg
    dst_arg=$arg
  done
fi

if test $# -eq 0; then
  if test -z "$dir_arg"; then
    echo "$0: no input file specified." >&2
    exit 1
  fi
  # It's OK to call `install-sh -d' without argument.
  # This can happen when creating conditional directories.
  exit 0
fi

if test -z "$dir_arg"; then
  trap '(exit $?); exit' 1 2 13 15

  # Set umask so as not to create temps with too-generous modes.
  # However, 'strip' requires both read and write access to temps.
  case $mode in
    # Optimize common cases.
    *644) cp_umask=133;;
    *755) cp_umask=22;;

    *[0-7])
      if test -z "$stripcmd"; then
	u_plus_rw=
      else
	u_plus_rw='% 200'
      fi
      cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;;
    *)
      if test -z "$stripcmd"; then
	u_plus_rw=
      else
	u_plus_rw=,u+rw
      fi
      cp_umask=$mode$u_plus_rw;;
  esac
fi

for src
do
  # Protect names starting with `-'.
  case $src in
    -*) src=./$src;;
  esac

  if test -n "$dir_arg"; then
    dst=$src
    dstdir=$dst
    test -d "$dstdir"
    dstdir_status=$?
  else

    # Waiting for this to be detected by the "$cpprog $src $dsttmp" command
    # might cause directories to be created, which would be especially bad
    # if $src (and thus $dsttmp) contains '*'.
    if test ! -f "$src" && test ! -d "$src"; then
      echo "$0: $src does not exist." >&2
      exit 1
    fi

    if test -z "$dst_arg"; then
      echo "$0: no destination specified." >&2
      exit 1
    fi

    dst=$dst_arg
    # Protect names starting with `-'.
    case $dst in
      -*) dst=./$dst;;
    esac

    # If destination is a directory, append the input filename; won't work
    # if double slashes aren't ignored.
    if test -d "$dst"; then
      if test -n "$no_target_directory"; then
	echo "$0: $dst_arg: Is a directory" >&2
	exit 1
      fi
      dstdir=$dst
      dst=$dstdir/`basename "$src"`
      dstdir_status=0
    else
      # Prefer dirname, but fall back on a substitute if dirname fails.
      dstdir=`
	(dirname "$dst") 2>/dev/null ||
	expr X"$dst" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
	     X"$dst" : 'X\(//\)[^/]' \| \
	     X"$dst" : 'X\(//\)$' \| \
	     X"$dst" : 'X\(/\)' \| . 2>/dev/null ||
	echo X"$dst" |
	    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
		   s//\1/
		   q
		 }
		 /^X\(\/\/\)[^/].*/{
		   s//\1/
		   q
		 }
		 /^X\(\/\/\)$/{
		   s//\1/
		   q
		 }
		 /^X\(\/\).*/{
		   s//\1/
		   q
		 }
		 s/.*/./; q'
      `

      test -d "$dstdir"
      dstdir_status=$?
    fi
  fi

  obsolete_mkdir_used=false

  if test $dstdir_status != 0; then
    case $posix_mkdir in
      '')
	# Create intermediate dirs using mode 755 as modified by the umask.
	# This is like FreeBSD 'install' as of 1997-10-28.
	umask=`umask`
	case $stripcmd.$umask in
	  # Optimize common cases.
	  *[2367][2367]) mkdir_umask=$umask;;
	  .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;;

	  *[0-7])
	    mkdir_umask=`expr $umask + 22 \
	      - $umask % 100 % 40 + $umask % 20 \
	      - $umask % 10 % 4 + $umask % 2
	    `;;
	  *) mkdir_umask=$umask,go-w;;
	esac

	# With -d, create the new directory with the user-specified mode.
	# Otherwise, rely on $mkdir_umask.
	if test -n "$dir_arg"; then
	  mkdir_mode=-m$mode
	else
	  mkdir_mode=
	fi

	posix_mkdir=false
	case $umask in
	  *[123567][0-7][0-7])
	    # POSIX mkdir -p sets u+wx bits regardless of umask, which
	    # is incompatible with FreeBSD 'install' when (umask & 300) != 0.
	    ;;
	  *)
	    tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$
	    trap 'ret=$?; rmdir "$tmpdir/d" "$tmpdir" 2>/dev/null; exit $ret' 0

	    if (umask $mkdir_umask &&
		exec $mkdirprog $mkdir_mode -p -- "$tmpdir/d") >/dev/null 2>&1
	    then
	      if test -z "$dir_arg" || {
		   # Check for POSIX incompatibilities with -m.
		   # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or
		   # other-writeable bit of parent directory when it shouldn't.
		   # FreeBSD 6.1 mkdir -m -p sets mode of existing directory.
		   ls_ld_tmpdir=`ls -ld "$tmpdir"`
		   case $ls_ld_tmpdir in
		     d????-?r-*) different_mode=700;;
		     d????-?--*) different_mode=755;;
		     *) false;;
		   esac &&
		   $mkdirprog -m$different_mode -p -- "$tmpdir" && {
		     ls_ld_tmpdir_1=`ls -ld "$tmpdir"`
		     test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1"
		   }
		 }
	      then posix_mkdir=:
	      fi
	      rmdir "$tmpdir/d" "$tmpdir"
	    else
	      # Remove any dirs left behind by ancient mkdir implementations.
	      rmdir ./$mkdir_mode ./-p ./-- 2>/dev/null
	    fi
	    trap '' 0;;
	esac;;
    esac

    if
      $posix_mkdir && (
	umask $mkdir_umask &&
	$doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir"
      )
    then :
    else

      # The umask is ridiculous, or mkdir does not conform to POSIX,
      # or it failed possibly due to a race condition.  Create the
      # directory the slow way, step by step, checking for races as we go.

      case $dstdir in
	/*) prefix='/';;
	-*) prefix='./';;
	*)  prefix='';;
      esac

      eval "$initialize_posix_glob"

      oIFS=$IFS
      IFS=/
      $posix_glob set -f
      set fnord $dstdir
      shift
      $posix_glob set +f
      IFS=$oIFS

      prefixes=

      for d
      do
	test -z "$d" && continue

	prefix=$prefix$d
	if test -d "$prefix"; then
	  prefixes=
	else
	  if $posix_mkdir; then
	    (umask=$mkdir_umask &&
	     $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break
	    # Don't fail if two instances are running concurrently.
	    test -d "$prefix" || exit 1
	  else
	    case $prefix in
	      *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;;
	      *) qprefix=$prefix;;
	    esac
	    prefixes="$prefixes '$qprefix'"
	  fi
	fi
	prefix=$prefix/
      done

      if test -n "$prefixes"; then
	# Don't fail if two instances are running concurrently.
	(umask $mkdir_umask &&
	 eval "\$doit_exec \$mkdirprog $prefixes") ||
	  test -d "$dstdir" || exit 1
	obsolete_mkdir_used=true
      fi
    fi
  fi

  if test -n "$dir_arg"; then
    { test -z "$chowncmd" || $doit $chowncmd "$dst"; } &&
    { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } &&
    { test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false ||
      test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1
  else

    # Make a couple of temp file names in the proper directory.
    dsttmp=$dstdir/_inst.$$_
    rmtmp=$dstdir/_rm.$$_

    # Trap to clean up those temp files at exit.
    trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0

    # Copy the file name to the temp name.
    (umask $cp_umask && $doit_exec $cpprog "$src" "$dsttmp") &&

    # and set any options; do chmod last to preserve setuid bits.
    #
    # If any of these fail, we abort the whole thing.  If we want to
    # ignore errors from any of these, just make sure not to ignore
    # errors from the above "$doit $cpprog $src $dsttmp" command.
    #
    { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } &&
    { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } &&
    { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } &&
    { test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } &&

    # If -C, don't bother to copy if it wouldn't change the file.
    if $copy_on_change &&
       old=`LC_ALL=C ls -dlL "$dst"	2>/dev/null` &&
       new=`LC_ALL=C ls -dlL "$dsttmp"	2>/dev/null` &&

       eval "$initialize_posix_glob" &&
       $posix_glob set -f &&
       set X $old && old=:$2:$4:$5:$6 &&
       set X $new && new=:$2:$4:$5:$6 &&
       $posix_glob set +f &&

       test "$old" = "$new" &&
       $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1
    then
      rm -f "$dsttmp"
    else
      # Rename the file to the real destination.
      $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null ||

      # The rename failed, perhaps because mv can't rename something else
      # to itself, or perhaps because mv is so ancient that it does not
      # support -f.
      {
	# Now remove or move aside any old file at destination location.
	# We try this two ways since rm can't unlink itself on some
	# systems and the destination file might be busy for other
	# reasons.  In this case, the final cleanup might fail but the new
	# file should still install successfully.
	{
	  test ! -f "$dst" ||
	  $doit $rmcmd -f "$dst" 2>/dev/null ||
	  { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null &&
	    { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; }
	  } ||
	  { echo "$0: cannot unlink or rename $dst" >&2
	    (exit 1); exit 1
	  }
	} &&

	# Now rename the file to the real destination.
	$doit $mvcmd "$dsttmp" "$dst"
      }
    fi || exit 1

    trap '' 0
  fi
done

# Local variables:
# eval: (add-hook 'write-file-hooks 'time-stamp)
# time-stamp-start: "scriptversion="
# time-stamp-format: "%:y-%02m-%02d.%02H"
# time-stamp-end: "$"
# End:
@


1.7
log
@Again properly fix Darwin strip.
@
text
@d4 1
a4 1
# $PostgreSQL: pgsql/config/install-sh,v 1.6 2007/11/13 18:15:01 momjian Exp $
d6 1
a6 1
scriptversion=2005-02-02.21
d44 5
a48 2
# from scratch.  It can only install one file at a time, a restriction
# shared with many OS's install programs.
d53 6
a58 1
doit="${DOITPROG-}"
d60 2
a61 1
# put in absolute paths if you don't have them in your path; or use env. vars.
d63 11
a73 7
mvprog="${MVPROG-mv}"
cpprog="${CPPROG-cp}"
chmodprog="${CHMODPROG-chmod}"
chownprog="${CHOWNPROG-chown}"
chgrpprog="${CHGRPPROG-chgrp}"
# Darwin normal strip removes symbols from shared libraries
# that are later needed for dynamic linking, so use strip -x.
d75 19
a93 6
if test `expr "\`uname -a\`" : 'Darwin'` -ne 0
then	stripprog="${STRIPPROG-strip -x}"
else	stripprog="${STRIPPROG-strip}"
fi
rmprog="${RMPROG-rm}"
mkdirprog="${MKDIRPROG-mkdir}"
d95 2
a96 1
chmodcmd="$chmodprog 0755"
d98 2
a99 1
chgrpcmd=
d101 1
a101 2
rmcmd="$rmprog -f"
mvcmd="$mvprog"
d105 3
a107 1
dstarg=
d110 2
a111 1
usage="Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE
d121 12
a132 10
-c         (ignored)
-d         create directories instead of installing files.
-g GROUP   $chgrpprog installed files to GROUP.
-m MODE    $chmodprog installed files to MODE.
-o USER    $chownprog installed files to USER.
-s         $stripprog installed files.
-t DIRECTORY  install into DIRECTORY.
-T         report an error if DSTFILE is a directory.
--help     display this help and exit.
--version  display version info and exit.
d135 2
a136 1
  CHGRPPROG CHMODPROG CHOWNPROG CPPROG MKDIRPROG MVPROG RMPROG STRIPPROG
d139 1
a139 1
while test -n "$1"; do
d141 3
a143 2
    -c) shift
        continue;;
d145 1
a145 3
    -d) dir_arg=true
        shift
        continue;;
d148 1
a148 3
        shift
        shift
        continue;;
d152 8
a159 4
    -m) chmodcmd="$chmodprog $2"
        shift
        shift
        continue;;
d162 8
a169 16
        shift
        shift
        continue;;

    -s) stripcmd=$stripprog
        shift
        continue;;

    -t) dstarg=$2
	shift
	shift
	continue;;

    -T) no_target_directory=true
	shift
	continue;;
d173 1
a173 14
    *)  # When -d is used, all remaining arguments are directories to create.
	# When -t is used, the destination is already specified.
	test -n "$dir_arg$dstarg" && break
        # Otherwise, the last argument is the destination.  Remove it from $@@.
	for arg
	do
          if test -n "$dstarg"; then
	    # $@@ is not empty: it contains at least $arg.
	    set fnord "$@@" "$dstarg"
	    shift # fnord
	  fi
	  shift # arg
	  dstarg=$arg
	done
d175 5
d181 1
d184 17
a200 1
if test -z "$1"; then
d210 27
d241 1
a241 1
    -*) src=./$src ;;
d246 4
a249 1
    src=
a250 7
    if test -d "$dst"; then
      mkdircmd=:
      chmodcmd=
    else
      mkdircmd=$mkdirprog
    fi
  else
d259 1
a259 1
    if test -z "$dstarg"; then
d264 1
a264 1
    dst=$dstarg
d267 1
a267 1
      -*) dst=./$dst ;;
d274 1
a274 1
	echo "$0: $dstarg: Is a directory" >&2
d277 33
a309 1
      dst=$dst/`basename "$src"`
d313 1
a313 2
  # This sed command emulates the dirname command.
  dstdir=`echo "$dst" | sed -e 's,/*$,,;s,[^/]*$,,;s,/*$,,;s,^$,.,'`
d315 66
a380 1
  # Make sure that the destination directory exists.
d382 27
a408 12
  # Skip lots of stat calls in the usual case.
  if test ! -d "$dstdir"; then
    defaultIFS='
	 '
    IFS="${IFS-$defaultIFS}"

    oIFS=$IFS
    # Some sh's can't handle IFS=/ for some reason.
    IFS='%'
    set x `echo "$dstdir" | sed -e 's@@/@@%@@g' -e 's@@^%@@/@@'`
    shift
    IFS=$oIFS
d410 1
a410 1
    pathcomp=
d412 30
a441 9
    while test $# -ne 0 ; do
      pathcomp=$pathcomp$1
      shift
      if test ! -d "$pathcomp"; then
        $mkdirprog "$pathcomp"
	# mkdir can fail with a `File exist' error in case several
	# install-sh are creating the directory concurrently.  This
	# is OK.
	test -d "$pathcomp" || exit
d443 1
a443 2
      pathcomp=$pathcomp/
    done
d447 4
a450 6
    $doit $mkdircmd "$dst" \
      && { test -z "$chowncmd" || $doit $chowncmd "$dst"; } \
      && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } \
      && { test -z "$stripcmd" || $doit $stripcmd "$dst"; } \
      && { test -z "$chmodcmd" || $doit $chmodcmd "$dst"; }

a451 1
    dstfile=`basename "$dst"`
a458 1
    trap '(exit $?); exit' 1 2 13 15
d461 1
a461 1
    $doit $cpprog "$src" "$dsttmp" &&
d469 51
a519 35
    { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } \
      && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } \
      && { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } \
      && { test -z "$chmodcmd" || $doit $chmodcmd "$dsttmp"; } &&

    # Now rename the file to the real destination.
    { $doit $mvcmd -f "$dsttmp" "$dstdir/$dstfile" 2>/dev/null \
      || {
	   # The rename failed, perhaps because mv can't rename something else
	   # to itself, or perhaps because mv is so ancient that it does not
	   # support -f.

	   # Now remove or move aside any old file at destination location.
	   # We try this two ways since rm can't unlink itself on some
	   # systems and the destination file might be busy for other
	   # reasons.  In this case, the final cleanup might fail but the new
	   # file should still install successfully.
	   {
	     if test -f "$dstdir/$dstfile"; then
	       $doit $rmcmd -f "$dstdir/$dstfile" 2>/dev/null \
	       || $doit $mvcmd -f "$dstdir/$dstfile" "$rmtmp" 2>/dev/null \
	       || {
		 echo "$0: cannot unlink or rename $dstdir/$dstfile" >&2
		 (exit 1); exit 1
	       }
	     else
	       :
	     fi
	   } &&

	   # Now rename the file to the real destination.
	   $doit $mvcmd "$dsttmp" "$dstdir/$dstfile"
	 }
    }
  fi || { (exit 1); exit 1; }
a521 5
# The final little trick to "correctly" pass the exit status to the exit trap.
{
  (exit 0); exit 0
}

@


1.6
log
@Modify OS/X Darin test to actually work, (no $template)
@
text
@d4 1
a4 1
# $PostgreSQL: pgsql/config/install-sh,v 1.5 2007/11/10 16:15:23 momjian Exp $
d62 1
a62 1
if test expr "`uname -a`" : 'Darwin' -ne 0
@


1.5
log
@Use strip -x on OS/X-darwin because non-"-x" causes link problems:

  http://archives.postgresql.org/pgsql-hackers/2007-10/msg01470.php
@
text
@d4 1
a4 1
# $PostgreSQL: pgsql/config/install-sh,v 1.4 2006/03/11 04:38:28 momjian Exp $
d62 1
a62 1
if test "$template" = "darwin"
@


1.4
log
@Add CVS tag lines to files that were lacking them.
@
text
@d4 1
a4 1
# $PostgreSQL: pgsql/src/backend/utils/misc/guc.c,v 1.314 2006/03/07 02:54:23 momjian Exp $
d59 7
a65 1
stripprog="${STRIPPROG-strip}"
@


1.3
log
@Update to autoconf 2.59 as well as updates of related scripts
@
text
@d4 2
@


1.2
log
@Update install-sh and mkinstalldirs from master source (Automake).  They
have included a few fixes over the years to make them more robust and
faster.
@
text
@a2 1
# This originally came from X11R5 (mit/util/scripts/install.sh).
d4 1
a4 1
scriptversion=2003-01-17.15
d6 3
a8 2
# Copyright 1991 by the Massachusetts Institute of Technology
# (FSF changes in the public domain.)
d10 26
a35 9
# Permission to use, copy, modify, distribute, and sell this software and its
# documentation for any purpose is hereby granted without fee, provided that
# the above copyright notice appear in all copies and that both that
# copyright notice and this permission notice appear in supporting
# documentation, and that the name of M.I.T. not be used in advertising or
# publicity pertaining to distribution of the software without specific,
# written prior permission.  M.I.T. makes no representations about the
# suitability of this software for any purpose.  It is provided "as is"
# without express or implied warranty.
a60 3
transformbasename=
transform_arg=
instcmd="$mvprog"
d70 2
d73 8
a80 5
usage="Usage: $0 [OPTION]... SRCFILE DSTFILE
   or: $0 -d DIR1 DIR2...

In the first form, install SRCFILE to DSTFILE, removing SRCFILE by default.
In the second, create the directory path DIR.
d83 1
a83 2
-b=TRANSFORMBASENAME
-c         copy source (using $cpprog) instead of moving (using $mvprog).
d85 6
a90 5
-g GROUP   $chgrp installed files to GROUP.
-m MODE    $chmod installed files to MODE.
-o USER    $chown installed files to USER.
-s         strip installed files (using $stripprog).
-t=TRANSFORM
d100 1
a100 6
    -b=*) transformbasename=`echo $1 | sed 's/-b=//'`
        shift
        continue;;

    -c) instcmd=$cpprog
        shift
d112 1
a112 1
    --help) echo "$usage"; exit 0;;
d128 26
a153 15
    -t=*) transformarg=`echo $1 | sed 's/-t=//'`
        shift
        continue;;

    --version) echo "$0 $scriptversion"; exit 0;;

    *)  if test -z "$src"; then
          src=$1
        else
          # this colon is to work around a 386BSD /bin/sh bug
          :
          dst=$1
        fi
        shift
        continue;;
d157 8
a164 3
if test -z "$src"; then
  echo "$0: no input file specified." >&2
  exit 1
d167 17
a183 7
if test -n "$dir_arg"; then
  dst=$src
  src=

  if test -d "$dst"; then
    instcmd=:
    chmodcmd=
d185 12
a196 10
    instcmd=$mkdirprog
  fi
else
  # Waiting for this to be detected by the "$instcmd $src $dsttmp" command
  # might cause directories to be created, which would be especially bad
  # if $src (and thus $dsttmp) contains '*'.
  if test ! -f "$src" && test ! -d "$src"; then
    echo "$0: $src does not exist." >&2
    exit 1
  fi
d198 15
a212 3
  if test -z "$dst"; then
    echo "$0: no destination specified." >&2
    exit 1
d215 2
a216 6
  # If destination is a directory, append the input filename; won't work
  # if double slashes aren't ignored.
  if test -d "$dst"; then
    dst=$dst/`basename "$src"`
  fi
fi
d218 1
a218 2
## this sed command emulates the dirname command
dstdir=`echo "$dst" | sed -e 's,[^/]*$,,;s,/$,,;s,^$,.,'`
d220 12
a231 2
# Make sure that the destination directory exists.
# (this part is taken from Noah Friedman's mkinstalldirs script.)
d233 1
a233 11
# Skip lots of stat calls in the usual case.
if test ! -d "$dstdir"; then
  defaultIFS='
	'
  IFS="${IFS-$defaultIFS}"

  oIFS=$IFS
  # Some sh's can't handle IFS=/ for some reason.
  IFS='%'
  set - `echo "$dstdir" | sed -e 's@@/@@%@@g' -e 's@@^%@@/@@'`
  IFS=$oIFS
d235 13
a247 1
  pathcomp=
d249 6
a254 7
  while test $# -ne 0 ; do
    pathcomp=$pathcomp$1
    shift
    test -d "$pathcomp" || $mkdirprog "$pathcomp"
    pathcomp=$pathcomp/
  done
fi
d256 1
a256 10
if test -n "$dir_arg"; then
  $doit $instcmd "$dst" \
    && { test -z "$chowncmd" || $doit $chowncmd "$dst"; } \
    && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } \
    && { test -z "$stripcmd" || $doit $stripcmd "$dst"; } \
    && { test -z "$chmodcmd" || $doit $chmodcmd "$dst"; }

else
  # If we're going to rename the final executable, determine the name now.
  if test -z "$transformarg"; then
a257 4
  else
    dstfile=`basename "$dst" $transformbasename \
             | sed $transformarg`$transformbasename
  fi
d259 21
a279 2
  # don't allow the sed command to completely eliminate the filename.
  test -z "$dstfile" && dstfile=`basename "$dst"`
d281 2
a282 31
  # Make a couple of temp file names in the proper directory.
  dsttmp=$dstdir/#inst.$$#
  rmtmp=$dstdir/#rm.$$#

  # Trap to clean up those temp files at exit.
  trap 'status=$?; rm -f "$dsttmp" "$rmtmp" && exit $status' 0
  trap '(exit $?); exit' 1 2 13 15

  # Move or copy the file name to the temp name
  $doit $instcmd "$src" "$dsttmp" &&

  # and set any options; do chmod last to preserve setuid bits.
  #
  # If any of these fail, we abort the whole thing.  If we want to
  # ignore errors from any of these, just make sure not to ignore
  # errors from the above "$doit $instcmd $src $dsttmp" command.
  #
  { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } \
    && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } \
    && { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } \
    && { test -z "$chmodcmd" || $doit $chmodcmd "$dsttmp"; } &&

  # Now remove or move aside any old file at destination location.  We
  # try this two ways since rm can't unlink itself on some systems and
  # the destination file might be busy for other reasons.  In this case,
  # the final cleanup might fail but the new file should still install
  # successfully.
  {
    if test -f "$dstdir/$dstfile"; then
      $doit $rmcmd -f "$dstdir/$dstfile" 2>/dev/null \
      || $doit $mvcmd -f "$dstdir/$dstfile" "$rmtmp" 2>/dev/null \
d284 28
a311 11
	  echo "$0: cannot unlink or rename $dstdir/$dstfile" >&2
	  (exit 1); exit
      }
    else
      :
    fi
  } &&

  # Now rename the file to the real destination.
  $doit $mvcmd "$dsttmp" "$dstdir/$dstfile"
fi &&
d315 1
a315 1
  (exit 0); exit
@


1.1
log
@Moved configure script from src/ to the top level directory. Moved
configuration helper things into config/ dir. Adjusted some relative paths
in makefiles.
@
text
@d1 1
a1 2
#! /bin/sh
#
d3 4
a6 2
# This comes from X11R5 (mit/util/scripts/install.sh).
#
d8 1
a27 1

a32 1

d44 2
a45 2
transformbasename=""
transform_arg=""
d48 3
a50 3
chowncmd=""
chgrpcmd=""
stripcmd=""
d53 77
a129 52
src=""
dst=""
dir_arg=""

while [ x"$1" != x ]; do
    case $1 in
	-c) instcmd="$cpprog"
	    shift
	    continue;;

	-d) dir_arg=true
	    shift
	    continue;;

	-m) chmodcmd="$chmodprog $2"
	    shift
	    shift
	    continue;;

	-o) chowncmd="$chownprog $2"
	    shift
	    shift
	    continue;;

	-g) chgrpcmd="$chgrpprog $2"
	    shift
	    shift
	    continue;;

	-s) stripcmd="$stripprog"
	    shift
	    continue;;

	-t=*) transformarg=`echo $1 | sed 's/-t=//'`
	    shift
	    continue;;

	-b=*) transformbasename=`echo $1 | sed 's/-b=//'`
	    shift
	    continue;;

	*)  if [ x"$src" = x ]
	    then
		src=$1
	    else
		# this colon is to work around a 386BSD /bin/sh bug
		:
		dst=$1
	    fi
	    shift
	    continue;;
    esac
d132 3
a134 6
if [ x"$src" = x ]
then
	echo "install:	no input file specified"
	exit 1
else
	true
d137 10
a146 9
if [ x"$dir_arg" != x ]; then
	dst=$src
	src=""
	
	if [ -d $dst ]; then
		instcmd=:
	else
		instcmd=mkdir
	fi
d148 18
a165 30

# Waiting for this to be detected by the "$instcmd $src $dsttmp" command
# might cause directories to be created, which would be especially bad 
# if $src (and thus $dsttmp) contains '*'.

	if [ -f $src -o -d $src ]
	then
		true
	else
		echo "install:  $src does not exist"
		exit 1
	fi
	
	if [ x"$dst" = x ]
	then
		echo "install:	no destination specified"
		exit 1
	else
		true
	fi

# If destination is a directory, append the input filename; if your system
# does not like double slashes in filenames, you may need to add some logic

	if [ -d $dst ]
	then
		dst="$dst"/`basename $src`
	else
		true
	fi
d169 1
a169 1
dstdir=`echo $dst | sed -e 's,[^/]*$,,;s,/$,,;s,^$,.,'`
d172 1
a172 1
#  this part is taken from Noah Friedman's mkinstalldirs script
d175 20
a194 23
if [ ! -d "$dstdir" ]; then
defaultIFS='	
'
IFS="${IFS-${defaultIFS}}"

oIFS="${IFS}"
# Some sh's can't handle IFS=/ for some reason.
IFS='%'
set - `echo ${dstdir} | sed -e 's@@/@@%@@g' -e 's@@^%@@/@@'`
IFS="${oIFS}"

pathcomp=''

while [ $# -ne 0 ] ; do
	pathcomp="${pathcomp}${1}"
	shift

	if [ ! -d "${pathcomp}" ] ;
        then
		$mkdirprog "${pathcomp}"
	else
		true
	fi
d196 6
a201 3
	pathcomp="${pathcomp}/"
done
fi
a202 8
if [ x"$dir_arg" != x ]
then
	$doit $instcmd $dst &&

	if [ x"$chowncmd" != x ]; then $doit $chowncmd $dst; else true ; fi &&
	if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dst; else true ; fi &&
	if [ x"$stripcmd" != x ]; then $doit $stripcmd $dst; else true ; fi &&
	if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dst; else true ; fi
d204 50
d255 2
a256 45
# If we're going to rename the final executable, determine the name now.

	if [ x"$transformarg" = x ] 
	then
		dstfile=`basename $dst`
	else
		dstfile=`basename $dst $transformbasename | 
			sed $transformarg`$transformbasename
	fi

# don't allow the sed command to completely eliminate the filename

	if [ x"$dstfile" = x ] 
	then
		dstfile=`basename $dst`
	else
		true
	fi

# Make a temp file name in the proper directory.

	dsttmp=$dstdir/#inst.$$#

# Move or copy the file name to the temp name

	$doit $instcmd $src $dsttmp &&

	trap "rm -f ${dsttmp}" 0 &&

# and set any options; do chmod last to preserve setuid bits

# If any of these fail, we abort the whole thing.  If we want to
# ignore errors from any of these, just make sure not to ignore
# errors from the above "$doit $instcmd $src $dsttmp" command.

	if [ x"$chowncmd" != x ]; then $doit $chowncmd $dsttmp; else true;fi &&
	if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dsttmp; else true;fi &&
	if [ x"$stripcmd" != x ]; then $doit $stripcmd $dsttmp; else true;fi &&
	if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dsttmp; else true;fi &&

# Now rename the file to the real destination.

	$doit $rmcmd -f $dstdir/$dstfile &&
	$doit $mvcmd $dsttmp $dstdir/$dstfile 

d259 11
a269 2

exit 0
@

