Index: import_from_android.sh |
diff --git a/import_from_android.sh b/import_from_android.sh |
deleted file mode 100755 |
index 60420d841d40badc5212c0a371d0ff9a0530ebc3..0000000000000000000000000000000000000000 |
--- a/import_from_android.sh |
+++ /dev/null |
@@ -1,483 +0,0 @@ |
-#!/bin/sh |
-# |
-# Copyright (c) 2013 The Chromium Authors. All rights reserved. |
-# Use of this source code is governed by a BSD-style license that can be |
-# found in the LICENSE file. |
- |
-# Sanitize environment. |
-set -e |
-export LANG=C |
-export LC_ALL=C |
- |
-PROGDIR=$(dirname "$0") |
-PROGNAME=$(basename "$0") |
- |
-# Defaults |
-VERBOSE=1 |
- |
-. "$PROGDIR/openssl-chromium.config" |
- |
-# Print error message and exit script. |
-# $1+: Error message. |
-panic () { |
- echo "ERROR: $@" |
- exit 1 |
-} |
- |
-# $1: Variable name |
-# Output: variable value. |
-var_value () { |
- # NOTE: Don't use 'echo' here, it is sensitive to options like -n. |
- eval printf \"%s\\n\" \$$1 |
-} |
- |
-# Print a message if verbosity is sufficiently high. |
-# $1: Verbosity threshold, only if '$VERBOSE > $1' does this print. |
-# $2+: Message. |
-dump_n () { |
- local LEVEL=$1 |
- shift |
- if [ "$VERBOSE" -gt "$LEVEL" ]; then |
- printf "%s\n" "$@" |
- fi |
-} |
- |
-# Print a message, unless --quiet was used. |
-dump () { |
- dump_n 0 "$@" |
-} |
- |
-# Print a message if --verbose was used. |
-log () { |
- dump_n 1 "$@" |
-} |
- |
-# Print a message if --verbose --verbose was used. |
-log2 () { |
- dump_n 2 "$@" |
-} |
- |
-# Run a command silently, unless --verbose is used. |
-# More specifically: |
-# - By default, this runs the command but redirects its stdout/stderr |
-# to /dev/null to avoid printing anything. |
-# - If --verbose is used, this prints the command's name, and stderr |
-# will not be redirected. |
-# - If '--verbose --verbose' is used, this prints the commands and its |
-# complete output. |
-# $1+: Command |
-# Return: Command status |
-run () { |
- if [ "$VERBOSE" -gt 1 ]; then |
- echo "COMMAND: $@" |
- fi |
- case $VERBOSE in |
- 0) |
- "$@" > /dev/null 2>&1 |
- ;; |
- 1) |
- "$@" > /dev/null |
- ;; |
- *) |
- "$@" |
- ;; |
- esac |
-} |
- |
-# Support cleaning up stuff when the script exits, even in case of |
-# error. |
-_ALL_CLEANUPS= |
- |
-clean_atexit () { |
- local CLEANUPS CLEANUP |
- CLEANUPS=$_ALL_CLEANUPS |
- _ALL_CLEANUPS= |
- for CLEANUP in $CLEANUPS; do |
- ($CLEANUP) |
- done |
- exit $1 |
-} |
- |
-trap "clean_atexit 0" EXIT |
-trap "clean_atexit \$?" HUP INT QUIT TERM |
- |
-# Add a cleanup function to the list of cleanups that will be run when |
-# the script exits. |
-atexit () { |
- # Prepend to ensure that the cleanup steps are performed in reverse |
- # order or registration. |
- _ALL_CLEANUPS="$* $_ALL_CLEANUPS" |
-} |
- |
-# Support code to write into a gyp file |
-_GYP_MARGIN="" |
- |
-# Increment margin of gyp printer. |
-incr_gyp_margin () { |
- _GYP_MARGIN="$_GYP_MARGIN " |
-} |
- |
-decr_gyp_margin () { |
- _GYP_MARGIN=$(echo "$_GYP_MARGIN" | cut --bytes=3-) |
-} |
- |
-print_gyp () { |
- printf "%s%s\n" "$_GYP_MARGIN" "$@" |
-} |
- |
-# This prints a list variable definition in a gyp file. |
-# $1: Variable name (e.g. 'openssl_common_defines') |
-# $2+: List items (e.g. defines) |
-print_gyp_variable () { |
- local VARNAME=$1 |
- local VALUE |
- shift |
- print_gyp "'$VARNAME': [" |
- for VALUE; do |
- print_gyp " '$VALUE'," |
- done |
- print_gyp "]," |
-} |
- |
-# Same as print_gyp_variable, but for source file lists, this |
-# prepends openssl/ as required by the Chromium build to each item |
-# in the list. |
-# $1: Variable name (e.g. 'openssl_common_sources') |
-# $2+: List items (source file names). |
-print_gyp_source_variable () { |
- local VARNAME=$1 |
- local VALUE |
- shift |
- print_gyp "'$VARNAME': [" |
- for VALUE; do |
- print_gyp " 'openssl/$VALUE'," |
- done |
- print_gyp "]," |
-} |
- |
-# Print usage instructions. |
-usage () { |
- echo \ |
-"Usage: $PROGNAME [options] |
- |
-This script is used to regenerate the content of the Chromium |
-third_party/openssl/ directory according to the configuration file |
-named 'openssl-chromium.config'. |
- |
-In particular, it will perform the following steps: |
- |
- 1) Download the Android sources from the AOSP git servers. |
- |
- 2) Add Chromium-specific patches to the Android source tree. |
- (they must be under patches.chromium/ in $PROGDIR). |
- |
- 3) Download a versioned openssl package from the official OpenSSL |
- servers, and check its MD5. The version is taken from the |
- 'openssl.version' file in the Android source tree. |
- |
- 4) Run the Android 'import_openssl.sh' script that rebuilds all sources |
- from a clean slate. |
- |
- 5) Generate the 'openssl.gypi' that contains gyp-specific declarations |
- for the library. |
- |
- 6) Generate 64-bit compatible opensslconf.h header. |
- |
-Valid options are the following (defaults are in brackets): |
- |
- --help|-h|-? Display this message. |
- --aosp-git=<url> Change git source for Android repository. |
- [$ANDROID_OPENSSL_GIT_SOURCE] |
- --aosp-commit=<name> Specify git commit or branch name [$ANDROID_OPENSSL_GIT_COMMIT] |
- --temp-dir=<path> Specify temporary directory, will not be cleaned. |
- [<random-temp-file-cleaned-on-exit>] |
- --verbose Increase verbosity. |
- --quiet Decrease verbosity. |
-" |
- exit 1 |
-} |
- |
-# Parse command-line. |
-DO_HELP= |
- |
-for OPT; do |
- OPTARG=$() |
- case $OPT in |
- --help|-h|-?) |
- DO_HELP=true |
- ;; |
- --aosp-commit=*) |
- ANDROID_OPENSSL_GIT_COMMIT=${OPT#--aosp-commit=} |
- if [ -z "$ANDROID_OPENSSL_GIT_COMMIT" ]; then |
- panic "Missing option value: $OPT" |
- fi |
- ;; |
- --aosp-git=*) |
- ANDROID_OPENSSL_GIT_SOURCE=${OPT#--aosp-git=} |
- if [ -z "$ANDROID_OPENSSL_GIT_SOURCE" ]; then |
- panic "Missing option value: $OPT" |
- fi |
- ;; |
- --temp-dir=*) |
- TEMP_DIR=${OPT#--temp-dir=} |
- if [ -z "$TEMP_DIR" ]; then |
- panic "Missing option value: $OPT" |
- fi |
- ;; |
- --quiet) |
- VERBOSE=$(( $VERBOSE - 1 )) |
- ;; |
- --verbose) |
- VERBOSE=$(( $VERBOSE + 1 )) |
- ;; |
- -*) |
- panic "Invalid option '$OPT', see --help for details." |
- ;; |
- *) |
- panic "This script doesn't take parameters. See --help for details." |
- ;; |
- esac |
-done |
- |
-if [ "$DO_HELP" ]; then |
- usage |
-fi |
- |
-# Create temporary directory. Ensure it's always cleaned up on exit. |
-if [ -z "$TEMP_DIR" ]; then |
- TEMP_DIR=$(mktemp -d) |
- clean_tempdir () { |
- rm -rf "$TEMP_DIR" |
- } |
- atexit clean_tempdir |
- log "Temporary directory created: $TEMP_DIR" |
-else |
- log "Using user-provided temp directory: $TEMP_DIR" |
-fi |
- |
-GIT_FLAGS= |
-case $VERBOSE in |
- 0|1) |
- GIT_CLONE_FLAGS="--quiet" |
- GIT_CHECKOUT_FLAGS="--quiet" |
- CURL_FLAGS="-s" |
- ;; |
- 2) |
- GIT_CLONE_FLAGS="" |
- GIT_CHECKOUT_FLAGS="" |
- CURL_FLAGS="" |
- ;; |
- *) |
- GIT_CLONE_FLAGS="--verbose" |
- GIT_CHECKOUT_FLAGS="" |
- CURL_FLAGS="" |
- ;; |
-esac |
- |
-BUILD_DIR=$TEMP_DIR/build |
-mkdir -p "$BUILD_DIR" && rm -rf "$BUILD_DIR"/* |
- |
-# Download the Android sources. |
-ANDROID_SRC_DIR=$BUILD_DIR/android-openssl |
-dump "Downloading Android sources" |
-log "Downloading branch $ANDROID_OPENSSL_GIT_COMMIT from: $ANDROID_OPENSSL_GIT_SOURCE" |
-( |
- run mkdir -p $ANDROID_SRC_DIR |
- run cd $ANDROID_SRC_DIR |
- run git clone $GIT_CLONE_FLAGS $ANDROID_OPENSSL_GIT_SOURCE . |
- run git checkout $GIT_CHECKOUT_FLAGS $ANDROID_OPENSSL_GIT_COMMIT |
- run rm -rf .git |
-) |
- |
-# Apply chromium-specific patches located in patches.chromium |
-CHROMIUM_PATCHES_DIR=$PROGDIR/patches.chromium |
-if [ ! -d "$CHROMIUM_PATCHES_DIR" ]; then |
- dump "No Chromium-specific patches to apply." |
-else |
- dump "Applying Chromium-specific patches:" |
- CHROMIUM_PATCHES=$(/bin/ls $CHROMIUM_PATCHES_DIR/*.patch 2>/dev/null) |
- for CHROMIUM_PATCH in $CHROMIUM_PATCHES; do |
- dump "Applying: $CHROMIUM_PATCH" |
- (cd $ANDROID_SRC_DIR && run patch -p1) < $CHROMIUM_PATCH |
- done |
-fi |
- |
-# Get the openssl version |
-. $ANDROID_SRC_DIR/openssl.version |
-if [ -z "$OPENSSL_VERSION" ]; then |
- panic "Could not find OPENSSL_VERSION definition from $ANDROID_SRC_DIR!" |
-fi |
-dump "Found OpenSSL version: $OPENSSL_VERSION" |
- |
-# Download OpenSSL package |
-DOWNLOAD_DIR=$BUILD_DIR/download |
-mkdir -p "$DOWNLOAD_DIR" |
- |
-OPENSSL_PACKAGE=openssl-$OPENSSL_VERSION.tar.gz |
-dump "Downloading $OPENSSL_PACKAGE from $OPENSSL_TAR_SOURCE" |
-run curl $CURL_FLAGS -o $DOWNLOAD_DIR/$OPENSSL_PACKAGE $OPENSSL_TAR_SOURCE/$OPENSSL_PACKAGE |
-run curl $CURL_FLAGS -o $DOWNLOAD_DIR/$OPENSSL_PACKAGE.md5 $OPENSSL_TAR_SOURCE/$OPENSSL_PACKAGE.md5 |
- |
-OPENSSL_SHA1_DOWNLOADED=$(sha1sum $DOWNLOAD_DIR/$OPENSSL_PACKAGE | cut -d" " -f1) |
-OPENSSL_SHA1_EXPECTED=$OPENSSL_TAR_SHA1 |
-if [ "$OPENSSL_SHA1_DOWNLOADED" != "$OPENSSL_SHA1_EXPECTED" ]; then |
- echo "ERROR: Content mismatch for downloaded OpenSSL package:" |
- echo " Downloaded SHA-1: $OPENSSL_SHA1_DOWNLOADED" |
- echo " Expected SHA-1 : $OPENSSL_SHA1_EXPECTED" |
- exit 1 |
-fi |
-dump "Checking content of downloaded package: ok" |
- |
-# The import_openssl.sh script will really remove the existing 'openssl' |
-# directory and replace it with something completely new. This is a problem |
-# when using subversion because this also gets rid of all .svn |
-# subdirectories. This makes it impossible to commit the right set of |
-# changes with "gcl commit". |
-# |
-# To work-around this, copy all the .svn subdirectories into a temporary |
-# tarball, which will be extracted after the import process. |
-# |
-dump "Saving .svn subdirectories" |
-SVN_LIST_FILE=$BUILD_DIR/svn-subdirs |
-run find . -type d -name ".svn" > $SVN_LIST_FILE |
-SAVED_SVN_TARBALL=$BUILD_DIR/saved-svn-subdirs.tar.gz |
-run tar czf $SAVED_SVN_TARBALL -T $SVN_LIST_FILE |
- |
-# Re-run the import_openssl.sh script. |
-dump "Re-running the 'import_openssl.sh' script to reconfigure all sources." |
-( |
- cd $ANDROID_SRC_DIR |
- run ./import_openssl.sh import $DOWNLOAD_DIR/$OPENSSL_PACKAGE |
-) |
- |
-dump "Copying new Android sources to final location." |
-clean_openssl_new () { |
- rm -rf "$PROGDIR/openssl.new" |
-} |
-atexit clean_openssl_new |
- |
-run cp -rp "$ANDROID_SRC_DIR" "$PROGDIR/openssl.new" |
-run mv "$PROGDIR/openssl" "$PROGDIR/openssl.old" |
-run mv "$PROGDIR/openssl.new" "$PROGDIR/openssl" |
-run rm -rf "$PROGDIR/openssl.old" |
- |
-dump "Restoring .svn subdirectores" |
-run tar xzf $SAVED_SVN_TARBALL |
- |
-# Extract list of source files or compiler defines from openssl.config |
-# variable definition. This assumes that the lists are in variables that |
-# are named as <prefix><suffix> or <prefix><suffix><arch>. |
-# |
-# A few examples: |
-# get_gyp_list "FOO BAR" _SOURCES |
-# -> returns '$FOO_SOURCES $BAR_SOURCES' |
-# |
-# get_gyp_list FOO _SOURCES_ "arm x86" |
-# -> returns '$FOO_SOURCES_arm $FOO_SOURCES_x86" |
-# |
-# get_gyp_list "FOO BAR" _SOURCES_ "arm x86" |
-# -> returns '$FOO_SOURCES_arm $FOO_SOURCES_x86 $BAR_SOURCES_arm $BAR_SOURCES_x86' |
-# |
-# $1: list of variable prefixes |
-# $2: variable suffix |
-# $3: optional list of architectures. |
-get_gyp_list () { |
- local ALL_PREFIXES="$1" |
- local SUFFIX="$2" |
- local ALL_ARCHS="$3" |
- local LIST PREFIX ARCH |
- for PREFIX in $ALL_PREFIXES; do |
- if [ "$ALL_ARCHS" ]; then |
- for ARCH in $ALL_ARCHS; do |
- LIST="$LIST $(var_value ${PREFIX}${SUFFIX}${ARCH})" |
- done |
- else |
- LIST="$LIST $(var_value ${PREFIX}${SUFFIX})" |
- fi |
- done |
- echo "$LIST" |
-} |
- |
-generate_gyp_file () { |
- echo "# Auto-generated file - DO NOT EDIT" |
- echo "# To regenerate - run import_from_android.sh." |
- echo "# See 'import_from_android.sh --help' for details." |
- |
- local ALL_PREFIXES="OPENSSL_CRYPTO OPENSSL_SSL" |
- local ALL_ARCHS="arm mips x86 x86_64 mac_ia32" |
- local PREFIX ARCH LIST |
- |
- print_gyp "{" |
- incr_gyp_margin |
- |
- print_gyp "'variables': {" |
- incr_gyp_margin |
- |
- # First, the common sources and defines |
- print_gyp_source_variable "openssl_common_sources" \ |
- $(get_gyp_list "$ALL_PREFIXES" _SOURCES) |
- |
- print_gyp_variable "openssl_common_defines" \ |
- $(get_gyp_list "$ALL_PREFIXES" _DEFINES) |
- |
- # Now, conditions section with add architecture-specific sub-sections. |
- for ARCH in $ALL_ARCHS; do |
- # Convert ARCH to gyp-specific architecture name |
- case $ARCH in |
- x86) |
- GYP_ARCH=ia32 |
- ;; |
- x86_64) |
- GYP_ARCH=x64 |
- ;; |
- *) |
- GYP_ARCH=$ARCH |
- ;; |
- esac |
- |
- print_gyp_source_variable "openssl_${ARCH}_source_excludes" \ |
- $(get_gyp_list "$ALL_PREFIXES" _SOURCES_EXCLUDES_ $ARCH) |
- |
- print_gyp_source_variable "openssl_${ARCH}_sources" \ |
- $(get_gyp_list "$ALL_PREFIXES" _SOURCES_ $ARCH) |
- |
- print_gyp_variable "openssl_${ARCH}_defines" \ |
- $(get_gyp_list "$ALL_PREFIXES" _DEFINES_ $ARCH) |
- |
- done # for ARCH |
- |
- decr_gyp_margin |
- print_gyp "}" # variables |
- |
- decr_gyp_margin |
- print_gyp "}" # top-level dict. |
-} |
- |
-dump "Generating 64-bit configuration header file." |
-mkdir -p $PROGDIR/config/x64/openssl/ |
-sed \ |
- -e 's|^#define RC4_INT unsigned char|#define RC4_INT unsigned int|g' \ |
- -e 's|^#define BN_LLONG|#undef BN_LLONG|g' \ |
- -e 's|^#define THIRTY_TWO_BIT|#undef THIRTY_TWO_BIT|g' \ |
- -e 's|^#undef SIXTY_FOUR_BIT_LONG|#define SIXTY_FOUR_BIT_LONG|g' \ |
- -e 's|^#define BF_PTR|#undef BF_PTR|g' \ |
- $PROGDIR/openssl/include/openssl/opensslconf.h \ |
- > $PROGDIR/config/x64/openssl/opensslconf.h |
- |
-dump "Generating OS X 32-bit configuration header file." |
-mkdir -p $PROGDIR/config/mac/ia32/openssl/ |
-sed \ |
- -e '4a#ifndef OPENSSL_SYSNAME_MACOSX\n# define OPENSSL_SYSNAME_MACOSX\n#endif' \ |
- -e 's|^#define RC4_INT unsigned char|#define RC4_INT unsigned int|g' \ |
- -e 's|^#define DES_LONG unsigned int|#define DES_LONG unsigned long|g' \ |
- $PROGDIR/openssl/include/openssl/opensslconf.h \ |
- > $PROGDIR/config/mac/ia32/openssl/opensslconf.h |
- |
-dump "Generating .gypi file." |
-. $ANDROID_SRC_DIR/openssl.config |
-generate_gyp_file > $PROGDIR/openssl.gypi.new |
-run mv $PROGDIR/openssl.gypi $PROGDIR/openssl.gypi.old |
-run mv $PROGDIR/openssl.gypi.new $PROGDIR/openssl.gypi |
-run rm $PROGDIR/openssl.gypi.old |
- |
-dump "Done." |