-
Notifications
You must be signed in to change notification settings - Fork 89
/
Copy pathbuild.sh
executable file
·315 lines (259 loc) · 8.22 KB
/
build.sh
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
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
#!/bin/bash
#
# Required vars :
#
# OBF_BUILD_PATH (absolute path of project, ie obuildfactory/openjdk8/macosx)
# OBF_SOURCES_PATH (absolute path of project sources)
# OBF_PROJECT_NAME (ie: openjdk7)
# OBF_MILESTONE (ie: u8-b10)
set -e
#
# Apply patches if available
#
function apply_patches()
{
pushd $OBF_SOURCES_PATH >>/dev/null
if [ -d $OBF_BUILD_PATH/patches ]; then
if ! [ -e $OBF_BUILD_PATH/patches/series ]; then
# no series file, simply apply patches in alphabetical order
for i in $OBF_BUILD_PATH/patches/*.patch; do
echo "applying patch $i"
patch -f -p0 <$i
done
elif type quilt >/dev/null 2>&1; then
# series file and quilt available: use quilt
QUILT_PATCHES=$OBF_BUILD_PATH/patches quilt push -a
else
# no quilt available: emulate it
# Except for the very 1st build attempt,
# patch utility will fail (as source files are already patched).
# patch will just as well fail if the same patch
# has already been incorporated in the upstream source.
#
# Since we have -e set, this failure will break out of the whole while loop,
# so we're temporarily setting +e while the loop is being run.
set +e
grep '^[^#]' $OBF_BUILD_PATH/patches/series | while read args; do
patch -f -p1 -i $OBF_BUILD_PATH/patches/${args}
done
set -e
fi
fi
popd >>/dev/null
}
#
# Generate CA Certs
#
function cacerts_gen()
{
local DESTCERTS=$1
local TMPCERTSDIR=`mktemp -d certs-XXXXXX`
pushd $TMPCERTSDIR > /dev/null
curl -L http://curl.haxx.se/ca/cacert.pem -o cacert.pem
cat cacert.pem | awk '/-----BEGIN CERTIFICATE-----/,/-----END CERTIFICATE-----/{ print $0; }' > cacert-clean.pem
rm -f cacerts cert_*
split -p "-----BEGIN CERTIFICATE-----" cacert-clean.pem cert_
export JAVA_HOME=`/usr/libexec/java_home -v 1.6`
for CERT_FILE in cert_*; do
ALIAS=$(basename ${CERT_FILE})
keytool -noprompt -import -alias ${ALIAS} -keystore cacerts -storepass 'changeit' -file ${CERT_FILE} || :
rm -f $CERT_FILE
done
unset JAVA_HOME
rm -f cacert.pem cacert-clean.pem
mv cacerts $DESTCERTS
popd > /dev/null
rm -rf $TMPCERTSDIR
}
#
# Ensure CA Certs exists and not too old
#
function ensure_cacert()
{
if [ ! -f $OBF_DROP_DIR/cacerts ]; then
echo "no cacerts found, regenerate it..."
cacerts_gen $OBF_DROP_DIR/cacerts
else
if test `find "$OBF_DROP_DIR/cacerts" -mtime +7`
then
echo "cacerts older than one week, regenerate it..."
cacerts_gen $OBF_DROP_DIR/cacerts
fi
fi
}
#
# Build FreeType for embedding
#
function ensure_freetype()
{
if [ ! -f $OBF_DROP_DIR/freetype/lib/libfreetype.dylib ]; then
FREETYPE_VERSION=2.4.10
if [ ! -f $OBF_DROP_DIR/freetype-$FREETYPE_VERSION.tar.bz2 ]; then
curl -L http://download.savannah.gnu.org/releases/freetype/freetype-$FREETYPE_VERSION.tar.bz2 -o $OBF_DROP_DIR/freetype-$FREETYPE_VERSION.tar.bz2
fi
if [ ! -d $OBF_DROP_DIR/freetype-patches ]; then
mkdir -p $OBF_DROP_DIR/freetype-patches
curl -L https://trac.macports.org/export/92468/trunk/dports/print/freetype/files/patch-modules.cfg.diff -o $OBF_DROP_DIR/freetype-patches/patch-modules.cfg.diff
curl -L https://trac.macports.org/export/92468/trunk/dports/print/freetype/files/patch-src_base_ftrfork.c.diff -o $OBF_DROP_DIR/freetype-patches/patch-src_base_ftrfork.c.diff
fi
# only patch with free type 2.4.10 install.mk
if [ "$FREETYPE_VERSION" = "2.4.10" ]; then
cp $OBF_BUILD_PATH/patches/patch_unix_install_mk_2.4.10.diff $OBF_DROP_DIR/freetype-patches/
fi
rm -rf freetype-$FREETYPE_VERSION
rm -rf $OBF_DROP_DIR/freetype
tar xvjf $OBF_DROP_DIR/freetype-$FREETYPE_VERSION.tar.bz2
pushd freetype-$FREETYPE_VERSION >>/dev/null
for i in $OBF_DROP_DIR/freetype-patches/*; do
echo "applying patch $i"
patch -p0 <$i
done
./configure --prefix=$OBF_DROP_DIR/freetype CC=/usr/bin/clang 'CFLAGS=-pipe -Os -arch i386 -arch x86_64' \
'LDFLAGS=-arch i386 -arch x86_64' CXX=/usr/bin/clang++ 'CXXFLAGS=-pipe -Os -arch i386 -arch x86_64' \
--disable-static --with-old-mac-fonts
make install
cp $OBF_DROP_DIR/freetype/lib/libfreetype.6.dylib $OBF_DROP_DIR/freetype/lib/libfreetype.dylib
popd >>/dev/null
rm -rf freetype-$FREETYPE_VERSION
fi
export ALT_FREETYPE_LIB_PATH=$OBF_DROP_DIR/freetype/lib
export ALT_FREETYPE_HEADERS_PATH=$OBF_DROP_DIR/freetype/include
}
function check_version()
{
local version=$1 check=$2
local winner=$(echo -e "$version\n$check" | sed '/^$/d' | sort -nr | head -1)
[[ "$winner" = "$version" ]] && return 0
return 1
}
#
# Build using old build system
#
function build_old()
{
echo "### using old build system ###"
NUM_CPUS=`sysctl -n hw.ncpu`
export MILESTONE="$OBF_BUILD_NUMBER"
export BUILD_NUMBER="$OBF_BUILD_DATE"
export LD_LIBRARY_PATH=
export ALT_BOOTDIR=`/usr/libexec/java_home -v 1.6`
export ALLOW_DOWNLOADS=true
export ALT_CACERTS_FILE=$OBF_DROP_DIR/cacerts
export ALT_BOOTDIR=$ALT_BOOTDIR
export ALT_DROPS_DIR=$OBF_DROP_DIR
export HOTSPOT_BUILD_JOBS=$NUM_CPUS
export PARALLEL_COMPILE_JOBS=$NUM_CPUS
export JAVA_HOME=
if [ "$XDEBUG" = "true" ]; then
export SKIP_FASTDEBUG_BUILD=false
fi
case $OBF_BASE_ARCH in
x86_64)
export IMAGE_BUILD_DIR=$OBF_SOURCES_PATH/build/macosx-x86_64
;;
i386)
export IMAGE_BUILD_DIR=$OBF_SOURCES_PATH/build/macosx-i586
;;
universal)
export IMAGE_BUILD_DIR=$OBF_SOURCES_PATH/build/macosx-universal
;;
esac
if [ "$XCLEAN" = "true" ]; then
rm -rf $IMAGE_BUILD_DIR
fi
# Set Company Name to OBuildFactory
sed -i "" -e "s|COMPANY_NAME = N/A|COMPANY_NAME = $BUNDLE_VENDOR|g" $OBF_SOURCES_PATH/jdk/make/common/shared/Defs.gmk
pushd $OBF_SOURCES_PATH >>/dev/null
make ALLOW_DOWNLOADS=true SA_APPLE_BOOT_JAVA=true ALWAYS_PASS_TEST_GAMMA=true ALT_BOOTDIR=$ALT_BOOTDIR ALT_DROPS_DIR=$DROP_DIR HOTSPOT_BUILD_JOBS=$NUM_CPUS PARALLEL_COMPILE_JOBS=$NUM_CPUS
popd >>/dev/null
}
#
# Build using new build system
#
function build_new()
{
echo "not yet"
exit -1
}
#
# Verify build
#
function test_build()
{
if [ -x $IMAGE_BUILD_DIR/j2sdk-image/bin/java ]; then
$IMAGE_BUILD_DIR/j2sdk-image/bin/java -version
else
echo "can't find java into JDK $IMAGE_BUILD_DIR/j2sdk-image, build failed"
exit -1
fi
if [ -x $IMAGE_BUILD_DIR/j2re-image/bin/java ]; then
$IMAGE_BUILD_DIR/j2re-image/bin/java -version
else
echo "can't find java into JRE $IMAGE_BUILD_DIR/j2re-image, build failed"
exit -1
fi
}
#
# Archives build
#
function archive_build()
{
mkdir -p $OBF_DROP_DIR/$OBF_PROJECT_NAME
pushd $IMAGE_BUILD_DIR >>/dev/null
if [ "$XDEBUG" = "true" ]; then
FILENAME_PREFIX="-fastdebug"
fi
tar cjf $OBF_DROP_DIR/$OBF_PROJECT_NAME/j2sdk-image$FILENAME_PREFIX-$OBF_BASE_ARCH-$OBF_BUILD_NUMBER-$OBF_BUILD_DATE.tar.bz2 j2sdk-image
tar cjf $OBF_DROP_DIR/$OBF_PROJECT_NAME/j2re-image$FILENAME_PREFIX-$OBF_BASE_ARCH-$OBF_BUILD_NUMBER-$OBF_BUILD_DATE.tar.bz2 j2re-image
popd >>/dev/null
if [ -d $IMAGE_BUILD_DIR/j2sdk-bundle ]; then
pushd $IMAGE_BUILD_DIR/j2sdk-bundle >>/dev/null
tar cjf $OBF_DROP_DIR/$OBF_PROJECT_NAME/j2sdk-bundle$FILENAME_PREFIX-$OBF_BASE_ARCH-$OBF_BUILD_NUMBER-$OBF_BUILD_DATE.tar.bz2 jdk1.7.0.jdk
popd >>/dev/null
else
echo "Warning, j2sdk bundle not found, DMG packages won't be available"
fi
if [ -d $IMAGE_BUILD_DIR/j2re-bundle ]; then
pushd $IMAGE_BUILD_DIR/j2re-bundle >>/dev/null
tar cjf $OBF_DROP_DIR/$OBF_PROJECT_NAME/j2re-bundle$FILENAME_PREFIX-$OBF_BASE_ARCH-$OBF_BUILD_NUMBER-$OBF_BUILD_DATE.tar.bz2 jre1.7.0.jre
popd >>/dev/null
else
echo "Warning, j2re bundle not found, DMG packages won't be available"
fi
echo "produced tarball files under $OBF_DROP_DIR/$OBF_PROJECT_NAME"
ls -l $OBF_DROP_DIR/$OBF_PROJECT_NAME/*$OBF_BUILD_NUMBER-$OBF_BUILD_DATE*
}
#
# Build start here
#
export JDK_BUNDLE_VENDOR="OBuildFactory"
export BUNDLE_VENDOR="OBuildFactory"
echo "Calculated MILESTONE=$OBF_MILESTONE, BUILD_NUMBER=$OBF_BUILD_NUMBER"
#
# Apply patches
#
apply_patches
#
# Ensure cacerts are available
#
ensure_cacert
#
# Ensure FreeType are built
#
ensure_freetype
#
# Build JDK/JRE images
#
if [ "$XUSE_NEW_BUILD_SYSTEM" = "true" ]; then
build_new
else
build_old
fi
#
# Test Build
#
test_build
#
# Archive Builds
#
archive_build