| Index: openssl/check-all-builds.sh
 | 
| diff --git a/openssl/check-all-builds.sh b/openssl/check-all-builds.sh
 | 
| deleted file mode 100755
 | 
| index 98dc391c3327cb9a39e95082df7905f12c674513..0000000000000000000000000000000000000000
 | 
| --- a/openssl/check-all-builds.sh
 | 
| +++ /dev/null
 | 
| @@ -1,628 +0,0 @@
 | 
| -#!/bin/sh
 | 
| -#
 | 
| -
 | 
| -set -e
 | 
| -export LANG=C
 | 
| -export LC_ALL=C
 | 
| -
 | 
| -PROGDIR=$(dirname "$0")
 | 
| -PROGNAME=$(basename "$0")
 | 
| -
 | 
| -panic () {
 | 
| -  echo "ERROR: $@"
 | 
| -  exit 1
 | 
| -}
 | 
| -
 | 
| -VERBOSE=1
 | 
| -
 | 
| -# Dump message is $VERBOSE >= $1
 | 
| -# $1+: message.
 | 
| -dump_n () {
 | 
| -  local LOG_LEVEL=$1
 | 
| -  shift
 | 
| -  if [ "$VERBOSE" -ge "$LOG_LEVEL" ]; then
 | 
| -    printf "%s\n" "$@"
 | 
| -  fi
 | 
| -}
 | 
| -
 | 
| -# Dump a message unless --quiet is used.
 | 
| -# $1+: message.
 | 
| -dump () {
 | 
| -  dump_n 1 "$@"
 | 
| -}
 | 
| -
 | 
| -# Dump a message if --verbose is used only.
 | 
| -# $1+: message.
 | 
| -log () {
 | 
| -  dump_n 2 "$@"
 | 
| -}
 | 
| -
 | 
| -# Run a command silently, unless --verbose or '--verbose --verbose'
 | 
| -# is used.
 | 
| -# $1+: Command
 | 
| -# Return: command status.
 | 
| -run () {
 | 
| -  log "COMMAND: $*"
 | 
| -  case $VERBOSE in
 | 
| -    0)
 | 
| -      "$@" >/dev/null 2>&1 || return $?
 | 
| -      ;;
 | 
| -    1)
 | 
| -      "$@" >/dev/null || return $?
 | 
| -      ;;
 | 
| -    *)
 | 
| -      "$@" || return $?
 | 
| -      ;;
 | 
| -  esac
 | 
| -}
 | 
| -
 | 
| -# $1: string
 | 
| -# Out: input string, with capital letters replaced by small ones.
 | 
| -tolower () {
 | 
| -  echo "$1" | tr '[A-Z]' '[a-z]'
 | 
| -}
 | 
| -
 | 
| -# Return value of a given variable.
 | 
| -# $1: Variable name
 | 
| -var_value () {
 | 
| -  eval printf \"%s\" \"\$$1\"
 | 
| -}
 | 
| -
 | 
| -# Remove some items from a list
 | 
| -# $1: input space-separated list
 | 
| -# $2: space-separated list of items to remove from 1
 | 
| -# Out: items of $1 without items of $2
 | 
| -filter_out () {
 | 
| -  local TMP=$(mktemp)
 | 
| -  local RESULT
 | 
| -  printf "" > $TMP
 | 
| -  echo "$2" | tr ' ' '\n' > $TMP
 | 
| -  RESULT=$(echo "$1" | tr ' ' '\n' | fgrep -x -v -f $TMP | tr '\n' ' ')
 | 
| -  rm -f $TMP
 | 
| -  echo "$RESULT"
 | 
| -}
 | 
| -
 | 
| -src_to_obj () {
 | 
| -  case $1 in
 | 
| -    *.c)
 | 
| -      echo ${1%%.c}.o
 | 
| -      ;;
 | 
| -    *.S)
 | 
| -      echo ${1%%.S}.o
 | 
| -      ;;
 | 
| -    *)
 | 
| -      echo $1
 | 
| -      ;;
 | 
| -  esac
 | 
| -}
 | 
| -
 | 
| -# Determine host operating system.
 | 
| -HOST_OS=$(uname -s)
 | 
| -case $HOST_OS in
 | 
| -  Linux)
 | 
| -    HOST_OS=linux
 | 
| -    ;;
 | 
