diff options
-rwxr-xr-x | Zend/zend_build.h | 28 | ||||
-rw-r--r-- | Zend/zend_extensions.c | 15 | ||||
-rw-r--r-- | Zend/zend_extensions.h | 8 | ||||
-rw-r--r-- | Zend/zend_modules.h | 8 | ||||
-rw-r--r-- | ext/standard/dl.c | 27 | ||||
-rw-r--r-- | ext/standard/info.c | 3 | ||||
-rw-r--r-- | win32/build/config.w32 | 1 |
7 files changed, 59 insertions, 31 deletions
diff --git a/Zend/zend_build.h b/Zend/zend_build.h new file mode 100755 index 0000000000..d66a94edd2 --- /dev/null +++ b/Zend/zend_build.h @@ -0,0 +1,28 @@ +#ifndef ZEND_BUILD_H +#define ZEND_BUILD_H + +#define ZEND_TOSTR_(x) #x +#define ZEND_TOSTR(x) ZEND_TOSTR_(x) + +#ifdef ZTS +#define ZEND_BUILD_TS ",TS" +#else +#define ZEND_BUILD_TS ",NTS" +#endif + +#if ZEND_DEBUG +#define ZEND_BUILD_DEBUG ",debug" +#else +#define ZEND_BUILD_DEBUG +#endif + +#if defined(ZEND_WIN32) && defined(PHP_COMPILER_ID) +#define ZEND_BUILD_SYSTEM "," PHP_COMPILER_ID +#else +#define ZEND_BUILD_SYSTEM +#endif + +/* for private applications */ +#define ZEND_BUILD_EXTRA + +#endif
\ No newline at end of file diff --git a/Zend/zend_extensions.c b/Zend/zend_extensions.c index e819548768..d0a0087c1a 100644 --- a/Zend/zend_extensions.c +++ b/Zend/zend_extensions.c @@ -79,18 +79,9 @@ int zend_load_extension(const char *path) DL_UNLOAD(handle); return FAILURE; } - } else if (ZTS_V!=extension_version_info->thread_safe) { - fprintf(stderr, "Cannot load %s - it %s thread safe, whereas Zend %s\n", - new_extension->name, - (extension_version_info->thread_safe?"is":"isn't"), - (ZTS_V?"is":"isn't")); - DL_UNLOAD(handle); - return FAILURE; - } else if (ZEND_DEBUG!=extension_version_info->debug) { - fprintf(stderr, "Cannot load %s - it %s debug information, whereas Zend %s\n", - new_extension->name, - (extension_version_info->debug?"contains":"does not contain"), - (ZEND_DEBUG?"does":"does not")); + } else if (strcmp(ZEND_EXTENSION_BUILD_ID, extension_version_info->build_id)) { + fprintf(stderr, "Cannot load %s - it was build with configuration %s, whereas running engine is %s\n", + new_extension->name, extension_version_info->build_id, ZEND_EXTENSION_BUILD_ID); DL_UNLOAD(handle); return FAILURE; } diff --git a/Zend/zend_extensions.h b/Zend/zend_extensions.h index bda1919ad2..4993144e14 100644 --- a/Zend/zend_extensions.h +++ b/Zend/zend_extensions.h @@ -23,19 +23,19 @@ #define ZEND_EXTENSIONS_H #include "zend_compile.h" +#include "zend_build.h" /* The first number is the engine version and the rest is the date. * This way engine 2/3 API no. is always greater than engine 1 API no.. */ -#define ZEND_EXTENSION_API_NO 220070929 +#define ZEND_EXTENSION_API_NO 220090115 typedef struct _zend_extension_version_info { int zend_extension_api_no; - char *required_zend_version; - unsigned char thread_safe; - unsigned char debug; + char *build_id; } zend_extension_version_info; +#define ZEND_EXTENSION_BUILD_ID "API" ZEND_TOSTR(ZEND_EXTENSION_API_NO) ZEND_BUILD_TS ZEND_BUILD_DEBUG ZEND_BUILD_SYSTEM ZEND_BUILD_EXTRA typedef struct _zend_extension zend_extension; diff --git a/Zend/zend_modules.h b/Zend/zend_modules.h index 4e8906c341..84abc3373e 100644 --- a/Zend/zend_modules.h +++ b/Zend/zend_modules.h @@ -24,6 +24,7 @@ #include "zend.h" #include "zend_compile.h" +#include "zend_build.h" #define INIT_FUNC_ARGS int type, int module_number TSRMLS_DC #define INIT_FUNC_ARGS_PASSTHRU type, module_number TSRMLS_CC @@ -32,7 +33,7 @@ #define ZEND_MODULE_INFO_FUNC_ARGS zend_module_entry *zend_module TSRMLS_DC #define ZEND_MODULE_INFO_FUNC_ARGS_PASSTHRU zend_module TSRMLS_CC -#define ZEND_MODULE_API_NO 20071006 +#define ZEND_MODULE_API_NO 20090115 #ifdef ZTS #define USING_ZTS 1 #else @@ -45,7 +46,9 @@ #define ZE2_STANDARD_MODULE_HEADER \ STANDARD_MODULE_HEADER_EX, ini_entries, NULL -#define STANDARD_MODULE_PROPERTIES_EX 0, 0, NULL, 0 +#define ZEND_MODULE_BUILD_ID "API" ZEND_TOSTR(ZEND_MODULE_API_NO) ZEND_BUILD_TS ZEND_BUILD_DEBUG ZEND_BUILD_SYSTEM ZEND_BUILD_EXTRA + +#define STANDARD_MODULE_PROPERTIES_EX 0, 0, NULL, 0, ZEND_MODULE_BUILD_ID #define NO_MODULE_GLOBALS 0, NULL, NULL, NULL @@ -95,6 +98,7 @@ struct _zend_module_entry { unsigned char type; void *handle; int module_number; + char *build_id; }; #define MODULE_DEP_REQUIRED 1 diff --git a/ext/standard/dl.c b/ext/standard/dl.c index a674831e4e..bee68baada 100644 --- a/ext/standard/dl.c +++ b/ext/standard/dl.c @@ -169,10 +169,7 @@ PHPAPI int php_load_extension(char *filename, int type, int start_now TSRMLS_DC) return FAILURE; } module_entry = get_module(); - if ((module_entry->zend_debug != ZEND_DEBUG) || - (module_entry->zts != USING_ZTS) || - (module_entry->zend_api != ZEND_MODULE_API_NO) - ) { + if (module_entry->zend_api != ZEND_MODULE_API_NO) { /* Check for pre-4.1.0 module which has a slightly different module_entry structure :( */ struct pre_4_1_0_module_entry { char *name; @@ -196,32 +193,36 @@ PHPAPI int php_load_extension(char *filename, int type, int start_now TSRMLS_DC) const char *name; int zend_api; - unsigned char zend_debug, zts; if ((((struct pre_4_1_0_module_entry *)module_entry)->zend_api > 20000000) && (((struct pre_4_1_0_module_entry *)module_entry)->zend_api < 20010901) ) { name = ((struct pre_4_1_0_module_entry *)module_entry)->name; zend_api = ((struct pre_4_1_0_module_entry *)module_entry)->zend_api; - zend_debug = ((struct pre_4_1_0_module_entry *)module_entry)->zend_debug; - zts = ((struct pre_4_1_0_module_entry *)module_entry)->zts; } else { name = module_entry->name; zend_api = module_entry->zend_api; - zend_debug = module_entry->zend_debug; - zts = module_entry->zts; } php_error_docref(NULL TSRMLS_CC, error_type, "%s: Unable to initialize module\n" - "Module compiled with module API=%d, debug=%d, thread-safety=%d\n" - "PHP compiled with module API=%d, debug=%d, thread-safety=%d\n" + "Module compiled with module API=%d\n" + "PHP compiled with module API=%d\n" "These options need to match\n", - name, zend_api, zend_debug, zts, - ZEND_MODULE_API_NO, ZEND_DEBUG, USING_ZTS); + name, zend_api, ZEND_MODULE_API_NO); DL_UNLOAD(handle); return FAILURE; } + if(strcmp(module_entry->build_id, ZEND_MODULE_BUILD_ID)) { + php_error_docref(NULL TSRMLS_CC, error_type, + "%s: Unable to initialize module\n" + "Module compiled with build ID=%s\n" + "PHP compiled with build ID=%s\n" + "These options need to match\n", + module_entry->name, module_entry->build_id, ZEND_MODULE_BUILD_ID); + DL_UNLOAD(handle); + return FAILURE; + } module_entry->type = type; module_entry->module_number = zend_next_free_module(); module_entry->handle = handle; diff --git a/ext/standard/info.c b/ext/standard/info.c index ea82beb48d..393d499c11 100644 --- a/ext/standard/info.c +++ b/ext/standard/info.c @@ -696,6 +696,9 @@ PHPAPI void php_print_info(int flag TSRMLS_DC) snprintf(temp_api, sizeof(temp_api), "%d", ZEND_EXTENSION_API_NO); php_info_print_table_row(2, "Zend Extension", temp_api); + php_info_print_table_row(2, "Zend Extension Build", ZEND_EXTENSION_BUILD_ID); + php_info_print_table_row(2, "PHP Extension Build", ZEND_MODULE_BUILD_ID); + #if ZEND_DEBUG php_info_print_table_row(2, "Debug Build", "yes" ); #else diff --git a/win32/build/config.w32 b/win32/build/config.w32 index 9963db8700..d44ba15b2c 100644 --- a/win32/build/config.w32 +++ b/win32/build/config.w32 @@ -20,6 +20,7 @@ VCVERS = probe_binary(CL).substr(0, 5).replace('.', ''); STDOUT.WriteLine(" Detected compiler " + VC_VERSIONS[VCVERS]); AC_DEFINE('COMPILER', VC_VERSIONS[VCVERS], "Detected compiler version"); DEFINE("PHP_COMPILER_SHORT", VC_VERSIONS_SHORT[VCVERS]); +AC_DEFINE('PHP_COMPILER_ID', VC_VERSIONS_SHORT[VCVERS], "Compiler compatibility ID"); // do we use x64 or 80x86 version of compiler? X64 = probe_binary(CL, 64); |