source: trunk/autoconf/install-sh @ 354

Last change on this file since 354 was 106, checked in by kulshres, 11 years ago

Squashed merge of branch 'master' of 'gitclone' into svn
and regenerated files to comply with coin-or repository guidelines.

  • 'master' of 'gitclone': (37 commits) fix a bug in the windows packaging script and add an examples packager add new files to dist remove old windows compile scripts and makefiles from dist allow nosparse compilation to do sparsity patterns too improve compilation and installation of windows Remove old windows Makefiles and scripts Add the examples readme file for vc++ also to dist. Add 64bit windows additions to the project files. add all the visual studio files to dist too regenerate documentation. add something about Visual Studio in the documentation. correct the documentation about include paths and the --enable- options add some more instructions for users in Readme files. ignore generated files from VC++ add project files for documented examples add ADOLC_DLL_EXPORT to taping functions add some readme instructions for users. ignore generated files from the windows build Add visual studio source files compile sparse sources only if SPARSE is defined ...

Details of the commit messages:

commit acd92df2e0402c5e2fb9853ae2185030e0e171c2
Author: Kshitij Kulshreshtha <kshitij@…>
Date: Tue Jun 29 11:28:18 2010 +0200

fix a bug in the windows packaging script and add an examples packager

Signed-off-by: Kshitij Kulshreshtha <kshitij@…>

commit 79c88a7f8bc6ceff687a7104accbb8a10661e5d0
Author: Kshitij Kulshreshtha <kshitij@…>
Date: Mon Jun 28 17:27:58 2010 +0200

add new files to dist

Signed-off-by: Kshitij Kulshreshtha <kshitij@…>

commit 549de45ff5f748a2e532818ed505816cee0c6388
Author: Kshitij Kulshreshtha <kshitij@…>
Date: Mon Jun 28 17:24:04 2010 +0200

remove old windows compile scripts and makefiles from dist

Signed-off-by: Kshitij Kulshreshtha <kshitij@…>

commit b016c67ae894e746b33df30169449066f60fba8e
Author: Kshitij Kulshreshtha <kshitij@…>
Date: Mon Jun 28 17:08:22 2010 +0200

allow nosparse compilation to do sparsity patterns too

the only thing missing is colpack and we've already done a separation.

Signed-off-by: Kshitij Kulshreshtha <kshitij@…>

commit b3bf0950428c5608319054282faf1984b0498b24
Author: Kshitij Kulshreshtha <kshitij@…>
Date: Mon Jun 28 17:07:28 2010 +0200

improve compilation and installation of windows

  • add NDEBUG everywhere so no debug libraries are required
  • add the redistributable vc++ packages
  • add a script to install the compiled files in a good directory structure and create a zipfile, also including the vc++ packages and a setup.bat

Signed-off-by: Kshitij Kulshreshtha <kshitij@…>

commit e3e3045db66ab4efd2d56c4cce1e47117bfd981b
Author: Kshitij Kulshreshtha <kshitij@…>
Date: Mon Jun 28 15:25:23 2010 +0200

Remove old windows Makefiles and scripts

these are useless now and have not been maintained in ages

Signed-off-by: Kshitij Kulshreshtha <kshitij@…>

commit df7e7f651dd96ad54b8a0e179f3513f4157ad4cb
Author: Kshitij Kulshreshtha <kshitij@…>
Date: Tue Jun 22 11:11:40 2010 +0200

Add the examples readme file for vc++ also to dist.

Signed-off-by: Kshitij Kulshreshtha <kshitij@…>

commit 5b1503a589485296773cb867e0140ecd0c4ff2bb
Author: Kshitij Kulshreshtha <kshitij@…>
Date: Tue Jun 22 10:57:11 2010 +0200

Add 64bit windows additions to the project files.

Signed-off-by: Kshitij Kulshreshtha <kshitij@…>

commit fcb189798ea3f160ea8a2715c0a9b62bb0219c24
Merge: cf9681b e2de127
Author: Kshitij Kulshreshtha <kshitij@…>
Date: Thu Jun 17 16:09:11 2010 +0200

