#!/bin/sh
#
# Copyright (C) 2009 The Android Open Source Project
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#      http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
# This script is used to build complete Android NDK release packages
# from the git repository and a set of prebuilt cross-toolchain tarballs
#

# location of the root ndk directory. we assume this script is under build/tools
NDK_ROOT_DIR=`dirname $0`/../..
NDK_ROOT_DIR=`cd $NDK_ROOT_DIR && pwd`

. $NDK_ROOT_DIR/build/core/ndk-common.sh
force_32bit_binaries

# the default release name (use today's date)
RELEASE=`date +%Y%m%d`

# the package prefix
PREFIX=android-ndk

# the prefix of prebuilt toolchain tarballs
PREBUILT_PREFIX=

# the list of supported host development systems
PREBUILT_SYSTEMS="linux-x86 darwin-x86 windows"

# a prebuilt NDK archive (.zip file). empty means don't use any
PREBUILT_NDK=

# default location for generated packages
OUT_DIR=/tmp/ndk-release

# set to 'yes' if we should use 'git ls-files' to list the files to
# be copied into the archive.
USE_GIT_FILES=yes

# Find the location of the platforms root directory
PLATFORMS_ROOT=$NDK_ROOT_DIR/build/platforms
if [ ! -d $PLATFORMS_ROOT ] ; then
    PLATFORMS_ROOT=`dirname $NDK_ROOT_DIR`/development/ndk/platforms
fi

# Find the location of the samples
SAMPLES_ROOT=$NDK_ROOT_DIR/samples
if [ ! -d $SAMPLES_ROOT ] ; then
    SAMPLES_ROOT=`dirname $NDK_ROOT_DIR`/development/ndk/samples
fi

OPTION_HELP=no
OPTION_OUT_DIR=

for opt do
  optarg=`expr "x$opt" : 'x[^=]*=\(.*\)'`
  case "$opt" in
  --help|-h|-\?) OPTION_HELP=yes
  ;;
  --verbose)
    if [ "$VERBOSE" = "yes" ] ; then
        VERBOSE2=yes
    else
        VERBOSE=yes
    fi
  ;;
  --release=*) RELEASE=$optarg
  ;;
  --prefix=*) PREFIX=$optarg
  ;;
  --prebuilt-ndk=*) PREBUILT_NDK=$optarg
  ;;
  --prebuilt-prefix=*) PREBUILT_PREFIX=$optarg
  ;;
  --systems=*) PREBUILT_SYSTEMS=$optarg
  ;;
  --no-git) USE_GIT_FILES=no
  ;;
  --platforms-root=*) PLATFORMS_ROOT=$optarg
  ;;
  --samples-root=*) SAMPLES_ROOT=$optarg
  ;;
  --out-dir=*) OPTION_OUT_DIR=$optarg
  ;;
  *)
    echo "unknown option '$opt', use --help"
    exit 1
  esac
done

if [ $OPTION_HELP = yes ] ; then
    echo "Usage: make-release.sh [options]"
    echo ""
    echo "Package a new set of release packages for the Android NDK."
    echo ""
    echo "You will need to have generated one or more prebuilt toolchain tarballs"
    echo "with the build/tools/build-toolchain.sh script. These files should be"
    echo "named like <prefix>-<system>.tar.bz2, where <prefix> is an arbitrary"
    echo "prefix and <system> is one of: $PREBUILT_SYSTEMS"
    echo ""
    echo "Use the --prebuilt-prefix=<path>/<prefix> option to build release"
    echo "packages from these tarballs."
    echo ""
    echo "Alternatively, you can use --prebuilt-ndk=<file> where <file> is the"
    echo "path to a previous official NDK release package. It will be used to"
    echo "extract the toolchain binaries and copy them to your new release."
    echo "Only use this for experimental release packages!"
    echo ""
    echo "The generated release packages will be stored in a temporary directory"
    echo "that will be printed at the end of the generation process."
    echo ""
    echo "Options: [defaults in brackets after descriptions]"
    echo ""
    echo "  --help                    Print this help message"
    echo "  --prefix=PREFIX           Release package prefix name [$PREFIX]"
    echo "  --release=NAME            Specify release name [$RELEASE]"
    echo "  --prebuilt-prefix=PREFIX  Prefix of prebuilt binary tarballs [$PREBUILT_PREFIX]"
    echo "  --prebuilt-ndk=FILE       Specify a previous NDK package [$PREBUILT_NDK]"
    echo "  --systems=SYSTEMS         List of host system packages [$PREBUILT_SYSTEMS]"
    echo "  --no-git                  Don't use git to list input files, take all of them."
    echo "  --platforms-root=PATH     Specify platforms root directory [$PLATFORMS_ROOT]"
    echo "  --samples-root=PATH       Specify samples root directory [$SAMPLES_ROOT]"
    echo "  --out-dir=PATH            Specify output package directory [$OUT_DIR]"
    echo ""
    exit 1
