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