mirror of
https://github.com/php/php-src.git
synced 2025-01-19 02:03:47 +08:00
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
This commit is contained in:
parent
969047749d
commit
29bff939c7
4
.gitignore
vendored
4
.gitignore
vendored
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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 \
|
||||
|
@ -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
|
||||
# Process options and arguments.
|
||||
while :; do
|
||||
case $1 in
|
||||
-h|--help)
|
||||
cat << HELP
|
||||
PHP distribution generator
|
||||
|
||||
VER=$1 ; shift
|
||||
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.
|
||||
|
||||
if test "x$PHPROOT" = "x"; then
|
||||
PHPROOT=git@git.php.net:php-src.git;
|
||||
fi
|
||||
SYNOPSIS:
|
||||
makedist [options] <tree-ish>
|
||||
|
||||
LT_TARGETS='build/ltmain.sh build/config.guess build/config.sub'
|
||||
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]
|
||||
|
||||
if echo '\c' | grep -s c >/dev/null 2>&1
|
||||
then
|
||||
ECHO_N="echo -n"
|
||||
ECHO_C=""
|
||||
else
|
||||
ECHO_N="echo"
|
||||
ECHO_C='\c'
|
||||
fi
|
||||
or branch:
|
||||
PHP-X.Y[.Z]
|
||||
|
||||
MY_OLDPWD=`pwd`
|
||||
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.
|
||||
|
||||
# the destination .tar.gz file
|
||||
ARCHIVE=$MY_OLDPWD/php-$VER.tar
|
||||
EXAMPLES:
|
||||
|
||||
# temporary directory used to check out files from SVN
|
||||
DIR=php-$VER
|
||||
DIRPATH=$MY_OLDPWD/$DIR
|
||||
Create snapshot of the master branch:
|
||||
scripts/dev/makedist
|
||||
|
||||
if test -d "$DIRPATH"; then
|
||||
echo "The directory $DIR" >&2
|
||||
echo "already exists, rename or remove it and run makedist again." >&2
|
||||
exit 1
|
||||
fi
|
||||
Create snapshot of the PHP-7.4 branch:
|
||||
scripts/dev/makedist PHP-7.4
|
||||
|
||||
# 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 ""
|
||||
Create release packages for the stable tag php-7.4.0:
|
||||
scripts/dev/makedist php-7.4.0
|
||||
|
||||
cd $DIR || exit 5
|
||||
Create release candidate packages for the tag php-7.4.0RC1:
|
||||
scripts/dev/makedist php-7.4.0RC1
|
||||
|
||||
# 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
|
||||
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
|
||||
|
||||
# generate some files so people don't need bison, re2c and autoconf
|
||||
# to install
|
||||
set -x
|
||||
# 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
|
||||
|
||||
if test -n "$remote"; then
|
||||
remote_option="--remote=$remote"
|
||||
git=$remote
|
||||
else
|
||||
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
|
||||
|
||||
git="current Git repository."
|
||||
fi
|
||||
|
||||
# Export PHP.
|
||||
echo "makedist: Exporting $treeish from $git"
|
||||
git archive --format=tar $remote_option --prefix=$prefix/ $treeish | tar xvf - || exit 4
|
||||
|
||||
cd $prefix || exit 5
|
||||
|
||||
# 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
|
||||
# Remove not needed files.
|
||||
rm -rf autom4te.cache/
|
||||
|
||||
# removing junk files
|
||||
rm -fr 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 "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
|
||||
|
||||
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_N "makedist: cleaning up...$ECHO_C"
|
||||
rm -rf $DIRPATH || exit 13
|
||||
echo ""
|
||||
|
||||
exit 0
|
||||
echo "makedist: Cleaning up."
|
||||
rm -f "$prefix".tar || exit 13
|
||||
echo ""
|
||||
echo "makedist: All done."
|
||||
|
@ -1,7 +0,0 @@
|
||||
#! /bin/sh
|
||||
|
||||
if test -n "$1"; then
|
||||
flags="DISTNAME=$1"
|
||||
fi
|
||||
|
||||
${MAKE:-make} $flags -f build/build.mk snapshot
|
Loading…
Reference in New Issue
Block a user