]> granicus.if.org Git - php/commitdiff
Build IDs
authorStanislav Malyshev <stas@php.net>
Sat, 17 Jan 2009 02:05:13 +0000 (02:05 +0000)
committerStanislav Malyshev <stas@php.net>
Sat, 17 Jan 2009 02:05:13 +0000 (02:05 +0000)
Zend/zend_build.h [new file with mode: 0755]
Zend/zend_extensions.c
Zend/zend_extensions.h
Zend/zend_modules.h
ext/standard/dl.c
ext/standard/info.c
win32/build/config.w32

diff --git a/Zend/zend_build.h b/Zend/zend_build.h
new file mode 100755 (executable)
index 0000000..d66a94e
--- /dev/null
@@ -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
index e819548768540bd9b92a1d8dd4642e6b675df9b7..d0a0087c1abd2c429a2ff2fd7b45cba967654c92 100644 (file)
@@ -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;
        }
index bda1919ad218fcb3661bd754c225ac4949238a0a..4993144e142c29bde10536101dc42c84ad5c1318 100644 (file)
 #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 4e8906c3418af62cb87b2573c5f5ed8f63e0f303..84abc3373e622c52d6f47fd93f698c94b9724ec3 100644 (file)
@@ -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
index a674831e4efbebd1c0a4c1bd0408628360a7a824..bee68baada3d57a41ea0e2d80a8c82679b0b5c90 100644 (file)
@@ -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;
index ea82beb48d8c016ca25d78328aa00040a58aefc6..393d499c1118e1b04144e5dcf69bd8a9f10b3416 100644 (file)
@@ -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
index 9963db8700c916584555ca20c5fc9738a889c999..d44ba15b2c51ac017e4af4c98fd7ccc170fefe7a 100644 (file)
@@ -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);