blob: 7e4dbc414e788d2c16fc94d3d5db322deadf1f15 (
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
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
|
#! /usr/bin/env bash
# icecc -- A simple distributed compiler system
#
# Copyright (C) 2004 by the Icecream Authors
# GPL
target_files=
is_contained ()
{
case " $target_files " in
*" $1 "* ) return 0 ;;
*"=$1 "* ) return 0;;
* ) return 1 ;;
esac
}
add_file ()
{
local name="$1"
local path="$1";
if test -n "$2"; then
name="$2"
fi
test -z "$name" && return
# ls -H isn't really the same as readlink, but
# readlink is not portable enough.
path=`ls -H $path`
toadd="$name=$path"
is_contained "$toadd" && return
if test -z "$silent"; then
echo "adding file $toadd"
fi
target_files="$target_files $toadd"
if test -x "$path"; then
# Only call ldd when it makes sense
if file -L "$path" | grep 'ELF' > /dev/null 2>&1; then
if ! file -L "$path" | grep 'static' > /dev/null 2>&1; then
# ldd now outputs ld as /lib/ld-linux.so.xx on current nptl based glibc
# this regexp parse the outputs like:
# ldd /usr/bin/gcc
# linux-gate.so.1 => (0xffffe000)
# libc.so.6 => /lib/tls/libc.so.6 (0xb7e81000)
# /lib/ld-linux.so.2 (0xb7fe8000)
# covering both situations ( with => and without )
for lib in `ldd "$path" | sed -n 's,^[^/]*\(/[^ ]*\).*,\1,p'`; do
test -f "$lib" || continue
# Check wether the same library also exists in the parent directory,
# and prefer that on the assumption that it is a more generic one.
local baselib=`echo "$lib" | sed 's,\(/[^/]*\)/.*\(/[^/]*\)$,\1\2,'`
test -f "$baselib" && lib=$baselib
add_file "$lib"
done
fi
fi
fi
}
# backward compat
if test "$1" = "--respect-path"; then
shift
fi
#add a --silent switch to avoid "broken pipe" errors when calling this scipt from within OE
if test "$1" = "--silent"; then
silent=1
shift
fi
added_gcc=$1
shift
added_gxx=$1
shift
added_as=$1
shift
archive_name=$1
if test -z "$added_gcc" || test -z "$added_gxx" ; then
echo "usage: $0 <gcc_path> <g++_path>"
exit 1
fi
if ! test -x "$added_gcc" ; then
echo "'$added_gcc' is no executable."
exit 1
fi
if ! test -x "$added_gxx" ; then
echo "'$added_gcc' is no executable."
exit 1
fi
add_file $added_gcc /usr/bin/gcc
add_file $added_gxx /usr/bin/g++
if test -z "$added_as" ; then
add_file /usr/bin/as /usr/bin/as
else
if ! test -x "$added_as" ; then
echo "'$added_as' is no executable."
exit 1
fi
add_file $added_as /usr/bin/as
fi
add_file `$added_gcc -print-prog-name=cc1` /usr/bin/cc1
add_file `$added_gxx -print-prog-name=cc1plus` /usr/bin/cc1plus
specfile=`$added_gcc -print-file-name=specs`
if test -n "$specfile" && test -e "$specfile"; then
add_file "$specfile"
fi
ltofile=`$added_gcc -print-prog-name=lto1`
pluginfile="${ltofile%lto1}liblto_plugin.so"
if test -r "$pluginfile"
then
add_file $pluginfile ${pluginfile#*usr}
add_file $pluginfile /usr${pluginfile#*usr}
fi
tempdir=`mktemp -d /tmp/iceccenvXXXXXX`
new_target_files=
for i in $target_files; do
case $i in
*=/*)
target=`echo $i | cut -d= -f1`
path=`echo $i | cut -d= -f2`
;;
*)
path=$i
target=$i
;;
esac
mkdir -p $tempdir/`dirname $target`
cp -p $path $tempdir/$target
if test -f $tempdir/$target -a -x $tempdir/$target; then
strip -s $tempdir/$target 2>/dev/null
fi
target=`echo $target | cut -b2-`
new_target_files="$new_target_files $target"
done
#sort the files
target_files=`for i in $new_target_files; do echo $i; done | sort`
#test if an archive name was supplied
#if not use the md5 of all files as the archive name
if test -z "$archive_name"; then
md5sum=NONE
for file in /usr/bin/md5sum /bin/md5 /usr/bin/md5; do
if test -x $file; then
md5sum=$file
break
fi
done
#calculate md5 and use it as the archive name
archive_name=`for i in $target_files; do test -f $tempdir/$i && $md5sum $tempdir/$i; done | sed -e 's/ .*$//' | $md5sum | sed -e 's/ .*$//'`.tar.gz || {
if test -z "$silent"; then
echo "Couldn't compute MD5 sum."
fi
exit 2
}
mydir=`pwd`
else
mydir="`dirname "$archive_name"`"
#check if we have a full path or only a filename
if test "$mydir" = "." ; then
mydir=`pwd`
else
mydir=""
fi
fi
if test -z "$silent"; then
echo "creating $archive_name"
fi
cd $tempdir
tar -czhf "$mydir/$archive_name" $target_files || {
if test -z "$silent"; then
echo "Couldn't create archive"
fi
exit 3
}
cd ..
rm -rf $tempdir
|