diff --git a/.gitignore b/.gitignore index a81c8e38d91e3..48ef4c7ecbb81 100644 --- a/.gitignore +++ b/.gitignore @@ -16,6 +16,9 @@ # Swap files created by editors and tools to indicate a locked file *.swp +# Various temporary generated files +*.tmp + # ------------------------------------------------------------------------------ # Generated by the PHP build system # ------------------------------------------------------------------------------ @@ -225,7 +228,6 @@ php # Generated by some test cases **/tests/**/*.db -**/tests/**/*.tmp # Microsoft Access database created for passing to tests /ext/pdo_odbc/tests/*.mdb diff --git a/Zend/Makefile.frag b/Zend/Makefile.frag index 6f43ffa52b8fd..8196cd797ce8e 100644 --- a/Zend/Makefile.frag +++ b/Zend/Makefile.frag @@ -10,7 +10,20 @@ $(srcdir)/zend_language_scanner.c: $(srcdir)/zend_language_scanner.re $(srcdir)/zend_language_parser.h: $(srcdir)/zend_language_parser.c $(srcdir)/zend_language_parser.c: $(srcdir)/zend_language_parser.y +# Tweak zendparse to be exported through ZEND_API. This has to be revisited once +# bison supports foreign skeletons and that bison version is used. Read +# https://git.savannah.gnu.org/cgit/bison.git/tree/data/README.md for more. @$(YACC) -p zend -v -d $(srcdir)/zend_language_parser.y -o $@ + @$(SED) -e 's,^int zendparse\(.*\),ZEND_API int zendparse\1,g' < $@ \ + > $@.tmp && \ + mv $@.tmp $@ + @$(SED) -e 's,^int zendparse\(.*\),ZEND_API int zendparse\1,g' < $(srcdir)/zend_language_parser.h \ + > $(srcdir)/zend_language_parser.h.tmp && \ + mv $(srcdir)/zend_language_parser.h.tmp $(srcdir)/zend_language_parser.h + @$(SED) -e 's,^#ifndef YYTOKENTYPE,#include "zend.h"\ +#ifndef YYTOKENTYPE,g' < $(srcdir)/zend_language_parser.h \ + > $(srcdir)/zend_language_parser.h.tmp && \ + mv $(srcdir)/zend_language_parser.h.tmp $(srcdir)/zend_language_parser.h $(srcdir)/zend_ini_parser.h: $(srcdir)/zend_ini_parser.c $(srcdir)/zend_ini_parser.c: $(srcdir)/zend_ini_parser.y diff --git a/build/build.mk b/build/build.mk index 0a93b660a3af6..909b71637ef9f 100644 --- a/build/build.mk +++ b/build/build.mk @@ -18,7 +18,6 @@ # Makefile to generate build tools # -subdirs = Zend TSRM config_h_in = main/php_config.h.in PHP_AUTOCONF = autoconf PHP_AUTOHEADER = autoheader @@ -41,28 +40,3 @@ $(config_h_in): configure @rm -f $@ @$(PHP_AUTOHEADER) $(PHP_AUTOCONF_FLAGS) @sed -e 's/^#undef PACKAGE_[^ ]*/\/\* & \*\//g' < $@ > $@.tmp && mv $@.tmp $@ - -snapshot: - distname='$(DISTNAME)'; \ - if test -z "$$distname"; then \ - distname='php7-snapshot'; \ - fi; \ - myname=`basename \`pwd\`` ; \ - cd .. && cp -rp $$myname $$distname; \ - cd $$distname; \ - rm -f $(subdirs) 2>/dev/null || true; \ - for i in $(subdirs); do \ - test -d $$i || (test -d ../$$i && cp -rp ../$$i $$i); \ - done; \ - find . -type l -exec rm {} \; ; \ - $(MAKE) -f build/build.mk; \ - cd ..; \ - tar cf $$distname.tar $$distname; \ - rm -rf $$distname $$distname.tar.*; \ - bzip2 -9 $$distname.tar; \ - md5sum $$distname.tar.bz2; \ - sync; sleep 2; \ - md5sum $$distname.tar.bz2; \ - bzip2 -t $$distname.tar.bz2 - -.PHONY: snapshot diff --git a/docs/release-process.md b/docs/release-process.md index 97fe16649c162..12df937b4a512 100644 --- a/docs/release-process.md +++ b/docs/release-process.md @@ -117,7 +117,7 @@ git push origin {release branch} ``` -12. Run: `PHPROOT=. ./scripts/dev/makedist 5.4.2RC2`, this will export the tree, +12. Run: `./scripts/dev/makedist php-7.4.0RC2`, this will export the tree, create `configure` and build three tarballs (gz, bz2 and xz). 13. Run `scripts/dev/gen_verify_stub [identity]`, this will sign the @@ -213,11 +213,11 @@ 6. Check `./sapi/cli/php -v` output for version matching. - 7. Tag the repository with the version f.e. `git tag -u YOURKEYID php-5.4.1` + 7. Tag the repository with the version f.e. `git tag -u YOURKEYID php-7.4.1` - 8. Push the tag f.e. `git push origin php-5.4.1`. + 8. Push the tag f.e. `git push origin php-7.4.1`. - 9. Run: `PHPROOT=. ./scripts/dev/makedist 5.4.1`, this will export the tag, + 9. Run: `./scripts/dev/makedist php-7.4.1`, this will export the tag, create configure and build three tarballs (gz, bz2 and xz). Check if the pear files are updated (phar). On some systems the behavior of GNU tar can default to produce POSIX compliant archives with PAX headers. As not every diff --git a/scripts/dev/genfiles b/scripts/dev/genfiles index 89fdc2d6ca697..d29c0d778ae77 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 2bea7c5e802fc..515e4ba722870 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 f8e13ef9d9f89..0000000000000 --- 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