Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Open sidebar
emacs
emacs
Commits
2b3f5bc8
Commit
2b3f5bc8
authored
Jan 07, 2011
by
Paul Eggert
Browse files
* install-sh, mkinstalldirs, move-if-change: Update from master
parent
f56e0e7a
Changes
6
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
572 additions
and
217 deletions
+572
-217
ChangeLog
ChangeLog
+3
-0
admin/ChangeLog
admin/ChangeLog
+7
-1
admin/notes/copyright
admin/notes/copyright
+2
-2
install-sh
install-sh
+475
-201
mkinstalldirs
mkinstalldirs
+11
-1
move-if-change
move-if-change
+74
-12
No files found.
ChangeLog
View file @
2b3f5bc8
2011-01-07 Paul Eggert <eggert@cs.ucla.edu>
* install-sh, mkinstalldirs, move-if-change: Update from master
source in gnulib.
* config.guess, config.sub: Updated from master source.
2011-01-05 Andreas Schwab <schwab@linux-m68k.org>
...
...
admin/ChangeLog
View file @
2b3f5bc8
2011-01-02 Paul Eggert <eggert@cs.ucla.edu>
2011-01-07 Paul Eggert <eggert@cs.ucla.edu>
* notes/copyright: There's only one install-sh, not two, so fix a
typo claiming that there's two. Add move-if-change to the list of
GPL files imported from gnulib.
2011-01-07 Paul Eggert <eggert@cs.ucla.edu>
* notes/copyright: Report status more accurately for non-GPL files.
Report copyright status more accurately for mkinstalldirs,
...
...
admin/notes/copyright
View file @
2b3f5bc8
...
...
@@ -138,8 +138,7 @@ configure
m4/getopt.m4
- copyright FSF, with MIT-like license
<top-level>/install-sh
lispintro/install-sh
install-sh
- this file is copyright MIT, which is OK. Leave the copyright alone.
mkinstalldirs
...
...
@@ -621,6 +620,7 @@ of writing) GPL >= 2. rms says may as well leave the licenses of these
alone (may import them from Gnulib again). These are:
Gnulib:
move-if-change
src/getloadavg.c
src/gmalloc.c
src/md5.c
...
...
install-sh
View file @
2b3f5bc8
#! /bin/sh
#
#!/bin/sh
# install - install a program, script, or datafile
# This comes from X11R5 (mit/util/scripts/install.sh).
scriptversion
=
2010-02-06.18
;
# UTC
# 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.
#
# Copyright 1991 by the Massachusetts Institute of Technology
# 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.
#
# 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.
#
# 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. It can only install one file at a time, a restriction
# shared with many OS's install programs.
# 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
-
}
"
# put in absolute paths if you don't have them in your path; or use env. vars.
mvprog
=
"
${
MVPROG
-mv
}
"
cpprog
=
"
${
CPPROG
-cp
}
"
chmodprog
=
"
${
CHMODPROG
-chmod
}
"
chownprog
=
"
${
CHOWNPROG
-chown
}
"
chgrpprog
=
"
${
CHGRPPROG
-chgrp
}
"
stripprog
=
"
${
STRIPPROG
-strip
}
"
rmprog
=
"
${
RMPROG
-rm
}
"
mkdirprog
=
"
${
MKDIRPROG
-mkdir
}
"
transformbasename
=
""
transform_arg
=
""
instcmd
=
"
$mvprog
"
chmodcmd
=
"
$chmodprog
0755"
chowncmd
=
""
chgrpcmd
=
""
stripcmd
=
""
rmcmd
=
"
$rmprog
-f"
mvcmd
=
"
$mvprog
"
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
done
if
[
x
"
$src
"
=
x
]
then
echo
"install: no input file specified"
exit
1
doit
=
${
DOITPROG
-
}
if
test
-z
"
$doit
"
;
then
doit_exec
=
exec
else
true
doit_exec
=
$doit
fi
if
[
x
"
$dir_arg
"
!=
x
]
;
then
dst
=
$src
src
=
""
# 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
}
posix_glob
=
'?'
initialize_posix_glob
=
'
test "$posix_glob" != "?" || {
if (set -f) 2>/dev/null; then
posix_glob=
else
posix_glob=:
fi
}
'
if
[
-d
$dst
]
;
then
instcmd
=
:
else
instcmd
=
mkdir
fi
else
posix_mkdir
=
# 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 '*'.
# Desired mode of installed file.
mode
=
0755
if
[
-f
$src
-o
-d
$src
]
then
true
else
echo
"install:
$src
does not exist"
exit
1
fi
chgrpcmd
=
chmodcmd
=
$chmodprog
chowncmd
=
mvcmd
=
$mvprog
rmcmd
=
"
$rmprog
-f"
stripcmd
=
if
[
x
"
$dst
"
=
x
]
then
echo
"install: no destination specified"
exit
1
else
true
fi
src
=
dst
=
dir_arg
=
dst_arg
=
# 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
copy_on_change
=
false
no_target_directory
=
if
[
-d
$dst
]
then
dst
=
"
$dst
"
/
`
basename
$src
`
else
true
fi
fi
usage
=
"
\
Usage:
$0
[OPTION]... [-T] SRCFILE DSTFILE
or:
$0
[OPTION]... SRCFILES... DIRECTORY
or:
$0
[OPTION]... -t DIRECTORY SRCFILES...
or:
$0
[OPTION]... -d DIRECTORIES...
## this sed command emulates the dirname command
dstdir
=
`
echo
$dst
|
sed
-e
's,[^/]*$,,;s,/$,,;s,^$,.,'
`
In the 1st form, copy SRCFILE to DSTFILE.
In the 2nd and 3rd, copy all SRCFILES to DIRECTORY.
In the 4th, create DIRECTORIES.
# Make sure that the destination directory exists.
# this part is taken from Noah Friedman's mkinstalldirs script
Options:
--help display this help and exit.
--version display version info and exit.
# Skip lots of stat calls in the usual case.
if
[
!
-d
"
$dstdir
"
]
;
then
defaultIFS
=
'
'
IFS
=
"
${
IFS
-
${
defaultIFS
}}
"
-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.
oIFS
=
"
${
IFS
}
"
# Some sh's can't handle IFS=/ for some reason.
IFS
=
'%'
set
-
`
echo
${
dstdir
}
|
sed
-e
's@/@%@g'
-e
's@^%@/@'
`
IFS
=
"
${
oIFS
}
"
Environment variables override the default commands:
CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG
RMPROG STRIPPROG
"
pathcomp
=
''
while
test
$#
-ne
0
;
do
case
$1
in
-c
)
;;
while
[
$#
-ne
0
]
;
do
pathcomp
=
"
${
pathcomp
}${
1
}
"
shift
-C
)
copy_on_change
=
true
;;
if
[
!
-d
"
${
pathcomp
}
"
]
;
then
$mkdirprog
"
${
pathcomp
}
"
else
true
fi
pathcomp
=
"
${
pathcomp
}
/"
done
fi
-d
)
dir_arg
=
true
;;
if
[
x
"
$dir_arg
"
!=
x
]
then
$doit
$instcmd
$dst
&&
-g
)
chgrpcmd
=
"
$chgrpprog
$2
"
shift
;;
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
else
--help
)
echo
"
$usage
"
;
exit
$?
;;
# If we're going to rename the final executable, determine the name now.
-m
)
mode
=
$2
case
$mode
in
*
' '
*
|
*
' '
*
|
*
'
'
*
|
*
'*'
*
|
*
'?'
*
|
*
'['
*
)
echo
"
$0
: invalid mode:
$mode
"
>
&2
exit
1
;;
esac
shift
;;
if
[
x
"
$transformarg
"
=
x
]
then
dstfile
=
`
basename
$dst
`
else
dstfile
=
`
basename
$dst
$transformbasename
|
sed
$transformarg
`
$transformbasename
fi
-o
)
chowncmd
=
"
$chownprog
$2
"
shift
;;
# don't allow the sed command to completely eliminate the filename
-s
)
stripcmd
=
$stripprog
;;
if
[
x
"
$dstfile
"
=
x
]
then
dstfile
=
`
basename
$dst
`
else
true
fi
-t
)
dst_arg
=
$2
shift
;;
# Make a temp file name in the proper
directory
.
-T
)
no_target_
directory
=
true
;;
dsttmp
=
$dstdir
/#inst.
$$
#
--version
)
echo
"
$0
$scriptversion
"
;
exit
$?
;;
# Move or copy the file name to the temp name
--
)
shift
break
;;
$doit
$instcmd
$src
$dsttmp
&&
-
*
)
echo
"
$0
: invalid option:
$1
"
>
&2
exit
1
;;
trap
"rm -f
${
dsttmp
}
"
0
&&
*
)
break
;;
esac
shift
done
# and set any options; do chmod last to preserve setuid bits
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 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
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
[
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
&&
if
test
-z
"
$dir_arg
"
;
then
do_exit
=
'(exit $ret); exit $ret'
trap
"ret=129;
$do_exit
"
1
trap
"ret=130;
$do_exit
"
2
trap
"ret=141;
$do_exit
"
13
trap
"ret=143;
$do_exit
"
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
# Now rename the file to the real destination.
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
$doit
$rmcmd
-f
$dstdir
/
$dstfile
&&
$doit
$mvcmd
$dsttmp
$dstdir
/
$dstfile
# 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
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