]> granicus.if.org Git - php/commitdiff
re2c checking.
authorSteph Fox <sfox@php.net>
Tue, 18 Mar 2008 03:12:42 +0000 (03:12 +0000)
committerSteph Fox <sfox@php.net>
Tue, 18 Mar 2008 03:12:42 +0000 (03:12 +0000)
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.

win32/build/Makefile
win32/build/config.w32

index a249781dfdbe957391c0befc6a0fbe08b3f05c2c..5bb7c3321c163a5723e720875f299bab9e8b6348 100644 (file)
@@ -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
 
index c270de4b2b291fa4f45733ad7e9832df5b9bc894..15347e493f9965e2025ad75d8c62959f9e284ae6 100644 (file)
@@ -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');