xref: /aosp_15_r20/external/curl/scripts/maketgz (revision 6236dae45794135f37c4eb022389c904c8b0090d)
1*6236dae4SAndroid Build Coastguard Worker#!/bin/sh
2*6236dae4SAndroid Build Coastguard Worker# Script to build release-archives with. Note that this requires a checkout
3*6236dae4SAndroid Build Coastguard Worker# from git and you should first run autoreconf -fi and build curl once.
4*6236dae4SAndroid Build Coastguard Worker#
5*6236dae4SAndroid Build Coastguard Worker#***************************************************************************
6*6236dae4SAndroid Build Coastguard Worker#                                  _   _ ____  _
7*6236dae4SAndroid Build Coastguard Worker#  Project                     ___| | | |  _ \| |
8*6236dae4SAndroid Build Coastguard Worker#                             / __| | | | |_) | |
9*6236dae4SAndroid Build Coastguard Worker#                            | (__| |_| |  _ <| |___
10*6236dae4SAndroid Build Coastguard Worker#                             \___|\___/|_| \_\_____|
11*6236dae4SAndroid Build Coastguard Worker#
12*6236dae4SAndroid Build Coastguard Worker# Copyright (C) Daniel Stenberg, <[email protected]>, et al.
13*6236dae4SAndroid Build Coastguard Worker#
14*6236dae4SAndroid Build Coastguard Worker# This software is licensed as described in the file COPYING, which
15*6236dae4SAndroid Build Coastguard Worker# you should have received as part of this distribution. The terms
16*6236dae4SAndroid Build Coastguard Worker# are also available at https://curl.se/docs/copyright.html.
17*6236dae4SAndroid Build Coastguard Worker#
18*6236dae4SAndroid Build Coastguard Worker# You may opt to use, copy, modify, merge, publish, distribute and/or sell
19*6236dae4SAndroid Build Coastguard Worker# copies of the Software, and permit persons to whom the Software is
20*6236dae4SAndroid Build Coastguard Worker# furnished to do so, under the terms of the COPYING file.
21*6236dae4SAndroid Build Coastguard Worker#
22*6236dae4SAndroid Build Coastguard Worker# This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
23*6236dae4SAndroid Build Coastguard Worker# KIND, either express or implied.
24*6236dae4SAndroid Build Coastguard Worker#
25*6236dae4SAndroid Build Coastguard Worker# SPDX-License-Identifier: curl
26*6236dae4SAndroid Build Coastguard Worker#
27*6236dae4SAndroid Build Coastguard Worker###########################################################################
28*6236dae4SAndroid Build Coastguard Worker
29*6236dae4SAndroid Build Coastguard Workerset -eu
30*6236dae4SAndroid Build Coastguard Worker
31*6236dae4SAndroid Build Coastguard Workerexport LC_ALL=C
32*6236dae4SAndroid Build Coastguard Workerexport TZ=UTC
33*6236dae4SAndroid Build Coastguard Worker
34*6236dae4SAndroid Build Coastguard Workerversion="${1:-}"
35*6236dae4SAndroid Build Coastguard Workercmd="${2:-}"
36*6236dae4SAndroid Build Coastguard Worker
37*6236dae4SAndroid Build Coastguard Workerif [ -z "$version" ]; then
38*6236dae4SAndroid Build Coastguard Worker  echo "Specify a version number!"
39*6236dae4SAndroid Build Coastguard Worker  exit
40*6236dae4SAndroid Build Coastguard Workerfi
41*6236dae4SAndroid Build Coastguard Worker
42*6236dae4SAndroid Build Coastguard Workerecho "$cmd"
43*6236dae4SAndroid Build Coastguard Worker
44*6236dae4SAndroid Build Coastguard Workeronly=""
45*6236dae4SAndroid Build Coastguard Workerif [ "only" = "$cmd" ]; then
46*6236dae4SAndroid Build Coastguard Worker  echo "Setup version number only!"
47*6236dae4SAndroid Build Coastguard Worker  only=1
48*6236dae4SAndroid Build Coastguard Workerfi
49*6236dae4SAndroid Build Coastguard Worker
50*6236dae4SAndroid Build Coastguard Workercommit=""
51*6236dae4SAndroid Build Coastguard Workerif [ "commit" = "$cmd" ]; then
52*6236dae4SAndroid Build Coastguard Worker  commit=1
53*6236dae4SAndroid Build Coastguard Workerfi
54*6236dae4SAndroid Build Coastguard Worker
55*6236dae4SAndroid Build Coastguard Workerlibversion="$version"
56*6236dae4SAndroid Build Coastguard Worker
57*6236dae4SAndroid Build Coastguard Worker# we make curl the same version as libcurl
58*6236dae4SAndroid Build Coastguard Workercurlversion="$libversion"
59*6236dae4SAndroid Build Coastguard Worker
60*6236dae4SAndroid Build Coastguard Workermajor=$(echo "$libversion" | cut -d. -f1 | sed -e "s/[^0-9]//g")
61*6236dae4SAndroid Build Coastguard Workerminor=$(echo "$libversion" | cut -d. -f2 | sed -e "s/[^0-9]//g")
62*6236dae4SAndroid Build Coastguard Workerpatch=$(echo "$libversion" | cut -d. -f3 | cut -d- -f1 | sed -e "s/[^0-9]//g")
63*6236dae4SAndroid Build Coastguard Worker
64*6236dae4SAndroid Build Coastguard Workerif test -z "$patch"; then
65*6236dae4SAndroid Build Coastguard Worker  echo "invalid version number? needs to be z.y.z"
66*6236dae4SAndroid Build Coastguard Worker  exit
67*6236dae4SAndroid Build Coastguard Workerfi
68*6236dae4SAndroid Build Coastguard Worker
69*6236dae4SAndroid Build Coastguard Worker#
70*6236dae4SAndroid Build Coastguard Worker# As a precaution, remove all *.dist files that may be lying around, to reduce
71*6236dae4SAndroid Build Coastguard Worker# the risk of old leftovers getting shipped. The root 'Makefile.dist' is the
72*6236dae4SAndroid Build Coastguard Worker# exception.
73*6236dae4SAndroid Build Coastguard Workerecho "removing all old *.dist files"
74*6236dae4SAndroid Build Coastguard Workerfind . -name "*.dist" -a ! -name Makefile.dist -exec rm {} \;
75*6236dae4SAndroid Build Coastguard Worker
76*6236dae4SAndroid Build Coastguard Workernumeric="$(printf "%02x%02x%02x\n" "$major" "$minor" "$patch")"
77*6236dae4SAndroid Build Coastguard Worker
78*6236dae4SAndroid Build Coastguard WorkerHEADER=include/curl/curlver.h
79*6236dae4SAndroid Build Coastguard WorkerCHEADER=src/tool_version.h
80*6236dae4SAndroid Build Coastguard Worker
81*6236dae4SAndroid Build Coastguard Workerif test -z "$only"; then
82*6236dae4SAndroid Build Coastguard Worker  ext=".dist"
83*6236dae4SAndroid Build Coastguard Worker  # when not setting up version numbers locally
84*6236dae4SAndroid Build Coastguard Worker  for a in $HEADER $CHEADER; do
85*6236dae4SAndroid Build Coastguard Worker    cp "$a" "$a$ext"
86*6236dae4SAndroid Build Coastguard Worker  done
87*6236dae4SAndroid Build Coastguard Worker  HEADER="$HEADER$ext"
88*6236dae4SAndroid Build Coastguard Worker  CHEADER="$CHEADER$ext"
89*6236dae4SAndroid Build Coastguard Workerfi
90*6236dae4SAndroid Build Coastguard Worker
91*6236dae4SAndroid Build Coastguard Worker# requires a date command that knows + for format and -d for date input
92*6236dae4SAndroid Build Coastguard Workertimestamp=${SOURCE_DATE_EPOCH:-$(date +"%s")}
93*6236dae4SAndroid Build Coastguard Workerdatestamp=$(date -d "@$timestamp" +"%F")
94*6236dae4SAndroid Build Coastguard Workerfilestamp=$(date -d "@$timestamp" +"%Y%m%d%H%M.%S")
95*6236dae4SAndroid Build Coastguard Worker
96*6236dae4SAndroid Build Coastguard Worker# Replace version number in header file:
97*6236dae4SAndroid Build Coastguard Workersed -i \
98*6236dae4SAndroid Build Coastguard Worker  -e "s/^#define LIBCURL_VERSION .*/#define LIBCURL_VERSION \"$libversion\"/g" \
99*6236dae4SAndroid Build Coastguard Worker  -e "s/^#define LIBCURL_VERSION_NUM .*/#define LIBCURL_VERSION_NUM 0x$numeric/g" \
100*6236dae4SAndroid Build Coastguard Worker  -e "s/^#define LIBCURL_VERSION_MAJOR .*/#define LIBCURL_VERSION_MAJOR $major/g" \
101*6236dae4SAndroid Build Coastguard Worker  -e "s/^#define LIBCURL_VERSION_MINOR .*/#define LIBCURL_VERSION_MINOR $minor/g" \
102*6236dae4SAndroid Build Coastguard Worker  -e "s/^#define LIBCURL_VERSION_PATCH .*/#define LIBCURL_VERSION_PATCH $patch/g" \
103*6236dae4SAndroid Build Coastguard Worker  -e "s/^#define LIBCURL_TIMESTAMP .*/#define LIBCURL_TIMESTAMP \"$datestamp\"/g" \
104*6236dae4SAndroid Build Coastguard Worker  "$HEADER"
105*6236dae4SAndroid Build Coastguard Worker
106*6236dae4SAndroid Build Coastguard Worker# Replace version number in header file:
107*6236dae4SAndroid Build Coastguard Workersed -i "s/#define CURL_VERSION .*/#define CURL_VERSION \"$curlversion\"/g" "$CHEADER"
108*6236dae4SAndroid Build Coastguard Worker
109*6236dae4SAndroid Build Coastguard Workerif test -n "$only"; then
110*6236dae4SAndroid Build Coastguard Worker  # done!
111*6236dae4SAndroid Build Coastguard Worker  exit
112*6236dae4SAndroid Build Coastguard Workerfi
113*6236dae4SAndroid Build Coastguard Worker
114*6236dae4SAndroid Build Coastguard Workerecho "curl version $curlversion"
115*6236dae4SAndroid Build Coastguard Workerecho "libcurl version $libversion"
116*6236dae4SAndroid Build Coastguard Workerecho "libcurl numerical $numeric"
117*6236dae4SAndroid Build Coastguard Workerecho "datestamp $datestamp"
118*6236dae4SAndroid Build Coastguard Worker
119*6236dae4SAndroid Build Coastguard Workerfindprog() {
120*6236dae4SAndroid Build Coastguard Worker  file="$1"
121*6236dae4SAndroid Build Coastguard Worker  for part in $(echo "$PATH" | tr ':' ' '); do
122*6236dae4SAndroid Build Coastguard Worker    path="$part/$file"
123*6236dae4SAndroid Build Coastguard Worker    if [ -x "$path" ]; then
124*6236dae4SAndroid Build Coastguard Worker      # there it is!
125*6236dae4SAndroid Build Coastguard Worker      return 1
126*6236dae4SAndroid Build Coastguard Worker    fi
127*6236dae4SAndroid Build Coastguard Worker  done
128*6236dae4SAndroid Build Coastguard Worker
129*6236dae4SAndroid Build Coastguard Worker  # no such executable
130*6236dae4SAndroid Build Coastguard Worker  return 0
131*6236dae4SAndroid Build Coastguard Worker}
132*6236dae4SAndroid Build Coastguard Worker
133*6236dae4SAndroid Build Coastguard Worker############################################################################
134*6236dae4SAndroid Build Coastguard Worker#
135*6236dae4SAndroid Build Coastguard Worker# Enforce a rerun of configure (updates the VERSION)
136*6236dae4SAndroid Build Coastguard Worker#
137*6236dae4SAndroid Build Coastguard Worker
138*6236dae4SAndroid Build Coastguard Workerecho "Re-running config.status"
139*6236dae4SAndroid Build Coastguard Worker./config.status --recheck >/dev/null
140*6236dae4SAndroid Build Coastguard Worker
141*6236dae4SAndroid Build Coastguard Workerecho "Recreate the built-in manual (with correct version)"
142*6236dae4SAndroid Build Coastguard Workerexport CURL_MAKETGZ_VERSION="$version"
143*6236dae4SAndroid Build Coastguard Workerrm -f docs/cmdline-opts/curl.txt
144*6236dae4SAndroid Build Coastguard Workermake -C src
145*6236dae4SAndroid Build Coastguard Worker
146*6236dae4SAndroid Build Coastguard Worker############################################################################
147*6236dae4SAndroid Build Coastguard Worker#
148*6236dae4SAndroid Build Coastguard Worker# automake is needed to run to make a non-GNU Makefile.in if Makefile.am has
149*6236dae4SAndroid Build Coastguard Worker# been modified.
150*6236dae4SAndroid Build Coastguard Worker#
151*6236dae4SAndroid Build Coastguard Worker
152*6236dae4SAndroid Build Coastguard Workerif { findprog automake >/dev/null 2>/dev/null; } then
153*6236dae4SAndroid Build Coastguard Worker  echo "- Could not find or run automake, I hope you know what you are doing!"
154*6236dae4SAndroid Build Coastguard Workerelse
155*6236dae4SAndroid Build Coastguard Worker  echo "Runs automake --include-deps"
156*6236dae4SAndroid Build Coastguard Worker  automake --include-deps Makefile >/dev/null
157*6236dae4SAndroid Build Coastguard Workerfi
158*6236dae4SAndroid Build Coastguard Worker
159*6236dae4SAndroid Build Coastguard Workerif test -n "$commit"; then
160*6236dae4SAndroid Build Coastguard Worker  echo "produce docs/tarball-commit.txt"
161*6236dae4SAndroid Build Coastguard Worker  git rev-parse HEAD >docs/tarball-commit.txt.dist
162*6236dae4SAndroid Build Coastguard Workerfi
163*6236dae4SAndroid Build Coastguard Worker
164*6236dae4SAndroid Build Coastguard Workerecho "produce RELEASE-TOOLS.md"
165*6236dae4SAndroid Build Coastguard Worker./scripts/release-tools.sh "$timestamp" "$version" "$commit" > docs/RELEASE-TOOLS.md.dist
166*6236dae4SAndroid Build Coastguard Worker
167*6236dae4SAndroid Build Coastguard Worker############################################################################
168*6236dae4SAndroid Build Coastguard Worker#
169*6236dae4SAndroid Build Coastguard Worker# Now run make dist to generate a tar.gz archive
170*6236dae4SAndroid Build Coastguard Worker#
171*6236dae4SAndroid Build Coastguard Worker
172*6236dae4SAndroid Build Coastguard Workerecho "make dist"
173*6236dae4SAndroid Build Coastguard Workertargz="curl-$version.tar.gz"
174*6236dae4SAndroid Build Coastguard Workermake -sj dist "VERSION=$version"
175*6236dae4SAndroid Build Coastguard Workerres=$?
176*6236dae4SAndroid Build Coastguard Worker
177*6236dae4SAndroid Build Coastguard Workerif test "$res" != 0; then
178*6236dae4SAndroid Build Coastguard Worker  echo "make dist failed"
179*6236dae4SAndroid Build Coastguard Worker  exit 2
180*6236dae4SAndroid Build Coastguard Workerfi
181*6236dae4SAndroid Build Coastguard Worker
182*6236dae4SAndroid Build Coastguard Workerretar() {
183*6236dae4SAndroid Build Coastguard Worker  tempdir=$1
184*6236dae4SAndroid Build Coastguard Worker  rm -rf "$tempdir"
185*6236dae4SAndroid Build Coastguard Worker  mkdir "$tempdir"
186*6236dae4SAndroid Build Coastguard Worker  cd "$tempdir"
187*6236dae4SAndroid Build Coastguard Worker  gzip -dc "../$targz" | tar -xf -
188*6236dae4SAndroid Build Coastguard Worker  find curl-* -depth -exec touch -c -t "$filestamp" '{}' +
189*6236dae4SAndroid Build Coastguard Worker  tar --create --format=ustar --owner=0 --group=0 --numeric-owner --sort=name curl-* | gzip --best --no-name > out.tar.gz
190*6236dae4SAndroid Build Coastguard Worker  mv out.tar.gz ../
191*6236dae4SAndroid Build Coastguard Worker  cd ..
192*6236dae4SAndroid Build Coastguard Worker  rm -rf "$tempdir"
193*6236dae4SAndroid Build Coastguard Worker}
194*6236dae4SAndroid Build Coastguard Worker
195*6236dae4SAndroid Build Coastguard Workerretar ".tarbuild"
196*6236dae4SAndroid Build Coastguard Workerecho "replace $targz with out.tar.gz"
197*6236dae4SAndroid Build Coastguard Workermv out.tar.gz "$targz"
198*6236dae4SAndroid Build Coastguard Worker
199*6236dae4SAndroid Build Coastguard Worker############################################################################
200*6236dae4SAndroid Build Coastguard Worker#
201*6236dae4SAndroid Build Coastguard Worker# Now make a bz2 archive from the tar.gz original
202*6236dae4SAndroid Build Coastguard Worker#
203*6236dae4SAndroid Build Coastguard Worker
204*6236dae4SAndroid Build Coastguard Workerbzip2="curl-$version.tar.bz2"
205*6236dae4SAndroid Build Coastguard Workerecho "Generating $bzip2"
206*6236dae4SAndroid Build Coastguard Workergzip -dc "$targz" | bzip2 --best > "$bzip2"
207*6236dae4SAndroid Build Coastguard Worker
208*6236dae4SAndroid Build Coastguard Worker############################################################################
209*6236dae4SAndroid Build Coastguard Worker#
210*6236dae4SAndroid Build Coastguard Worker# Now make an xz archive from the tar.gz original
211*6236dae4SAndroid Build Coastguard Worker#
212*6236dae4SAndroid Build Coastguard Worker
213*6236dae4SAndroid Build Coastguard Workerxz="curl-$version.tar.xz"
214*6236dae4SAndroid Build Coastguard Workerecho "Generating $xz"
215*6236dae4SAndroid Build Coastguard Workergzip -dc "$targz" | xz -6e - > "$xz"
216*6236dae4SAndroid Build Coastguard Worker
217*6236dae4SAndroid Build Coastguard Worker############################################################################
218*6236dae4SAndroid Build Coastguard Worker#
219*6236dae4SAndroid Build Coastguard Worker# Now make a zip archive from the tar.gz original
220*6236dae4SAndroid Build Coastguard Worker#
221*6236dae4SAndroid Build Coastguard Workermakezip() {
222*6236dae4SAndroid Build Coastguard Worker  rm -rf "$tempdir"
223*6236dae4SAndroid Build Coastguard Worker  mkdir "$tempdir"
224*6236dae4SAndroid Build Coastguard Worker  cd "$tempdir"
225*6236dae4SAndroid Build Coastguard Worker  gzip -dc "../$targz" | tar -xf -
226*6236dae4SAndroid Build Coastguard Worker  find . | sort | zip -9 -X "$zip" -@ >/dev/null
227*6236dae4SAndroid Build Coastguard Worker  mv "$zip" ../
228*6236dae4SAndroid Build Coastguard Worker  cd ..
229*6236dae4SAndroid Build Coastguard Worker  rm -rf "$tempdir"
230*6236dae4SAndroid Build Coastguard Worker}
231*6236dae4SAndroid Build Coastguard Worker
232*6236dae4SAndroid Build Coastguard Workerzip="curl-$version.zip"
233*6236dae4SAndroid Build Coastguard Workerecho "Generating $zip"
234*6236dae4SAndroid Build Coastguard Workertempdir=".builddir"
235*6236dae4SAndroid Build Coastguard Workermakezip
236*6236dae4SAndroid Build Coastguard Worker
237*6236dae4SAndroid Build Coastguard Worker# Set deterministic timestamp
238*6236dae4SAndroid Build Coastguard Workertouch -c -t "$filestamp" "$targz" "$bzip2" "$xz" "$zip"
239*6236dae4SAndroid Build Coastguard Worker
240*6236dae4SAndroid Build Coastguard Workerecho "------------------"
241*6236dae4SAndroid Build Coastguard Workerecho "maketgz report:"
242*6236dae4SAndroid Build Coastguard Workerecho ""
243*6236dae4SAndroid Build Coastguard Workerls -l "$targz" "$bzip2" "$xz" "$zip"
244*6236dae4SAndroid Build Coastguard Workersha256sum "$targz" "$bzip2" "$xz" "$zip"
245*6236dae4SAndroid Build Coastguard Worker
246*6236dae4SAndroid Build Coastguard Workerecho "Run this:"
247*6236dae4SAndroid Build Coastguard Workerecho "gpg -b -a '$targz' && gpg -b -a '$bzip2' && gpg -b -a '$xz' && gpg -b -a '$zip'"
248