From 29bff939c7bb2385b3ec2c6e610bc921360a8a4b Mon Sep 17 00:00:00 2001 From: Peter Kokot Date: Fri, 26 Apr 2019 02:38:53 +0200 Subject: Enhance makedist script This enhances the makidst script: - integrate both snapshot and makedist scripts together - add help and options - generated files are created in the php-src repository directly - other minor enhancemenets such as CS fixes - functionality moved from the Makefile to only shell script - Add missed patching of the Zend Parsers to the main build step - Add all *.tmp files to gitignore --- scripts/dev/genfiles | 2 +- scripts/dev/makedist | 265 ++++++++++++++++++++++++++++++--------------------- scripts/dev/snapshot | 7 -- 3 files changed, 160 insertions(+), 114 deletions(-) delete mode 100755 scripts/dev/snapshot (limited to 'scripts') diff --git a/scripts/dev/genfiles b/scripts/dev/genfiles index 89fdc2d6ca..d29c0d778a 100755 --- a/scripts/dev/genfiles +++ b/scripts/dev/genfiles @@ -102,7 +102,7 @@ if ! test -x "$(command -v $MAKE)"; then fi echo "genfiles: Generating Zend parser and lexer files" -$MAKE RE2C="$RE2C" RE2C_FLAGS="$RE2C_FLAGS" YACC="$YACC" srcdir=Zend builddir=Zend top_srcdir=. \ +$MAKE RE2C="$RE2C" RE2C_FLAGS="$RE2C_FLAGS" YACC="$YACC" SED="$SED" srcdir=Zend builddir=Zend top_srcdir=. \ -f Zend/Makefile.frag \ Zend/zend_language_parser.c \ Zend/zend_language_scanner.c \ diff --git a/scripts/dev/makedist b/scripts/dev/makedist index 2bea7c5e80..515e4ba722 100755 --- a/scripts/dev/makedist +++ b/scripts/dev/makedist @@ -1,143 +1,196 @@ #!/bin/sh # -# Distribution generator for git -# -# Usage: makedist version -# Example: makedist 5.4.1 -# Example: makedist 5.3.5RC1 -# -# To work, this script needs a consistent tagging of all releases. -# Each release of a package should have a tag of the form -# -# php-X.Y.Z[sub] -# -# The distribution ends up in a .tar.gz file that contains the distribution -# in a directory called php-. -# A .tar.bz2 file is also created. +# Creates PHP release packages. # # Written by Stig Bakken 1997-05-28. -# Adapted to git by Stanislav Malyshev +# Adapted to Git by Stanislav Malyshev . # Go to project root directory. cd $(CDPATH= cd -- "$(dirname -- "$0")/../../" && pwd -P) -if test "$#" != "1"; then - echo "Usage: makedist " >&2 - exit 1 -fi - -VER=$1 ; shift +# Process options and arguments. +while :; do + case $1 in + -h|--help) + cat << HELP +PHP distribution generator + +Creates PHP release packages (tar.gz, tar.bz2, tar.xz) from the php-src Git +repository. The snapshot archive includes also generated configure script, +configuration headers, parsers, lexers, and similar generated files to simplify +the installation on the *nix systems. + +SYNOPSIS: + makedist [options] + +OPTIONS: + -h, --help Display this help. + --remote= Instead of using a local repository, retrieve a tar archive + from a remote repository. + The Git tree or Git commit to produce an archive for. This + script needs a consistent tagging of releases. Each release + of a package should have a tag of the form: + php-X.Y.Z[alpha|beta|RC] + + or branch: + PHP-X.Y[.Z] + + Where: + - X is major version number + - Y is minor version number + - Z is patch version number + - last part of tag is optional and is one of RC, alpha, or + beta and belonging number. + +EXAMPLES: + + Create snapshot of the master branch: + scripts/dev/makedist + + Create snapshot of the PHP-7.4 branch: + scripts/dev/makedist PHP-7.4 + + Create release packages for the stable tag php-7.4.0: + scripts/dev/makedist php-7.4.0 + + Create release candidate packages for the tag php-7.4.0RC1: + scripts/dev/makedist php-7.4.0RC1 + + Create release packages from a remote Git repository for the tag php-7.4.0: + scripts/dev/makedist --remote=git@git.php.net:php-src.git php-7.4.0 +HELP + exit + ;; + --remote) + # Check for an option argument. + if test -n "$2"; then + remote=$2 + shift + else + echo "makedist: '--remote' requires a non-empty option argument." >&2 + exit 1 + fi + ;; + --remote=?*) + # Set everything after the "=". + remote=${1#*=} + ;; + --remote=) + # When passing empty "--remote=" option. + echo "makedist: '--remote' requires a non-empty option argument." >&2 + exit 1 + ;; + -?*) + echo "makedist WARNING: Unknown option (ignored): '$1'" >&2 + ;; + *) + # When no more options, check for an argument and break out of the loop. + if test -n "$1"; then + treeish="$1" + prefix="$treeish" + elif test -z "$treeish"; then + treeish="master" + prefix="php-master-"$(date +"%Y-%m-%d-%H-%M") + fi + break + esac + + shift +done -if test "x$PHPROOT" = "x"; then - PHPROOT=git@git.php.net:php-src.git; +# Verify that the temporary directory for the package files doesn't exist. +if test -d "$prefix"; then + echo "makedist: The directory $prefix" >&2 + echo " already exists. Rename or remove it and run makedist again." >&2 + exit 1 fi -LT_TARGETS='build/ltmain.sh build/config.guess build/config.sub' - -if echo '\c' | grep -s c >/dev/null 2>&1 -then - ECHO_N="echo -n" - ECHO_C="" +if test -n "$remote"; then + remote_option="--remote=$remote" + git=$remote else - ECHO_N="echo" - ECHO_C='\c' -fi - -MY_OLDPWD=`pwd` - -# the destination .tar.gz file -ARCHIVE=$MY_OLDPWD/php-$VER.tar - -# temporary directory used to check out files from SVN -DIR=php-$VER -DIRPATH=$MY_OLDPWD/$DIR + echo "makedist: Verifying that tree-ish $treeish exists in Git repository." + git rev-parse --verify $treeish + exit_code=$? + if test "$exit_code" != "0"; then + echo "makedist: $treeish is not found in the Git repository." >&2 + exit $exit_code + else + echo "makedist: OK" + fi -if test -d "$DIRPATH"; then - echo "The directory $DIR" >&2 - echo "already exists, rename or remove it and run makedist again." >&2 - exit 1 + git="current Git repository." fi -# Export PHP -$ECHO_N "makedist: exporting tag 'php-$VER' from '$PHPROOT'...$ECHO_C" -git archive --format=tar --remote=$PHPROOT refs/tags/php-$VER --prefix=php-$VER/ | (cd $MY_OLDPWD; tar xvf -) || exit 4 -echo "" - -cd $DIR || exit 5 +# Export PHP. +echo "makedist: Exporting $treeish from $git" +git archive --format=tar $remote_option --prefix=$prefix/ $treeish | tar xvf - || exit 4 -# hide away our own versions of libtool-generated files -for i in $LT_TARGETS; do - if test -f "$i"; then - mv $i $i.bak - cp $i.bak $i - fi -done +cd $prefix || exit 5 -# generate some files so people don't need bison, re2c and autoconf -# to install -set -x +# Generate configure script so autoconf is not required to install. +echo "" +echo "makedist: Generating files." ./buildconf --force -# Generate lexer and parser files +# Generate lexer and parser files so bison and re2c aren't required to install. ./scripts/dev/genfiles exit_code=$? if test "$exit_code" != "0"; then exit $exit_code fi -# now restore our versions of libtool-generated files -for i in $LT_TARGETS; do - test -f "$i" && mv $i.bak $i -done - -# removing junk files -rm -fr autom4te.cache/ +# Remove not needed files. +rm -rf autom4te.cache/ -# touching everything to be packaged -find $MY_OLDPWD/php-$VER -exec touch -c {} \; - -# tweak zendparse to be exported through ZEND_API -# NOTE this has to be revisited once bison supports foreign skeletons -# and that bison version is used. Read /usr/share/bison/README for more -sed -i 's,^int zendparse\(.*\),ZEND_API int zendparse\1,g' $MY_OLDPWD/php-$VER/Zend/zend_language_parser.c -sed -i 's,^int zendparse\(.*\),ZEND_API int zendparse\1,g' $MY_OLDPWD/php-$VER/Zend/zend_language_parser.h -sed -i 's,^#ifndef YYTOKENTYPE,#include "zend.h"\n#ifndef YYTOKENTYPE,g' $MY_OLDPWD/php-$VER/Zend/zend_language_parser.h - -# download pear -$ECHO_N "makedist: Attempting to download PEAR's phar archive" +# Download PEAR. +echo "" +echo "makedist: Attempting to download PEAR's phar archive." if test ! -x wget; then wget https://pear.php.net/install-pear-nozlib.phar -nd -P pear/ - if [ "x$?" != "x0" ] - then - $ECHO_N "Pear download failed"; - exit 7 + if [ "x$?" != "x0" ]; then + echo "makedist: PEAR download failed." >&2 + exit 1 fi else - $ECHO_N "Missing wget binary needed for pear download"; - exit 7 + echo "makedist: Missing wget binary needed for PEAR download." >&2 + exit 1 fi -cd $MY_OLDPWD -$ECHO_N "makedist: making gzipped tar archive...$ECHO_C" -rm -f $ARCHIVE.gz -tar cf $ARCHIVE php-$VER || exit 8 -gzip -9 $ARCHIVE || exit 9 -echo "" +# Reset the modification and access times of all files to be packaged. +echo "makedist: Resetting the modification and access times of package files." +find . -exec touch -c {} \; -$ECHO_N "makedist: making bz2zipped tar archive...$ECHO_C" -rm -f $ARCHIVE.bz2 -tar cf $ARCHIVE php-$VER || exit 10 -bzip2 -9 $ARCHIVE || exit 11 -echo "" +cd .. -$ECHO_N "makedist: making xz2zipped tar archive...$ECHO_C" -rm -f $ARCHIVE.xz -tar cf $ARCHIVE php-$VER || exit 10 -xz -9 $ARCHIVE || exit 12 echo "" +echo "makedist: Creating $prefix.tar archive." +tar cf "$prefix".tar "$prefix" +rm -rf "$prefix" "$prefix".tar.* -$ECHO_N "makedist: cleaning up...$ECHO_C" -rm -rf $DIRPATH || exit 13 -echo "" +echo "makedist: Creating $prefix.tar.gz archive." +gzip -9 -k "$prefix".tar || exit 6 +md5sum "$prefix".tar.gz +gzip -t "$prefix".tar.gz + +sync +sleep 2 + +echo "makedist: Creating $prefix.tar.bz2 archive." +bzip2 -9 -k $prefix.tar || exit 7 +md5sum $prefix.tar.bz2 +bzip2 -t $prefix.tar.bz2 -exit 0 +sync +sleep 2 + +echo "makedist: Creating $prefix.tar.xz archive." +xz -9 -k "$prefix".tar || exit 9 +md5sum "$prefix".tar.xz +xz -t "$prefix".tar.xz + +echo "" +echo "makedist: Cleaning up." +rm -f "$prefix".tar || exit 13 +echo "" +echo "makedist: All done." diff --git a/scripts/dev/snapshot b/scripts/dev/snapshot deleted file mode 100755 index f8e13ef9d9..0000000000 --- a/scripts/dev/snapshot +++ /dev/null @@ -1,7 +0,0 @@ -#! /bin/sh - -if test -n "$1"; then - flags="DISTNAME=$1" -fi - -${MAKE:-make} $flags -f build/build.mk snapshot -- cgit v1.2.1