blob: 0aedcb9e56ef5444365c3f71609b8b60e76bb810 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
|
#!/bin/bash
# Copyright 1999-2011 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
source "${PORTAGE_BIN_PATH:-/usr/lib/portage/bin}"/isolated-functions.sh
if [[ ${0##*/} == dodoc ]] ; then
if [ $# -eq 0 ] ; then
# default_src_install may call dodoc with no arguments
# when DOC is defined but empty, so simply return
# sucessfully in this case.
exit 0
fi
export INSOPTIONS=-m0644
export INSDESTTREE=usr/share/doc/${PF}/${_E_DOCDESTTREE_}
fi
if [ $# -lt 1 ] ; then
helpers_die "${0##*/}: at least one argument needed"
exit 1
fi
if [[ "$1" == "-r" ]] ; then
DOINSRECUR=y
shift
else
DOINSRECUR=n
fi
if [[ ${INSDESTTREE#${D}} != "${INSDESTTREE}" ]]; then
vecho "-------------------------------------------------------" 1>&2
vecho "You should not use \${D} with helpers." 1>&2
vecho " --> ${INSDESTTREE}" 1>&2
vecho "-------------------------------------------------------" 1>&2
helpers_die "${0##*/} used with \${D}"
exit 1
fi
case "$EAPI" in
0|1|2|3|3_pre2)
PRESERVE_SYMLINKS=n
;;
*)
PRESERVE_SYMLINKS=y
;;
esac
export TMP=$T/.doins_tmp
# Use separate directories to avoid potential name collisions.
mkdir -p "$TMP"/{1,2}
[[ ! -d ${D}${INSDESTTREE} ]] && dodir "${INSDESTTREE}"
_doins() {
local mysrc="$1" mydir="$2" cleanup="" rval
if [ -L "$mysrc" ] ; then
if [ $PRESERVE_SYMLINKS = y ] ; then
rm -rf "$D$INSDESTTREE/$mydir/${mysrc##*/}" || return $?
cp -P "$mysrc" "$D$INSDESTTREE/$mydir/${mysrc##*/}"
return $?
else
cp "$mysrc" "$TMP/2/${mysrc##*/}" || return $?
mysrc="$TMP/2/${mysrc##*/}"
cleanup=$mysrc
fi
fi
install ${INSOPTIONS} "${mysrc}" "${D}${INSDESTTREE}/${mydir}"
rval=$?
[[ -n ${cleanup} ]] && rm -f "${cleanup}"
[ $rval -ne 0 ] && echo "!!! ${0##*/}: $mysrc does not exist" 1>&2
return $rval
}
_xdoins() {
local -i failed=0
while read -r -d $'\0' x ; do
_doins "$x" "${x%/*}"
((failed|=$?))
done
return $failed
}
success=0
failed=0
for x in "$@" ; do
if [[ $PRESERVE_SYMLINKS = n && -d $x ]] || \
[[ $PRESERVE_SYMLINKS = y && -d $x && ! -L $x ]] ; then
if [ "${DOINSRECUR}" == "n" ] ; then
if [[ ${0##*/} == dodoc ]] ; then
echo "!!! ${0##*/}: $x is a directory" 1>&2
((failed|=1))
fi
continue
fi
while [ "$x" != "${x%/}" ] ; do
x=${x%/}
done
if [ "$x" = "${x%/*}" ] ; then
pushd "$PWD" >/dev/null
else
pushd "${x%/*}" >/dev/null
fi
x=${x##*/}
x_orig=$x
# Follow any symlinks recursively until we've got
# a normal directory for 'find' to traverse.
while [ -L "$x" ] ; do
pushd "$(readlink "$x")" >/dev/null
x=${PWD##*/}
pushd "${PWD%/*}" >/dev/null
done
if [[ $x != $x_orig ]] ; then
mv "$x" "$TMP/1/$x_orig"
pushd "$TMP/1" >/dev/null
fi
find "$x_orig" -type d -exec dodir "${INSDESTTREE}/{}" \;
find "$x_orig" \( -type f -or -type l \) -print0 | _xdoins
if [[ ${PIPESTATUS[1]} -eq 0 ]] ; then
# NOTE: Even if only an empty directory is installed here, it
# still counts as success, since an empty directory given as
# an argument to doins -r should not trigger failure.
((success|=1))
else
((failed|=1))
fi
if [[ $x != $x_orig ]] ; then
popd >/dev/null
mv "$TMP/1/$x_orig" "$x"
fi
while popd >/dev/null 2>&1 ; do true ; done
else
_doins "${x}"
if [[ $? -eq 0 ]] ; then
((success|=1))
else
((failed|=1))
fi
fi
done
rm -rf "$TMP"
[[ $failed -ne 0 || $success -eq 0 ]] && { helpers_die "${0##*/} failed"; exit 1; } || exit 0
|