Browse Source

Don't try to guess if blob.bin files are needed

Search for them, if they exist, provide them to V8.  Otherwise
try to go without them.
Stefan Siegl 8 years ago
parent
commit
77e7338018
2 changed files with 22 additions and 78 deletions
  1. 21 77
      config.m4
  2. 1 1
      v8js_v8.cc

+ 21 - 77
config.m4

@@ -115,8 +115,6 @@ if test "$PHP_V8JS" != "no"; then
   dnl Check for V8 version
   dnl Check for V8 version
   dnl (basic support for library linking assumed to be achieved above)
   dnl (basic support for library linking assumed to be achieved above)
   dnl
   dnl
-
-
   LIBS="$LIBS $V8JS_SHARED_LIBADD"
   LIBS="$LIBS $V8JS_SHARED_LIBADD"
   AC_CACHE_CHECK(for V8 version, ac_cv_v8_version, [
   AC_CACHE_CHECK(for V8 version, ac_cv_v8_version, [
 AC_TRY_RUN([#include <v8.h>
 AC_TRY_RUN([#include <v8.h>
@@ -152,90 +150,36 @@ int main ()
     AC_MSG_ERROR([could not determine libv8 version])
     AC_MSG_ERROR([could not determine libv8 version])
   fi
   fi
 
 
-  PHP_ADD_INCLUDE($V8_DIR)
-
-  # modify flags for (possibly) succeeding V8 startup check
-  CPPFLAGS="$CPPFLAGS -I$V8_DIR"
-
-  dnl building for v8 4.4.10 or later, which requires us to
-  dnl provide startup data, if V8 wasn't compiled with snapshot=off.
-  AC_MSG_CHECKING([whether V8 requires startup data])
-  AC_TRY_RUN([
-	  #include <v8.h>
-	  #include <libplatform/libplatform.h>
-	  #include <stdlib.h>
-	  #include <string.h>
-
-class ArrayBufferAllocator : public v8::ArrayBuffer::Allocator {
-public:
-  virtual void* Allocate(size_t length) {
-	  void* data = AllocateUninitialized(length);
-	  return data == NULL ? data : memset(data, 0, length);
-  }
-  virtual void* AllocateUninitialized(size_t length) { return malloc(length); }
-  virtual void Free(void* data, size_t) { free(data); }
-};
-
-	  int main ()
-	  {
-		  v8::Platform *v8_platform = v8::platform::CreateDefaultPlatform();
-		  v8::V8::InitializePlatform(v8_platform);
-		  v8::V8::Initialize();
-
-		  static ArrayBufferAllocator array_buffer_allocator;
-		  v8::Isolate::CreateParams create_params;
-		  create_params.array_buffer_allocator = &array_buffer_allocator;
-
-		  v8::Isolate::New(create_params);
-		  return 0;
-	  }
-  ], [
-	  AC_MSG_RESULT([no])
-  ], [
-	  AC_MSG_RESULT([yes])
-	  AC_DEFINE([PHP_V8_USE_EXTERNAL_STARTUP_DATA], [1], [Whether V8 requires (and can be provided with custom versions of) external startup data])
-
-	  SEARCH_PATH="$V8_DIR/$PHP_LIBDIR $V8_DIR/share/v8"
 
 
-	  AC_MSG_CHECKING([for natives_blob.bin])
-	  SEARCH_FOR="natives_blob.bin"
-
-	  for i in $SEARCH_PATH ; do
-		if test -r $i/$SEARCH_FOR; then
-		  AC_MSG_RESULT([found ($i/$SEARCH_FOR)])
-		  AC_DEFINE_UNQUOTED([PHP_V8_NATIVES_BLOB_PATH], "$i/$SEARCH_FOR", [Full path to natives_blob.bin file])
-		  native_blob_found=1
-		fi
-	  done
-
-	  if test -z "$native_blob_found"; then
-		AC_MSG_RESULT([not found])
-		AC_MSG_ERROR([Please provide V8 native blob as needed])
+  dnl
+  dnl  Scan for blob.bin files (that might be needed)
+  dnl
+  AC_DEFUN([V8_SEARCH_BLOB], [
+	AC_MSG_CHECKING([for $1])
+	blob_found=0
+
+	for i in "$V8_DIR/$PHP_LIBDIR" "$V8_DIR/share/v8"; do
+	  if test -r "$i/$1"; then
+		AC_MSG_RESULT([found ($i/$1)])
+		AC_DEFINE_UNQUOTED([$2], "$i/$1", [Full path to $1 file])
+		blob_found=1
 	  fi
 	  fi
+	done
 
 
-	  AC_MSG_CHECKING([for snapshot_blob.bin])
-	  SEARCH_FOR="snapshot_blob.bin"
-
-	  for i in $SEARCH_PATH ; do
-		if test -r $i/$SEARCH_FOR; then
-		  AC_MSG_RESULT([found ($i/$SEARCH_FOR)])
-		  AC_DEFINE_UNQUOTED([PHP_V8_SNAPSHOT_BLOB_PATH], "$i/$SEARCH_FOR", [Full path to snapshot_blob.bin file])
-		  snapshot_blob_found=1
-		fi
-	  done
-
-	  if test -z "$snapshot_blob_found"; then
-		AC_MSG_RESULT([not found])
-		AC_MSG_ERROR([Please provide V8 snapshot blob as needed])
-	  fi
+	if test "$blob_found" -ne 1; then
+	  AC_MSG_RESULT([not found])
+	fi
   ])
   ])
+  V8_SEARCH_BLOB([natives_blob.bin], [PHP_V8_NATIVES_BLOB_PATH])
+  V8_SEARCH_BLOB([snapshot_blob.bin], [PHP_V8_SNAPSHOT_BLOB_PATH])
+
 
 
   AC_LANG_RESTORE
   AC_LANG_RESTORE
   LIBS=$old_LIBS
   LIBS=$old_LIBS
-  LDFLAGS="$old_LDFLAGS $LDFLAGS_libplatform"
+  LDFLAGS="$old_LDFLAGS"
   CPPFLAGS=$old_CPPFLAGS
   CPPFLAGS=$old_CPPFLAGS
 
 
-
+  PHP_ADD_INCLUDE($V8_DIR)
   PHP_NEW_EXTENSION(v8js, [	\
   PHP_NEW_EXTENSION(v8js, [	\
     v8js_array_access.cc	\
     v8js_array_access.cc	\
     v8js.cc					\
     v8js.cc					\

+ 1 - 1
v8js_v8.cc

@@ -52,7 +52,7 @@ void v8js_v8_init(TSRMLS_D) /* {{{ */
 	}
 	}
 #endif
 #endif
 
 
-#ifdef PHP_V8_USE_EXTERNAL_STARTUP_DATA
+#if defined(PHP_V8_NATIVES_BLOB_PATH) && defined(PHP_V8_SNAPSHOT_BLOB_PATH)
 	/* V8 doesn't work without startup data, load it. */
 	/* V8 doesn't work without startup data, load it. */
 	v8::V8::InitializeExternalStartupData(
 	v8::V8::InitializeExternalStartupData(
 		PHP_V8_NATIVES_BLOB_PATH,
 		PHP_V8_NATIVES_BLOB_PATH,