Merge branch 'visualstudio'

  • visualstudio: add all the visual studio files to dist too

commit e2de127ad54537b0ae0a83a6ce4b2e19e8539c2a
Author: Kshitij Kulshreshtha <kshitij@…>
Date: Thu Jun 17 16:08:05 2010 +0200

add all the visual studio files to dist too

in case we make a tarball using make dist these files should be
included too.

Signed-off-by: Kshitij Kulshreshtha <kshitij@…>

commit cf9681bbad4db565e2b4eb0657b34005048c656c
Author: Kshitij Kulshreshtha <kshitij@…>
Date: Thu Jun 17 15:38:35 2010 +0200

regenerate documentation.

Signed-off-by: Kshitij Kulshreshtha <kshitij@…>

commit a1292b4d3374089ea675b65188a921a4a90235ae
Merge: f4b19a1 23f4d82
Author: Kshitij Kulshreshtha <kshitij@…>
Date: Thu Jun 17 15:37:09 2010 +0200

Merge branch 'visualstudio'

  • visualstudio: add something about Visual Studio in the documentation. add some more instructions for users in Readme files. ignore generated files from VC++ add project files for documented examples add ADOLC_DLL_EXPORT to taping functions add some readme instructions for users. ignore generated files from the windows build Add visual studio source files compile sparse sources only if SPARSE is defined visual c++ doesn't like non-void functions without return

commit 23f4d8280b10b57651353ba1b00c56126d769d95
Author: Kshitij Kulshreshtha <kshitij@…>
Date: Thu Jun 17 15:34:59 2010 +0200

add something about Visual Studio in the documentation.

Signed-off-by: Kshitij Kulshreshtha <kshitij@…>

commit f4b19a13d0bf95fc677fc4713dbb7f1de4803710
Author: Kshitij Kulshreshtha <kshitij@…>
Date: Thu Jun 17 15:34:07 2010 +0200

correct the documentation about include paths and the --enable- options

Signed-off-by: Kshitij Kulshreshtha <kshitij@…>

commit 1797588337947960a9f605f54accd77864320bd6
Author: Kshitij Kulshreshtha <kshitij@…>
Date: Thu Jun 17 14:51:46 2010 +0200

add some more instructions for users in Readme files.

Signed-off-by: Kshitij Kulshreshtha <kshitij@…>

commit e289fe2d47fa7488021faf8e06d4331a599f1535
Author: Kshitij Kulshreshtha <kshitij@…>
Date: Thu Jun 17 14:36:50 2010 +0200

ignore generated files from VC++

Signed-off-by: Kshitij Kulshreshtha <kshitij@…>

commit ba4d6262d1344af8a27ef4c4d4633f076b4a9440
Author: Kshitij Kulshreshtha <kshitij@…>
Date: Thu Jun 17 14:35:24 2010 +0200

add project files for documented examples

Signed-off-by: Kshitij Kulshreshtha <kshitij@…>

commit 6b2ba4c6245b0cf0d9cc1655bbcd9bdd2187bc07
Author: Kshitij Kulshreshtha <kshitij@…>
Date: Thu Jun 17 14:30:22 2010 +0200

add ADOLC_DLL_EXPORT to taping functions

otherwise the applications don't link with adolc.dll in VC++

Signed-off-by: Kshitij Kulshreshtha <kshitij@…>

commit b93770a0d8625740014bca29200f47c5ed891045
Author: Kshitij Kulshreshtha <kshitij@…>
Date: Thu Jun 17 13:08:26 2010 +0200

add some readme instructions for users.

Signed-off-by: Kshitij Kulshreshtha <kshitij@…>

commit 9cd5a33abc32592b6f2348f651a1990520ebf731
Author: Kshitij Kulshreshtha <kshitij@…>
Date: Thu Jun 17 12:45:09 2010 +0200

ignore generated files from the windows build

Signed-off-by: Kshitij Kulshreshtha <kshitij@…>

