summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.gitignore4
-rw-r--r--Zend/Makefile.frag13
-rw-r--r--build/build.mk26
-rw-r--r--docs/release-process.md8
-rwxr-xr-xscripts/dev/genfiles2
-rwxr-xr-xscripts/dev/makedist265
-rwxr-xr-xscripts/dev/snapshot7
7 files changed, 180 insertions, 145 deletions
diff --git a/.gitignore b/.gitignore
index e9763d84f4..5ab309a6f9 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
# ------------------------------------------------------------------------------
@@ -231,7 +234,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 6f43ffa52b..8196cd797c 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 0a93b660a3..909b71637e 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 97fe16649c..12df937b4a 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 <version> [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 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-<version>.
-# A .tar.bz2 file is also created.
+# Creates PHP release packages.
#
# Written by Stig Bakken <ssb@guardian.no> 1997-05-28.
-# Adapted to git by Stanislav Malyshev <stas@php.net>
+# Adapted to Git by Stanislav Malyshev <stas@php.net>.
# Go to project root directory.
cd $(CDPATH= cd -- "$(dirname -- "$0")/../../" && pwd -P)
-if test "$#" != "1"; then
- echo "Usage: makedist <version>" >&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] <tree-ish>
+
+OPTIONS:
+ -h, --help Display this help.
+ --remote=<repo> Instead of using a local repository, retrieve a tar archive
+ from a remote repository.
+ <tree-ish> 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