179397c21138f54fcff6ec067b44b847f1f7e0e98Carlos Hernandez#!/bin/bash 279397c21138f54fcff6ec067b44b847f1f7e0e98Carlos Hernandez 379397c21138f54fcff6ec067b44b847f1f7e0e98Carlos Hernandez# Bash script to assert that the current version of the NDK is at least the 479397c21138f54fcff6ec067b44b847f1f7e0e98Carlos Hernandez# specified version. Prints 'true' to standard out if it's the right version, 579397c21138f54fcff6ec067b44b847f1f7e0e98Carlos Hernandez# 'false' if it's not. 679397c21138f54fcff6ec067b44b847f1f7e0e98Carlos Hernandez# 779397c21138f54fcff6ec067b44b847f1f7e0e98Carlos Hernandez# Typically used like this, in your jni/Android.mk: 879397c21138f54fcff6ec067b44b847f1f7e0e98Carlos Hernandez# 979397c21138f54fcff6ec067b44b847f1f7e0e98Carlos Hernandez# ifneq ($(shell $(LOCAL_PATH)/assert_ndk_version.sh "r5c" "ndk-dir"), true) 1079397c21138f54fcff6ec067b44b847f1f7e0e98Carlos Hernandez# $(error NDK version r5c or greater required) 1179397c21138f54fcff6ec067b44b847f1f7e0e98Carlos Hernandez# endif 1279397c21138f54fcff6ec067b44b847f1f7e0e98Carlos Hernandez# 1379397c21138f54fcff6ec067b44b847f1f7e0e98Carlos Hernandez# See https://gist.github.com/2878774 for asserting SDK version. 1479397c21138f54fcff6ec067b44b847f1f7e0e98Carlos Hernandez# 1579397c21138f54fcff6ec067b44b847f1f7e0e98Carlos Hernandez# Retrieved from: https://gist.github.com/jorgenpt/1961404 on 2014-06-03. 1679397c21138f54fcff6ec067b44b847f1f7e0e98Carlos Hernandez# 1779397c21138f54fcff6ec067b44b847f1f7e0e98Carlos Hernandez# Copyright (c) 2012, Lookout, Inc. All rights reserved. 1879397c21138f54fcff6ec067b44b847f1f7e0e98Carlos Hernandez# 1979397c21138f54fcff6ec067b44b847f1f7e0e98Carlos Hernandez# Redistribution and use in source and binary forms, with or without 2079397c21138f54fcff6ec067b44b847f1f7e0e98Carlos Hernandez# modification, are permitted provided that the following conditions are met: 2179397c21138f54fcff6ec067b44b847f1f7e0e98Carlos Hernandez# 2279397c21138f54fcff6ec067b44b847f1f7e0e98Carlos Hernandez# 1. Redistributions of source code must retain the above copyright notice, 2379397c21138f54fcff6ec067b44b847f1f7e0e98Carlos Hernandez# this list of conditions and the following disclaimer. 2479397c21138f54fcff6ec067b44b847f1f7e0e98Carlos Hernandez# 2579397c21138f54fcff6ec067b44b847f1f7e0e98Carlos Hernandez# 2. Redistributions in binary form must reproduce the above copyright 2679397c21138f54fcff6ec067b44b847f1f7e0e98Carlos Hernandez# notice, this list of conditions and the following disclaimer in the 2779397c21138f54fcff6ec067b44b847f1f7e0e98Carlos Hernandez# documentation and/or other materials provided with the distribution. 2879397c21138f54fcff6ec067b44b847f1f7e0e98Carlos Hernandez# 2979397c21138f54fcff6ec067b44b847f1f7e0e98Carlos Hernandez# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 3079397c21138f54fcff6ec067b44b847f1f7e0e98Carlos Hernandez# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED 3179397c21138f54fcff6ec067b44b847f1f7e0e98Carlos Hernandez# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 3279397c21138f54fcff6ec067b44b847f1f7e0e98Carlos Hernandez# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR 3379397c21138f54fcff6ec067b44b847f1f7e0e98Carlos Hernandez# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 3479397c21138f54fcff6ec067b44b847f1f7e0e98Carlos Hernandez# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 3579397c21138f54fcff6ec067b44b847f1f7e0e98Carlos Hernandez# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; 3679397c21138f54fcff6ec067b44b847f1f7e0e98Carlos Hernandez# OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 3779397c21138f54fcff6ec067b44b847f1f7e0e98Carlos Hernandez# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR 3879397c21138f54fcff6ec067b44b847f1f7e0e98Carlos Hernandez# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF 3979397c21138f54fcff6ec067b44b847f1f7e0e98Carlos Hernandez# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 4079397c21138f54fcff6ec067b44b847f1f7e0e98Carlos Hernandez# 4179397c21138f54fcff6ec067b44b847f1f7e0e98Carlos Hernandez# Author: jorgenpt@gmail.com (Jorgen Tjerno) 4279397c21138f54fcff6ec067b44b847f1f7e0e98Carlos Hernandez# alexs.mac@gmail.com (Alex Stewart) 4379397c21138f54fcff6ec067b44b847f1f7e0e98Carlos Hernandez 4479397c21138f54fcff6ec067b44b847f1f7e0e98Carlos Hernandez# Extracts 'r5c' into '5 c', also handles newer versions of the form 4579397c21138f54fcff6ec067b44b847f1f7e0e98Carlos Hernandez# 'r9d (64-bit)' and versions >= 10. 4679397c21138f54fcff6ec067b44b847f1f7e0e98Carlos Hernandezfunction get_major_minor() { 4779397c21138f54fcff6ec067b44b847f1f7e0e98Carlos Hernandez # r9d (64-bit) -> '9d', also handle versions >= 10. 4879397c21138f54fcff6ec067b44b847f1f7e0e98Carlos Hernandez local version=$(echo "$1" | sed 's/r\([0-9]\{1,2\}[a-z]\{0,1\}\).*/\1/') 4979397c21138f54fcff6ec067b44b847f1f7e0e98Carlos Hernandez local major=$(echo "$version" | sed 's/\([0-9]\{1,2\}\).*/\1/') 5079397c21138f54fcff6ec067b44b847f1f7e0e98Carlos Hernandez local minor=$(echo "$version" | sed 's/^[0-9]*//') 5179397c21138f54fcff6ec067b44b847f1f7e0e98Carlos Hernandez echo "$major $minor" 5279397c21138f54fcff6ec067b44b847f1f7e0e98Carlos Hernandez} 5379397c21138f54fcff6ec067b44b847f1f7e0e98Carlos Hernandez 5479397c21138f54fcff6ec067b44b847f1f7e0e98Carlos Hernandezif [[ -z "$2" ]]; then 5579397c21138f54fcff6ec067b44b847f1f7e0e98Carlos Hernandez echo "Usage: $0 <required version> <NDK_ROOT>" >&2 5679397c21138f54fcff6ec067b44b847f1f7e0e98Carlos Hernandez echo " For example: $0 r5c android-ndk-r9d" >&2 5779397c21138f54fcff6ec067b44b847f1f7e0e98Carlos Hernandez exit 1 5879397c21138f54fcff6ec067b44b847f1f7e0e98Carlos Hernandezfi 5979397c21138f54fcff6ec067b44b847f1f7e0e98Carlos Hernandez 6079397c21138f54fcff6ec067b44b847f1f7e0e98Carlos Hernandez# Assert that the expected version is at least 4. 6179397c21138f54fcff6ec067b44b847f1f7e0e98Carlos Hernandezdeclare -a expected_version 6279397c21138f54fcff6ec067b44b847f1f7e0e98Carlos Hernandezexpected_version=( $(get_major_minor "$1") ) 6379397c21138f54fcff6ec067b44b847f1f7e0e98Carlos Hernandezif [[ ${expected_version[0]} -le 4 ]]; then 6479397c21138f54fcff6ec067b44b847f1f7e0e98Carlos Hernandez echo "Cannot test for versions less than r5: r4 doesn't have a version file." >&2 6579397c21138f54fcff6ec067b44b847f1f7e0e98Carlos Hernandez echo false 6679397c21138f54fcff6ec067b44b847f1f7e0e98Carlos Hernandez exit 1 6779397c21138f54fcff6ec067b44b847f1f7e0e98Carlos Hernandezfi 6879397c21138f54fcff6ec067b44b847f1f7e0e98Carlos Hernandez 6979397c21138f54fcff6ec067b44b847f1f7e0e98Carlos Hernandezrelease_file="$2/RELEASE.TXT" 7079397c21138f54fcff6ec067b44b847f1f7e0e98Carlos Hernandez 7179397c21138f54fcff6ec067b44b847f1f7e0e98Carlos Hernandez# NDK version r4 or earlier doesn't have a RELEASE.txt, and we just asserted 7279397c21138f54fcff6ec067b44b847f1f7e0e98Carlos Hernandez# that the person was looking for r5 or above, so that implies that this is an 7379397c21138f54fcff6ec067b44b847f1f7e0e98Carlos Hernandez# invalid version. 7479397c21138f54fcff6ec067b44b847f1f7e0e98Carlos Hernandezif [ ! -s "$release_file" ]; then 7579397c21138f54fcff6ec067b44b847f1f7e0e98Carlos Hernandez echo false 7679397c21138f54fcff6ec067b44b847f1f7e0e98Carlos Hernandez exit 0 7779397c21138f54fcff6ec067b44b847f1f7e0e98Carlos Hernandezfi 7879397c21138f54fcff6ec067b44b847f1f7e0e98Carlos Hernandez 7979397c21138f54fcff6ec067b44b847f1f7e0e98Carlos Hernandez# Make sure the data is at least kinda sane. 8079397c21138f54fcff6ec067b44b847f1f7e0e98Carlos Hernandezversion=$(grep '^r' $release_file) 8179397c21138f54fcff6ec067b44b847f1f7e0e98Carlos Hernandezdeclare -a actual_version 8279397c21138f54fcff6ec067b44b847f1f7e0e98Carlos Hernandezactual_version=( $(get_major_minor "$version") ) 8379397c21138f54fcff6ec067b44b847f1f7e0e98Carlos Hernandezif [ -z "$version" ] || [ -z "${actual_version[0]}" ]; then 8479397c21138f54fcff6ec067b44b847f1f7e0e98Carlos Hernandez echo "Invalid RELEASE.txt: $(cat $release_file)" >&2 8579397c21138f54fcff6ec067b44b847f1f7e0e98Carlos Hernandez echo false 8679397c21138f54fcff6ec067b44b847f1f7e0e98Carlos Hernandez exit 1 8779397c21138f54fcff6ec067b44b847f1f7e0e98Carlos Hernandezfi 8879397c21138f54fcff6ec067b44b847f1f7e0e98Carlos Hernandez 8979397c21138f54fcff6ec067b44b847f1f7e0e98Carlos Hernandezif [[ ${actual_version[0]} -lt ${expected_version[0]} ]]; then 9079397c21138f54fcff6ec067b44b847f1f7e0e98Carlos Hernandez echo "false" 9179397c21138f54fcff6ec067b44b847f1f7e0e98Carlos Hernandezelif [[ ${actual_version[0]} -eq ${expected_version[0]} ]]; then 9279397c21138f54fcff6ec067b44b847f1f7e0e98Carlos Hernandez # This uses < and not -lt because they're string identifiers (a, b, c, etc) 9379397c21138f54fcff6ec067b44b847f1f7e0e98Carlos Hernandez if [[ "${actual_version[1]}" < "${expected_version[1]}" ]]; then 9479397c21138f54fcff6ec067b44b847f1f7e0e98Carlos Hernandez echo "false" 9579397c21138f54fcff6ec067b44b847f1f7e0e98Carlos Hernandez else 9679397c21138f54fcff6ec067b44b847f1f7e0e98Carlos Hernandez echo "true" 9779397c21138f54fcff6ec067b44b847f1f7e0e98Carlos Hernandez fi 9879397c21138f54fcff6ec067b44b847f1f7e0e98Carlos Hernandezelse 9979397c21138f54fcff6ec067b44b847f1f7e0e98Carlos Hernandez echo "true" 10079397c21138f54fcff6ec067b44b847f1f7e0e98Carlos Hernandezfi 101