summaryrefslogtreecommitdiff
path: root/dev-util/android-tools/files/make-tarballs.sh
blob: 5a0a775c12905263e825853c965bc6efc88bf05a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
#!/bin/bash
# Copyright 1999-2018 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2

# Create the various tarballs we need.  GoB does not provide stable archives (unlike github),
# and some repos are uselessly fat, so we have to create things by hand.  Fun times.

set -e

die() {
	echo "error: $*" >&2
	exit 1
}

fetch_boringssl() {
	local ver=$1 tag=$2
	local content hash

	echo "checking boringssl in ${tag}"
	content=$(wget -nv "https://android.googlesource.com/platform/external/boringssl/+/${tag}/BORINGSSL_REVISION?format=TEXT" -O -)
	hash=$(echo "${content}" | base64 -d)
	echo "using boringssl ${hash}"

	local tar="${DISTDIR}/boringssl-${hash}.tar.gz"
	if [[ ! -e ${tar} ]] ; then
		# We use github as it provides stable tarballs.  GoB does not (includes timestamps).
		# https://boringssl.googlesource.com/boringssl/+archive/${hash}.tar.gz
		wget -c "https://github.com/google/boringssl/archive/${hash}.tar.gz" -O "${tar}"
	fi

	du -h "${tar}"
}

# The extras repo has ballooned to ~200MB, so we have to strip the large useless
# files and random binaries.
fetch_extras() {
	local ver=$1 tag=$2
	local tar="${DISTDIR}/android-tools-${ver}-extras.tar.xz"

	if [[ ! -e ${tar} ]] ; then
		local prune=(
			ioshark
			memory_replay
			perfprofd
			simpleperf
		)
		local dir="${tag}-extras"
		rm -rf "${dir}"
		mkdir "${dir}"
		cd "${dir}"

		wget "https://android.googlesource.com/platform/system/extras/+archive/${tag}.tar.gz" -O extras.tar.gz
		tar xf extras.tar.gz
		rm -rf "${prune[@]}" extras.tar.gz

		cd ..
		tar cf - "${dir}" | xz -9 > "${dir}.tar.xz"
		rm -rf "${dir}"

		mv "${dir}.tar.xz" "${tar}"
	fi

	du -h "${tar}"
}

# Since the GoB archive is unstable, we might as well rewrite it into xz to shrink.
fetch_selinux() {
	local ver=$1 tag=$2
	local tar="${DISTDIR}/android-tools-${ver}-selinux.tar.xz"

	if [[ ! -e ${tar} ]] ; then
		wget "https://android.googlesource.com/platform/external/selinux/+archive/${tag}.tar.gz" -O - | zcat | xz > "${tar}"
	fi

	du -h "${tar}"
}

# Since the GoB archive is unstable, we might as well rewrite it into xz to shrink.
fetch_f2fs() {
	local ver=$1 tag=$2
	local tar="${DISTDIR}/android-tools-${ver}-f2fs-tools.tar.xz"

	if [[ ! -e ${tar} ]] ; then
		wget "https://android.googlesource.com/platform/external/f2fs-tools/+archive/${tag}.tar.gz" -O - | zcat | xz > "${tar}"
	fi

	du -h "${tar}"
}

usage() {
	local status=$1

	[[ ${status} -eq 1 ]] && exec 1>&2

	cat <<-EOF
	Usage: $0 <android version>

	To find the next available version, consult:
	https://git.archlinux.org/svntogit/community.git/log/trunk?h=packages/android-tools

	They have some helper scripts for building the files directly.

	Example:
	$0 android-8.1.0_r1
	EOF

	exit ${status}
}

main() {
	[[ $# -ne 1 ]] && usage 1
	[[ $1 == "-h" || $1 == "--help" ]] && usage 0

	if [[ -z ${DISTDIR} ]] ; then
		eval $(portageq -v envvar DISTDIR)
	fi
	if [[ -z ${DISTDIR} ]] ; then
		die "Please set \$DISTDIR first"
	fi

	local ver="${1#android-}"
	local tag="android-${ver}"
	fetch_boringssl "${ver}" "${tag}"
	fetch_extras "${ver}" "${tag}"
	fetch_selinux "${ver}" "${tag}"
	fetch_f2fs "${ver}" "${tag}"
}
main "$@"