-
Notifications
You must be signed in to change notification settings - Fork 17
/
BUILD
160 lines (132 loc) · 4.68 KB
/
BUILD
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
(
# The fortify compiler option cause the build to fail
bad_flags -D_FORTIFY_SOURCE=2 &&
mkdir -p $SOURCE_DIRECTORY/tmp &&
export CC_OPTS=( Pipe ) &&
KVER=`installed_version kernel-headers` &&
# There is no other option but nptl
OPTS+=" --enable-add-ons=nptl,libidn --with-__thread --with-tls --disable-profile --enable-kernel=$KVER" &&
if [ -n "$MAKES" ] && [ "$MAKES" -gt 1 ] ; then
sedit "s/# PARALLELMFLAGS = -j 4/PARALLELMFLAGS = -j $MAKES/" Makefile.in
fi &&
export CC=gcc &&
# Don't fully strip libc
if [[ "$LDFLAGS" == *-s* ]] ; then
STRIP=y
fi &&
unset LDFLAGS &&
patch_it $SOURCE2 1 &&
patch_it $SOURCE3 1 &&
patch_it $SOURCE4 1 &&
# Fix res_query assertion
patch_it $SOURCE5 1 &&
# Fix various hangs
patch_it $SOURCE6 1 &&
# disable final test
sed -i '/test-installation.pl/d' Makefile &&
INSTALL_ROOT=$SOURCE_DIRECTORY/glibcroot &&
mkdir -p $INSTALL_ROOT &&
cd $INSTALL_ROOT &&
OPTS+=" --with-headers=/usr/include" &&
../configure --prefix=/usr \
--infodir=/usr/share/info \
--mandir=/usr/share/man \
--with-elf \
--without-gd \
--without-cvs \
--enable-shared \
--enable-obsolete-rpc \
--disable-multi-arch \
--enable-bind-now \
--enable-stackguard-randomization \
$OPTS &&
# explicitly exit here since the following code unsets $?
make || exit 1 &&
# Preserve the old glibc temporarily
LD=/lib/ld-linux.so.2 &&
GLIBC=/lib/libc.so.6 &&
DL=/lib/libdl.so.2 &&
M=/lib/libm.so.6 &&
RT=/lib/librt.so.1 &&
PTHREAD=/lib/libpthread.so.0 &&
NSS=/lib/libnss_files.so.2 &&
UTIL=/lib/libutil.so.1 &&
NSL=/lib/libnsl.so.1 &&
CRYPT=/lib/libcrypt.so.1 &&
case "`arch`" in
alpha)
GLIBC=/lib/libc.so.6.1 &&
DL=/lib/libdl.so.2.1 &&
M=/lib/libm.so.6.1
;;
ppc)
LD=/lib/ld.so.1 &&
DL=/lib/libdl.so.2
;;
*)
DL=/lib/libdl.so.2
;;
esac &&
cp $LD /lib/ld-lunar.so &&
cp $GLIBC /lib/libc-lunar.so &&
cp $DL /lib/libdl-lunar.so &&
cp $M /lib/libm-lunar.so &&
cp $RT /lib/librt-lunar.so &&
cp $PTHREAD /lib/libpthread-lunar.so &&
cp $NSS /lib/libnss_files-lunar.so &&
cp $UTIL /lib/libutil-lunar.so &&
cp $NSL /lib/libnsl-lunar.so &&
cp $CRYPT /lib/libcrypt-lunar.so &&
# Setup links for libraries
sln /lib/ld-lunar.so $LD &&
sln /lib/libc-lunar.so $GLIBC &&
sln /lib/libdl-lunar.so $DL &&
sln /lib/libm-lunar.so $M &&
sln /lib/librt-lunar.so $RT &&
sln /lib/libpthread-lunar.so $PTHREAD &&
sln /lib/libnss_files-lunar.so $NSS &&
sln /lib/libutil-lunar.so $UTIL &&
sln /lib/libnsl-lunar.so $NSL &&
sln /lib/libcrypt-lunar.so $CRYPT &&
# clean hack to make sure gnu/stubs.h gets refreshed
rm -f /usr/include/gnu/stubs.h &&
# This removes the old glibc
prepare_install &&
# And now we install the new
make install &&
# Now optionally perform debug symbol stripping only
if [ "$STRIP" == "y" ] ; then
for FN in ld-$MAJOR.so \
lib{anl,BrokenLocale,c,crypt,dl,m,nsl,util,pthread,resolv}-$MAJOR.so \
libnss_{compat,files,hesiod,nis,nisplus}-$MAJOR.so \
lib{memusage,pcprofile,SegFault,thread_db-1.0}.so ; do
strip -S /lib/$FN
done &&
for FN in "/usr/lib/gconv/*.so" ; do
strip -S $FN
done
fi &&
# Added a symlink for ash and others
ln -sf /usr/lib/libbsd-compat.a /usr/lib/libbsd.a &&
# Rebuild the ld cache
rm -f /etc/ld.so.cache 2>/dev/null &&
ldconfig &&
# Remove the temporary libc
rm /lib/{ld,lib{c,dl,m,rt,pthread,nss_files,util,nsl,crypt}}-lunar.so &&
# Generate locale info
if [ -z "$GLIBC_LOCALES" ]; then
make localedata/install-locales || exit 1
else
devoke_installwatch &&
for LOCALE in $GLIBC_LOCALES; do
INPUTFILE=$(echo $LOCALE | cut -d/ -f1 | sed -e 's:\..*$::g') &&
OUTPUTFILE=$(echo $LOCALE | cut -d/ -f1) &&
CHARMAP=$(echo $LOCALE | cut -d/ -f2) &&
mkdir -p /usr/lib/locale/$OUTPUTFILE &&
echo "localedef -i $INPUTFILE -f $CHARMAP $OUTPUTFILE" &&
localedef -i $INPUTFILE -f $CHARMAP $OUTPUTFILE
done
invoke_installwatch &&
touch /usr/lib/locale/locale-archive
fi
) > $C_FIFO 2>&1 && ldconfig