OLD | NEW |
| (Empty) |
1 #!/bin/bash | |
2 # | |
3 # Copyright (C) 2009 The Android Open Source Project | |
4 # | |
5 # Licensed under the Apache License, Version 2.0 (the "License"); | |
6 # you may not use this file except in compliance with the License. | |
7 # You may obtain a copy of the License at | |
8 # | |
9 # http://www.apache.org/licenses/LICENSE-2.0 | |
10 # | |
11 # Unless required by applicable law or agreed to in writing, software | |
12 # distributed under the License is distributed on an "AS IS" BASIS, | |
13 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
14 # See the License for the specific language governing permissions and | |
15 # limitations under the License. | |
16 # | |
17 | |
18 # | |
19 # This script imports new versions of OpenSSL (http://openssl.org/source) into t
he | |
20 # Android source tree. To run, (1) fetch the appropriate tarball from the OpenS
SL repository, | |
21 # (2) check the gpg/pgp signature, and then (3) run: | |
22 # ./import_openssl.sh import openssl-*.tar.gz | |
23 # | |
24 # IMPORTANT: See README.android for additional details. | |
25 | |
26 # turn on exit on error as well as a warning when it happens | |
27 set -e | |
28 trap "echo WARNING: Exiting on non-zero subprocess exit code" ERR; | |
29 | |
30 # Ensure consistent sorting order / tool output. | |
31 export LANG=C | |
32 export LC_ALL=C | |
33 | |
34 function die() { | |
35 declare -r message=$1 | |
36 | |
37 echo $message | |
38 exit 1 | |
39 } | |
40 | |
41 function usage() { | |
42 declare -r message=$1 | |
43 | |
44 if [ ! "$message" = "" ]; then | |
45 echo $message | |
46 fi | |
47 echo "Usage:" | |
48 echo " ./import_openssl.sh import </path/to/openssl-*.tar.gz>" | |
49 echo " ./import_openssl.sh regenerate <patch/*.patch>" | |
50 echo " ./import_openssl.sh generate <patch/*.patch> </path/to/openssl-*.tar.g
z>" | |
51 exit 1 | |
52 } | |
53 | |
54 function main() { | |
55 if [ ! -d patches ]; then | |
56 die "OpenSSL patch directory patches/ not found" | |
57 fi | |
58 | |
59 if [ ! -f openssl.version ]; then | |
60 die "openssl.version not found" | |
61 fi | |
62 | |
63 source openssl.version | |
64 if [ "$OPENSSL_VERSION" == "" ]; then | |
65 die "Invalid openssl.version; see README.android for more information" | |
66 fi | |
67 | |
68 OPENSSL_DIR=openssl-$OPENSSL_VERSION | |
69 OPENSSL_DIR_ORIG=$OPENSSL_DIR.orig | |
70 | |
71 if [ ! -f openssl.config ]; then | |
72 die "openssl.config not found" | |
73 fi | |
74 | |
75 source openssl.config | |
76 if [ "$CONFIGURE_ARGS" == "" -o "$UNNEEDED_SOURCES" == "" -o "$NEEDED_SOURCES"
== "" ]; then | |
77 die "Invalid openssl.config; see README.android for more information" | |
78 fi | |
79 | |
80 declare -r command=$1 | |
81 shift || usage "No command specified. Try import, regenerate, or generate." | |
82 if [ "$command" = "import" ]; then | |
83 declare -r tar=$1 | |
84 shift || usage "No tar file specified." | |
85 import $tar | |
86 elif [ "$command" = "regenerate" ]; then | |
87 declare -r patch=$1 | |
88 shift || usage "No patch file specified." | |
89 [ -d $OPENSSL_DIR ] || usage "$OPENSSL_DIR not found, did you mean to use ge
nerate?" | |
90 [ -d $OPENSSL_DIR_ORIG_ORIG ] || usage "$OPENSSL_DIR_ORIG not found, did you
mean to use generate?" | |
91 regenerate $patch | |
92 elif [ "$command" = "generate" ]; then | |
93 declare -r patch=$1 | |
94 shift || usage "No patch file specified." | |
95 declare -r tar=$1 | |
96 shift || usage "No tar file specified." | |
97 generate $patch $tar | |
98 else | |
99 usage "Unknown command specified $command. Try import, regenerate, or genera
te." | |
100 fi | |
101 } | |
102 | |
103 # Compute the name of an assembly source file generated by one of the | |
104 # gen_asm_xxxx() functions below. The logic is the following: | |
105 # - if "$2" is not empty, output it directly | |
106 # - otherwise, change the file extension of $1 from .pl to .S and output | |
107 # it. | |
108 # Usage: default_asm_file "$1" "$2" | |
109 # or default_asm_file "$@" | |
110 # | |
111 # $1: generator path (perl script) | |
112 # $2: optional output file name. | |
113 function default_asm_file () { | |
114 if [ "$2" ]; then | |
115 echo "$2" | |
116 else | |
117 echo "${1%%.pl}.S" | |
118 fi | |
119 } | |
120 | |
121 function default_asm_mac_ia32_file () { | |
122 if [ "$2" ]; then | |
123 echo "$2" | |
124 else | |
125 echo "${1%%.pl}-mac.S" | |
126 fi | |
127 } | |
128 # Generate an ARM assembly file. | |
129 # $1: generator (perl script) | |
130 # $2: [optional] output file name | |
131 function gen_asm_arm () { | |
132 local OUT | |
133 OUT=$(default_asm_file "$@") | |
134 perl "$1" > "$OUT" | |
135 } | |
136 | |
137 function gen_asm_mips () { | |
138 local OUT | |
139 OUT=$(default_asm_file "$@") | |
140 # The perl scripts expect to run the target compiler as $CC to determine | |
141 # the endianess of the target. Setting CC to true is a hack that forces the sc
ripts | |
142 # to generate little endian output | |
143 CC=true perl "$1" o32 > "$OUT" | |
144 } | |
145 | |
146 function gen_asm_x86 () { | |
147 local OUT | |
148 OUT=$(default_asm_file "$@") | |
149 perl "$1" elf -fPIC > "$OUT" | |
150 } | |
151 | |
152 function gen_asm_x86_64 () { | |
153 local OUT | |
154 OUT=$(default_asm_file "$@") | |
155 perl "$1" elf "$OUT" > "$OUT" | |
156 } | |
157 | |
158 function gen_asm_mac_ia32 () { | |
159 local OUT | |
160 OUT=$(default_asm_mac_ia32_file "$@") | |
161 perl "$1" macosx "$OUT" > "$OUT" | |
162 } | |
163 | |
164 # Filter all items in a list that match a given pattern. | |
165 # $1: space-separated list | |
166 # $2: egrep pattern. | |
167 # Out: items in $1 that match $2 | |
168 function filter_by_egrep() { | |
169 declare -r pattern=$1 | |
170 shift | |
171 echo "$@" | tr ' ' '\n' | grep -e "$pattern" | tr '\n' ' ' | |
172 } | |
173 | |
174 # Sort and remove duplicates in a space-separated list | |
175 # $1: space-separated list | |
176 # Out: new space-separated list | |
177 function uniq_sort () { | |
178 echo "$@" | tr ' ' '\n' | sort -u | tr '\n' ' ' | |
179 } | |
180 | |
181 function print_autogenerated_header() { | |
182 echo "# Auto-generated - DO NOT EDIT!" | |
183 echo "# To regenerate, edit openssl.config, then run:" | |
184 echo "# ./import_openssl.sh import /path/to/openssl-$OPENSSL_VERSION.tar.g
z" | |
185 echo "#" | |
186 } | |
187 | |
188 function generate_build_config_mk() { | |
189 ./Configure $CONFIGURE_ARGS | |
190 rm -f apps/CA.pl.bak crypto/opensslconf.h.bak | |
191 | |
192 declare -r tmpfile=$(mktemp) | |
193 (grep -e -D Makefile | grep -v CONFIGURE_ARGS= | grep -v OPTIONS= | grep -v -e
-DOPENSSL_NO_DEPRECATED) > $tmpfile | |
194 | |
195 declare -r cflags=$(filter_by_egrep "^-D" $(grep -e "^CFLAG=" $tmpfile)) | |
196 declare -r depflags=$(filter_by_egrep "^-D" $(grep -e "^DEPFLAG=" $tmpfile)) | |
197 rm -f $tmpfile | |
198 | |
199 echo "Generating $(basename $1)" | |
200 ( | |
201 print_autogenerated_header | |
202 | |
203 echo "openssl_cflags := \\" | |
204 for cflag in $cflags $depflags; do | |
205 echo " $cflag \\" | |
206 done | |
207 echo "" | |
208 ) > $1 | |
209 } | |
210 | |
211 # Return the value of a computed variable name. | |
212 # E.g.: | |
213 # FOO=foo | |
214 # BAR=bar | |
215 # echo $(var_value FOO_$BAR) -> prints the value of ${FOO_bar} | |
216 # $1: Variable name | |
217 # Out: variable value | |
218 var_value() { | |
219 # Note: don't use 'echo' here, because it's sensitive to values | |
220 # that begin with an underscore (e.g. "-n") | |
221 eval printf \"%s\\n\" \$$1 | |
222 } | |
223 | |
224 # Same as var_value, but returns sorted output without duplicates. | |
225 # $1: Variable name | |
226 # Out: variable value (if space-separated list, sorted with no duplicates) | |
227 var_sorted_value() { | |
228 uniq_sort $(var_value $1) | |
229 } | |
230 | |
231 # Print the definition of a given variable in a GNU Make build file. | |
232 # $1: Variable name (e.g. common_src_files) | |
233 # $2+: Variable value (e.g. list of sources) | |
234 print_vardef_in_mk() { | |
235 declare -r varname=$1 | |
236 shift | |
237 if [ -z "$1" ]; then | |
238 echo "$varname :=" | |
239 else | |
240 echo "$varname := \\" | |
241 for src; do | |
242 echo " $src \\" | |
243 done | |
244 fi | |
245 echo "" | |
246 } | |
247 | |
248 # Same as print_vardef_in_mk, but print a CFLAGS definition from | |
249 # a list of compiler defines. | |
250 # $1: Variable name (e.g. common_c_flags) | |
251 # $2: List of defines (e.g. OPENSSL_NO_CAMELLIA ...) | |
252 print_defines_in_mk() { | |
253 declare -r varname=$1 | |
254 shift | |
255 if [ -z "$1" ]; then | |
256 echo "$varname :=" | |
257 else | |
258 echo "$varname := \\" | |
259 for def; do | |
260 echo " -D$def \\" | |
261 done | |
262 fi | |
263 echo "" | |
264 } | |
265 | |
266 # Generate a configuration file like Crypto-config.mk | |
267 # This uses variable definitions from openssl.config to build a config | |
268 # file that can compute the list of target- and host-specific sources / | |
269 # compiler flags for a given component. | |
270 # | |
271 # $1: Target file name. (e.g. Crypto-config.mk) | |
272 # $2: Variable prefix. (e.g. CRYPTO) | |
273 function generate_config_mk() { | |
274 declare -r output="$1" | |
275 declare -r prefix="$2" | |
276 declare -r all_archs="arm x86 x86_64 mips" | |
277 | |
278 echo "Generating $(basename $output)" | |
279 ( | |
280 print_autogenerated_header | |
281 echo \ | |
282 "# Before including this file, the local Android.mk must define the following | |
283 # variables: | |
284 # | |
285 # local_c_flags | |
286 # local_c_includes | |
287 # local_additional_dependencies | |
288 # | |
289 # This script will define the following variables: | |
290 # | |
291 # target_c_flags | |
292 # target_c_includes | |
293 # target_src_files | |
294 # | |
295 # host_c_flags | |
296 # host_c_includes | |
297 # host_src_files | |
298 # | |
299 | |
300 # Ensure these are empty. | |
301 unknown_arch_c_flags := | |
302 unknown_arch_src_files := | |
303 unknown_arch_exclude_files := | |
304 | |
305 " | |
306 common_defines=$(var_sorted_value OPENSSL_${prefix}_DEFINES) | |
307 print_defines_in_mk common_c_flags $common_defines | |
308 | |
309 common_sources=$(var_sorted_value OPENSSL_${prefix}_SOURCES) | |
310 print_vardef_in_mk common_src_files $common_sources | |
311 | |
312 common_includes=$(var_sorted_value OPENSSL_${prefix}_INCLUDES) | |
313 print_vardef_in_mk common_c_includes $common_includes | |
314 | |
315 for arch in $all_archs; do | |
316 arch_defines=$(var_sorted_value OPENSSL_${prefix}_DEFINES_${arch}) | |
317 print_defines_in_mk ${arch}_c_flags $arch_defines | |
318 | |
319 arch_sources=$(var_sorted_value OPENSSL_${prefix}_SOURCES_${arch}) | |
320 print_vardef_in_mk ${arch}_src_files $arch_sources | |
321 | |
322 arch_exclude_sources=$(var_sorted_value OPENSSL_${prefix}_SOURCES_EXCLUDES
_${arch}) | |
323 print_vardef_in_mk ${arch}_exclude_files $arch_exclude_sources | |
324 | |
325 done | |
326 | |
327 echo "\ | |
328 target_arch := \$(TARGET_ARCH) | |
329 ifeq (\$(target_arch)-\$(TARGET_HAS_BIGENDIAN),mips-true) | |
330 target_arch := unknown_arch | |
331 endif | |
332 | |
333 target_c_flags := \$(common_c_flags) \$(\$(target_arch)_c_flags) \$(local_c_f
lags) | |
334 target_c_includes := \$(addprefix external/openssl/,\$(common_c_includes)) \$(lo
cal_c_includes) | |
335 target_src_files := \$(common_src_files) \$(\$(target_arch)_src_files) | |
336 target_src_files := \$(filter-out \$(\$(target_arch)_exclude_files), \$(target_
src_files)) | |
337 | |
338 ifeq (\$(HOST_OS)-\$(HOST_ARCH),linux-x86) | |
339 host_arch := x86 | |
340 else | |
341 host_arch := unknown_arch | |
342 endif | |
343 | |
344 host_c_flags := \$(common_c_flags) \$(\$(host_arch)_c_flags) \$(local_c_flags
) | |
345 host_c_includes := \$(addprefix external/openssl/,\$(common_c_includes)) \$(loca
l_c_includes) | |
346 host_src_files := \$(common_src_files) \$(\$(host_arch)_src_files) | |
347 host_src_files := \$(filter-out \$(\$(host_arch)_exclude_files), \$(host_src_fi
les)) | |
348 | |
349 local_additional_dependencies += \$(LOCAL_PATH)/$(basename $output) | |
350 " | |
351 | |
352 ) > "$output" | |
353 } | |
354 | |
355 function import() { | |
356 declare -r OPENSSL_SOURCE=$1 | |
357 | |
358 untar $OPENSSL_SOURCE readonly | |
359 applypatches $OPENSSL_DIR | |
360 | |
361 cd $OPENSSL_DIR | |
362 | |
363 generate_build_config_mk ../build-config.mk | |
364 | |
365 cp -f LICENSE ../NOTICE | |
366 touch ../MODULE_LICENSE_BSD_LIKE | |
367 | |
368 # Avoid checking in symlinks | |
369 for i in `find include/openssl -type l`; do | |
370 target=`readlink $i` | |
371 rm -f $i | |
372 if [ -f include/openssl/$target ]; then | |
373 cp include/openssl/$target $i | |
374 fi | |
375 done | |
376 | |
377 # Generate arm asm | |
378 gen_asm_arm crypto/aes/asm/aes-armv4.pl | |
379 gen_asm_arm crypto/bn/asm/armv4-gf2m.pl | |
380 gen_asm_arm crypto/bn/asm/armv4-mont.pl | |
381 gen_asm_arm crypto/modes/asm/ghash-armv4.pl | |
382 gen_asm_arm crypto/sha/asm/sha1-armv4-large.pl | |
383 gen_asm_arm crypto/sha/asm/sha256-armv4.pl | |
384 gen_asm_arm crypto/sha/asm/sha512-armv4.pl | |
385 | |
386 # Generate mips asm | |
387 gen_asm_mips crypto/aes/asm/aes-mips.pl | |
388 gen_asm_mips crypto/bn/asm/mips.pl crypto/bn/asm/bn-mips.S | |
389 gen_asm_mips crypto/bn/asm/mips-mont.pl | |
390 gen_asm_mips crypto/sha/asm/sha1-mips.pl | |
391 gen_asm_mips crypto/sha/asm/sha512-mips.pl crypto/sha/asm/sha256-mips.S | |
392 | |
393 # Generate x86 asm | |
394 gen_asm_x86 crypto/x86cpuid.pl | |
395 gen_asm_x86 crypto/aes/asm/aes-586.pl | |
396 gen_asm_x86 crypto/aes/asm/vpaes-x86.pl | |
397 gen_asm_x86 crypto/aes/asm/aesni-x86.pl | |
398 gen_asm_x86 crypto/bn/asm/bn-586.pl | |
399 gen_asm_x86 crypto/bn/asm/co-586.pl | |
400 gen_asm_x86 crypto/bn/asm/x86-mont.pl | |
401 gen_asm_x86 crypto/bn/asm/x86-gf2m.pl | |
402 gen_asm_x86 crypto/modes/asm/ghash-x86.pl | |
403 gen_asm_x86 crypto/sha/asm/sha1-586.pl | |
404 gen_asm_x86 crypto/sha/asm/sha256-586.pl | |
405 gen_asm_x86 crypto/sha/asm/sha512-586.pl | |
406 gen_asm_x86 crypto/md5/asm/md5-586.pl | |
407 gen_asm_x86 crypto/des/asm/des-586.pl | |
408 gen_asm_x86 crypto/des/asm/crypt586.pl | |
409 gen_asm_x86 crypto/bf/asm/bf-586.pl | |
410 | |
411 # Generate x86_64 asm | |
412 gen_asm_x86_64 crypto/x86_64cpuid.pl | |
413 gen_asm_x86_64 crypto/sha/asm/sha1-x86_64.pl | |
414 gen_asm_x86_64 crypto/sha/asm/sha512-x86_64.pl crypto/sha/asm/sha256-x86_64.S | |
415 gen_asm_x86_64 crypto/sha/asm/sha512-x86_64.pl | |
416 gen_asm_x86_64 crypto/modes/asm/ghash-x86_64.pl | |
417 gen_asm_x86_64 crypto/aes/asm/aesni-x86_64.pl | |
418 gen_asm_x86_64 crypto/aes/asm/vpaes-x86_64.pl | |
419 gen_asm_x86_64 crypto/aes/asm/bsaes-x86_64.pl | |
420 gen_asm_x86_64 crypto/aes/asm/aes-x86_64.pl | |
421 gen_asm_x86_64 crypto/aes/asm/aesni-sha1-x86_64.pl | |
422 gen_asm_x86_64 crypto/md5/asm/md5-x86_64.pl | |
423 gen_asm_x86_64 crypto/bn/asm/modexp512-x86_64.pl | |
424 gen_asm_x86_64 crypto/bn/asm/x86_64-mont.pl | |
425 gen_asm_x86_64 crypto/bn/asm/x86_64-gf2m.pl | |
426 gen_asm_x86_64 crypto/bn/asm/x86_64-mont5.pl | |
427 gen_asm_x86_64 crypto/rc4/asm/rc4-x86_64.pl | |
428 gen_asm_x86_64 crypto/rc4/asm/rc4-md5-x86_64.pl | |
429 | |
430 # Generate mac_ia32 asm | |
431 gen_asm_mac_ia32 crypto/x86cpuid.pl | |
432 gen_asm_mac_ia32 crypto/aes/asm/aes-586.pl | |
433 gen_asm_mac_ia32 crypto/aes/asm/vpaes-x86.pl | |
434 gen_asm_mac_ia32 crypto/aes/asm/aesni-x86.pl | |
435 gen_asm_mac_ia32 crypto/bn/asm/bn-586.pl | |
436 gen_asm_mac_ia32 crypto/bn/asm/co-586.pl | |
437 gen_asm_mac_ia32 crypto/bn/asm/x86-mont.pl | |
438 gen_asm_mac_ia32 crypto/bn/asm/x86-gf2m.pl | |
439 gen_asm_mac_ia32 crypto/modes/asm/ghash-x86.pl | |
440 gen_asm_mac_ia32 crypto/sha/asm/sha1-586.pl | |
441 gen_asm_mac_ia32 crypto/sha/asm/sha256-586.pl | |
442 gen_asm_mac_ia32 crypto/sha/asm/sha512-586.pl | |
443 gen_asm_mac_ia32 crypto/md5/asm/md5-586.pl | |
444 gen_asm_mac_ia32 crypto/des/asm/des-586.pl | |
445 gen_asm_mac_ia32 crypto/des/asm/crypt586.pl | |
446 gen_asm_mac_ia32 crypto/bf/asm/bf-586.pl | |
447 | |
448 # Setup android.testssl directory | |
449 mkdir android.testssl | |
450 cat test/testssl | \ | |
451 sed 's#../util/shlib_wrap.sh ./ssltest#adb shell /system/bin/ssltest#' | \ | |
452 sed 's#../util/shlib_wrap.sh ../apps/openssl#adb shell /system/bin/openssl#'
| \ | |
453 sed 's#adb shell /system/bin/openssl no-dh#[ `adb shell /system/bin/openssl
no-dh` = no-dh ]#' | \ | |
454 sed 's#adb shell /system/bin/openssl no-rsa#[ `adb shell /system/bin/openssl
no-rsa` = no-dh ]#' | \ | |
455 sed 's#../apps/server2.pem#/sdcard/android.testssl/server2.pem#' | \ | |
456 cat > \ | |
457 android.testssl/testssl | |
458 chmod +x android.testssl/testssl | |
459 cat test/Uss.cnf | sed 's#./.rnd#/sdcard/android.testssl/.rnd#' >> android.tes
tssl/Uss.cnf | |
460 cat test/CAss.cnf | sed 's#./.rnd#/sdcard/android.testssl/.rnd#' >> android.te
stssl/CAss.cnf | |
461 cp apps/server2.pem android.testssl/ | |
462 cp ../patches/testssl.sh android.testssl/ | |
463 | |
464 cd .. | |
465 | |
466 generate_config_mk Crypto-config.mk CRYPTO | |
467 generate_config_mk Ssl-config.mk SSL | |
468 generate_config_mk Apps-config.mk APPS | |
469 | |
470 # Prune unnecessary sources | |
471 prune | |
472 | |
473 NEEDED_SOURCES="$NEEDED_SOURCES android.testssl" | |
474 for i in $NEEDED_SOURCES; do | |
475 echo "Updating $i" | |
476 rm -r $i | |
477 mv $OPENSSL_DIR/$i . | |
478 done | |
479 | |
480 cleantar | |
481 } | |
482 | |
483 function regenerate() { | |
484 declare -r patch=$1 | |
485 | |
486 generatepatch $patch | |
487 } | |
488 | |
489 function generate() { | |
490 declare -r patch=$1 | |
491 declare -r OPENSSL_SOURCE=$2 | |
492 | |
493 untar $OPENSSL_SOURCE | |
494 applypatches $OPENSSL_DIR_ORIG $patch | |
495 prune | |
496 | |
497 for i in $NEEDED_SOURCES; do | |
498 echo "Restoring $i" | |
499 rm -r $OPENSSL_DIR/$i | |
500 cp -rf $i $OPENSSL_DIR/$i | |
501 done | |
502 | |
503 generatepatch $patch | |
504 cleantar | |
505 } | |
506 | |
507 # Find all files in a sub-directory that are encoded in ISO-8859 | |
508 # $1: Directory. | |
509 # Out: list of files in $1 that are encoded as ISO-8859. | |
510 function find_iso8859_files() { | |
511 find $1 -type f -print0 | xargs -0 file | fgrep "ISO-8859" | cut -d: -f1 | |
512 } | |
513 | |
514 # Convert all ISO-8859 files in a given subdirectory to UTF-8 | |
515 # $1: Directory name | |
516 function convert_iso8859_to_utf8() { | |
517 declare -r iso_files=$(find_iso8859_files "$1") | |
518 for iso_file in $iso_files; do | |
519 iconv --from-code iso-8859-1 --to-code utf-8 $iso_file > $iso_file.tmp | |
520 rm -f $iso_file | |
521 mv $iso_file.tmp $iso_file | |
522 done | |
523 } | |
524 | |
525 function untar() { | |
526 declare -r OPENSSL_SOURCE=$1 | |
527 declare -r readonly=$2 | |
528 | |
529 # Remove old source | |
530 cleantar | |
531 | |
532 # Process new source | |
533 tar -zxf $OPENSSL_SOURCE | |
534 convert_iso8859_to_utf8 $OPENSSL_DIR | |
535 cp -rfP $OPENSSL_DIR $OPENSSL_DIR_ORIG | |
536 if [ ! -z $readonly ]; then | |
537 find $OPENSSL_DIR_ORIG -type f -print0 | xargs -0 chmod a-w | |
538 fi | |
539 } | |
540 | |
541 function prune() { | |
542 echo "Removing $UNNEEDED_SOURCES" | |
543 (cd $OPENSSL_DIR_ORIG && rm -rf $UNNEEDED_SOURCES) | |
544 (cd $OPENSSL_DIR && rm -r $UNNEEDED_SOURCES) | |
545 } | |
546 | |
547 function cleantar() { | |
548 rm -rf $OPENSSL_DIR_ORIG | |
549 rm -rf $OPENSSL_DIR | |
550 } | |
551 | |
552 function applypatches () { | |
553 declare -r dir=$1 | |
554 declare -r skip_patch=$2 | |
555 | |
556 cd $dir | |
557 | |
558 # Apply appropriate patches | |
559 for i in $OPENSSL_PATCHES; do | |
560 if [ ! "$skip_patch" = "patches/$i" ]; then | |
561 echo "Applying patch $i" | |
562 patch -p1 --merge < ../patches/$i || die "Could not apply patches/$i. Fix
source and run: $0 regenerate patches/$i" | |
563 else | |
564 echo "Skiping patch $i" | |
565 fi | |
566 | |
567 done | |
568 | |
569 # Cleanup patch output | |
570 find . \( -type f -o -type l \) -name "*.orig" -print0 | xargs -0 rm -f | |
571 | |
572 cd .. | |
573 } | |
574 | |
575 function generatepatch() { | |
576 declare -r patch=$1 | |
577 | |
578 # Cleanup stray files before generating patch | |
579 find $BOUNCYCASTLE_DIR -type f -name "*.orig" -print0 | xargs -0 rm -f | |
580 find $BOUNCYCASTLE_DIR -type f -name "*~" -print0 | xargs -0 rm -f | |
581 | |
582 declare -r variable_name=OPENSSL_PATCHES_`basename $patch .patch | sed s/-/_/`
_SOURCES | |
583 # http://tldp.org/LDP/abs/html/ivr.html | |
584 eval declare -r sources=\$$variable_name | |
585 rm -f $patch | |
586 touch $patch | |
587 for i in $sources; do | |
588 LC_ALL=C TZ=UTC0 diff -aup $OPENSSL_DIR_ORIG/$i $OPENSSL_DIR/$i >> $patch &&
die "ERROR: No diff for patch $path in file $i" | |
589 done | |
590 echo "Generated patch $patch" | |
591 echo "NOTE To make sure there are not unwanted changes from conflicting patche
s, be sure to review the generated patch." | |
592 } | |
593 | |
594 main $@ | |
OLD | NEW |