fi

# Check the prebuilt path
#
if [ -n "$PREBUILD_NDK" -a -n "$PREBUILT_PREFIX" ] ; then
    echo "ERROR: You cannot use both --prebuilt-ndk and --prebuilt-prefix at the same time."
    exit 1
fi

if [ -z "$PREBUILT_PREFIX" -a -z "$PREBUILT_NDK" ] ; then
    echo "ERROR: You must use one of --prebuilt-prefix or --prebuilt-ndk. See --help for details."
    exit 1
fi

if [ -n "$OPTION_OUT_DIR" ] ; then
    OUT_DIR="$OPTION_OUT_DIR"
    if [ ! -d $OUT_DIR ] ; then
        mkdir -p $OUT_DIR
        if [ $? != 0 ] ; then
            echo "ERROR: Could not create output directory: $OUT_DIR"
            exit 1
        fi
    fi
else
    rm -rf $OUT_DIR && mkdir -p $OUT_DIR
fi

if [ -n "$PREBUILT_PREFIX" ] ; then
    if [ -d "$PREBUILT_PREFIX" ] ; then
        echo "ERROR: the --prebuilt-prefix argument must not be a direct directory path: $PREBUILT_PREFIX."
        exit 1
    fi
    PREBUILT_DIR=`dirname $PREBUILT_PREFIX`
    if [ ! -d "$PREBUILT_DIR" ] ; then
        echo "ERROR: the --prebuilt-prefix argument does not point to a directory: $PREBUILT_DIR"
        exit 1
    fi
    if [ -z "$PREBUILT_SYSTEMS" ] ; then
        echo "ERROR: Your systems list is empty, use --system=LIST to specify a different one."
        exit 1
    fi
    # Check the systems
    #
    for SYS in $PREBUILT_SYSTEMS; do
        if [ ! -f $PREBUILT_PREFIX-$SYS.tar.bz2 ] ; then
            echo "ERROR: It seems there is no prebuilt binary tarball for the '$SYS' system"
            echo "Please check the content of $PREBUILT_DIR for a file named $PREBUILT_PREFIX-$SYS.tar.bz2."
            exit 1
        fi
    done
else
    if [ ! -f "$PREBUILT_NDK" ] ; then
        echo "ERROR: the --prebuilt-ndk argument is not a file: $PREBUILT_NDK"
        exit 1
    fi
    # Check that the name ends with the proper host tag
    HOST_NDK_SUFFIX="$HOST_TAG.zip"
    echo "$PREBUILT_NDK" | grep -q "$HOST_NDK_SUFFIX"
    if [ $? != 0 ] ; then
        echo "ERROR: the name of the prebuilt NDK must end in $HOST_NDK_SUFFIX"
        exit 1
    fi
    PREBUILT_SYSTEMS=$HOST_TAG
fi

# The list of git files to copy into the archives
if [ "$USE_GIT_FILES" = "yes" ] ; then
    echo "Collecting sources from git (use --no-git to copy all files instead)."
    GIT_FILES=`cd $NDK_ROOT_DIR && git ls-files`
