#!/bin/sh # # +----------------------------------------------------------------------+ # | PHP Version 7 | # +----------------------------------------------------------------------+ # | Copyright (c) 1997-2018 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 | # +----------------------------------------------------------------------+ # # 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