xref: /aosp_15_r20/external/sqlite/UPDATE-SOURCE.bash (revision a3141fd39888aecc864dfb08485df64ff6c387f9)
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