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