| -  Darwin)
 | 
| -    HOST_OS=darwin
 | 
| -    ;;
 | 
| -esac
 | 
| -
 | 
| -# Determine host architecture
 | 
| -HOST_ARCH=$(uname -m)
 | 
| -case $HOST_ARCH in
 | 
| -  i?86)
 | 
| -    HOST_ARCH=x86
 | 
| -    ;;
 | 
| -esac
 | 
| -
 | 
| -ANDROID_HOST_TAG=$HOST_OS-$HOST_ARCH
 | 
| -
 | 
| -case $ANDROID_HOST_TAG in
 | 
| -  linux-x86_64|darwin-x86-64)
 | 
| -    ANDROID_HOST_TAG=$HOST_OS-x86
 | 
| -    ;;
 | 
| -  *)
 | 
| -    panic "Sorry, this script can only run on 64-bit Linux or Darwin"
 | 
| -esac
 | 
| -
 | 
| -# Determine number of cores
 | 
| -case $HOST_OS in
 | 
| -  linux)
 | 
| -    NUM_CORES=$(grep -c "processor" /proc/cpuinfo)
 | 
| -    ;;
 | 
| -  darwin)
 | 
| -    NUM_CORES=$(sysctl -n hw.ncpu)
 | 
| -    ;;
 | 
| -  *)
 | 
| -    NUM_CORES=1
 | 
| -    ;;
 | 
| -esac
 | 
| -
 | 
| -# The list of supported Android target architectures.
 | 
| -ANDROID_ARCHS="arm x86 mips"
 | 
| -
 | 
| -BUILD_TYPES=
 | 
| -for ARCH in $ANDROID_ARCHS; do
 | 
| -  BUILD_TYPES="$BUILD_TYPES android-$ARCH"
 | 
| -done
 | 
| -ANDROID_BUILD_TYPES=$BUILD_TYPES
 | 
| -
 | 
| -# NOTE: The $HOST_OS-x86_64 is currently broken because the single
 | 
| -#       <openssl/opensslconf.h> header is tailored for 32-bits.
 | 
| -HOST_BUILD_TYPES="$HOST_OS-x86 $HOST_OS-generic32 $HOST_OS-generic64"
 | 
| -
 | 
| -BUILD_TYPES="$ANDROID_BUILD_TYPES $HOST_BUILD_TYPES"
 | 
| -
 | 
| -# Parse command-line
 | 
| -DO_HELP=
 | 
| -SRC_DIR=$(cd $PROGDIR && pwd)
 | 
| -OUT_DIR=out
 | 
| -BUILD_DIR=
 | 
| -BUILD_TYPES=
 | 
| -NUM_JOBS=$NUM_CORES
 | 
| -ANDROID_BUILD_TOP=$(cd $PROGDIR/../.. && pwd)
 | 
| -for OPT; do
 | 
| -  case $OPT in
 | 
| -    --help|-h|-?)
 | 
| -      DO_HELP=true
 | 
| -      ;;
 | 
| -    --build-dir=*)
 | 
| -      BUILD_DIR=${OPT##--build-dir=}
 | 
| -      ;;
 | 
| -    --verbose)
 | 
| -      VERBOSE=$(( $VERBOSE + 1 ))
 | 
| -      ;;
 | 
| -    --jobs=*)
 | 
| -      NUM_JOBS=${OPT##--jobs=}
 | 
| -      ;;
 | 
| -    --quiet)
 | 
| -      VERBOSE=$(( $VERBOSE - 1 ))
 | 
| -      ;;
 | 
| -    -j*)
 | 
| -      NUM_JOBS=${OPT##-j}
 | 
| -      ;;
 | 
| -    -*)
 | 
| -      panic "Unknown option '$OPT', see --help for details."
 | 
| -      ;;
 | 
| -    *)
 | 
| -      BUILD_TYPES="$BUILD_TYPES $OPT"
 | 
| -      ;;
 | 
| -  esac
 | 
| -done
 | 
| -
 | 
| -# Print help when needed.
 | 
| -if [ "$DO_HELP" ]; then
 | 
| -  echo \
 | 
| -"Usage: $PROGNAME [options] [<build-type> ...]
 | 
| -
 | 
| -This script is used to ensure that all OpenSSL build variants compile
 | 
| -properly. It can be used after modifying external/openssl/openssl.config
 | 
