make-release.sh revision ea573da2c3f1a8379f4344d023035fdf795c768d
1c8906b0ac264f8a5f07849c760b4d9fc60789c94David 'Digit' Turner#!/bin/sh
2c8906b0ac264f8a5f07849c760b4d9fc60789c94David 'Digit' Turner#
3849a5c1101965b920b49a5620511661bf6870062David 'Digit' Turner# Copyright (C) 2009 The Android Open Source Project
4849a5c1101965b920b49a5620511661bf6870062David 'Digit' Turner#
5849a5c1101965b920b49a5620511661bf6870062David 'Digit' Turner# Licensed under the Apache License, Version 2.0 (the "License");
6849a5c1101965b920b49a5620511661bf6870062David 'Digit' Turner# you may not use this file except in compliance with the License.
7849a5c1101965b920b49a5620511661bf6870062David 'Digit' Turner# You may obtain a copy of the License at
8849a5c1101965b920b49a5620511661bf6870062David 'Digit' Turner#
9849a5c1101965b920b49a5620511661bf6870062David 'Digit' Turner#      http://www.apache.org/licenses/LICENSE-2.0
10849a5c1101965b920b49a5620511661bf6870062David 'Digit' Turner#
11849a5c1101965b920b49a5620511661bf6870062David 'Digit' Turner# Unless required by applicable law or agreed to in writing, software
12849a5c1101965b920b49a5620511661bf6870062David 'Digit' Turner# distributed under the License is distributed on an "AS IS" BASIS,
13849a5c1101965b920b49a5620511661bf6870062David 'Digit' Turner# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14849a5c1101965b920b49a5620511661bf6870062David 'Digit' Turner# See the License for the specific language governing permissions and
15849a5c1101965b920b49a5620511661bf6870062David 'Digit' Turner# limitations under the License.
16849a5c1101965b920b49a5620511661bf6870062David 'Digit' Turner#
17c8906b0ac264f8a5f07849c760b4d9fc60789c94David 'Digit' Turner# This script is used to build complete Android NDK release packages
18c8906b0ac264f8a5f07849c760b4d9fc60789c94David 'Digit' Turner# from the git repository and a set of prebuilt cross-toolchain tarballs
19c8906b0ac264f8a5f07849c760b4d9fc60789c94David 'Digit' Turner#
20c8906b0ac264f8a5f07849c760b4d9fc60789c94David 'Digit' Turner
21c8906b0ac264f8a5f07849c760b4d9fc60789c94David 'Digit' Turner# location of the root ndk directory. we assume this script is under build/tools
22c8906b0ac264f8a5f07849c760b4d9fc60789c94David 'Digit' TurnerNDK_ROOT_DIR=`dirname $0`/../..
23c8906b0ac264f8a5f07849c760b4d9fc60789c94David 'Digit' TurnerNDK_ROOT_DIR=`cd $NDK_ROOT_DIR && pwd`
24c8906b0ac264f8a5f07849c760b4d9fc60789c94David 'Digit' Turner
25721a3eb0d56840dd24fde4ee4d51259e43c002e5David 'Digit' Turner. $NDK_ROOT_DIR/build/core/ndk-common.sh
26721a3eb0d56840dd24fde4ee4d51259e43c002e5David 'Digit' Turnerforce_32bit_binaries
27721a3eb0d56840dd24fde4ee4d51259e43c002e5David 'Digit' Turner
28721a3eb0d56840dd24fde4ee4d51259e43c002e5David 'Digit' Turner# the default release name (use today's date)
29721a3eb0d56840dd24fde4ee4d51259e43c002e5David 'Digit' TurnerRELEASE=`date +%Y%m%d`
30c8906b0ac264f8a5f07849c760b4d9fc60789c94David 'Digit' Turner
31cae78f99bebefece4faf2464bc9cbf6c40e33070David 'Digit' Turner# the package prefix
32cae78f99bebefece4faf2464bc9cbf6c40e33070David 'Digit' TurnerPREFIX=android-ndk
33cae78f99bebefece4faf2464bc9cbf6c40e33070David 'Digit' Turner
34450766678abf628559f96700082d29689ad1b2b6David 'Digit' Turner# the prefix of prebuilt toolchain tarballs
35450766678abf628559f96700082d29689ad1b2b6David 'Digit' TurnerPREBUILT_PREFIX=
36c8906b0ac264f8a5f07849c760b4d9fc60789c94David 'Digit' Turner
37c8906b0ac264f8a5f07849c760b4d9fc60789c94David 'Digit' Turner# the list of supported host development systems
38cf34139a6b3c59f36bfe09ce3299b4578c99073eDavid 'Digit' TurnerPREBUILT_SYSTEMS="linux-x86 darwin-x86 windows"
39c8906b0ac264f8a5f07849c760b4d9fc60789c94David 'Digit' Turner
40721a3eb0d56840dd24fde4ee4d51259e43c002e5David 'Digit' Turner# a prebuilt NDK archive (.zip file). empty means don't use any
41721a3eb0d56840dd24fde4ee4d51259e43c002e5David 'Digit' TurnerPREBUILT_NDK=
42721a3eb0d56840dd24fde4ee4d51259e43c002e5David 'Digit' Turner
436157bc1f5291c9a50691c8878830fbba8e11f710David 'Digit' Turner# default location for generated packages
446157bc1f5291c9a50691c8878830fbba8e11f710David 'Digit' TurnerOUT_DIR=/tmp/ndk-release
456157bc1f5291c9a50691c8878830fbba8e11f710David 'Digit' Turner
46721a3eb0d56840dd24fde4ee4d51259e43c002e5David 'Digit' Turner# set to 'yes' if we should use 'git ls-files' to list the files to
47721a3eb0d56840dd24fde4ee4d51259e43c002e5David 'Digit' Turner# be copied into the archive.
48721a3eb0d56840dd24fde4ee4d51259e43c002e5David 'Digit' TurnerUSE_GIT_FILES=yes
49721a3eb0d56840dd24fde4ee4d51259e43c002e5David 'Digit' Turner
5077d9a08814a063577d086dc356a5a55d5ff55bf6David 'Digit' Turner# set of platforms to package (all by default)
5177d9a08814a063577d086dc356a5a55d5ff55bf6David 'Digit' TurnerPLATFORMS=
52a775f5537568f4768cd61931bb1b5314694adc96David 'Digit' Turner
5377d9a08814a063577d086dc356a5a55d5ff55bf6David 'Digit' Turner# Find the location of the platforms root directory
5477d9a08814a063577d086dc356a5a55d5ff55bf6David 'Digit' TurnerDEVELOPMENT_ROOT=`dirname $NDK_ROOT_DIR`/development/ndk
55a775f5537568f4768cd61931bb1b5314694adc96David 'Digit' Turner
56cae78f99bebefece4faf2464bc9cbf6c40e33070David 'Digit' TurnerOPTION_HELP=no
576157bc1f5291c9a50691c8878830fbba8e11f710David 'Digit' TurnerOPTION_OUT_DIR=
58cae78f99bebefece4faf2464bc9cbf6c40e33070David 'Digit' Turner
59cae78f99bebefece4faf2464bc9cbf6c40e33070David 'Digit' Turnerfor opt do
60cae78f99bebefece4faf2464bc9cbf6c40e33070David 'Digit' Turner  optarg=`expr "x$opt" : 'x[^=]*=\(.*\)'`
61cae78f99bebefece4faf2464bc9cbf6c40e33070David 'Digit' Turner  case "$opt" in
62cae78f99bebefece4faf2464bc9cbf6c40e33070David 'Digit' Turner  --help|-h|-\?) OPTION_HELP=yes
63cae78f99bebefece4faf2464bc9cbf6c40e33070David 'Digit' Turner  ;;
64cae78f99bebefece4faf2464bc9cbf6c40e33070David 'Digit' Turner  --verbose)
65cae78f99bebefece4faf2464bc9cbf6c40e33070David 'Digit' Turner    if [ "$VERBOSE" = "yes" ] ; then
66cae78f99bebefece4faf2464bc9cbf6c40e33070David 'Digit' Turner        VERBOSE2=yes
67cae78f99bebefece4faf2464bc9cbf6c40e33070David 'Digit' Turner    else
68cae78f99bebefece4faf2464bc9cbf6c40e33070David 'Digit' Turner        VERBOSE=yes
69cae78f99bebefece4faf2464bc9cbf6c40e33070David 'Digit' Turner    fi
70cae78f99bebefece4faf2464bc9cbf6c40e33070David 'Digit' Turner  ;;
71cae78f99bebefece4faf2464bc9cbf6c40e33070David 'Digit' Turner  --release=*) RELEASE=$optarg
72cae78f99bebefece4faf2464bc9cbf6c40e33070David 'Digit' Turner  ;;
73cae78f99bebefece4faf2464bc9cbf6c40e33070David 'Digit' Turner  --prefix=*) PREFIX=$optarg
74cae78f99bebefece4faf2464bc9cbf6c40e33070David 'Digit' Turner  ;;
75721a3eb0d56840dd24fde4ee4d51259e43c002e5David 'Digit' Turner  --prebuilt-ndk=*) PREBUILT_NDK=$optarg
76721a3eb0d56840dd24fde4ee4d51259e43c002e5David 'Digit' Turner  ;;
77cae78f99bebefece4faf2464bc9cbf6c40e33070David 'Digit' Turner  --prebuilt-prefix=*) PREBUILT_PREFIX=$optarg
78cae78f99bebefece4faf2464bc9cbf6c40e33070David 'Digit' Turner  ;;
79cae78f99bebefece4faf2464bc9cbf6c40e33070David 'Digit' Turner  --systems=*) PREBUILT_SYSTEMS=$optarg
80cae78f99bebefece4faf2464bc9cbf6c40e33070David 'Digit' Turner  ;;
8177d9a08814a063577d086dc356a5a55d5ff55bf6David 'Digit' Turner  --platforms=*) PLATFORMS=$optarg
82721a3eb0d56840dd24fde4ee4d51259e43c002e5David 'Digit' Turner  ;;
8377d9a08814a063577d086dc356a5a55d5ff55bf6David 'Digit' Turner  --no-git) USE_GIT_FILES=no
84a775f5537568f4768cd61931bb1b5314694adc96David 'Digit' Turner  ;;
8577d9a08814a063577d086dc356a5a55d5ff55bf6David 'Digit' Turner  --development-root=*) DEVELOPMENT_ROOT=$optarg
86a775f5537568f4768cd61931bb1b5314694adc96David 'Digit' Turner  ;;
876157bc1f5291c9a50691c8878830fbba8e11f710David 'Digit' Turner  --out-dir=*) OPTION_OUT_DIR=$optarg
886157bc1f5291c9a50691c8878830fbba8e11f710David 'Digit' Turner  ;;
89cae78f99bebefece4faf2464bc9cbf6c40e33070David 'Digit' Turner  *)
90cae78f99bebefece4faf2464bc9cbf6c40e33070David 'Digit' Turner    echo "unknown option '$opt', use --help"
91cae78f99bebefece4faf2464bc9cbf6c40e33070David 'Digit' Turner    exit 1
92cae78f99bebefece4faf2464bc9cbf6c40e33070David 'Digit' Turner  esac
93cae78f99bebefece4faf2464bc9cbf6c40e33070David 'Digit' Turnerdone
94cae78f99bebefece4faf2464bc9cbf6c40e33070David 'Digit' Turner
95cae78f99bebefece4faf2464bc9cbf6c40e33070David 'Digit' Turnerif [ $OPTION_HELP = yes ] ; then
96cae78f99bebefece4faf2464bc9cbf6c40e33070David 'Digit' Turner    echo "Usage: make-release.sh [options]"
97cae78f99bebefece4faf2464bc9cbf6c40e33070David 'Digit' Turner    echo ""
98cae78f99bebefece4faf2464bc9cbf6c40e33070David 'Digit' Turner    echo "Package a new set of release packages for the Android NDK."
99cae78f99bebefece4faf2464bc9cbf6c40e33070David 'Digit' Turner    echo ""
100450766678abf628559f96700082d29689ad1b2b6David 'Digit' Turner    echo "You will need to have generated one or more prebuilt toolchain tarballs"
101450766678abf628559f96700082d29689ad1b2b6David 'Digit' Turner    echo "with the build/tools/build-toolchain.sh script. These files should be"
102450766678abf628559f96700082d29689ad1b2b6David 'Digit' Turner    echo "named like <prefix>-<system>.tar.bz2, where <prefix> is an arbitrary"
103450766678abf628559f96700082d29689ad1b2b6David 'Digit' Turner    echo "prefix and <system> is one of: $PREBUILT_SYSTEMS"
104450766678abf628559f96700082d29689ad1b2b6David 'Digit' Turner    echo ""
105450766678abf628559f96700082d29689ad1b2b6David 'Digit' Turner    echo "Use the --prebuilt-prefix=<path>/<prefix> option to build release"
106450766678abf628559f96700082d29689ad1b2b6David 'Digit' Turner    echo "packages from these tarballs."
107450766678abf628559f96700082d29689ad1b2b6David 'Digit' Turner    echo ""
108450766678abf628559f96700082d29689ad1b2b6David 'Digit' Turner    echo "Alternatively, you can use --prebuilt-ndk=<file> where <file> is the"
109450766678abf628559f96700082d29689ad1b2b6David 'Digit' Turner    echo "path to a previous official NDK release package. It will be used to"
110450766678abf628559f96700082d29689ad1b2b6David 'Digit' Turner    echo "extract the toolchain binaries and copy them to your new release."
111f051ab722edb8c443e73dea83724e50f6c858970David 'Digit' Turner    echo "Only use this for experimental release packages!"
112450766678abf628559f96700082d29689ad1b2b6David 'Digit' Turner    echo ""
113450766678abf628559f96700082d29689ad1b2b6David 'Digit' Turner    echo "The generated release packages will be stored in a temporary directory"
114450766678abf628559f96700082d29689ad1b2b6David 'Digit' Turner    echo "that will be printed at the end of the generation process."
115721a3eb0d56840dd24fde4ee4d51259e43c002e5David 'Digit' Turner    echo ""
116cae78f99bebefece4faf2464bc9cbf6c40e33070David 'Digit' Turner    echo "Options: [defaults in brackets after descriptions]"
117cae78f99bebefece4faf2464bc9cbf6c40e33070David 'Digit' Turner    echo ""
118cae78f99bebefece4faf2464bc9cbf6c40e33070David 'Digit' Turner    echo "  --help                    Print this help message"
119450766678abf628559f96700082d29689ad1b2b6David 'Digit' Turner    echo "  --prefix=PREFIX           Release package prefix name [$PREFIX]"
120cae78f99bebefece4faf2464bc9cbf6c40e33070David 'Digit' Turner    echo "  --release=NAME            Specify release name [$RELEASE]"
121cae78f99bebefece4faf2464bc9cbf6c40e33070David 'Digit' Turner    echo "  --prebuilt-prefix=PREFIX  Prefix of prebuilt binary tarballs [$PREBUILT_PREFIX]"
122450766678abf628559f96700082d29689ad1b2b6David 'Digit' Turner    echo "  --prebuilt-ndk=FILE       Specify a previous NDK package [$PREBUILT_NDK]"
123450766678abf628559f96700082d29689ad1b2b6David 'Digit' Turner    echo "  --systems=SYSTEMS         List of host system packages [$PREBUILT_SYSTEMS]"
12477d9a08814a063577d086dc356a5a55d5ff55bf6David 'Digit' Turner    echo "  --platforms=PLATFORMS     List of platforms to include [all]"
125721a3eb0d56840dd24fde4ee4d51259e43c002e5David 'Digit' Turner    echo "  --no-git                  Don't use git to list input files, take all of them."
12677d9a08814a063577d086dc356a5a55d5ff55bf6David 'Digit' Turner    echo "  --development-root=PATH   Specify platforms/samples directory [$DEVELOPMENT_ROOT]"
1276157bc1f5291c9a50691c8878830fbba8e11f710David 'Digit' Turner    echo "  --out-dir=PATH            Specify output package directory [$OUT_DIR]"
128cae78f99bebefece4faf2464bc9cbf6c40e33070David 'Digit' Turner    echo ""
129cae78f99bebefece4faf2464bc9cbf6c40e33070David 'Digit' Turner    exit 1
130cae78f99bebefece4faf2464bc9cbf6c40e33070David 'Digit' Turnerfi
131cae78f99bebefece4faf2464bc9cbf6c40e33070David 'Digit' Turner
132cae78f99bebefece4faf2464bc9cbf6c40e33070David 'Digit' Turner# Check the prebuilt path
133cae78f99bebefece4faf2464bc9cbf6c40e33070David 'Digit' Turner#
134450766678abf628559f96700082d29689ad1b2b6David 'Digit' Turnerif [ -n "$PREBUILD_NDK" -a -n "$PREBUILT_PREFIX" ] ; then
135450766678abf628559f96700082d29689ad1b2b6David 'Digit' Turner    echo "ERROR: You cannot use both --prebuilt-ndk and --prebuilt-prefix at the same time."
136cae78f99bebefece4faf2464bc9cbf6c40e33070David 'Digit' Turner    exit 1
137cae78f99bebefece4faf2464bc9cbf6c40e33070David 'Digit' Turnerfi
138cae78f99bebefece4faf2464bc9cbf6c40e33070David 'Digit' Turner
139450766678abf628559f96700082d29689ad1b2b6David 'Digit' Turnerif [ -z "$PREBUILT_PREFIX" -a -z "$PREBUILT_NDK" ] ; then
140450766678abf628559f96700082d29689ad1b2b6David 'Digit' Turner    echo "ERROR: You must use one of --prebuilt-prefix or --prebuilt-ndk. See --help for details."
141cae78f99bebefece4faf2464bc9cbf6c40e33070David 'Digit' Turner    exit 1
142cae78f99bebefece4faf2464bc9cbf6c40e33070David 'Digit' Turnerfi
143cae78f99bebefece4faf2464bc9cbf6c40e33070David 'Digit' Turner
1446157bc1f5291c9a50691c8878830fbba8e11f710David 'Digit' Turnerif [ -n "$OPTION_OUT_DIR" ] ; then
1456157bc1f5291c9a50691c8878830fbba8e11f710David 'Digit' Turner    OUT_DIR="$OPTION_OUT_DIR"
1466157bc1f5291c9a50691c8878830fbba8e11f710David 'Digit' Turner    if [ ! -d $OUT_DIR ] ; then
1476157bc1f5291c9a50691c8878830fbba8e11f710David 'Digit' Turner        mkdir -p $OUT_DIR
1486157bc1f5291c9a50691c8878830fbba8e11f710David 'Digit' Turner        if [ $? != 0 ] ; then
1496157bc1f5291c9a50691c8878830fbba8e11f710David 'Digit' Turner            echo "ERROR: Could not create output directory: $OUT_DIR"
1506157bc1f5291c9a50691c8878830fbba8e11f710David 'Digit' Turner            exit 1
1516157bc1f5291c9a50691c8878830fbba8e11f710David 'Digit' Turner        fi
1526157bc1f5291c9a50691c8878830fbba8e11f710David 'Digit' Turner    fi
1536157bc1f5291c9a50691c8878830fbba8e11f710David 'Digit' Turnerelse
1546157bc1f5291c9a50691c8878830fbba8e11f710David 'Digit' Turner    rm -rf $OUT_DIR && mkdir -p $OUT_DIR
1556157bc1f5291c9a50691c8878830fbba8e11f710David 'Digit' Turnerfi
1566157bc1f5291c9a50691c8878830fbba8e11f710David 'Digit' Turner
157450766678abf628559f96700082d29689ad1b2b6David 'Digit' Turnerif [ -n "$PREBUILT_PREFIX" ] ; then
158450766678abf628559f96700082d29689ad1b2b6David 'Digit' Turner    if [ -d "$PREBUILT_PREFIX" ] ; then
159450766678abf628559f96700082d29689ad1b2b6David 'Digit' Turner        echo "ERROR: the --prebuilt-prefix argument must not be a direct directory path: $PREBUILT_PREFIX."
160cae78f99bebefece4faf2464bc9cbf6c40e33070David 'Digit' Turner        exit 1
161cae78f99bebefece4faf2464bc9cbf6c40e33070David 'Digit' Turner    fi
162450766678abf628559f96700082d29689ad1b2b6David 'Digit' Turner    PREBUILT_DIR=`dirname $PREBUILT_PREFIX`
163450766678abf628559f96700082d29689ad1b2b6David 'Digit' Turner    if [ ! -d "$PREBUILT_DIR" ] ; then
164450766678abf628559f96700082d29689ad1b2b6David 'Digit' Turner        echo "ERROR: the --prebuilt-prefix argument does not point to a directory: $PREBUILT_DIR"
165721a3eb0d56840dd24fde4ee4d51259e43c002e5David 'Digit' Turner        exit 1
166721a3eb0d56840dd24fde4ee4d51259e43c002e5David 'Digit' Turner    fi
167721a3eb0d56840dd24fde4ee4d51259e43c002e5David 'Digit' Turner    if [ -z "$PREBUILT_SYSTEMS" ] ; then
168721a3eb0d56840dd24fde4ee4d51259e43c002e5David 'Digit' Turner        echo "ERROR: Your systems list is empty, use --system=LIST to specify a different one."
169721a3eb0d56840dd24fde4ee4d51259e43c002e5David 'Digit' Turner        exit 1
170721a3eb0d56840dd24fde4ee4d51259e43c002e5David 'Digit' Turner    fi
171721a3eb0d56840dd24fde4ee4d51259e43c002e5David 'Digit' Turner    # Check the systems
172721a3eb0d56840dd24fde4ee4d51259e43c002e5David 'Digit' Turner    #
173721a3eb0d56840dd24fde4ee4d51259e43c002e5David 'Digit' Turner    for SYS in $PREBUILT_SYSTEMS; do
174450766678abf628559f96700082d29689ad1b2b6David 'Digit' Turner        if [ ! -f $PREBUILT_PREFIX-$SYS.tar.bz2 ] ; then
175721a3eb0d56840dd24fde4ee4d51259e43c002e5David 'Digit' Turner            echo "ERROR: It seems there is no prebuilt binary tarball for the '$SYS' system"
176721a3eb0d56840dd24fde4ee4d51259e43c002e5David 'Digit' Turner            echo "Please check the content of $PREBUILT_DIR for a file named $PREBUILT_PREFIX-$SYS.tar.bz2."
177721a3eb0d56840dd24fde4ee4d51259e43c002e5David 'Digit' Turner            exit 1
178721a3eb0d56840dd24fde4ee4d51259e43c002e5David 'Digit' Turner        fi
179721a3eb0d56840dd24fde4ee4d51259e43c002e5David 'Digit' Turner    done
180721a3eb0d56840dd24fde4ee4d51259e43c002e5David 'Digit' Turnerelse
181721a3eb0d56840dd24fde4ee4d51259e43c002e5David 'Digit' Turner    if [ ! -f "$PREBUILT_NDK" ] ; then
182721a3eb0d56840dd24fde4ee4d51259e43c002e5David 'Digit' Turner        echo "ERROR: the --prebuilt-ndk argument is not a file: $PREBUILT_NDK"
183721a3eb0d56840dd24fde4ee4d51259e43c002e5David 'Digit' Turner        exit 1
184721a3eb0d56840dd24fde4ee4d51259e43c002e5David 'Digit' Turner    fi
185721a3eb0d56840dd24fde4ee4d51259e43c002e5David 'Digit' Turner    # Check that the name ends with the proper host tag
186721a3eb0d56840dd24fde4ee4d51259e43c002e5David 'Digit' Turner    HOST_NDK_SUFFIX="$HOST_TAG.zip"
187721a3eb0d56840dd24fde4ee4d51259e43c002e5David 'Digit' Turner    echo "$PREBUILT_NDK" | grep -q "$HOST_NDK_SUFFIX"
188721a3eb0d56840dd24fde4ee4d51259e43c002e5David 'Digit' Turner    if [ $? != 0 ] ; then
189721a3eb0d56840dd24fde4ee4d51259e43c002e5David 'Digit' Turner        echo "ERROR: the name of the prebuilt NDK must end in $HOST_NDK_SUFFIX"
190721a3eb0d56840dd24fde4ee4d51259e43c002e5David 'Digit' Turner        exit 1
191721a3eb0d56840dd24fde4ee4d51259e43c002e5David 'Digit' Turner    fi
192721a3eb0d56840dd24fde4ee4d51259e43c002e5David 'Digit' Turner    PREBUILT_SYSTEMS=$HOST_TAG
193721a3eb0d56840dd24fde4ee4d51259e43c002e5David 'Digit' Turnerfi
194cae78f99bebefece4faf2464bc9cbf6c40e33070David 'Digit' Turner
19531ab66466eaac85ebb0243d7df43d5082a3fd154David 'Digit' Turner# The list of git files to copy into the archives
196721a3eb0d56840dd24fde4ee4d51259e43c002e5David 'Digit' Turnerif [ "$USE_GIT_FILES" = "yes" ] ; then
197721a3eb0d56840dd24fde4ee4d51259e43c002e5David 'Digit' Turner    echo "Collecting sources from git (use --no-git to copy all files instead)."
198721a3eb0d56840dd24fde4ee4d51259e43c002e5David 'Digit' Turner    GIT_FILES=`cd $NDK_ROOT_DIR && git ls-files`
199721a3eb0d56840dd24fde4ee4d51259e43c002e5David 'Digit' Turnerelse
200721a3eb0d56840dd24fde4ee4d51259e43c002e5David 'Digit' Turner    echo "Collecting all sources files under tree."
201721a3eb0d56840dd24fde4ee4d51259e43c002e5David 'Digit' Turner    # Cleanup everything that is likely to not be part of the final NDK
202721a3eb0d56840dd24fde4ee4d51259e43c002e5David 'Digit' Turner    # i.e. generated files...
203ea573da2c3f1a8379f4344d023035fdf795c768dDavid 'Digit' Turner    rm -rf $NDK_ROOT_DIR/samples/*/obj
204ea573da2c3f1a8379f4344d023035fdf795c768dDavid 'Digit' Turner    rm -rf $NDK_ROOT_DIR/samples/*/libs
205721a3eb0d56840dd24fde4ee4d51259e43c002e5David 'Digit' Turner    # Get all files under the NDK root
206721a3eb0d56840dd24fde4ee4d51259e43c002e5David 'Digit' Turner    GIT_FILES=`cd $NDK_ROOT_DIR && find .`
207721a3eb0d56840dd24fde4ee4d51259e43c002e5David 'Digit' Turner    GIT_FILES=`echo $GIT_FILES | sed -e "s!\./!!g"`
208721a3eb0d56840dd24fde4ee4d51259e43c002e5David 'Digit' Turnerfi
209c8906b0ac264f8a5f07849c760b4d9fc60789c94David 'Digit' Turner
210c8906b0ac264f8a5f07849c760b4d9fc60789c94David 'Digit' Turner# temporary directory used for packaging
211c8906b0ac264f8a5f07849c760b4d9fc60789c94David 'Digit' TurnerTMPDIR=/tmp/ndk-release
212c8906b0ac264f8a5f07849c760b4d9fc60789c94David 'Digit' Turner
213cae78f99bebefece4faf2464bc9cbf6c40e33070David 'Digit' TurnerRELEASE_PREFIX=$PREFIX-$RELEASE
214c8906b0ac264f8a5f07849c760b4d9fc60789c94David 'Digit' Turner
215ea573da2c3f1a8379f4344d023035fdf795c768dDavid 'Digit' Turner# ensure that the generated files are ug+rx
2166157bc1f5291c9a50691c8878830fbba8e11f710David 'Digit' Turnerumask 0022
2176157bc1f5291c9a50691c8878830fbba8e11f710David 'Digit' Turner
218c8906b0ac264f8a5f07849c760b4d9fc60789c94David 'Digit' Turnerrm -rf $TMPDIR && mkdir -p $TMPDIR
219c8906b0ac264f8a5f07849c760b4d9fc60789c94David 'Digit' Turner
220c8906b0ac264f8a5f07849c760b4d9fc60789c94David 'Digit' Turner# first create the reference ndk directory from the git reference
221721a3eb0d56840dd24fde4ee4d51259e43c002e5David 'Digit' Turnerecho "Creating reference from source files"
222c8906b0ac264f8a5f07849c760b4d9fc60789c94David 'Digit' TurnerREFERENCE=$TMPDIR/reference &&
223c8906b0ac264f8a5f07849c760b4d9fc60789c94David 'Digit' Turnermkdir -p $REFERENCE &&
22431ab66466eaac85ebb0243d7df43d5082a3fd154David 'Digit' Turner(cd $NDK_ROOT_DIR && tar cf - $GIT_FILES) | (cd $REFERENCE && tar xf -) &&
225c8906b0ac264f8a5f07849c760b4d9fc60789c94David 'Digit' Turnerrm -f $REFERENCE/Android.mk
226c8906b0ac264f8a5f07849c760b4d9fc60789c94David 'Digit' Turnerif [ $? != 0 ] ; then
227721a3eb0d56840dd24fde4ee4d51259e43c002e5David 'Digit' Turner    echo "Could not create reference. Aborting."
228c8906b0ac264f8a5f07849c760b4d9fc60789c94David 'Digit' Turner    exit 2
229c8906b0ac264f8a5f07849c760b4d9fc60789c94David 'Digit' Turnerfi
230c8906b0ac264f8a5f07849c760b4d9fc60789c94David 'Digit' Turner
23177d9a08814a063577d086dc356a5a55d5ff55bf6David 'Digit' Turner# copy platform and sample files
23277d9a08814a063577d086dc356a5a55d5ff55bf6David 'Digit' Turnerecho "Copying platform and sample files"
23377d9a08814a063577d086dc356a5a55d5ff55bf6David 'Digit' TurnerFLAGS="--src-dir=$DEVELOPMENT_ROOT --dst-dir=$REFERENCE"
23477d9a08814a063577d086dc356a5a55d5ff55bf6David 'Digit' Turnerif [ "$VERBOSE2" = "yes" ] ; then
23577d9a08814a063577d086dc356a5a55d5ff55bf6David 'Digit' Turner  FLAGS="$FLAGS --verbose"
236a775f5537568f4768cd61931bb1b5314694adc96David 'Digit' Turnerfi
23777d9a08814a063577d086dc356a5a55d5ff55bf6David 'Digit' TurnerPLATFORM_FLAGS=
23877d9a08814a063577d086dc356a5a55d5ff55bf6David 'Digit' Turnerif [ -n "$PLATFORMS" ] ; then
239ea573da2c3f1a8379f4344d023035fdf795c768dDavid 'Digit' Turner    $NDK_ROOT_DIR/build/tools/build-platforms.sh $FLAGS --platform="$PLATFORMS"
240ea573da2c3f1a8379f4344d023035fdf795c768dDavid 'Digit' Turnerelse
241ea573da2c3f1a8379f4344d023035fdf795c768dDavid 'Digit' Turner    $NDK_ROOT_DIR/build/tools/build-platforms.sh $FLAGS $PLATFORM_FLAGS
242a775f5537568f4768cd61931bb1b5314694adc96David 'Digit' Turnerfi
24377d9a08814a063577d086dc356a5a55d5ff55bf6David 'Digit' Turnerif [ $? != 0 ] ; then
24477d9a08814a063577d086dc356a5a55d5ff55bf6David 'Digit' Turner    echo "Could not copy platform files. Aborting."
24577d9a08814a063577d086dc356a5a55d5ff55bf6David 'Digit' Turner    exit 2
24677d9a08814a063577d086dc356a5a55d5ff55bf6David 'Digit' Turnerfi
24777d9a08814a063577d086dc356a5a55d5ff55bf6David 'Digit' Turner
248ea573da2c3f1a8379f4344d023035fdf795c768dDavid 'Digit' Turner# copy sources files
249ea573da2c3f1a8379f4344d023035fdf795c768dDavid 'Digit' Turnerif [ -d $DEVELOPMENT_ROOT/sources ] ; then
250ea573da2c3f1a8379f4344d023035fdf795c768dDavid 'Digit' Turner    echo "Copying NDK sources files"
251ea573da2c3f1a8379f4344d023035fdf795c768dDavid 'Digit' Turner    (cd $DEVELOPMENT_ROOT && tar cf - sources) | (cd $REFERENCE && tar xf -)
252ea573da2c3f1a8379f4344d023035fdf795c768dDavid 'Digit' Turner    if [ $? != 0 ] ; then
253ea573da2c3f1a8379f4344d023035fdf795c768dDavid 'Digit' Turner        echo "Could not copy sources. Aborting."
254ea573da2c3f1a8379f4344d023035fdf795c768dDavid 'Digit' Turner        exit 2
255ea573da2c3f1a8379f4344d023035fdf795c768dDavid 'Digit' Turner    fi
256ea573da2c3f1a8379f4344d023035fdf795c768dDavid 'Digit' Turnerfi
257ea573da2c3f1a8379f4344d023035fdf795c768dDavid 'Digit' Turner
25877d9a08814a063577d086dc356a5a55d5ff55bf6David 'Digit' Turner# create a release file named 'RELEASE.TXT' containing the release
25977d9a08814a063577d086dc356a5a55d5ff55bf6David 'Digit' Turner# name. This is used by the build script to detect whether you're
26077d9a08814a063577d086dc356a5a55d5ff55bf6David 'Digit' Turner# invoking the NDK from a release package or from the development
26177d9a08814a063577d086dc356a5a55d5ff55bf6David 'Digit' Turner# tree.
26277d9a08814a063577d086dc356a5a55d5ff55bf6David 'Digit' Turner#
26377d9a08814a063577d086dc356a5a55d5ff55bf6David 'Digit' Turnerecho "$RELEASE" > $REFERENCE/RELEASE.TXT
264a775f5537568f4768cd61931bb1b5314694adc96David 'Digit' Turner
2656b5bc468b9be34c7dbd4531274bb1a2d55542731David 'Digit' Turner# Remove un-needed files
2666b5bc468b9be34c7dbd4531274bb1a2d55542731David 'Digit' Turnerrm -f $REFERENCE/CleanSpec.mk
2676b5bc468b9be34c7dbd4531274bb1a2d55542731David 'Digit' Turner
268721a3eb0d56840dd24fde4ee4d51259e43c002e5David 'Digit' Turner# now, for each system, create a package
269c8906b0ac264f8a5f07849c760b4d9fc60789c94David 'Digit' Turner#
270c8906b0ac264f8a5f07849c760b4d9fc60789c94David 'Digit' Turnerfor SYSTEM in $PREBUILT_SYSTEMS; do
271c8906b0ac264f8a5f07849c760b4d9fc60789c94David 'Digit' Turner    echo "Preparing package for system $SYSTEM."
272c8906b0ac264f8a5f07849c760b4d9fc60789c94David 'Digit' Turner    BIN_RELEASE=$RELEASE_PREFIX-$SYSTEM
273450766678abf628559f96700082d29689ad1b2b6David 'Digit' Turner    PREBUILT=$PREBUILT_PREFIX-$SYSTEM
274c8906b0ac264f8a5f07849c760b4d9fc60789c94David 'Digit' Turner    DSTDIR=$TMPDIR/$RELEASE_PREFIX
275c8906b0ac264f8a5f07849c760b4d9fc60789c94David 'Digit' Turner    rm -rf $DSTDIR && mkdir -p $DSTDIR &&
276c8906b0ac264f8a5f07849c760b4d9fc60789c94David 'Digit' Turner    cp -rp $REFERENCE/* $DSTDIR
277c8906b0ac264f8a5f07849c760b4d9fc60789c94David 'Digit' Turner    if [ $? != 0 ] ; then
278c8906b0ac264f8a5f07849c760b4d9fc60789c94David 'Digit' Turner        echo "Could not copy reference. Aborting."
279c8906b0ac264f8a5f07849c760b4d9fc60789c94David 'Digit' Turner        exit 2
280c8906b0ac264f8a5f07849c760b4d9fc60789c94David 'Digit' Turner    fi
281607c57ec9a28e2dfc1db6c0f5f61111b562c64e1David 'Digit' Turner
282721a3eb0d56840dd24fde4ee4d51259e43c002e5David 'Digit' Turner    if [ -n "$PREBUILT_NDK" ] ; then
283721a3eb0d56840dd24fde4ee4d51259e43c002e5David 'Digit' Turner        echo "Unpacking prebuilt toolchain from $PREBUILT_NDK"
284721a3eb0d56840dd24fde4ee4d51259e43c002e5David 'Digit' Turner        UNZIP_DIR=$TMPDIR/prev-ndk
285721a3eb0d56840dd24fde4ee4d51259e43c002e5David 'Digit' Turner        rm -rf $UNZIP_DIR && mkdir -p $UNZIP_DIR
286721a3eb0d56840dd24fde4ee4d51259e43c002e5David 'Digit' Turner        if [ $? != 0 ] ; then
287721a3eb0d56840dd24fde4ee4d51259e43c002e5David 'Digit' Turner            echo "Could not create temporary directory: $UNZIP_DIR"
288721a3eb0d56840dd24fde4ee4d51259e43c002e5David 'Digit' Turner            exit 1
289721a3eb0d56840dd24fde4ee4d51259e43c002e5David 'Digit' Turner        fi
290721a3eb0d56840dd24fde4ee4d51259e43c002e5David 'Digit' Turner        cd $UNZIP_DIR && unzip -q $PREBUILT_NDK 1>/dev/null 2>&1
291721a3eb0d56840dd24fde4ee4d51259e43c002e5David 'Digit' Turner        if [ $? != 0 ] ; then
292721a3eb0d56840dd24fde4ee4d51259e43c002e5David 'Digit' Turner            echo "ERROR: Could not unzip NDK package $PREBUILT_NDK"
293721a3eb0d56840dd24fde4ee4d51259e43c002e5David 'Digit' Turner            exit 1
294721a3eb0d56840dd24fde4ee4d51259e43c002e5David 'Digit' Turner        fi
295721a3eb0d56840dd24fde4ee4d51259e43c002e5David 'Digit' Turner        cd android-ndk-* && cp -rP build/prebuilt $DSTDIR/build
296721a3eb0d56840dd24fde4ee4d51259e43c002e5David 'Digit' Turner    else
297721a3eb0d56840dd24fde4ee4d51259e43c002e5David 'Digit' Turner        echo "Unpacking $PREBUILT.tar.bz2"
298721a3eb0d56840dd24fde4ee4d51259e43c002e5David 'Digit' Turner        (cd $DSTDIR && tar xjf $PREBUILT.tar.bz2) 2>/dev/null 1>&2
299721a3eb0d56840dd24fde4ee4d51259e43c002e5David 'Digit' Turner        if [ $? != 0 ] ; then
300721a3eb0d56840dd24fde4ee4d51259e43c002e5David 'Digit' Turner            echo "Could not unpack prebuilt for system $SYSTEM. Aborting."
301721a3eb0d56840dd24fde4ee4d51259e43c002e5David 'Digit' Turner            exit 1
302721a3eb0d56840dd24fde4ee4d51259e43c002e5David 'Digit' Turner        fi
303c8906b0ac264f8a5f07849c760b4d9fc60789c94David 'Digit' Turner    fi
304607c57ec9a28e2dfc1db6c0f5f61111b562c64e1David 'Digit' Turner
305b161f18450d9c225097f02eaf23106a157393e8eXavier Ducrohet    ARCHIVE=$BIN_RELEASE.zip
306b161f18450d9c225097f02eaf23106a157393e8eXavier Ducrohet    echo "Creating $ARCHIVE"
3076157bc1f5291c9a50691c8878830fbba8e11f710David 'Digit' Turner    (cd $TMPDIR && zip -9qr $OUT_DIR/$ARCHIVE $RELEASE_PREFIX && rm -rf $DSTDIR) 2>/dev/null 1>&2
308b161f18450d9c225097f02eaf23106a157393e8eXavier Ducrohet    if [ $? != 0 ] ; then
309b161f18450d9c225097f02eaf23106a157393e8eXavier Ducrohet        echo "Could not create zip archive. Aborting."
310b161f18450d9c225097f02eaf23106a157393e8eXavier Ducrohet        exit 1
311b161f18450d9c225097f02eaf23106a157393e8eXavier Ducrohet    fi
312b161f18450d9c225097f02eaf23106a157393e8eXavier Ducrohet
3136157bc1f5291c9a50691c8878830fbba8e11f710David 'Digit' Turner#    chmod a+r $TMPDIR/$ARCHIVE
314c8906b0ac264f8a5f07849c760b4d9fc60789c94David 'Digit' Turnerdone
315c8906b0ac264f8a5f07849c760b4d9fc60789c94David 'Digit' Turner
316c8906b0ac264f8a5f07849c760b4d9fc60789c94David 'Digit' Turnerecho "Cleaning up."
317c8906b0ac264f8a5f07849c760b4d9fc60789c94David 'Digit' Turnerrm -rf $TMPDIR/reference
318721a3eb0d56840dd24fde4ee4d51259e43c002e5David 'Digit' Turnerrm -rf $TMPDIR/prev-ndk
319c8906b0ac264f8a5f07849c760b4d9fc60789c94David 'Digit' Turner
3206157bc1f5291c9a50691c8878830fbba8e11f710David 'Digit' Turnerecho "Done, please see packages in $OUT_DIR:"
3216157bc1f5291c9a50691c8878830fbba8e11f710David 'Digit' Turnerls -l $OUT_DIR
322