else
    echo "Collecting all sources files under tree."
    # Cleanup everything that is likely to not be part of the final NDK
    # i.e. generated files...
    rm -rf $NDK_ROOT_DIR/out
    rm -rf $NDK_ROOT_DIR/apps/*/project/libs/armeabi
    rm -rf $NDK_ROOT_DIR/apps/*/project/libs/armeabi-v7a
    rm -rf $NDK_ROOT_DIR/apps/*/project/libs/x86
    # Get all files under the NDK root
    GIT_FILES=`cd $NDK_ROOT_DIR && find .`
    GIT_FILES=`echo $GIT_FILES | sed -e "s!\./!!g"`
fi

# temporary directory used for packaging
TMPDIR=/tmp/ndk-release

RELEASE_PREFIX=$PREFIX-$RELEASE

umask 0022

rm -rf $TMPDIR && mkdir -p $TMPDIR

# first create the reference ndk directory from the git reference
echo "Creating reference from source files"
REFERENCE=$TMPDIR/reference &&
mkdir -p $REFERENCE &&
(cd $NDK_ROOT_DIR && tar cf - $GIT_FILES) | (cd $REFERENCE && tar xf -) &&
rm -f $REFERENCE/Android.mk
if [ $? != 0 ] ; then
    echo "Could not create reference. Aborting."
    exit 2
fi

# copy platform files if needed
echo "Copying platform files"
if [ ! -d $REFERENCE/build/platforms ] ; then
    mkdir -p $REFERENCE/build/platforms &&
    (cd $PLATFORMS_ROOT && tar cf - android-*) | (cd $REFERENCE/build/platforms && tar xf -)
    if [ $? != 0 ] ; then
        echo "Could not copy platform files. Aborting."
        exit 2
    fi
fi

# copy sample files if needed
echo "Copying samples"
if [ ! -d $REFERENCE/samples ] ; then
    mkdir -p $REFERENCE/samples &&
    (cd $SAMPLES_ROOT && tar cf - *) | (cd $REFERENCE/samples && tar xf -)
    if [ $? != 0 ] ; then
        echo "Could not copy samples. Aborting."
        exit 2
    fi
fi

# now, for each system, create a package
#
for SYSTEM in $PREBUILT_SYSTEMS; do
    echo "Preparing package for system $SYSTEM."
    BIN_RELEASE=$RELEASE_PREFIX-$SYSTEM
    PREBUILT=$PREBUILT_PREFIX-$SYSTEM
    DSTDIR=$TMPDIR/$RELEASE_PREFIX
    rm -rf $DSTDIR && mkdir -p $DSTDIR &&
    cp -rp $REFERENCE/* $DSTDIR
    if [ $? != 0 ] ; then
        echo "Could not copy reference. Aborting."
        exit 2
    fi

    if [ -n "$PREBUILT_NDK" ] ; then
        echo "Unpacking prebuilt toolchain from $PREBUILT_NDK"
        UNZIP_DIR=$TMPDIR/prev-ndk
        rm -rf $UNZIP_DIR && mkdir -p $UNZIP_DIR
        if [ $? != 0 ] ; then
            echo "Could not create temporary directory: $UNZIP_DIR"
            exit 1
        fi
        cd $UNZIP_DIR && unzip -q $PREBUILT_NDK 1>/dev/null 2>&1
        if [ $? != 0 ] ; then
            echo "ERROR: Could not unzip NDK package $PREBUILT_NDK"
            exit 1
        fi
        cd android-ndk-* && cp -rP build/prebuilt $DSTDIR/build
    else
        echo "Unpacking $PREBUILT.tar.bz2"
        (cd $DSTDIR && tar xjf $PREBUILT.tar.bz2) 2>/dev/null 1>&2
        if [ $? != 0 ] ; then
            echo "Could not unpack prebuilt for system $SYSTEM. Aborting."
            exit 1
        fi
    fi

    ARCHIVE=$BIN_RELEASE.zip
    echo "Creating $ARCHIVE"
    (cd $TMPDIR && zip -9qr $OUT_DIR/$ARCHIVE $RELEASE_PREFIX && rm -rf $DSTDIR) 2>/dev/null 1>&2
    if [ $? != 0 ] ; then
        echo "Could not create zip archive. Aborting."
        exit 1
    fi

#    chmod a+r $TMPDIR/$ARCHIVE
done

echo "Cleaning up."
rm -rf $TMPDIR/reference
rm -rf $TMPDIR/prev-ndk

echo "Done, please see packages in $OUT_DIR:"
ls -l $OUT_DIR