| -and re-running import_openssl.sh to check that any changes didn't break
 | 
| -the build.
 | 
| -
 | 
| -A <build-type> is a description of a given build of the library and its
 | 
| -program. Its format is:
 | 
| -
 | 
| -  <compiler>-<system>-<arch>
 | 
| -
 | 
| -Where: <compiler> is either 'gcc' or 'clang'.
 | 
| -       <system>   is 'android', 'linux' or 'darwin'.
 | 
| -       <arch>     is 'arm', 'x86'  or 'mips'.
 | 
| -
 | 
| -By default, it rebuilds the sources for the following build types:
 | 
| -"
 | 
| -  for BUILD_TYPE in $BUILD_TYPES; do
 | 
| -    echo "  $BUILD_TYPE"
 | 
| -  done
 | 
| -
 | 
| -  echo \
 | 
| -"However, you can pass custom values on the command-line instead.
 | 
| -
 | 
| -This scripts generates a custom Makefile in a temporary directory, then
 | 
| -launches 'make' in it to build all binaries in parallel. In case of
 | 
| -problem, you can use the --build-dir=<path> option to specify a custom
 | 
| -build-directory, which will _not_ be removed when the script exits.
 | 
| -
 | 
| -For example, to better see why a build fails:
 | 
| -
 | 
| -   ./$PROGNAME --build-dir=/tmp/mydir
 | 
| -   make -C /tmp/mydir V=1
 | 
| -
 | 
| -Valid options:
 | 
| -
 | 
| -  --help|-h|-?        Print this message.
 | 
| -  --build-dir=<path>  Specify build directory.
 | 
| -  --jobs=<count>      Run <count> parallel build jobs [$NUM_JOBS].
 | 
| -  -j<count>           Same as --jobs=<count>.
 | 
| -  --verbose           Increase verbosity.
 | 
| -  --quiet             Decrease verbosity.
 | 
| -"
 | 
| -  exit 0
 | 
| -fi
 | 
| -
 | 
| -log "Host OS: $HOST_OS"
 | 
| -log "Host arch: $HOST_ARCH"
 | 
| -log "Host CPU count: $NUM_CORES"
 | 
| -
 | 
| -if [ -z "$BUILD_TYPES" ]; then
 | 
| -  BUILD_TYPES="$ANDROID_BUILD_TYPES $HOST_BUILD_TYPES"
 | 
| -fi
 | 
| -log "Build types: $BUILD_TYPES"
 | 
| -
 | 
| -if [ -z "$BUILD_DIR" ]; then
 | 
| -  # Create a temporary directory, ensure it gets destroyed properly
 | 
| -  # when the script exits.
 | 
| -  BUILD_DIR=$(mktemp -d)
 | 
| -  clean_build_dir () {
 | 
| -    log "Cleaning up temporary directory: $BUILD_DIR"
 | 
| -    rm -rf "$BUILD_DIR"
 | 
| -    exit $1
 | 
| -  }
 | 
| -  trap "clean_build_dir 0" EXIT
 | 
| -  trap "clean_build_dir \$?" INT HUP QUIT TERM
 | 
| -  log "Using temporary build directory: $BUILD_DIR"
 | 
| -else
 | 
| -  log "Using user build directory: $BUILD_DIR"
 | 
| -fi
 | 
| -
 | 