commit 23c23e08c207effe526c973992b9aab5c6b9dff9
Author: Kshitij Kulshreshtha <kshitij@…>
Date: Thu Jun 17 12:02:19 2010 +0200

Add visual studio source files

the windows/adolc.sln file is the solution file which can be
used to compile both sparse and nosparse versions.
windows/adolc.vcxproj is the adolc project file containing the
configuration for both sparse and nosparse builds, the sparse build
requires the ThirdParty/ColPack/ColPack?.vcxproj project to be
compiled first.

In order to compile ColPack?, just unpack the ColPack? sources into
ThirdParty/ColPack? and apply the patch
Thirparty/ColPack?/colpack_vcxcompile.patch
which is needed for colpack to be compiled in VC++.
After this Visual Studio will be able to build the sparse version
of adolc which contains ColPack? as a static library within.

Signed-off-by: Kshitij Kulshreshtha <kshitij@…>

commit 5f7244ce2e64515020aa8ab619eea91bafb5159f
Author: Kshitij Kulshreshtha <kshitij@…>
Date: Thu Jun 17 11:55:00 2010 +0200

compile sparse sources only if SPARSE is defined

in the autotools version -DSPARSE gets added to the command line
whenever sparse is enabled. Autotools also have a conditional
source files list. VC++ doesn't have any conditional sources
so we define SPARSE=1 in the additional defines and let the whole
source be only compiled if SPARSE was defined.

Signed-off-by: Kshitij Kulshreshtha <kshitij@…>

commit 17ad3477450ea40264f3055ec10965c5e9a3a635
Author: Kshitij Kulshreshtha <kshitij@…>
Date: Thu Jun 17 11:50:57 2010 +0200

visual c++ doesn't like non-void functions without return

gcc usually only warns about it. visual c++ calls it an error.
in this case we really don't need an int to be returned so we
just make the function void.

Signed-off-by: Kshitij Kulshreshtha <kshitij@…>

commit fc5b44bd420bcd4dd6606ed5da853bcd2f959c93
Author: Kshitij Kulshreshtha <kshitij@…>
Date: Wed Jun 16 11:29:51 2010 +0200

correct the logic for the warning delay in configure

Signed-off-by: Kshitij Kulshreshtha <kshitij@…>

commit c8efb4d5811a8045bfbbfaebc96d356f87d07045
Merge: ec60772 6203077
Author: Kshitij Kulshreshtha <kshitij@…>
Date: Tue Jun 15 16:59:32 2010 +0200

Merge branch 'svn'

commit ec60772e229fb09c8d8f5a71c5b55602b8245601
Author: Kshitij Kulshreshtha <kshitij@…>
Date: Mon Jun 14 18:06:14 2010 +0200

distcheck seems to behave differently on each computer

make it work for a third time

Signed-off-by: Kshitij Kulshreshtha <kshitij@…>

commit f7ba0328297712c575e25d88f3496b2503c7949d
Author: Kshitij Kulshreshtha <kshitij@…>
Date: Mon Jun 14 17:59:29 2010 +0200

let make distcheck be even more happy

Signed-off-by: Kshitij Kulshreshtha <kshitij@…>

commit 5002f07123a276c45e0484e819c85f6e0e9c352f
Author: Kshitij Kulshreshtha <kshitij@…>
Date: Mon Jun 14 16:13:39 2010 +0200

some more optimisations in configure

  • allow for simultaneous 32 and 64 bit installations whenever needed
  • writability test for the prefix directory or its parents
  • print the last comments about linking paths for all paths in ${HOME}
  • put in a pause between messages so that the user will notice the (red printed) warnings before they scroll away.
  • rename options that only enable or disable a feature appropriately

Signed-off-by: Kshitij Kulshreshtha <kshitij@…>

commit 9f86f1d391871f26f1a61c357764e63558ad078a
Author: Kshitij Kulshreshtha <kshitij@…>
Date: Wed Jun 9 10:18:40 2010 +0200

let make distcheck be happy.

