1*a3141fd3SAndroid Build Coastguard Worker#!/bin/bash 2*a3141fd3SAndroid Build Coastguard Worker# 3*a3141fd3SAndroid Build Coastguard Worker# Copyright (C) 2018 The Android Open Source Project 4*a3141fd3SAndroid Build Coastguard Worker# 5*a3141fd3SAndroid Build Coastguard Worker# Licensed under the Apache License, Version 2.0 (the "License"); 6*a3141fd3SAndroid Build Coastguard Worker# you may not use this file except in compliance with the License. 7*a3141fd3SAndroid Build Coastguard Worker# You may obtain a copy of the License at 8*a3141fd3SAndroid Build Coastguard Worker# 9*a3141fd3SAndroid Build Coastguard Worker# http://www.apache.org/licenses/LICENSE-2.0 10*a3141fd3SAndroid Build Coastguard Worker# 11*a3141fd3SAndroid Build Coastguard Worker# Unless required by applicable law or agreed to in writing, software 12*a3141fd3SAndroid Build Coastguard Worker# distributed under the License is distributed on an "AS IS" BASIS, 13*a3141fd3SAndroid Build Coastguard Worker# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14*a3141fd3SAndroid Build Coastguard Worker# See the License for the specific language governing permissions and 15*a3141fd3SAndroid Build Coastguard Worker# limitations under the License. 16*a3141fd3SAndroid Build Coastguard Worker 17*a3141fd3SAndroid Build Coastguard Worker# This script updates SQLite source files with a SQLite tarball. The tarball is 18*a3141fd3SAndroid Build Coastguard Worker# downloaded from the sqlite website. 19*a3141fd3SAndroid Build Coastguard Worker# 20*a3141fd3SAndroid Build Coastguard Worker# Usage: UPDATE-SOURCE.bash [-nF] <year> <sqlite-release> 21*a3141fd3SAndroid Build Coastguard Worker# 22*a3141fd3SAndroid Build Coastguard Worker# This script must be executed in $ANDROID_BUILD_TOP/external/sqlite/. However, 23*a3141fd3SAndroid Build Coastguard Worker# for testing it can run anywhere: use the -F switch. 24*a3141fd3SAndroid Build Coastguard Worker# 25*a3141fd3SAndroid Build Coastguard Worker 26*a3141fd3SAndroid Build Coastguard Workerset -e 27*a3141fd3SAndroid Build Coastguard Worker 28*a3141fd3SAndroid Build Coastguard Workerscript_name="$(basename "$0")" 29*a3141fd3SAndroid Build Coastguard Workerscript_dir=$(dirname $(realpath ${BASH_SOURCE[0]})) 30*a3141fd3SAndroid Build Coastguard Worker 31*a3141fd3SAndroid Build Coastguard Workersource $script_dir/common-functions.sh 32*a3141fd3SAndroid Build Coastguard Worker 33*a3141fd3SAndroid Build Coastguard Workerusage() { 34*a3141fd3SAndroid Build Coastguard Worker if [[ $# -gt 0 ]]; then echo "$*" >&2; fi 35*a3141fd3SAndroid Build Coastguard Worker echo "Usage: ${script_name} [-nF] [-u <url>] <year> <version>" 36*a3141fd3SAndroid Build Coastguard Worker echo " year the 4-digit year the sqlite version was released" 37*a3141fd3SAndroid Build Coastguard Worker echo " version the sqlite version as <major>.<minor>[.<patch>]" 38*a3141fd3SAndroid Build Coastguard Worker echo " the patch level defaults to 0" 39*a3141fd3SAndroid Build Coastguard Worker echo " -n dry-run: evaluate arguments but d not change anything" 40*a3141fd3SAndroid Build Coastguard Worker echo " -u url download the tarball from the specified url" 41*a3141fd3SAndroid Build Coastguard Worker echo " -F force execution even if not in external/sqlite" 42*a3141fd3SAndroid Build Coastguard Worker echo 43*a3141fd3SAndroid Build Coastguard Worker echo "Example:" 44*a3141fd3SAndroid Build Coastguard Worker echo "${script_name} 2023 3.42" 45*a3141fd3SAndroid Build Coastguard Worker} 46*a3141fd3SAndroid Build Coastguard Worker 47*a3141fd3SAndroid Build Coastguard Workerdry_run= 48*a3141fd3SAndroid Build Coastguard Workerforce= 49*a3141fd3SAndroid Build Coastguard Workersrc_tarball_url= 50*a3141fd3SAndroid Build Coastguard Workerwhile getopts "hnFu:" option; do 51*a3141fd3SAndroid Build Coastguard Worker case $option in 52*a3141fd3SAndroid Build Coastguard Worker h) usage; exit 0;; 53*a3141fd3SAndroid Build Coastguard Worker n) dry_run=y;; 54*a3141fd3SAndroid Build Coastguard Worker u) src_tarball_url=$OPTARG;; 55*a3141fd3SAndroid Build Coastguard Worker F) force=y;; 56*a3141fd3SAndroid Build Coastguard Worker *) usage "unknown switch"; exit 1;; 57*a3141fd3SAndroid Build Coastguard Worker esac 58*a3141fd3SAndroid Build Coastguard Workerdone 59*a3141fd3SAndroid Build Coastguard Workershift $((OPTIND- 1)) 60*a3141fd3SAndroid Build Coastguard Worker 61*a3141fd3SAndroid Build Coastguard Workerif [[ $# -lt 2 ]]; then 62*a3141fd3SAndroid Build Coastguard Worker usage; die "missing required arguments" 63*a3141fd3SAndroid Build Coastguard Workerelif [[ $# -gt 2 ]]; then 64*a3141fd3SAndroid Build Coastguard Worker die "extra arguments on command line" 65*a3141fd3SAndroid Build Coastguard Workerfi 66*a3141fd3SAndroid Build Coastguard Workeryear=$1 67*a3141fd3SAndroid Build Coastguard Workervalidate_year "$year" || die "invalid year" 68*a3141fd3SAndroid Build Coastguard Workersqlite_release=$(normalize_release "$2") || die "invalid release" 69*a3141fd3SAndroid Build Coastguard Worker 70*a3141fd3SAndroid Build Coastguard Workersqlite_base="sqlite-autoconf-${sqlite_release}" 71*a3141fd3SAndroid Build Coastguard Workersqlite_file="${sqlite_base}.tar.gz" 72*a3141fd3SAndroid Build Coastguard Workerif [[ -z $src_tarball_url ]]; then 73*a3141fd3SAndroid Build Coastguard Worker src_tarball_url="https://www.sqlite.org/$year/${sqlite_file}" 74*a3141fd3SAndroid Build Coastguard Workerfi 75*a3141fd3SAndroid Build Coastguard Worker 76*a3141fd3SAndroid Build Coastguard Workerif [[ -n $dry_run ]]; then 77*a3141fd3SAndroid Build Coastguard Worker echo "fetching $src_tarball_url" 78*a3141fd3SAndroid Build Coastguard Worker echo "installing in dist/$sqlite_base" 79*a3141fd3SAndroid Build Coastguard Worker exit 0 80*a3141fd3SAndroid Build Coastguard Workerfi 81*a3141fd3SAndroid Build Coastguard Worker 82*a3141fd3SAndroid Build Coastguard Workerpwd="$(pwd)" 83*a3141fd3SAndroid Build Coastguard Workerif [[ -z $force && ! "$pwd" =~ .*/external/sqlite/? ]] ; then 84*a3141fd3SAndroid Build Coastguard Worker die 'Execute this script in $ANDROID_BUILD_TOP/external/sqlite/' 85*a3141fd3SAndroid Build Coastguard Workerfi 86*a3141fd3SAndroid Build Coastguard Worker 87*a3141fd3SAndroid Build Coastguard Workersource_tgz=$(mktemp /tmp/sqlite-${sqlite_release}.zip.XXXXXX) 88*a3141fd3SAndroid Build Coastguard Workersource_ext_dir="${source_tgz}.extracted" 89*a3141fd3SAndroid Build Coastguard Workertrap "rm -r ${source_tgz} ${source_ext_dir}" EXIT 90*a3141fd3SAndroid Build Coastguard Workerwget ${src_tarball_url} -O ${source_tgz} 91*a3141fd3SAndroid Build Coastguard Worker 92*a3141fd3SAndroid Build Coastguard Workerecho 93*a3141fd3SAndroid Build Coastguard Workerecho "# Extracting the source tgz..." 94*a3141fd3SAndroid Build Coastguard Workerecho_and_exec rm -fr "$source_ext_dir" 95*a3141fd3SAndroid Build Coastguard Workerecho_and_exec mkdir -p "$source_ext_dir" 96*a3141fd3SAndroid Build Coastguard Workerecho_and_exec tar xvf "$source_tgz" -C "$source_ext_dir" --strip-components=1 97*a3141fd3SAndroid Build Coastguard Worker 98*a3141fd3SAndroid Build Coastguard Workerecho 99*a3141fd3SAndroid Build Coastguard Workerecho "# Making file sqlite3.c in $source_ext_dir ..." 100*a3141fd3SAndroid Build Coastguard Worker( 101*a3141fd3SAndroid Build Coastguard Worker cd "$source_ext_dir" 102*a3141fd3SAndroid Build Coastguard Worker echo_and_exec ./configure 103*a3141fd3SAndroid Build Coastguard Worker echo_and_exec make -j 4 sqlite3.c 104*a3141fd3SAndroid Build Coastguard Worker) 105*a3141fd3SAndroid Build Coastguard Worker 106*a3141fd3SAndroid Build Coastguard Workerexport dist_dir="dist/${sqlite_base}" 107*a3141fd3SAndroid Build Coastguard Workerecho 108*a3141fd3SAndroid Build Coastguard Workerecho "# Copying the source files ..." 109*a3141fd3SAndroid Build Coastguard Workerecho_and_exec rm -rf ${dist_dir} 110*a3141fd3SAndroid Build Coastguard Workerecho_and_exec mkdir -p "${dist_dir}" 111*a3141fd3SAndroid Build Coastguard Workerecho_and_exec mkdir -p "${dist_dir}/orig" 112*a3141fd3SAndroid Build Coastguard Workerfor to in ${dist_dir}/orig/ ${dist_dir}/ ; do 113*a3141fd3SAndroid Build Coastguard Worker echo_and_exec cp "$source_ext_dir/"{shell.c,sqlite3.c,sqlite3.h,sqlite3ext.h} "$to" 114*a3141fd3SAndroid Build Coastguard Workerdone 115*a3141fd3SAndroid Build Coastguard Worker 116*a3141fd3SAndroid Build Coastguard Workerexport patch_dir=${script_dir}/dist 117*a3141fd3SAndroid Build Coastguard Workerecho 118*a3141fd3SAndroid Build Coastguard Workerecho "# Applying Android.patch ..." 119*a3141fd3SAndroid Build Coastguard Worker( 120*a3141fd3SAndroid Build Coastguard Worker cd ${dist_dir} 121*a3141fd3SAndroid Build Coastguard Worker echo "PATCHING IN $dist_dir" >&2 122*a3141fd3SAndroid Build Coastguard Worker echo_and_exec patch -i ${patch_dir}/Android.patch 123*a3141fd3SAndroid Build Coastguard Worker) 124*a3141fd3SAndroid Build Coastguard Worker 125*a3141fd3SAndroid Build Coastguard Workerecho 126*a3141fd3SAndroid Build Coastguard Workerecho "# Regenerating Android.patch ..." 127*a3141fd3SAndroid Build Coastguard Worker( 128*a3141fd3SAndroid Build Coastguard Worker cd ${dist_dir} 129*a3141fd3SAndroid Build Coastguard Worker echo_and_exec bash -c '(for x in orig/*; do diff -u -d $x ${x#orig/}; done) > Android.patch' 130*a3141fd3SAndroid Build Coastguard Worker echo_and_exec cp Android.patch ${patch_dir}/ 131*a3141fd3SAndroid Build Coastguard Worker) 132*a3141fd3SAndroid Build Coastguard Worker 133*a3141fd3SAndroid Build Coastguard Workerecho 134*a3141fd3SAndroid Build Coastguard Workerecho "# Generating metadata ..." 135*a3141fd3SAndroid Build Coastguard Worker( 136*a3141fd3SAndroid Build Coastguard Worker export SQLITE_URL=${src_tarball_url} 137*a3141fd3SAndroid Build Coastguard Worker export SQLITE_VERSION=$(prettify_release ${sqlite_release}) 138*a3141fd3SAndroid Build Coastguard Worker export YEAR=$(date +%Y) 139*a3141fd3SAndroid Build Coastguard Worker export MONTH=$(date +%M) 140*a3141fd3SAndroid Build Coastguard Worker export DAY=$(date +%D) 141*a3141fd3SAndroid Build Coastguard Worker envsubst < README.version.TEMPLATE > ${dist_dir}/README.version 142*a3141fd3SAndroid Build Coastguard Worker envsubst < METADATA.TEMPLATE > ${dist_dir}/METADATA 143*a3141fd3SAndroid Build Coastguard Worker) 144*a3141fd3SAndroid Build Coastguard Worker 145*a3141fd3SAndroid Build Coastguard Workercat <<EOF 146*a3141fd3SAndroid Build Coastguard Worker 147*a3141fd3SAndroid Build Coastguard Worker======================================================= 148*a3141fd3SAndroid Build Coastguard Worker 149*a3141fd3SAndroid Build Coastguard Worker Finished successfully! 150*a3141fd3SAndroid Build Coastguard Worker 151*a3141fd3SAndroid Build Coastguard Worker Make sure to update README.version 152*a3141fd3SAndroid Build Coastguard Worker 153*a3141fd3SAndroid Build Coastguard Worker======================================================= 154*a3141fd3SAndroid Build Coastguard Worker 155*a3141fd3SAndroid Build Coastguard WorkerEOF 156*a3141fd3SAndroid Build Coastguard Worker 157