From: Steph Fox Date: Tue, 18 Mar 2008 03:12:42 +0000 (+0000) Subject: re2c checking. X-Git-Tag: BEFORE_NEW_PARAMETER_PARSE~553 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=766b6b606e1cff6c9c9c399ac37727c5206fded9;p=php re2c checking. If it's not installed, the least scary of messages goes out. If it's installed but older than the required version, the download link is given. --- diff --git a/win32/build/Makefile b/win32/build/Makefile index a249781dfd..5bb7c3321c 100644 --- a/win32/build/Makefile +++ b/win32/build/Makefile @@ -21,7 +21,7 @@ CC="$(CL)" LD="$(LINK)" MC="$(MC)" MT="$(MT)" - +RE2C="$(RE2C)" MCFILE=$(BUILD_DIR)\wsyslog.rc @@ -29,10 +29,16 @@ all: generated_files $(EXT_TARGETS) $(PECL_TARGETS) $(SAPI_TARGETS) build_dirs: $(BUILD_DIR) $(BUILD_DIRS_SUB) +!if $(RE2C) == "" +generated_files: build_dirs Zend\zend_ini_parser.c \ + Zend\zend_language_parser.c \ + $(PHPDEF) $(MCFILE) +!else generated_files: build_dirs Zend\zend_ini_parser.c \ Zend\zend_language_parser.c Zend\zend_ini_scanner.c \ Zend\zend_language_scanner.c \ $(PHPDEF) $(MCFILE) +!endif $(BUILD_DIR)\$(PHPDLL).def: $(PHP_DLL_DEF_SOURCES) type $(PHP_DLL_DEF_SOURCES) > $(BUILD_DIR)\$(PHPDLL).def @@ -43,11 +49,13 @@ Zend\zend_ini_parser.c Zend\zend_ini_parser.h: Zend\zend_ini_parser.y Zend\zend_language_parser.c Zend\zend_language_parser.h: Zend\zend_language_parser.y $(BISON) --output=Zend/zend_language_parser.c -v -d -p zend Zend/zend_language_parser.y +!if $(RE2C) != "" Zend\zend_ini_scanner.c: Zend\zend_ini_scanner.l $(RE2C) $(RE2C_FLAGS) --case-inverted -cbdFt Zend/zend_ini_scanner_defs.h -oZend/zend_ini_scanner.c Zend/zend_ini_scanner.l Zend\zend_language_scanner.c: Zend\zend_language_scanner.l $(RE2C) $(RE2C_FLAGS) --case-inverted -cbdFt Zend/zend_language_scanner_defs.h -oZend/zend_language_scanner.c Zend/zend_language_scanner.l +!endif PHPDLL_RES=$(BUILD_DIR)\$(PHPDLL).res diff --git a/win32/build/config.w32 b/win32/build/config.w32 index c270de4b2b..15347e493f 100644 --- a/win32/build/config.w32 +++ b/win32/build/config.w32 @@ -57,10 +57,40 @@ PATH_PROG('lib', null, 'MAKE_LIB'); if (!PATH_PROG('bison')) { ERROR('bison is required') } -if (!PATH_PROG('re2c')) { - ERROR('re2c is required') + +// There's a minimum requirement for re2c.. +MINRE2C = "0.13.3"; + +function probe_re2c_version(RE2C) +{ + var command = "cmd /c " + RE2C + " -v"; + var version = execute(command + '" 2>&1"'); + + if (version.match(/((\d+)\.(\d+)\.(\d+))/)) { + return RegExp.$1; + } + return 0; +} + +RE2C = PATH_PROG('re2c'); +if (RE2C) { + var intvers, intmin; + var pattern = /\./g; + + RE2CVERS = probe_re2c_version(RE2C); + intvers = RE2CVERS.replace(pattern, '') - 0; + intmin = MINRE2C.replace(pattern, '') - 0; + + if (intvers < intmin) { + STDOUT.WriteLine('WARNING: The minimum RE2C version requirement is ' + MINRE2C + ', ' + RE2CVERS + ' detected'); + STDOUT.WriteLine('Parsers will not be generated. Upgrade your copy at http://sf.net/projects/re2c'); + DEFINE('RE2C', ''); + } else { + DEFINE('RE2C_FLAGS', ''); + } +} else { + STDOUT.WriteLine('Parsers will not be regenerated'); } -DEFINE('RE2C_FLAGS', ''); PATH_PROG('zip'); PATH_PROG('lemon');