| -mkdir -p "$BUILD_DIR" && rm -rf "$BUILD_DIR"/*
 | 
| -
 | 
| -MAKEFILE=$BUILD_DIR/GNUmakefile
 | 
| -
 | 
| -# Return source files for a given module and architecture.
 | 
| -# $1: module prefix (e.g. CRYPTO)
 | 
| -# $2: build arch.
 | 
| -get_module_src_files_for_arch () {
 | 
| -  local prefix=$1
 | 
| -  local arch=$2
 | 
| -  local src_files="$(var_value OPENSSL_${prefix}_SOURCES)"
 | 
| -  src_files="$src_files $(var_value OPENSSL_${prefix}_SOURCES_${arch})"
 | 
| -  local exclude_files="$(var_value OPENSSL_${prefix}_SOURCES_EXCLUDES_${arch})"
 | 
| -  src_files=$(filter_out "$src_files" "$exclude_files")
 | 
| -  echo "$src_files"
 | 
| -}
 | 
| -
 | 
| -# Return the compiler defines for a given module and architecture
 | 
| -# $1: module prefix (e.g. CRYPTO)
 | 
| -# $2 build arch.
 | 
| -get_module_defines_for_arch () {
 | 
| -  local prefix=$1
 | 
| -  local arch=$2
 | 
| -  local defines="$(var_value OPENSSL_${prefix}_DEFINES)"
 | 
| -  defines="$defines $(var_value OPENSSL_${prefix}_DEFINES_${arch})"
 | 
| -  echo "$defines"
 | 
| -}
 | 
| -
 | 
| -# $1: module prefix (e.g. CRYPTO)
 | 
| -get_module_c_includes () {
 | 
| -  var_value OPENSSL_$1_INCLUDES
 | 
| -}
 | 
| -
 | 
| -# $1: build type (e.g. gcc-android-arm)
 | 
| -# Out: build arch.
 | 
| -get_build_arch () {
 | 
| -  echo "$1" | cut -d- -f3
 | 
| -}
 | 
| -
 | 
| -# $1: build arch
 | 
| -# Out: GNU configuration target (e.g. arm-linux-androideabi)
 | 
| -get_build_arch_target () {
 | 
| -  case $1 in
 | 
| -    arm)
 | 
| -      echo "arm-linux-androideabi"
 | 
| -      ;;
 | 
| -    x86)
 | 
| -      echo "i686-linux-android"
 | 
| -      ;;
 | 
| -    mips)
 | 
| -      echo "mipsel-linux-android"
 | 
| -      ;;
 | 
| -    *)
 | 
| -      echo "$1-linux-android"
 | 
| -      ;;
 | 
| -  esac
 | 
| -}
 | 
| -
 | 
| -GCC_VERSION=4.7
 | 
| -CLANG_VERSION=3.1
 | 
| -
 | 
| -get_prebuilt_gcc_dir_for_arch () {
 | 
| -  local arch=$1
 | 
| -  local target=$(get_build_arch_target $arch)
 | 
| -  echo "$ANDROID_BUILD_TOP/prebuilts/gcc/$ANDROID_HOST_TAG/$arch/$target-$GCC_VERSION"
 | 
| -}
 | 
| -
 | 
| -get_prebuilt_clang () {
 | 
| -  echo "$ANDROID_BUILD_TOP/prebuilts/clang/$ANDROID_HOST_TAG/$CLANG_VERSION/clang"
 | 
| -}
 | 
| -
 | 
| -get_prebuilt_ndk_sysroot_for_arch () {
 | 
| -  echo "$ANDROID_BUILD_TOP/prebuilts/ndk/current/platforms/android-9/arch-$1"
 | 
| -}
 | 
| -
 | 
| -get_c_runtime_file () {
 | 
| -  local build_type=$1
 | 
| -  local arch=$(get_build_arch $build_type)
 | 
| -  local filename=$2
 | 
| -  echo "$(get_prebuilt_ndk_sysroot_for_arch $arch)/usr/lib/$filename"
 | 
| -}
 | 
| -
 | 
| -# $1: build type (e.g. gcc-android-arm)
 | 
| -get_build_compiler () {
 | 
| -  local arch=$(get_build_arch $1)
 | 
| -  local target=$(get_build_arch_target $arch)
 | 
| -  local gcc_dir=$(get_prebuilt_gcc_dir_for_arch $arch);
 | 
| -  local result
 | 
| -
 | 
| -  # Get the toolchain binary.
 | 
| -  case $1 in
 | 
| -    gcc-android-*)
 | 
| -      result="$gcc_dir/bin/$target-gcc"
 | 
| -      ;;
 | 
| -    clang-android-*)
 | 
| -      result="$(get_prebuilt_clang) -target $target -B$gcc_dir/$target/bin -I$gcc_dir/lib/gcc/$target/$GCC_VERSION/include"
 | 
| -      ;;
 | 
| -    gcc-*)
 | 
| -      result=gcc
 | 
| -      ;;
 | 
| -    clang-*) # Must have host clang compiler.
 | 
| -      result=clang
 | 
| -      ;;
 | 
| -  esac
 | 
| -
 | 
| -  compiler_check=$(which $result 2>/dev/null || echo "")
 | 
| -  if [ -z "$compiler_check" ]; then
 | 
| -    panic "Could not find compiler: $result"
 | 
| -  fi
 | 
| -
 | 
| -  # Get the Android sysroot if needed.
 | 
| -  case $1 in
 | 
| -    *-android-*)
 | 
| -      result="$result --sysroot=$(get_prebuilt_ndk_sysroot_for_arch $arch)"
 | 
| -      ;;
 | 
| -  esac
 | 
| -
 | 
| -  # Force -m32 flag when needed for 32-bit builds.
 | 
| -  case $1 in
 | 
| -    *-linux-x86|*-darwin-x86|*-generic32)
 | 
| -      result="$result -m32"
 | 
| -      ;;
 | 
| -  esac
 | 
| -  echo "$result"
 | 
| -}
 | 
| -
 | 
| -# $1: build type.
 | 
| -# Out: common compiler flags for this build.
 | 
| -get_build_c_flags () {
 | 
| -  local result="-O2 -fPIC"
 | 
| -  case $1 in
 | 
| -    *-android-arm)
 | 
| -      result="$result -march=armv7-a -mfpu=vfpv3-d16"
 | 
| -      ;;
 | 
| -  esac
 | 
| -
 | 
| -  case $1 in
 | 
| -    *-generic32|*-generic64)
 | 
| -      # Generic builds do not compile without this flag.
 | 
| -      result="$result -DOPENSSL_NO_ASM"
 | 
| -      ;;
 | 
| -  esac
 | 
| -  echo "$result"
 | 
| -}
 | 
| -
 | 
| -# $1: build type.
 | 
| -# Out: linker for this build.
 | 
| -get_build_linker () {
 | 
| -  get_build_compiler $1
 | 
| -}
 | 
| -
 | 
| -clear_sources () {
 | 
| -  g_all_objs=""
 | 
| -}
 | 
| -
 | 
| -# Generate build instructions to compile source files.
 | 
| -# Also update g_all_objs.
 | 
| -# $1: module prefix (e.g. CRYPTO)
 | 
| -# $2: build type
 | 
| -build_sources () {
 | 
| -  local prefix=$1
 | 
| -  local build_type=$2
 | 
| -  echo "## build_sources prefix='$prefix' build_type='$build_type'"
 | 
| -  local arch=$(get_build_arch $build_type)
 | 
| -  local src_files=$(get_module_src_files_for_arch $prefix $arch)
 | 
| -  local c_defines=$(get_module_defines_for_arch $prefix $arch)
 | 
| -  local c_includes=$(get_module_c_includes $prefix "$SRC_DIR")
 | 
| -  local build_cc=$(get_build_compiler $build_type)
 | 
| -  local build_cflags=$(get_build_c_flags $build_type)
 | 
| -  local build_linker=$(get_build_linker $build_type)
 | 
| -  local src obj def inc
 | 
| -
 | 
| -  printf "OUT_DIR := $OUT_DIR/$build_type\n\n"
 | 
| -  printf "BUILD_CC := $build_cc\n\n"
 | 
| -  printf "BUILD_LINKER := $build_linker\n\n"
 | 
| -  printf "BUILD_CFLAGS := $build_cflags"
 | 
| -  for inc in $c_includes; do
 | 
| -    printf " -I\$(SRC_DIR)/$inc"
 | 
| -  done
 | 
| -  for def in $c_defines; do
 | 
| -    printf " -D$def"
 | 
| -  done
 | 
| -  printf "\n\n"
 | 
| -  printf "BUILD_OBJECTS :=\n\n"
 | 
| -
 | 
| -  case $build_type in
 | 
| -    clang-android-*)
 | 
| -      # The version of clang that comes with the platform build doesn't
 | 
| -      # support simple linking of shared libraries and executables. One
 | 
| -      # has to provide the C runtime files explicitely.
 | 
| -      local crtbegin_so=$(get_c_runtime_file $build_type crtbegin_so.o)
 | 
| -      local crtend_so=$(get_c_runtime_file $build_type crtend_so.o)
 | 
| -      local crtbegin_exe=$(get_c_runtime_file $build_type crtbegin_dynamic.o)
 | 
| -      local crtend_exe=$(get_c_runtime_file $build_type crtend_android.o)
 | 
| -      printf "CRTBEGIN_SO := $crtbegin_so\n"
 | 
| -      printf "CRTEND_SO := $crtend_so\n"
 | 
| -      printf "CRTBEGIN_EXE := $crtbegin_exe\n"
 | 
| -      printf "CRTEND_EXE := $crtend_exe\n"
 | 
| -      printf "\n"
 | 
| -      ;;
 | 
| -  esac
 | 
| -
 | 
| -  for src in $src_files; do
 | 
| -    obj=$(src_to_obj $src)
 | 
| -    g_all_objs="$g_all_objs $obj"
 | 
| -    printf "OBJ := \$(OUT_DIR)/$obj\n"
 | 
| -    printf "BUILD_OBJECTS += \$(OBJ)\n"
 | 
| -    printf "\$(OBJ): PRIVATE_CC := \$(BUILD_CC)\n"
 | 
| -    printf "\$(OBJ): PRIVATE_CFLAGS := \$(BUILD_CFLAGS)\n"
 | 
| -    printf "\$(OBJ): \$(SRC_DIR)/$src\n"
 | 
| -    printf "\t@echo [$build_type] CC $src\n"
 | 
| -    printf "\t@mkdir -p \$\$(dirname \$@)\n"
 | 
| -    printf "\t\$(hide) \$(PRIVATE_CC) \$(PRIVATE_CFLAGS) -c -o \$@ \$<\n"
 | 
| -    printf "\n"
 | 
| -  done
 | 
| -  printf "\n"
 | 
| -}
 | 
| -
 | 
| -# $1: library name (e.g. crypto).
 | 
| -# $2: module prefix (e.g. CRYPTO).
 | 
| -# $3: build type.
 | 
| -# $4: source directory.
 | 
| -# $5: output directory.
 | 
| -build_shared_library () {
 | 
| -  local name=$1
 | 
| -  local prefix=$2
 | 
| -  local build_type=$3
 | 
| -  local src_dir="$4"
 | 
| -  local out_dir="$5"
 | 
| -  local shlib="lib${name}.so"
 | 
| -  local build_linker=$(get_build_linker $build_type)
 | 
| -  clear_sources
 | 
| -  build_sources $prefix $build_type
 | 
| -
 | 
| -  # TODO(digit): Make the clang build link properly.
 | 
| -  printf "SHLIB=\$(OUT_DIR)/$shlib\n"
 | 
| -  printf "\$(SHLIB): PRIVATE_LINKER := \$(BUILD_LINKER)\n"
 | 
| -  case $build_type in
 | 
| -    clang-android-*)
 | 
| -      printf "\$(SHLIB): PRIVATE_CRTBEGIN := \$(CRTBEGIN_SO)\n"
 | 
| -      printf "\$(SHLIB): PRIVATE_CRTEND := \$(CRTEND_SO)\n"
 | 
| -      ;;
 | 
| -  esac
 | 
| -  printf "\$(SHLIB): \$(BUILD_OBJECTS)\n"
 | 
| -  printf "\t@echo [$build_type] SHARED_LIBRARY $(basename $shlib)\n"
 | 
| -  printf "\t@mkdir -p \$\$(dirname \$@)\n"
 | 
| -  case $build_type in
 | 
| -    clang-android-*)
 | 
| -      printf "\t\$(hide) \$(PRIVATE_LINKER) -nostdlib -shared -o \$@ \$(PRIVATE_CRTBEGIN) \$^ \$(PRIVATE_CRTEND)\n"
 | 
| -      ;;
 | 
| -    *)
 | 
| -      printf "\t\$(hide) \$(PRIVATE_LINKER) -shared -o \$@ \$^\n"
 | 
| -      ;;
 | 
| -  esac
 | 
| -  printf "\n"
 | 
| -}
 | 
| -
 | 
| -# $1: executable name.
 | 
| -# $2: module prefix (e.g. APPS).
 | 
| -# $3: build type.
 | 
| -# $4: source directory.
 | 
| -# $5: output directory.
 | 
| -# $6: dependent shared libraries (e.g. 'crypto ssl')
 | 
| -build_executable () {
 | 
| -  local name=$1
 | 
| -  local prefix=$2
 | 
| -  local build_type=$3
 | 
| -  local src_dir="$4"
 | 
| -  local out_dir="$5"
 | 
| -  local shlibs="$6"
 | 
| -  local build_linker=$(get_build_linker $build_type)
 | 
| -  clear_sources
 | 
| -  build_sources $prefix $build_type
 | 
| -
 | 
| -  # TODO(digit): Make the clang build link properly.
 | 
| -  exec=$name
 | 
| -  all_shlibs=
 | 
| -  printf "EXEC := \$(OUT_DIR)/$name\n"
 | 
| -  printf "openssl_all: \$(EXEC)\n"
 | 
| -  printf "\$(EXEC): PRIVATE_LINKER := \$(BUILD_LINKER)\n"
 | 
| -  printf "\$(EXEC): \$(BUILD_OBJECTS)"
 | 
| -  for lib in $shlibs; do
 | 
| -    printf " \$(OUT_DIR)/lib${lib}.so"
 | 
| -  done
 | 
| -  printf "\n"
 | 
| -  printf "\t@echo [$build_type] EXECUTABLE $name\n"
 | 
| -  printf "\t@mkdir -p \$\$(dirname \$@)\n"
 | 
| -  printf "\t\$(hide) \$(PRIVATE_LINKER) -o \$@ \$^\n"
 | 
| -  printf "\n"
 | 
| -}
 | 
| -
 | 
| -ALL_BUILDS=
 | 
| -
 | 
| -generate_openssl_build () {
 | 
| -  local build_type=$1
 | 
| -  local out="$OUT_DIR/$build_type"
 | 
| -  ALL_BUILDS="$ALL_BUILDS $build_type"
 | 
| -  echo "# Build type: $build_type"
 | 
| -  build_shared_library crypto CRYPTO $build_type "$SRC_DIR" "$out"
 | 
| -  build_shared_library ssl SSL $build_type "$SRC_DIR" "$out"
 | 
| -  build_executable openssl APPS $build_type "$SRC_DIR" "$out" "crypto ssl"
 | 
| -}
 | 
| -
 | 
| -generate_makefile () {
 | 
| -  echo \
 | 
| -"# Auto-generated by $PROGDIR - do not edit
 | 
| -
 | 
| -.PHONY: openssl_all
 | 
| -
 | 
| -all: openssl_all
 | 
| -
 | 
| -# Use 'make V=1' to print build commands.
 | 
| -ifeq (1,\$(V))
 | 
| -hide :=
 | 
| -else
 | 
| -hide := @
 | 
| -endif
 | 
| -
 | 
| -SRC_DIR=$SRC_DIR
 | 
| -OUT_DIR=$OUT_DIR
 | 
| -"
 | 
| -
 | 
| -  for BUILD_TYPE in $BUILD_TYPES; do
 | 
| -    generate_openssl_build gcc-$BUILD_TYPE
 | 
| -  done
 | 
| -
 | 
| -# TODO(digit): Make the Clang build run.
 | 
| -#   for BUILD_TYPE in $ANDROID_BUILD_TYPES; do
 | 
| -#     generate_openssl_build clang-$BUILD_TYPE
 | 
| -#   done
 | 
| -}
 | 
| -
 | 
| -. $SRC_DIR/openssl.config
 | 
| -
 | 
| -
 | 
| -
 | 
| -dump "Generating Makefile"
 | 
| -log "Makefile path: $MAKEFILE"
 | 
| -generate_makefile > $MAKEFILE
 | 
| -
 | 
| -dump "Building libraries with $NUM_JOBS jobs"
 | 
| -dump "For the following builds:"
 | 
| -for BUILD in $ALL_BUILDS; do
 | 
| -  dump "  $BUILD"
 | 
| -done
 | 
| -MAKE_FLAGS="-j$NUM_JOBS"
 | 
| -if [ "$VERBOSE" -gt 2 ]; then
 | 
| -  MAKE_FLAGS="$MAKE_FLAGS V=1"
 | 
| -fi
 | 
| -run make $MAKE_FLAGS -f "$MAKEFILE" -C "$BUILD_DIR"
 | 
| -case $? in
 | 
| -  0)
 | 
| -    dump "All OK, congratulations!"
 | 
| -    ;;
 | 
| -  *)
 | 
| -    dump "Error, try doing the following to inspect the issues:"
 | 
| -    dump "   $PROGNAME --build-dir=/tmp/mybuild"
 | 
| -    dump "   make -C /tmp/mybuild V=1"
 | 
| -    dump ""
 | 
| -    ;;
 | 
| -esac
 | 
| 
 |