Signed-off-by: Kshitij Kulshreshtha <kshitij@…>

commit fe27dfbae0a6ded19cec3e0205a60a5ee3db3ce5
Author: Kshitij Kulshreshtha <kshitij@…>
Date: Tue Jun 8 14:52:24 2010 +0200

ignore more generated files

Signed-off-by: Kshitij Kulshreshtha <kshitij@…>

commit 27ac799deb4cd5a162478d489212cc4eff821797
Author: Kshitij Kulshreshtha <kshitij@…>
Date: Tue Jun 8 14:45:14 2010 +0200

hack in a --tag=XXX for old libtool

Signed-off-by: Kshitij Kulshreshtha <kshitij@…>

commit 3f8bac48008b559219f965b23209be5c9761605e
Author: Kshitij Kulshreshtha <kshitij@…>
Date: Mon Jun 7 17:56:17 2010 +0200

use shave and dolt to clean up the build

makes it easier to see errors and warnings

Signed-off-by: Kshitij Kulshreshtha <kshitij@…>

commit 5e05c52bc2ebb60a15b62753a25d8e7a930b3c9e
Author: Kshitij Kulshreshtha <kshitij@…>
Date: Mon Jun 7 17:38:15 2010 +0200

Separate out ColPack? dependency from sparsity patterns

In order to compute sparsity patterns we don't need ColPack?. It is
only needed to compute the compressed structures or their seeds.
This way user also has the opportunity to specify where his ColPack?
installation is located and standard library paths are also searched.

In case someone switches sparse on and doesn't have ColPack?, ADOL-C
will still compile but configure will spit out a warning in the end
as well as the functions that use ColPack?, if called, will cause an
exit(-1) with an error message.

Signed-off-by: Kshitij Kulshreshtha <kshitij@…>

commit 5713dfa2a060859061890f60adc92353d9efd4f9
Author: Kshitij Kulshreshtha <kshitij@…>
Date: Mon Jun 7 15:31:50 2010 +0200

ignore more executables

Signed-off-by: Kshitij Kulshreshtha <kshitij@…>

commit ac57ebab0d23ee210129b9217661dc1598ef01f9
Author: Kshitij Kulshreshtha <kshitij@…>
Date: Fri May 7 01:45:02 2010 +0200

one more generated file to be removed and ignored

Signed-off-by: Kshitij Kulshreshtha <kshitij@…>

commit 612016c5052146fea2a719d4235dfa14e9eab7c6
Author: Kshitij Kulshreshtha <kshitij@…>
Date: Mon Apr 12 14:35:38 2010 +0200

correct the inclusion directories

since all public headers are pkginclude_HEADERS they must be prefixed
for inclusion always.

Signed-off-by: Kshitij Kulshreshtha <kshitij@…>

commit 5c11cac64c647fd0d129dfe53c9a2f0324ce3002
Author: Kshitij Kulshreshtha <kshitij@…>
Date: Wed Sep 23 11:58:24 2009 +0200

more generated files to be ignored.

Signed-off-by: Kshitij Kulshreshtha <kshitij@…>

commit c9a7a67b11aacf1db291a8d931b3ddfe7cfb223b
Author: Kshitij Kulshreshtha <kshitij@…>
Date: Wed Sep 23 11:55:59 2009 +0200

some more stuff to gitignore

Signed-off-by: Kshitij Kulshreshtha <kshitij@…>

commit 85c1a35c43aad249ec888d4fee184b0ac132d60f
Author: Kshitij Kulshreshtha <kshitij@…>
Date: Wed Sep 23 11:52:56 2009 +0200

Allow examples to be compile later

Even if the configure does not get the compile examples by default
flag, someone might want to compile one or two examples later by
calling make examplename in the examples subdirectory. This will
make that possible.

Signed-off-by: Kshitij Kulshreshtha <kshitij@…>

commit 16f920cfca7c013aecbf3a7fb7070882555a32e8
Author: Kshitij Kulshreshtha <kshitij@…>
Date: Wed Sep 23 11:43:27 2009 +0200

