18113f6dc3780916a5f7f2a681b1829e591bd1bcbBrian Carlstrom#!/bin/bash 28113f6dc3780916a5f7f2a681b1829e591bd1bcbBrian Carlstrom# 38113f6dc3780916a5f7f2a681b1829e591bd1bcbBrian Carlstrom# Copyright (C) 2010 The Android Open Source Project 48113f6dc3780916a5f7f2a681b1829e591bd1bcbBrian Carlstrom# 58113f6dc3780916a5f7f2a681b1829e591bd1bcbBrian Carlstrom# Licensed under the Apache License, Version 2.0 (the "License"); 68113f6dc3780916a5f7f2a681b1829e591bd1bcbBrian Carlstrom# you may not use this file except in compliance with the License. 78113f6dc3780916a5f7f2a681b1829e591bd1bcbBrian Carlstrom# You may obtain a copy of the License at 88113f6dc3780916a5f7f2a681b1829e591bd1bcbBrian Carlstrom# 98113f6dc3780916a5f7f2a681b1829e591bd1bcbBrian Carlstrom# http://www.apache.org/licenses/LICENSE-2.0 108113f6dc3780916a5f7f2a681b1829e591bd1bcbBrian Carlstrom# 118113f6dc3780916a5f7f2a681b1829e591bd1bcbBrian Carlstrom# Unless required by applicable law or agreed to in writing, software 128113f6dc3780916a5f7f2a681b1829e591bd1bcbBrian Carlstrom# distributed under the License is distributed on an "AS IS" BASIS, 138113f6dc3780916a5f7f2a681b1829e591bd1bcbBrian Carlstrom# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 148113f6dc3780916a5f7f2a681b1829e591bd1bcbBrian Carlstrom# See the License for the specific language governing permissions and 158113f6dc3780916a5f7f2a681b1829e591bd1bcbBrian Carlstrom# limitations under the License. 168113f6dc3780916a5f7f2a681b1829e591bd1bcbBrian Carlstrom# 178113f6dc3780916a5f7f2a681b1829e591bd1bcbBrian Carlstrom 188113f6dc3780916a5f7f2a681b1829e591bd1bcbBrian Carlstrom# 19e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom# This script imports new versions of Bouncy Castle 20e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom# (http://bouncycastle.org) into the Android source tree. To run, (1) 21e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom# fetch the appropriate tarballs (bcprov and bcpkix) from the Bouncy 22e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom# Castle repository, (2) check the checksum, and then (3) run: 23e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom# ./import_bouncycastle.sh import bcprov-jdk*-*.tar.gz 248113f6dc3780916a5f7f2a681b1829e591bd1bcbBrian Carlstrom# 258113f6dc3780916a5f7f2a681b1829e591bd1bcbBrian Carlstrom# IMPORTANT: See README.android for additional details. 268113f6dc3780916a5f7f2a681b1829e591bd1bcbBrian Carlstrom 278113f6dc3780916a5f7f2a681b1829e591bd1bcbBrian Carlstrom# turn on exit on error as well as a warning when it happens 288113f6dc3780916a5f7f2a681b1829e591bd1bcbBrian Carlstromset -e 298113f6dc3780916a5f7f2a681b1829e591bd1bcbBrian Carlstromtrap "echo WARNING: Exiting on non-zero subprocess exit code" ERR; 308113f6dc3780916a5f7f2a681b1829e591bd1bcbBrian Carlstrom 318113f6dc3780916a5f7f2a681b1829e591bd1bcbBrian Carlstromfunction die() { 328113f6dc3780916a5f7f2a681b1829e591bd1bcbBrian Carlstrom declare -r message=$1 338113f6dc3780916a5f7f2a681b1829e591bd1bcbBrian Carlstrom 348113f6dc3780916a5f7f2a681b1829e591bd1bcbBrian Carlstrom echo $message 358113f6dc3780916a5f7f2a681b1829e591bd1bcbBrian Carlstrom exit 1 368113f6dc3780916a5f7f2a681b1829e591bd1bcbBrian Carlstrom} 378113f6dc3780916a5f7f2a681b1829e591bd1bcbBrian Carlstrom 388113f6dc3780916a5f7f2a681b1829e591bd1bcbBrian Carlstromfunction usage() { 398113f6dc3780916a5f7f2a681b1829e591bd1bcbBrian Carlstrom declare -r message=$1 408113f6dc3780916a5f7f2a681b1829e591bd1bcbBrian Carlstrom 418113f6dc3780916a5f7f2a681b1829e591bd1bcbBrian Carlstrom if [ ! "$message" = "" ]; then 428113f6dc3780916a5f7f2a681b1829e591bd1bcbBrian Carlstrom echo $message 438113f6dc3780916a5f7f2a681b1829e591bd1bcbBrian Carlstrom fi 448113f6dc3780916a5f7f2a681b1829e591bd1bcbBrian Carlstrom echo "Usage:" 458113f6dc3780916a5f7f2a681b1829e591bd1bcbBrian Carlstrom echo " ./import_bouncycastle.sh import </path/to/bcprov-jdk*-*.tar.gz>" 468113f6dc3780916a5f7f2a681b1829e591bd1bcbBrian Carlstrom echo " ./import_bouncycastle.sh regenerate <patch/*.patch>" 478113f6dc3780916a5f7f2a681b1829e591bd1bcbBrian Carlstrom echo " ./import_bouncycastle.sh generate <patch/*.patch> </path/to/bcprov-jdk*-*.tar.gz>" 488113f6dc3780916a5f7f2a681b1829e591bd1bcbBrian Carlstrom exit 1 498113f6dc3780916a5f7f2a681b1829e591bd1bcbBrian Carlstrom} 508113f6dc3780916a5f7f2a681b1829e591bd1bcbBrian Carlstrom 518113f6dc3780916a5f7f2a681b1829e591bd1bcbBrian Carlstromfunction main() { 528113f6dc3780916a5f7f2a681b1829e591bd1bcbBrian Carlstrom if [ ! -d patches ]; then 538113f6dc3780916a5f7f2a681b1829e591bd1bcbBrian Carlstrom die "Bouncy Castle patch directory patches/ not found" 548113f6dc3780916a5f7f2a681b1829e591bd1bcbBrian Carlstrom fi 558113f6dc3780916a5f7f2a681b1829e591bd1bcbBrian Carlstrom 568113f6dc3780916a5f7f2a681b1829e591bd1bcbBrian Carlstrom if [ ! -f bouncycastle.version ]; then 578113f6dc3780916a5f7f2a681b1829e591bd1bcbBrian Carlstrom die "bouncycastle.version not found" 588113f6dc3780916a5f7f2a681b1829e591bd1bcbBrian Carlstrom fi 598113f6dc3780916a5f7f2a681b1829e591bd1bcbBrian Carlstrom 608113f6dc3780916a5f7f2a681b1829e591bd1bcbBrian Carlstrom source bouncycastle.version 618113f6dc3780916a5f7f2a681b1829e591bd1bcbBrian Carlstrom if [ "$BOUNCYCASTLE_JDK" == "" -o "$BOUNCYCASTLE_VERSION" == "" ]; then 628113f6dc3780916a5f7f2a681b1829e591bd1bcbBrian Carlstrom die "Invalid bouncycastle.version; see README.android for more information" 638113f6dc3780916a5f7f2a681b1829e591bd1bcbBrian Carlstrom fi 648113f6dc3780916a5f7f2a681b1829e591bd1bcbBrian Carlstrom 65e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom BOUNCYCASTLE_BCPROV_DIR=bcprov-jdk$BOUNCYCASTLE_JDK-$BOUNCYCASTLE_VERSION 66e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom BOUNCYCASTLE_BCPROV_DIR_ORIG=$BOUNCYCASTLE_BCPROV_DIR.orig 67e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom 68e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom BOUNCYCASTLE_BCPKIX_DIR=bcpkix-jdk$BOUNCYCASTLE_JDK-$BOUNCYCASTLE_VERSION 69e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom BOUNCYCASTLE_BCPKIX_DIR_ORIG=$BOUNCYCASTLE_BCPKIX_DIR.orig 708113f6dc3780916a5f7f2a681b1829e591bd1bcbBrian Carlstrom 718113f6dc3780916a5f7f2a681b1829e591bd1bcbBrian Carlstrom if [ ! -f bouncycastle.config ]; then 728113f6dc3780916a5f7f2a681b1829e591bd1bcbBrian Carlstrom die "bouncycastle.config not found" 738113f6dc3780916a5f7f2a681b1829e591bd1bcbBrian Carlstrom fi 748113f6dc3780916a5f7f2a681b1829e591bd1bcbBrian Carlstrom 758113f6dc3780916a5f7f2a681b1829e591bd1bcbBrian Carlstrom source bouncycastle.config 76e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom if [ "$UNNEEDED_BCPROV_SOURCES" == "" -o "$NEEDED_BCPROV_SOURCES" == "" \ 77e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom -o "$UNNEEDED_BCPKIX_SOURCES" == "" -o "$NEEDED_BCPKIX_SOURCES" == "" ]; then 788113f6dc3780916a5f7f2a681b1829e591bd1bcbBrian Carlstrom die "Invalid bouncycastle.config; see README.android for more information" 798113f6dc3780916a5f7f2a681b1829e591bd1bcbBrian Carlstrom fi 808113f6dc3780916a5f7f2a681b1829e591bd1bcbBrian Carlstrom 818113f6dc3780916a5f7f2a681b1829e591bd1bcbBrian Carlstrom declare -r command=$1 828113f6dc3780916a5f7f2a681b1829e591bd1bcbBrian Carlstrom shift || usage "No command specified. Try import, regenerate, or generate." 838113f6dc3780916a5f7f2a681b1829e591bd1bcbBrian Carlstrom if [ "$command" = "import" ]; then 84e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom declare -r bcprov_tar=$1 858113f6dc3780916a5f7f2a681b1829e591bd1bcbBrian Carlstrom shift || usage "No tar file specified." 86e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom declare -r bcpkix_tar=`echo $bcprov_tar | sed s/bcprov/bcpkix/` 87e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom import $bcprov_tar $BOUNCYCASTLE_BCPROV_DIR $BOUNCYCASTLE_BCPROV_DIR_ORIG bcprov "$BOUNCYCASTLE_BCPROV_PATCHES" "$NEEDED_BCPROV_SOURCES" "$UNNEEDED_BCPROV_SOURCES" 88e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom import $bcpkix_tar $BOUNCYCASTLE_BCPKIX_DIR $BOUNCYCASTLE_BCPKIX_DIR_ORIG bcpkix "$BOUNCYCASTLE_BCPKIX_PATCHES" "$NEEDED_BCPKIX_SOURCES" "$UNNEEDED_BCPKIX_SOURCES" 898113f6dc3780916a5f7f2a681b1829e591bd1bcbBrian Carlstrom elif [ "$command" = "regenerate" ]; then 908113f6dc3780916a5f7f2a681b1829e591bd1bcbBrian Carlstrom declare -r patch=$1 918113f6dc3780916a5f7f2a681b1829e591bd1bcbBrian Carlstrom shift || usage "No patch file specified." 92e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom if [[ $BOUNCYCASTLE_BCPROV_PATCHES == *$patch* ]]; then 93e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom [ -d $BOUNCYCASTLE_BCPROV_DIR ] || usage "$BOUNCYCASTLE_BCPROV_DIR not found, did you mean to use generate?" 94e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom [ -d $BOUNCYCASTLE_BCPROV_DIR_ORIG ] || usage "$BOUNCYCASTLE_BCPROV_DIR_ORIG not found, did you mean to use generate?" 95e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom regenerate $patch $BOUNCYCASTLE_BCPROV_DIR $BOUNCYCASTLE_BCPROV_DIR_ORIG 96e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom elif [[ $BOUNCYCASTLE_BCPKIX_PATCHES == *$patch* ]]; then 97e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom [ -d $BOUNCYCASTLE_BCPKIX_DIR ] || usage "$BOUNCYCASTLE_BCPROV_DIR not found, did you mean to use generate?" 98e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom [ -d $BOUNCYCASTLE_BCPKIX_DIR_ORIG ] || usage "$BOUNCYCASTLE_BCPKIX_DIR_ORIG not found, did you mean to use generate?" 99e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom regenerate $patch $BOUNCYCASTLE_BCPKIX_DIR $BOUNCYCASTLE_BCPKIX_DIR_ORIG 100e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom else 101e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom usage "Unknown patch file $patch specified" 102e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom fi 1038113f6dc3780916a5f7f2a681b1829e591bd1bcbBrian Carlstrom elif [ "$command" = "generate" ]; then 1048113f6dc3780916a5f7f2a681b1829e591bd1bcbBrian Carlstrom declare -r patch=$1 1058113f6dc3780916a5f7f2a681b1829e591bd1bcbBrian Carlstrom shift || usage "No patch file specified." 106e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom declare -r bcprov_tar=$1 1078113f6dc3780916a5f7f2a681b1829e591bd1bcbBrian Carlstrom shift || usage "No tar file specified." 108e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom declare -r bcpkix_tar=`echo $bcprov_tar | sed s/bcprov/bcpkix/` 109e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom if [[ $BOUNCYCASTLE_BCPROV_PATCHES == *$patch* ]]; then 110e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom generate $patch $bcprov_tar $BOUNCYCASTLE_BCPROV_DIR $BOUNCYCASTLE_BCPROV_DIR_ORIG bcprov "$BOUNCYCASTLE_BCPROV_PATCHES" "$NEEDED_BCPROV_SOURCES" "$UNNEEDED_BCPROV_SOURCES" 111e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom elif [[ $BOUNCYCASTLE_BCPKIX_PATCHES == *$patch* ]]; then 112e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom generate $patch $bcpkix_tar $BOUNCYCASTLE_BCPKIX_DIR $BOUNCYCASTLE_BCPKIX_DIR_ORIG bcpkix "$BOUNCYCASTLE_BCPKIX_PATCHES" "$NEEDED_BCPKIX_SOURCES" "$UNNEEDED_BCPKIX_SOURCES" 113e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom else 114e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom usage "Unknown patch file $patch specified" 115e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom fi 1168113f6dc3780916a5f7f2a681b1829e591bd1bcbBrian Carlstrom else 1178113f6dc3780916a5f7f2a681b1829e591bd1bcbBrian Carlstrom usage "Unknown command specified $command. Try import, regenerate, or generate." 1188113f6dc3780916a5f7f2a681b1829e591bd1bcbBrian Carlstrom fi 1198113f6dc3780916a5f7f2a681b1829e591bd1bcbBrian Carlstrom} 1208113f6dc3780916a5f7f2a681b1829e591bd1bcbBrian Carlstrom 1218113f6dc3780916a5f7f2a681b1829e591bd1bcbBrian Carlstromfunction import() { 122e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom declare -r bouncycastle_source=$1 123e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom declare -r bouncycastle_dir=$2 124e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom declare -r bouncycastle_dir_orig=$3 125e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom declare -r bouncycastle_out_dir=$4 126e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom declare -r bouncycastle_patches=$5 127e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom declare -r needed_sources=$6 128e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom declare -r unneeded_sources=$7 1298113f6dc3780916a5f7f2a681b1829e591bd1bcbBrian Carlstrom 130e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom untar $bouncycastle_source $bouncycastle_dir $bouncycastle_dir_orig "$unneeded_sources" 131e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom applypatches $bouncycastle_dir "$bouncycastle_patches" "$unneeded_sources" 1328113f6dc3780916a5f7f2a681b1829e591bd1bcbBrian Carlstrom 133e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom cd $bouncycastle_dir 1348113f6dc3780916a5f7f2a681b1829e591bd1bcbBrian Carlstrom 135f9310af47159b2796c6bb75b5766bc263036b088Wei Zhong sed 's/<p>/& <BR>/g' LICENSE.html | html2text -width 102 -nobs -ascii > ../NOTICE 1368113f6dc3780916a5f7f2a681b1829e591bd1bcbBrian Carlstrom touch ../MODULE_LICENSE_BSD_LIKE 1378113f6dc3780916a5f7f2a681b1829e591bd1bcbBrian Carlstrom 1388113f6dc3780916a5f7f2a681b1829e591bd1bcbBrian Carlstrom cd .. 1398113f6dc3780916a5f7f2a681b1829e591bd1bcbBrian Carlstrom 140e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom rm -r $bouncycastle_out_dir/src 141e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom mkdir -p $bouncycastle_out_dir/src/main/java/ 142e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom for i in $needed_sources; do 1438113f6dc3780916a5f7f2a681b1829e591bd1bcbBrian Carlstrom echo "Updating $i" 144e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom mv $bouncycastle_dir/$i $bouncycastle_out_dir/src/main/java/ 1458113f6dc3780916a5f7f2a681b1829e591bd1bcbBrian Carlstrom done 1468113f6dc3780916a5f7f2a681b1829e591bd1bcbBrian Carlstrom 147e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom cleantar $bouncycastle_dir $bouncycastle_dir_orig 1488113f6dc3780916a5f7f2a681b1829e591bd1bcbBrian Carlstrom} 1498113f6dc3780916a5f7f2a681b1829e591bd1bcbBrian Carlstrom 1508113f6dc3780916a5f7f2a681b1829e591bd1bcbBrian Carlstromfunction regenerate() { 1518113f6dc3780916a5f7f2a681b1829e591bd1bcbBrian Carlstrom declare -r patch=$1 152e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom declare -r bouncycastle_dir=$2 153e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom declare -r bouncycastle_dir_orig=$3 1548113f6dc3780916a5f7f2a681b1829e591bd1bcbBrian Carlstrom 155e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom generatepatch $patch $bouncycastle_dir $bouncycastle_dir_orig 1568113f6dc3780916a5f7f2a681b1829e591bd1bcbBrian Carlstrom} 1578113f6dc3780916a5f7f2a681b1829e591bd1bcbBrian Carlstrom 158d118b0f3e3c105283a189c6ee32be39de0ae414aKenny Rootfunction update_timestamps() { 159d118b0f3e3c105283a189c6ee32be39de0ae414aKenny Root declare -r git_dir="$1" 160d118b0f3e3c105283a189c6ee32be39de0ae414aKenny Root declare -r target_dir="$2" 161d118b0f3e3c105283a189c6ee32be39de0ae414aKenny Root 162d118b0f3e3c105283a189c6ee32be39de0ae414aKenny Root echo -n "Restoring timestamps for ${target_dir}... " 163d118b0f3e3c105283a189c6ee32be39de0ae414aKenny Root 164d118b0f3e3c105283a189c6ee32be39de0ae414aKenny Root find "$git_dir" -type f -print0 | while IFS= read -r -d $'\0' file; do 165d118b0f3e3c105283a189c6ee32be39de0ae414aKenny Root file_rev="$(git rev-list -n 1 HEAD "$file")" 1669de1ab87afa71c0d39d17fdf260028552202bd3bBrian Carlstrom if [ "$file_rev" == "" ]; then 1679de1ab87afa71c0d39d17fdf260028552202bd3bBrian Carlstrom echo 1689de1ab87afa71c0d39d17fdf260028552202bd3bBrian Carlstrom echo -n "WARNING: No file revision for file $file..." 1699de1ab87afa71c0d39d17fdf260028552202bd3bBrian Carlstrom continue 1709de1ab87afa71c0d39d17fdf260028552202bd3bBrian Carlstrom fi 171d118b0f3e3c105283a189c6ee32be39de0ae414aKenny Root file_time="$(git show --pretty=format:%ai --abbrev-commit "$file_rev" | head -n 1)" 172d118b0f3e3c105283a189c6ee32be39de0ae414aKenny Root touch -d "$file_time" "${target_dir}${file#$git_dir}" 173d118b0f3e3c105283a189c6ee32be39de0ae414aKenny Root done 174d118b0f3e3c105283a189c6ee32be39de0ae414aKenny Root 175d118b0f3e3c105283a189c6ee32be39de0ae414aKenny Root echo "done." 176d118b0f3e3c105283a189c6ee32be39de0ae414aKenny Root} 177d118b0f3e3c105283a189c6ee32be39de0ae414aKenny Root 1788113f6dc3780916a5f7f2a681b1829e591bd1bcbBrian Carlstromfunction generate() { 1798113f6dc3780916a5f7f2a681b1829e591bd1bcbBrian Carlstrom declare -r patch=$1 180e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom declare -r bouncycastle_source=$2 181e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom declare -r bouncycastle_dir=$3 182e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom declare -r bouncycastle_dir_orig=$4 183e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom declare -r bouncycastle_out_dir=$5 184e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom declare -r bouncycastle_patches=$6 185e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom declare -r needed_sources=$7 186e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom declare -r unneeded_sources=$8 187e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom 188e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom untar $bouncycastle_source $bouncycastle_dir $bouncycastle_dir_orig "$unneeded_sources" 189e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom applypatches $bouncycastle_dir "$bouncycastle_patches" "$unneeded_sources" 190e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom 191e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom for i in $needed_sources; do 1928113f6dc3780916a5f7f2a681b1829e591bd1bcbBrian Carlstrom echo "Restoring $i" 193e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom rm -r $bouncycastle_dir/$i 194e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom cp -rf $bouncycastle_out_dir/src/main/java/$i $bouncycastle_dir/$i 195d118b0f3e3c105283a189c6ee32be39de0ae414aKenny Root update_timestamps $bouncycastle_out_dir/src/main/java/$i $bouncycastle_dir/$i 1968113f6dc3780916a5f7f2a681b1829e591bd1bcbBrian Carlstrom done 1978113f6dc3780916a5f7f2a681b1829e591bd1bcbBrian Carlstrom 198e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom generatepatch $patch $bouncycastle_dir $bouncycastle_dir_orig 199e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom cleantar $bouncycastle_dir $bouncycastle_dir_orig 2008113f6dc3780916a5f7f2a681b1829e591bd1bcbBrian Carlstrom} 2018113f6dc3780916a5f7f2a681b1829e591bd1bcbBrian Carlstrom 2028113f6dc3780916a5f7f2a681b1829e591bd1bcbBrian Carlstromfunction untar() { 203e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom declare -r bouncycastle_source=$1 204e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom declare -r bouncycastle_dir=$2 205e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom declare -r bouncycastle_dir_orig=$3 206e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom declare -r unneeded_sources=$4 2078113f6dc3780916a5f7f2a681b1829e591bd1bcbBrian Carlstrom 2088113f6dc3780916a5f7f2a681b1829e591bd1bcbBrian Carlstrom # Remove old source 209e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom cleantar $bouncycastle_dir $bouncycastle_dir_orig 2108113f6dc3780916a5f7f2a681b1829e591bd1bcbBrian Carlstrom 2118113f6dc3780916a5f7f2a681b1829e591bd1bcbBrian Carlstrom # Process new source 212e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom tar -zxf $bouncycastle_source 213e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom mv $bouncycastle_dir $bouncycastle_dir_orig 214e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom find $bouncycastle_dir_orig -type f -print0 | xargs -0 chmod a-w 215e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom (cd $bouncycastle_dir_orig && unzip -q src.zip) 216e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom tar -zxf $bouncycastle_source 217e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom (cd $bouncycastle_dir && unzip -q src.zip) 2188113f6dc3780916a5f7f2a681b1829e591bd1bcbBrian Carlstrom 2198113f6dc3780916a5f7f2a681b1829e591bd1bcbBrian Carlstrom # Prune unnecessary sources 220e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom echo "Removing $unneeded_sources" 221e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom (cd $bouncycastle_dir_orig && rm -rf $unneeded_sources) 222e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom (cd $bouncycastle_dir && rm -r $unneeded_sources) 2238113f6dc3780916a5f7f2a681b1829e591bd1bcbBrian Carlstrom} 2248113f6dc3780916a5f7f2a681b1829e591bd1bcbBrian Carlstrom 2258113f6dc3780916a5f7f2a681b1829e591bd1bcbBrian Carlstromfunction cleantar() { 226e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom declare -r bouncycastle_dir=$1 227e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom declare -r bouncycastle_dir_orig=$2 228e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom 229e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom rm -rf $bouncycastle_dir_orig 230e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom rm -rf $bouncycastle_dir 2318113f6dc3780916a5f7f2a681b1829e591bd1bcbBrian Carlstrom} 2328113f6dc3780916a5f7f2a681b1829e591bd1bcbBrian Carlstrom 2338113f6dc3780916a5f7f2a681b1829e591bd1bcbBrian Carlstromfunction applypatches () { 234e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom declare -r bouncycastle_dir=$1 235e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom declare -r bouncycastle_patches=$2 236e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom declare -r unneeded_sources=$3 237e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom 238e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom cd $bouncycastle_dir 2398113f6dc3780916a5f7f2a681b1829e591bd1bcbBrian Carlstrom 2408113f6dc3780916a5f7f2a681b1829e591bd1bcbBrian Carlstrom # Apply appropriate patches 241e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom for i in $bouncycastle_patches; do 2428113f6dc3780916a5f7f2a681b1829e591bd1bcbBrian Carlstrom echo "Applying patch $i" 243e1142c149e244797ce73b0e7fad40816e447a817Brian Carlstrom patch -p1 --merge < ../$i || die "Could not apply patches/$i. Fix source and run: $0 regenerate $i" 2448113f6dc3780916a5f7f2a681b1829e591bd1bcbBrian Carlstrom 245e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom # make sure no unneeded sources got into the patch 2468113f6dc3780916a5f7f2a681b1829e591bd1bcbBrian Carlstrom problem=0 247e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom for s in $unneeded_sources; do 2488113f6dc3780916a5f7f2a681b1829e591bd1bcbBrian Carlstrom if [ -e $s ]; then 2498113f6dc3780916a5f7f2a681b1829e591bd1bcbBrian Carlstrom echo Unneeded source $s restored by patch $i 2508113f6dc3780916a5f7f2a681b1829e591bd1bcbBrian Carlstrom problem=1 2518113f6dc3780916a5f7f2a681b1829e591bd1bcbBrian Carlstrom fi 2528113f6dc3780916a5f7f2a681b1829e591bd1bcbBrian Carlstrom done 2538113f6dc3780916a5f7f2a681b1829e591bd1bcbBrian Carlstrom if [ $problem = 1 ]; then 2548113f6dc3780916a5f7f2a681b1829e591bd1bcbBrian Carlstrom exit 1 2558113f6dc3780916a5f7f2a681b1829e591bd1bcbBrian Carlstrom fi 2568113f6dc3780916a5f7f2a681b1829e591bd1bcbBrian Carlstrom done 2578113f6dc3780916a5f7f2a681b1829e591bd1bcbBrian Carlstrom 2588113f6dc3780916a5f7f2a681b1829e591bd1bcbBrian Carlstrom # Cleanup patch output 2598113f6dc3780916a5f7f2a681b1829e591bd1bcbBrian Carlstrom find . -type f -name "*.orig" -print0 | xargs -0 rm -f 2608113f6dc3780916a5f7f2a681b1829e591bd1bcbBrian Carlstrom 2618113f6dc3780916a5f7f2a681b1829e591bd1bcbBrian Carlstrom cd .. 2628113f6dc3780916a5f7f2a681b1829e591bd1bcbBrian Carlstrom} 2638113f6dc3780916a5f7f2a681b1829e591bd1bcbBrian Carlstrom 2648113f6dc3780916a5f7f2a681b1829e591bd1bcbBrian Carlstromfunction generatepatch() { 2658113f6dc3780916a5f7f2a681b1829e591bd1bcbBrian Carlstrom declare -r patch=$1 266e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom declare -r bouncycastle_dir=$2 267e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom declare -r bouncycastle_dir_orig=$3 2688113f6dc3780916a5f7f2a681b1829e591bd1bcbBrian Carlstrom 2698113f6dc3780916a5f7f2a681b1829e591bd1bcbBrian Carlstrom # Cleanup stray files before generating patch 270e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom find $bouncycastle_dir -type f -name "*.orig" -print0 | xargs -0 rm -f 271e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom find $bouncycastle_dir -type f -name "*~" -print0 | xargs -0 rm -f 2728113f6dc3780916a5f7f2a681b1829e591bd1bcbBrian Carlstrom 2738113f6dc3780916a5f7f2a681b1829e591bd1bcbBrian Carlstrom rm -f $patch 274e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom LC_ALL=C TZ=UTC0 diff -Naur $bouncycastle_dir_orig $bouncycastle_dir >> $patch && die "ERROR: No diff for patch $path in file $i" 2758113f6dc3780916a5f7f2a681b1829e591bd1bcbBrian Carlstrom echo "Generated patch $patch" 2768113f6dc3780916a5f7f2a681b1829e591bd1bcbBrian Carlstrom} 2778113f6dc3780916a5f7f2a681b1829e591bd1bcbBrian Carlstrom 2788113f6dc3780916a5f7f2a681b1829e591bd1bcbBrian Carlstrommain $@ 279