From: Stanislav Malyshev Date: Sat, 17 Jan 2009 02:07:46 +0000 (+0000) Subject: build IDs X-Git-Tag: php-5.4.0alpha1~191^2~4494 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=ba488431f6311e371ade18a983be9d2f9bb47453;p=php build IDs --- 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 68141f135d..e20f1596fd 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_modules.h b/Zend/zend_modules.h index a35e980ec3..3c0ed88130 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 @@ -46,7 +47,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 @@ -96,6 +99,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 1de8867a6e..82fb82e955 100644 --- a/ext/standard/dl.c +++ b/ext/standard/dl.c @@ -162,10 +162,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; @@ -189,32 +186,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 db69230e50..72e42ae979 100644 --- a/ext/standard/info.c +++ b/ext/standard/info.c @@ -782,6 +782,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 8d18aa5805..6365311ab3 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);