Hi!Attached is the patch implementing build ID. Please comment. If no objections are raised I'm going to commit it tomorrow.
-- Stanislav Malyshev, Zend Software Architect s...@zend.com http://www.zend.com/ (408)253-8829 MSN: s...@zend.com
Index: ext/standard/dl.c =================================================================== RCS file: /repository/php-src/ext/standard/dl.c,v retrieving revision 1.106.2.1.2.5.2.10 diff -u -b -r1.106.2.1.2.5.2.10 dl.c --- ext/standard/dl.c 7 Jan 2009 13:02:43 -0000 1.106.2.1.2.5.2.10 +++ ext/standard/dl.c 16 Jan 2009 01:05:08 -0000 @@ -169,10 +169,7 @@ 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,29 +193,33 @@ 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_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", - name, zend_api, zend_debug, zts, - ZEND_MODULE_API_NO, ZEND_DEBUG, USING_ZTS); + module_entry->name, module_entry->build_id, ZEND_MODULE_BUILD_ID); DL_UNLOAD(handle); return FAILURE; } Index: ext/standard/info.c =================================================================== RCS file: /repository/php-src/ext/standard/info.c,v retrieving revision 1.249.2.10.2.14.2.22 diff -u -b -r1.249.2.10.2.14.2.22 info.c --- ext/standard/info.c 4 Jan 2009 15:19:57 -0000 1.249.2.10.2.14.2.22 +++ ext/standard/info.c 16 Jan 2009 01:05:08 -0000 @@ -696,6 +696,9 @@ 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 Index: win32/build/config.w32 =================================================================== RCS file: /repository/php-src/win32/build/config.w32,v retrieving revision 1.40.2.8.2.10.2.41 diff -u -b -r1.40.2.8.2.10.2.41 config.w32 --- win32/build/config.w32 6 Jan 2009 20:50:57 -0000 1.40.2.8.2.10.2.41 +++ win32/build/config.w32 16 Jan 2009 01:05:08 -0000 @@ -20,6 +20,7 @@ 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); Index: Zend/zend_extensions.c =================================================================== RCS file: /repository/ZendEngine2/zend_extensions.c,v retrieving revision 1.48.2.1.2.3.2.3 diff -u -b -r1.48.2.1.2.3.2.3 zend_extensions.c --- Zend/zend_extensions.c 31 Dec 2008 11:15:32 -0000 1.48.2.1.2.3.2.3 +++ Zend/zend_extensions.c 16 Jan 2009 01:05:08 -0000 @@ -79,18 +79,9 @@ 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; } Index: Zend/zend_extensions.h =================================================================== RCS file: /repository/ZendEngine2/zend_extensions.h,v retrieving revision 1.67.2.3.2.3.2.4 diff -u -b -r1.67.2.3.2.3.2.4 zend_extensions.h --- Zend/zend_extensions.h 31 Dec 2008 11:15:32 -0000 1.67.2.3.2.3.2.4 +++ Zend/zend_extensions.h 16 Jan 2009 01:05:08 -0000 @@ -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; Index: Zend/zend_modules.h =================================================================== RCS file: /repository/ZendEngine2/zend_modules.h,v retrieving revision 1.67.2.3.2.4.2.7 diff -u -b -r1.67.2.3.2.4.2.7 zend_modules.h --- Zend/zend_modules.h 31 Dec 2008 11:15:32 -0000 1.67.2.3.2.4.2.7 +++ Zend/zend_modules.h 16 Jan 2009 01:05:08 -0000 @@ -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,14 +33,11 @@ #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 -#ifdef ZTS -#define USING_ZTS 1 -#else -#define USING_ZTS 0 -#endif +#define ZEND_MODULE_API_NO 20090115 + +#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_HEADER_EX sizeof(zend_module_entry), ZEND_MODULE_API_NO, ZEND_DEBUG, USING_ZTS +#define STANDARD_MODULE_HEADER_EX sizeof(zend_module_entry), ZEND_MODULE_API_NO, ZEND_MODULE_BUILD_ID #define STANDARD_MODULE_HEADER \ STANDARD_MODULE_HEADER_EX, NULL, NULL #define ZE2_STANDARD_MODULE_HEADER \ @@ -70,8 +68,7 @@ struct _zend_module_entry { unsigned short size; unsigned int zend_api; - unsigned char zend_debug; - unsigned char zts; + char *build_id; const struct _zend_ini_entry *ini_entry; const struct _zend_module_dep *deps; const char *name;
#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
-- PHP Internals - PHP Runtime Development Mailing List To unsubscribe, visit: http://www.php.net/unsub.php