1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152
|
#!/bin/sh
#
# +----------------------------------------------------------------------+
# | Copyright (c) The PHP Group |
# +----------------------------------------------------------------------+
# | This source file is subject to version 3.01 of the PHP license, |
# | that is bundled with this package in the file LICENSE, and is |
# | available through the world-wide-web at the following url: |
# | https://www.php.net/license/3_01.txt |
# | If you did not receive a copy of the PHP license and are unable to |
# | obtain it through the world-wide-web, please send a note to |
# | license@php.net so we can mail you a copy immediately. |
# +----------------------------------------------------------------------+
# | Authors: Sascha Schumann <sascha@schumann.cx> |
# +----------------------------------------------------------------------+
#
# This script generates PHP lexer and parser files required to build PHP. The
# generated files are ignored in the Git repository and packaged during the PHP
# release process into the release installation archive download. This way the
# bison and re2c dependencies are not required to build PHP when downloading
# release archive.
#
# Usage: genfiles
#
# Environment:
# The following environment variables can override default generators paths.
#
# YACC Parser generator program, default bison
# RE2C Lexer generator program, default re2c
# SED Path to sed program, default sed
# MAKE Path to make program, default make
#
# For example:
# YACC=/path/to/bison ./genfiles
YACC=${YACC:-bison}
YACC="$YACC -l"
YFLAGS="-Wall"
RE2C=${RE2C:-re2c}
RE2C_FLAGS="--no-generation-date -i"
SED=${SED:-sed}
MAKE=${MAKE:-make}
# Go to project root.
cd "$(CDPATH='' cd -- "$(dirname -- "$0")/../../" && pwd -P)" || exit
# Check required bison version from the configure.ac file.
required_bison_version=$($SED -n 's/PHP_PROG_BISON(\[\([0-9\.]*\)\].*/\1/p' configure.ac)
set -f; IFS='.'; set -- $required_bison_version; set +f; IFS=' '
required_bison_num="$(expr ${1:-0} \* 10000 + ${2:-0} \* 100 + ${3:-0})"
current_version=$($YACC --version 2> /dev/null | grep 'GNU Bison' | cut -d ' ' -f 4 | tr -d a-z)
set -f; IFS='.'; set -- $current_version; set +f; IFS=' '
current_bison_num="$(expr ${1:-0} \* 10000 + ${2:-0} \* 100 + ${3:-0})"
if test -z "$current_version"; then
echo "genfiles: bison not found." >&2
echo " You need bison version $required_bison_version or newer installed" >&2
echo " to regenerate parser files." >&2
exit 1
fi
if test "$current_bison_num" -lt "$required_bison_num"; then
echo "genfiles: bison version $current_version found." >&2
echo " You need bison version $required_bison_version or newer installed" >&2
echo " to build parser files." >&2
exit 1
else
echo "genfiles: bison version $current_version (ok)"
fi
# Check required re2c version from the configure.ac file.
required_re2c_version=$($SED -n 's/PHP_PROG_RE2C(\[\([0-9.]*\)\][^)]*)*/\1/p' configure.ac)
set -f; IFS='.'; set -- $required_re2c_version; set +f; IFS=' '
required_re2c_num="$(expr ${1:-0} \* 10000 + ${2:-0} \* 100 + ${3:-0})"
current_version="$($RE2C --version | cut -d ' ' -f 2 2>/dev/null)"
set -f; IFS='.'; set -- $current_version; set +f; IFS=' '
current_re2c_num="$(expr ${1:-0} \* 10000 + ${2:-0} \* 100 + ${3:-0})"
if test -z "$current_version"; then
echo "genfiles: re2c not found." >&2
echo " You need re2c version $required_re2c_version or newer installed" >&2
echo " to regenerate lexer files." >&2
exit 1
fi
if test "$current_re2c_num" -lt "$required_re2c_num"; then
echo "genfiles: re2c version $current_version found." >&2
echo " You need re2c version $required_re2c_version or newer installed" >&2
echo " to build lexer files." >&2
exit 1
else
echo "genfiles: re2c version $current_version (ok)"
fi
# Check if make exists.
if test ! -x "$(command -v $MAKE)"; then
echo "genfiles: make not found. Please install make to generate files." >&2
exit 1
fi
echo "genfiles: Generating Zend parser and lexer files"
$MAKE RE2C="$RE2C" RE2C_FLAGS="$RE2C_FLAGS" YACC="$YACC" YFLAGS="$YFLAGS" SED="$SED" srcdir=Zend builddir=Zend top_srcdir=. \
-f Zend/Makefile.frag \
Zend/zend_language_parser.c \
Zend/zend_language_scanner.c \
Zend/zend_ini_parser.c \
Zend/zend_ini_scanner.c
echo "genfiles: Generating phpdbg parser and lexer files"
$MAKE RE2C="$RE2C" RE2C_FLAGS="$RE2C_FLAGS" YACC="$YACC" YFLAGS="$YFLAGS" srcdir=sapi/phpdbg builddir=sapi/phpdbg top_srcdir=. \
-f sapi/phpdbg/Makefile.frag \
sapi/phpdbg/phpdbg_parser.c \
sapi/phpdbg/phpdbg_lexer.c
echo "genfiles: Generating json extension parser and lexer files"
$MAKE RE2C="$RE2C" RE2C_FLAGS="$RE2C_FLAGS" YACC="$YACC" YFLAGS="$YFLAGS" srcdir=ext/json builddir=ext/json top_srcdir=. \
-f ext/json/Makefile.frag \
ext/json/json_parser.tab.c \
ext/json/json_scanner.c
echo "genfiles: Generating PDO lexer file"
$MAKE RE2C="$RE2C" RE2C_FLAGS="$RE2C_FLAGS" srcdir=ext/pdo builddir=ext/pdo top_srcdir=. \
-f ext/pdo/Makefile.frag \
ext/pdo/pdo_sql_parser.c
echo "genfiles: Generating PDO_mysql lexer file"
$MAKE RE2C="$RE2C" RE2C_FLAGS="$RE2C_FLAGS" srcdir=ext/pdo_mysql builddir=ext/pdo_mysql top_srcdir=. \
-f ext/pdo_mysql/Makefile.frag \
ext/pdo_mysql/mysql_sql_parser.c
echo "genfiles: Generating PDO_pgsql lexer file"
$MAKE RE2C="$RE2C" RE2C_FLAGS="$RE2C_FLAGS" srcdir=ext/pdo_pgsql builddir=ext/pdo_pgsql top_srcdir=. \
-f ext/pdo_pgsql/Makefile.frag \
ext/pdo_pgsql/pgsql_sql_parser.c
echo "genfiles: Generating PDO_sqlite lexer file"
$MAKE RE2C="$RE2C" RE2C_FLAGS="$RE2C_FLAGS" srcdir=ext/pdo_sqlite builddir=ext/pdo_sqlite top_srcdir=. \
-f ext/pdo_sqlite/Makefile.frag \
ext/pdo_sqlite/sqlite_sql_parser.c
echo "genfiles: Generating standard extension lexer files"
$MAKE RE2C="$RE2C" RE2C_FLAGS="$RE2C_FLAGS" srcdir=ext/standard builddir=ext/standard top_srcdir=. \
-f ext/standard/Makefile.frag \
ext/standard/var_unserializer.c \
ext/standard/url_scanner_ex.c
echo "genfiles: Generating phar extension lexer file"
$MAKE RE2C="$RE2C" RE2C_FLAGS="$RE2C_FLAGS" srcdir=ext/phar builddir=ext/phar top_srcdir=. \
-f ext/phar/Makefile.frag \
ext/phar/phar_path_check.c
|