1#!/bin/sh 2# 3# Creates PHP release packages. 4# 5# Written by Stig Bakken <ssb@guardian.no> 1997-05-28. 6# Adapted to Git by Stanislav Malyshev <stas@php.net>. 7 8# Go to project root directory. 9cd $(CDPATH= cd -- "$(dirname -- "$0")/../../" && pwd -P) 10 11# Process options and arguments. 12while :; do 13 case $1 in 14 -h|--help) 15 cat << HELP 16PHP distribution generator 17 18Creates PHP release packages (tar.gz, tar.bz2, tar.xz) from the php-src Git 19repository. The snapshot archive includes also generated configure script, 20configuration headers, parsers, lexers, and similar generated files to simplify 21the installation on the *nix systems. 22 23SYNOPSIS: 24 makedist [options] <tree-ish> 25 26OPTIONS: 27 -h, --help Display this help. 28 --remote=<repo> Instead of using a local repository, retrieve a tar archive 29 from a remote repository. 30 <tree-ish> The Git tree or Git commit to produce an archive for. This 31 script needs a consistent tagging of releases. Each release 32 of a package should have a tag of the form: 33 php-X.Y.Z[alpha|beta|RC] 34 35 or branch: 36 PHP-X.Y[.Z] 37 38 Where: 39 - X is major version number 40 - Y is minor version number 41 - Z is patch version number 42 - last part of tag is optional and is one of RC, alpha, or 43 beta and belonging number. 44 45EXAMPLES: 46 47 Create snapshot of the master branch: 48 scripts/dev/makedist 49 50 Create snapshot of the PHP-7.4 branch: 51 scripts/dev/makedist PHP-7.4 52 53 Create release packages for the stable tag php-7.4.0: 54 scripts/dev/makedist php-7.4.0 55 56 Create release candidate packages for the tag php-7.4.0RC1: 57 scripts/dev/makedist php-7.4.0RC1 58 59 Create release packages from a remote Git repository for the tag php-7.4.0: 60 scripts/dev/makedist --remote=git@git.php.net:php-src.git php-7.4.0 61HELP 62 exit 63 ;; 64 --remote) 65 # Check for an option argument. 66 if test -n "$2"; then 67 remote=$2 68 shift 69 else 70 echo "makedist: '--remote' requires a non-empty option argument." >&2 71 exit 1 72 fi 73 ;; 74 --remote=?*) 75 # Set everything after the "=". 76 remote=${1#*=} 77 ;; 78 --remote=) 79 # When passing empty "--remote=" option. 80 echo "makedist: '--remote' requires a non-empty option argument." >&2 81 exit 1 82 ;; 83 -?*) 84 echo "makedist WARNING: Unknown option (ignored): '$1'" >&2 85 ;; 86 *) 87 # When no more options, check for an argument and break out of the loop. 88 if test -n "$1"; then 89 treeish="$1" 90 prefix="$treeish" 91 elif test -z "$treeish"; then 92 treeish="master" 93 prefix="php-master-"$(date +"%Y-%m-%d-%H-%M") 94 fi 95 break 96 esac 97 98 shift 99done 100 101# Verify that the temporary directory for the package files doesn't exist. 102if test -d "$prefix"; then 103 echo "makedist: The directory $prefix" >&2 104 echo " already exists. Rename or remove it and run makedist again." >&2 105 exit 1 106fi 107 108if test -n "$remote"; then 109 remote_option="--remote=$remote" 110 git=$remote 111else 112 echo "makedist: Verifying that tree-ish $treeish exists in Git repository." 113 git rev-parse --verify $treeish 114 exit_code=$? 115 if test "$exit_code" != "0"; then 116 echo "makedist: $treeish is not found in the Git repository." >&2 117 exit $exit_code 118 else 119 echo "makedist: OK" 120 fi 121 122 git="current Git repository." 123fi 124 125# Export PHP. 126echo "makedist: Exporting $treeish from $git" 127git archive --format=tar $remote_option --prefix=$prefix/ $treeish | tar xvf - || exit 4 128 129cd $prefix || exit 5 130 131# Generate configure script so autoconf is not required to install. 132echo "" 133echo "makedist: Generating files." 134./buildconf --force 135 136# Generate lexer and parser files so bison and re2c aren't required to install. 137./scripts/dev/genfiles 138exit_code=$? 139if test "$exit_code" != "0"; then 140 exit $exit_code 141fi 142 143# Remove not needed files. 144rm -rf autom4te.cache/ 145 146# Download PEAR. 147echo "" 148echo "makedist: Attempting to download PEAR's phar archive." 149if test ! -x wget; then 150 wget https://pear.php.net/install-pear-nozlib.phar -nd -P pear/ 151 if [ "x$?" != "x0" ]; then 152 echo "makedist: PEAR download failed." >&2 153 exit 1 154 fi 155else 156 echo "makedist: Missing wget binary needed for PEAR download." >&2 157 exit 1 158fi 159 160# Reset the modification and access times of all files to be packaged. 161echo "makedist: Resetting the modification and access times of package files." 162touch -c NEWS 163find . -exec touch -r NEWS -c {} \; 164 165cd .. 166 167echo "" 168echo "makedist: Creating $prefix.tar archive." 169tar cf "$prefix".tar "$prefix" 170rm -rf "$prefix" "$prefix".tar.* 171 172echo "makedist: Creating $prefix.tar.gz archive." 173gzip -9 -k "$prefix".tar || exit 6 174md5sum "$prefix".tar.gz 175gzip -t "$prefix".tar.gz 176 177sync 178sleep 2 179 180echo "makedist: Creating $prefix.tar.bz2 archive." 181bzip2 -9 -k $prefix.tar || exit 7 182md5sum $prefix.tar.bz2 183bzip2 -t $prefix.tar.bz2 184 185sync 186sleep 2 187 188echo "makedist: Creating $prefix.tar.xz archive." 189xz -9 -k "$prefix".tar || exit 9 190md5sum "$prefix".tar.xz 191xz -t "$prefix".tar.xz 192 193echo "" 194echo "makedist: Cleaning up." 195rm -f "$prefix".tar || exit 13 196echo "" 197echo "makedist: All done." 198