summaryrefslogtreecommitdiff
path: root/scripts/dev/genfiles
diff options
context:
space:
mode:
Diffstat (limited to 'scripts/dev/genfiles')
-rwxr-xr-xscripts/dev/genfiles101
1 files changed, 101 insertions, 0 deletions
diff --git a/scripts/dev/genfiles b/scripts/dev/genfiles
new file mode 100755
index 0000000000..6384225749
--- /dev/null
+++ b/scripts/dev/genfiles
@@ -0,0 +1,101 @@
+#!/bin/sh
+#
+# +----------------------------------------------------------------------+
+# | PHP Version 7 |
+# +----------------------------------------------------------------------+
+# | 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://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
+#
+# For example:
+# YACC=/path/to/bison ./genfiles
+
+# Parser generator
+YACC=${YACC:-bison}
+YACC="$YACC -y -l"
+
+# Lexer generator
+RE2C=${RE2C:-re2c}
+RE2C_FLAGS="-i"
+
+# Current path to return to it later. This enables running script from any path.
+original_path=`pwd`
+
+# Project root directory
+project_root=`CDPATH= cd -- "$(dirname -- "$0")/../../" && pwd -P`
+cd $project_root
+
+echo "Generating Zend parser and lexer files"
+make RE2C="$RE2C" RE2C_FLAGS="$RE2C_FLAGS" YACC="$YACC" 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 "Generating phpdbg parser and lexer files"
+make RE2C="$RE2C" RE2C_FLAGS="$RE2C_FLAGS" YACC="$YACC" srcdir=sapi/phpdbg builddir=sapi/phpdbg top_srcdir=. \
+ -f sapi/phpdbg/Makefile.frag \
+ sapi/phpdbg/phpdbg_parser.c \
+ sapi/phpdbg/phpdbg_lexer.c
+
+echo "Generating json extension parser and lexer files"
+make RE2C="$RE2C" RE2C_FLAGS="$RE2C_FLAGS" YACC="$YACC" 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 "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 "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 "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
+
+# Clean debug #line XY info from the bundled lexer files.
+cleanup_files=" \
+ ext/date/lib/parse_date.c \
+ ext/date/lib/parse_iso_intervals.c \
+"
+
+for f in $cleanup_files; do
+ echo "Cleaning file $f"
+ cp $f $f.orig
+ grep -v '^#line ' $f.orig > $f
+ rm -f $f.orig
+done
+
+# Return to the original directory.
+cd $original_path