ソースを参照

Merge pull request #213 from Jan-E/php7

#210 Windows: Autodetect V8 API & V8 Engine Compiled Version
Stefan Siegl 9 年 前
コミット
dc3e4c4260
1 ファイル変更35 行追加2 行削除
  1. 35 2
      config.w32

+ 35 - 2
config.w32

@@ -1,6 +1,11 @@
 
 ARG_WITH("v8js", "for V8 Javascript Engine", "no");
 
+function v8js_zeroPad(num, places) {
+  var zero = places - num.toString().length + 1;
+  return Array(+(zero > 0 && zero)).join("0") + num;
+}
+
 if (PHP_V8JS != "no") {
 	if (CHECK_LIB("v8_libplatform.lib", "v8js") &&
 			CHECK_LIB("v8_libbase.lib", "v8js") &&
@@ -14,8 +19,36 @@ if (PHP_V8JS != "no") {
 		ADD_FLAG("CFLAGS_V8JS", "/D ZEND_WIN32_FORCE_INLINE");
 		ADD_FLAG("CFLAGS_V8JS", "/D __STDC_LIMIT_MACROS");
 
-		AC_DEFINE("PHP_V8_API_VERSION", "4007075", "", false);
-		AC_DEFINE("PHP_V8_VERSION", "4.7.75", "", true);
+		// defaults
+		var v8major = 4;
+		var v8minor = 7;
+		var v8build = 75;
+		var v8patch = 0;
+		var v8pinc = search_paths("v8-version.h", php_usual_include_suspects, null);
+		if (typeof(v8pinc) == "string") {
+			var v8versionh = file_get_contents(v8pinc + '\\v8-version.h');
+			if (v8versionh.match(/#define V8_MAJOR_VERSION ([0-9]*)/i)) {
+				v8major = RegExp.$1;
+			}
+			if (v8versionh.match(/#define V8_MINOR_VERSION ([0-9]*)/i)) {
+				v8minor = RegExp.$1;
+			}
+			if (v8versionh.match(/#define V8_BUILD_NUMBER ([0-9]*)/i)) {
+				v8build = RegExp.$1;
+			}
+			if (v8versionh.match(/#define V8_PATCH_LEVEL ([0-9]*)/i)) {
+				v8patch = RegExp.$1;
+			}
+		} else {
+			WARNING("Could not parse v8-version.h");
+		}
+		var v8api = v8major + v8js_zeroPad(v8minor,2) + v8js_zeroPad(v8build,2) + v8js_zeroPad(v8patch,2);
+		var v8ver = v8major+"."+v8minor+"."+v8build+"."+v8patch;
+		//WARNING("v8api = " + v8api + ", v8ver = " + v8ver);
+		AC_DEFINE("PHP_V8_API_VERSION", v8api, "", false);
+		AC_DEFINE("PHP_V8_VERSION", v8ver, "", true);
+		//AC_DEFINE("PHP_V8_API_VERSION", "4007075", "", false);
+		//AC_DEFINE("PHP_V8_VERSION", "4.7.75", "", true);
 
 		EXTENSION("v8js", "v8js_array_access.cc v8js.cc v8js_class.cc v8js_commonjs.cc v8js_convert.cc v8js_exceptions.cc v8js_generator_export.cc v8js_methods.cc v8js_object_export.cc v8js_timer.cc v8js_v8.cc v8js_v8object_class.cc v8js_variables.cc", "yes");