Remove files from git that are anyway generated

I don't know why svn people like to keep them anyway.

Signed-off-by: Kshitij Kulshreshtha <kshitij@…>

File size: 13.3 KB
Line 
1#!/bin/sh
2# install - install a program, script, or datafile
3
4scriptversion=2009-04-28.21; # UTC
5
6# This originates from X11R5 (mit/util/scripts/install.sh), which was
7# later released in X11R6 (xc/config/util/install.sh) with the
8# following copyright and license.
9#
10# Copyright (C) 1994 X Consortium
11#
12# Permission is hereby granted, free of charge, to any person obtaining a copy
13# of this software and associated documentation files (the "Software"), to
14# deal in the Software without restriction, including without limitation the
15# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
16# sell copies of the Software, and to permit persons to whom the Software is
17# furnished to do so, subject to the following conditions:
18#
19# The above copyright notice and this permission notice shall be included in
20# all copies or substantial portions of the Software.
21#
22# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
23# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
24# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
25# X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
26# AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC-
27# TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
28#
29# Except as contained in this notice, the name of the X Consortium shall not
30# be used in advertising or otherwise to promote the sale, use or other deal-
31# ings in this Software without prior written authorization from the X Consor-
32# tium.
33#
34#
35# FSF changes to this file are in the public domain.
36#
37# Calling this script install-sh is preferred over install.sh, to prevent
38# `make' implicit rules from creating a file called install from it
39# when there is no Makefile.
40#
41# This script is compatible with the BSD install script, but was written
42# from scratch.
43
44nl='
45'
46IFS=" ""        $nl"
47
48# set DOITPROG to echo to test this script
49
50# Don't use :- since 4.3BSD and earlier shells don't like it.
51doit=${DOITPROG-}
52if test -z "$doit"; then
53  doit_exec=exec
54else
55  doit_exec=$doit
56fi
57
58# Put in absolute file names if you don't have them in your path;
59# or use environment vars.
60
61chgrpprog=${CHGRPPROG-chgrp}
62chmodprog=${CHMODPROG-chmod}
63chownprog=${CHOWNPROG-chown}
64cmpprog=${CMPPROG-cmp}
65cpprog=${CPPROG-cp}
66mkdirprog=${MKDIRPROG-mkdir}
67mvprog=${MVPROG-mv}
68rmprog=${RMPROG-rm}
69stripprog=${STRIPPROG-strip}
70
71posix_glob='?'
72initialize_posix_glob='
73  test "$posix_glob" != "?" || {
74    if (set -f) 2>/dev/null; then
75      posix_glob=
76    else
77      posix_glob=:
78    fi
79  }
80'
81
82posix_mkdir=
83
84# Desired mode of installed file.
85mode=0755
86
87chgrpcmd=
88chmodcmd=$chmodprog
89chowncmd=
90mvcmd=$mvprog
91rmcmd="$rmprog -f"
92stripcmd=
93
94src=
95dst=
96dir_arg=
97dst_arg=
98
99copy_on_change=false
100no_target_directory=
101
102usage="\
103Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE
104   or: $0 [OPTION]... SRCFILES... DIRECTORY
105   or: $0 [OPTION]... -t DIRECTORY SRCFILES...
106   or: $0 [OPTION]... -d DIRECTORIES...
107
108In the 1st form, copy SRCFILE to DSTFILE.
109In the 2nd and 3rd, copy all SRCFILES to DIRECTORY.
110In the 4th, create DIRECTORIES.
111
112Options:
113     --help     display this help and exit.
114     --version  display version info and exit.
115
116  -c            (ignored)
117  -C            install only if different (preserve the last data modification time)
118  -d            create directories instead of installing files.
119  -g GROUP      $chgrpprog installed files to GROUP.
120  -m MODE       $chmodprog installed files to MODE.
121  -o USER       $chownprog installed files to USER.
122  -s            $stripprog installed files.
123  -t DIRECTORY  install into DIRECTORY.
124  -T            report an error if DSTFILE is a directory.
125
126Environment variables override the default commands:
127  CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG
128  RMPROG STRIPPROG
129"
130
131while test $# -ne 0; do
132  case $1 in
133    -c) ;;
134
135    -C) copy_on_change=true;;
136
137    -d) dir_arg=true;;
138
139    -g) chgrpcmd="$chgrpprog $2"
140        shift;;
141
142    --help) echo "$usage"; exit $?;;
143
144    -m) mode=$2
145        case $mode in
146          *' '* | *'    '* | *'
147'*        | *'*'* | *'?'* | *'['*)
148            echo "$0: invalid mode: $mode" >&2
149            exit 1;;
150        esac
151        shift;;
152
153    -o) chowncmd="$chownprog $2"
154        shift;;
155
156    -s) stripcmd=$stripprog;;
157
158    -t) dst_arg=$2
159        shift;;
160
161    -T) no_target_directory=true;;
162
163    --version) echo "$0 $scriptversion"; exit $?;;
164
165    --) shift
166        break;;
167
168    -*) echo "$0: invalid option: $1" >&2
169        exit 1;;
170
171    *)  break;;
172  esac
173  shift
174done
175
176if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then
177  # When -d is used, all remaining arguments are directories to create.
178  # When -t is used, the destination is already specified.
179  # Otherwise, the last argument is the destination.  Remove it from $@.
180  for arg
181  do
182    if test -n "$dst_arg"; then
183      # $@ is not empty: it contains at least $arg.
184      set fnord "$@" "$dst_arg"
185      shift # fnord
186    fi
187    shift # arg
188    dst_arg=$arg
189  done
190fi
191
192if test $# -eq 0; then
193  if test -z "$dir_arg"; then
194    echo "$0: no input file specified." >&2
195    exit 1
196  fi
197  # It's OK to call `install-sh -d' without argument.
198  # This can happen when creating conditional directories.
199  exit 0
200fi
201
202if test -z "$dir_arg"; then
203  trap '(exit $?); exit' 1 2 13 15
204
205  # Set umask so as not to create temps with too-generous modes.
206  # However, 'strip' requires both read and write access to temps.
207  case $mode in
208    # Optimize common cases.
209    *644) cp_umask=133;;
210    *755) cp_umask=22;;
211
212    *[0-7])
213      if test -z "$stripcmd"; then
214        u_plus_rw=
215      else
216        u_plus_rw='% 200'
217      fi
218      cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;;
219    *)
220      if test -z "$stripcmd"; then
221        u_plus_rw=
222      else
223        u_plus_rw=,u+rw
224      fi
225      cp_umask=$mode$u_plus_rw;;
226  esac
227fi
228
229for src
230do
231  # Protect names starting with `-'.
232  case $src in
233    -*) src=./$src;;
234  esac
235
236  if test -n "$dir_arg"; then
237    dst=$src
238    dstdir=$dst
239    test -d "$dstdir"
240    dstdir_status=$?
241  else
242
243    # Waiting for this to be detected by the "$cpprog $src $dsttmp" command
244    # might cause directories to be created, which would be especially bad
245    # if $src (and thus $dsttmp) contains '*'.
246    if test ! -f "$src" && test ! -d "$src"; then
247      echo "$0: $src does not exist." >&2
248      exit 1
249    fi
250
251    if test -z "$dst_arg"; then
252      echo "$0: no destination specified." >&2
253      exit 1
254    fi
255
256    dst=$dst_arg
257    # Protect names starting with `-'.
258    case $dst in
259      -*) dst=./$dst;;
260    esac
261
262    # If destination is a directory, append the input filename; won't work
263    # if double slashes aren't ignored.
264    if test -d "$dst"; then
265      if test -n "$no_target_directory"; then
266        echo "$0: $dst_arg: Is a directory" >&2
267        exit 1
268      fi
269      dstdir=$dst
270      dst=$dstdir/`basename "$src"`
271      dstdir_status=0
272    else
273      # Prefer dirname, but fall back on a substitute if dirname fails.
274      dstdir=`
275        (dirname "$dst") 2>/dev/null ||
276        expr X"$dst" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
277             X"$dst" : 'X\(//\)[^/]' \| \
278             X"$dst" : 'X\(//\)$' \| \
279             X"$dst" : 'X\(/\)' \| . 2>/dev/null ||
280        echo X"$dst" |
281            sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
282                   s//\1/
283                   q
284                 }
285                 /^X\(\/\/\)[^/].*/{
286                   s//\1/
287                   q
288                 }
289                 /^X\(\/\/\)$/{
290                   s//\1/
291                   q
292                 }
293                 /^X\(\/\).*/{
294                   s//\1/
295                   q
296                 }
297                 s/.*/./; q'
298      `
299
300      test -d "$dstdir"
301      dstdir_status=$?
302    fi
303  fi
304
305  obsolete_mkdir_used=false
306
307  if test $dstdir_status != 0; then
308    case $posix_mkdir in
309      '')
310        # Create intermediate dirs using mode 755 as modified by the umask.
311        # This is like FreeBSD 'install' as of 1997-10-28.
312        umask=`umask`
313        case $stripcmd.$umask in
314          # Optimize common cases.
315          *[2367][2367]) mkdir_umask=$umask;;
316          .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;;
317
318          *[0-7])
319            mkdir_umask=`expr $umask + 22 \
320              - $umask % 100 % 40 + $umask % 20 \
321              - $umask % 10 % 4 + $umask % 2
322            `;;
323          *) mkdir_umask=$umask,go-w;;
324        esac
325
326        # With -d, create the new directory with the user-specified mode.
327        # Otherwise, rely on $mkdir_umask.
328        if test -n "$dir_arg"; then
329          mkdir_mode=-m$mode
330        else
331          mkdir_mode=
332        fi
333
334        posix_mkdir=false
335        case $umask in
336          *[123567][0-7][0-7])
337            # POSIX mkdir -p sets u+wx bits regardless of umask, which
338            # is incompatible with FreeBSD 'install' when (umask & 300) != 0.
339            ;;
340          *)
341            tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$
342            trap 'ret=$?; rmdir "$tmpdir/d" "$tmpdir" 2>/dev/null; exit $ret' 0
343
344            if (umask $mkdir_umask &&
345                exec $mkdirprog $mkdir_mode -p -- "$tmpdir/d") >/dev/null 2>&1
346            then
347              if test -z "$dir_arg" || {
348                   # Check for POSIX incompatibilities with -m.
349                   # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or
350                   # other-writeable bit of parent directory when it shouldn't.
351                   # FreeBSD 6.1 mkdir -m -p sets mode of existing directory.
352                   ls_ld_tmpdir=`ls -ld "$tmpdir"`
353                   case $ls_ld_tmpdir in
354                     d????-?r-*) different_mode=700;;
355                     d????-?--*) different_mode=755;;
356                     *) false;;
357                   esac &&
358                   $mkdirprog -m$different_mode -p -- "$tmpdir" && {
359                     ls_ld_tmpdir_1=`ls -ld "$tmpdir"`
360                     test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1"
361                   }
362                 }
363              then posix_mkdir=:
364              fi
365              rmdir "$tmpdir/d" "$tmpdir"
366            else
367              # Remove any dirs left behind by ancient mkdir implementations.
368              rmdir ./$mkdir_mode ./-p ./-- 2>/dev/null
369            fi
370            trap '' 0;;
371        esac;;
372    esac
373
374    if
375      $posix_mkdir && (
376        umask $mkdir_umask &&
377        $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir"
378      )
379    then :
380    else
381
382      # The umask is ridiculous, or mkdir does not conform to POSIX,
383      # or it failed possibly due to a race condition.  Create the
384      # directory the slow way, step by step, checking for races as we go.
385
386      case $dstdir in
387        /*) prefix='/';;
388        -*) prefix='./';;
389        *)  prefix='';;
390      esac
391
392      eval "$initialize_posix_glob"
393
394      oIFS=$IFS
395      IFS=/
396      $posix_glob set -f
397      set fnord $dstdir
398      shift
399      $posix_glob set +f
400      IFS=$oIFS
401
402      prefixes=
403
404      for d
405      do
406        test -z "$d" && continue
407
408        prefix=$prefix$d
409        if test -d "$prefix"; then
410          prefixes=
411        else
412          if $posix_mkdir; then
413            (umask=$mkdir_umask &&
414             $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break
415            # Don't fail if two instances are running concurrently.
416            test -d "$prefix" || exit 1
417          else
418            case $prefix in
419              *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;;
420              *) qprefix=$prefix;;
421            esac
422            prefixes="$prefixes '$qprefix'"
423          fi
424        fi
425        prefix=$prefix/
426      done
427
428      if test -n "$prefixes"; then
429        # Don't fail if two instances are running concurrently.
430        (umask $mkdir_umask &&
431         eval "\$doit_exec \$mkdirprog $prefixes") ||
432          test -d "$dstdir" || exit 1
433        obsolete_mkdir_used=true
434      fi
435    fi
436  fi
437
438  if test -n "$dir_arg"; then
439    { test -z "$chowncmd" || $doit $chowncmd "$dst"; } &&
440    { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } &&
441    { test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false ||
442      test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1
443  else
444
445    # Make a couple of temp file names in the proper directory.
446    dsttmp=$dstdir/_inst.$$_
447    rmtmp=$dstdir/_rm.$$_
448
449    # Trap to clean up those temp files at exit.
450    trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0
451
452    # Copy the file name to the temp name.
453    (umask $cp_umask && $doit_exec $cpprog "$src" "$dsttmp") &&
454
455    # and set any options; do chmod last to preserve setuid bits.
456    #
457    # If any of these fail, we abort the whole thing.  If we want to
458    # ignore errors from any of these, just make sure not to ignore
459    # errors from the above "$doit $cpprog $src $dsttmp" command.
460    #
461    { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } &&
462    { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } &&
463    { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } &&
464    { test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } &&
465
466    # If -C, don't bother to copy if it wouldn't change the file.
467    if $copy_on_change &&
468       old=`LC_ALL=C ls -dlL "$dst"     2>/dev/null` &&
469       new=`LC_ALL=C ls -dlL "$dsttmp"  2>/dev/null` &&
470
471       eval "$initialize_posix_glob" &&
472       $posix_glob set -f &&
473       set X $old && old=:$2:$4:$5:$6 &&
474       set X $new && new=:$2:$4:$5:$6 &&
475       $posix_glob set +f &&
476
477       test "$old" = "$new" &&
478       $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1
479    then
480      rm -f "$dsttmp"
481    else
482      # Rename the file to the real destination.
483      $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null ||
484
485      # The rename failed, perhaps because mv can't rename something else
486      # to itself, or perhaps because mv is so ancient that it does not
487      # support -f.
488      {
489        # Now remove or move aside any old file at destination location.
490        # We try this two ways since rm can't unlink itself on some
491        # systems and the destination file might be busy for other
492        # reasons.  In this case, the final cleanup might fail but the new
493        # file should still install successfully.
494        {
495          test ! -f "$dst" ||
496          $doit $rmcmd -f "$dst" 2>/dev/null ||
497          { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null &&
498            { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; }
499          } ||
500          { echo "$0: cannot unlink or rename $dst" >&2
501            (exit 1); exit 1
502          }
503        } &&
504
505        # Now rename the file to the real destination.
506        $doit $mvcmd "$dsttmp" "$dst"
507      }
508    fi || exit 1
509
510    trap '' 0
511  fi
512done
513
514# Local variables:
515# eval: (add-hook 'write-file-hooks 'time-stamp)
516# time-stamp-start: "scriptversion="
517# time-stamp-format: "%:y-%02m-%02d.%02H"
518# time-stamp-time-zone: "UTC"
519# time-stamp-end: "; # UTC"
520# End:
Note: See TracBrowser for help on using the repository browser.