dmitry Fri Jun 17 05:39:24 2005 EDT Modified files: /php-src/build genif.sh /php-src/ext/dom php_dom.c /php-src/ext/pdo pdo.c /php-src/ext/pdo_mysql pdo_mysql.c /php-src/ext/pdo_sqlite pdo_sqlite.c /php-src/ext/sqlite sqlite.c /php-src/ext/standard dl.c dl.h /php-src/main internal_functions.c.in internal_functions_nw.c internal_functions_win32.c main.c php.h php_ini.c php_ini.h php_main.h Log: Improved PHP extension loading mechanism with support for module dependencies and conflicts
http://cvs.php.net/diff.php/php-src/build/genif.sh?r1=1.4&r2=1.5&ty=u Index: php-src/build/genif.sh diff -u php-src/build/genif.sh:1.4 php-src/build/genif.sh:1.5 --- php-src/build/genif.sh:1.4 Sun Jul 18 08:03:51 2004 +++ php-src/build/genif.sh Fri Jun 17 05:39:20 2005 @@ -1,6 +1,6 @@ #! /bin/sh -# $Id: genif.sh,v 1.4 2004/07/18 12:03:51 wez Exp $ +# $Id: genif.sh,v 1.5 2005/06/17 09:39:20 dmitry Exp $ # replacement for genif.pl infile=$1 @@ -17,13 +17,13 @@ exit 1 fi +module_ptrs=$extra_module_ptrs header_list= olddir=`pwd` cd $srcdir -module_ptrs="$extra_module_ptrs`echo $@ | $awk -f ./build/order_by_dep.awk`" - for ext in ${1+"$@"} ; do + module_ptrs=" phpext_${ext}_ptr,@[EMAIL PROTECTED]" header_list="$header_list ext/$ext/*.h" done http://cvs.php.net/diff.php/php-src/ext/dom/php_dom.c?r1=1.70&r2=1.71&ty=u Index: php-src/ext/dom/php_dom.c diff -u php-src/ext/dom/php_dom.c:1.70 php-src/ext/dom/php_dom.c:1.71 --- php-src/ext/dom/php_dom.c:1.70 Tue May 3 18:55:03 2005 +++ php-src/ext/dom/php_dom.c Fri Jun 17 05:39:20 2005 @@ -18,7 +18,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: php_dom.c,v 1.70 2005/05/03 22:55:03 rrichards Exp $ */ +/* $Id: php_dom.c,v 1.71 2005/06/17 09:39:20 dmitry Exp $ */ #ifdef HAVE_CONFIG_H #include "config.h" @@ -404,8 +404,18 @@ } } +static zend_module_dep dom_deps[] = { + ZEND_MOD_REQUIRED("libxml") + ZEND_MOD_CONFLICTS("domxml") +#ifdef HAVE_SIMPLEXML + ZEND_MOD_REQUIRED("simplexml") +#endif + {NULL, NULL, NULL} +}; + zend_module_entry dom_module_entry = { - STANDARD_MODULE_HEADER, + STANDARD_MODULE_HEADER_EX, NULL, + dom_deps, "dom", dom_functions, PHP_MINIT(dom), http://cvs.php.net/diff.php/php-src/ext/pdo/pdo.c?r1=1.49&r2=1.50&ty=u Index: php-src/ext/pdo/pdo.c diff -u php-src/ext/pdo/pdo.c:1.49 php-src/ext/pdo/pdo.c:1.50 --- php-src/ext/pdo/pdo.c:1.49 Fri Jun 10 02:11:29 2005 +++ php-src/ext/pdo/pdo.c Fri Jun 17 05:39:20 2005 @@ -18,7 +18,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: pdo.c,v 1.49 2005/06/10 06:11:29 wez Exp $ */ +/* $Id: pdo.c,v 1.50 2005/06/17 09:39:20 dmitry Exp $ */ #ifdef HAVE_CONFIG_H #include "config.h" @@ -86,9 +86,20 @@ }; /* }}} */ +/* {{{ pdo_functions[] */ +static zend_module_dep pdo_deps[] = { +#ifdef HAVE_SPL + ZEND_MOD_REQUIRED("spl") +#endif + {NULL, NULL, NULL} +}; + +/* }}} */ + /* {{{ pdo_module_entry */ zend_module_entry pdo_module_entry = { - STANDARD_MODULE_HEADER, + STANDARD_MODULE_HEADER_EX, NULL, + pdo_deps, "PDO", pdo_functions, PHP_MINIT(pdo), http://cvs.php.net/diff.php/php-src/ext/pdo_mysql/pdo_mysql.c?r1=1.3&r2=1.4&ty=u Index: php-src/ext/pdo_mysql/pdo_mysql.c diff -u php-src/ext/pdo_mysql/pdo_mysql.c:1.3 php-src/ext/pdo_mysql/pdo_mysql.c:1.4 --- php-src/ext/pdo_mysql/pdo_mysql.c:1.3 Wed Feb 9 00:02:03 2005 +++ php-src/ext/pdo_mysql/pdo_mysql.c Fri Jun 17 05:39:20 2005 @@ -16,7 +16,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: pdo_mysql.c,v 1.3 2005/02/09 05:02:03 wez Exp $ */ +/* $Id: pdo_mysql.c,v 1.4 2005/06/17 09:39:20 dmitry Exp $ */ #ifdef HAVE_CONFIG_H #include "config.h" @@ -36,9 +36,17 @@ }; /* }}} */ +/* {{{ pdo_mysql_functions[] */ +static zend_module_dep pdo_mysql_deps[] = { + ZEND_MOD_REQUIRED("pdo") + {NULL, NULL, NULL} +}; +/* }}} */ + /* {{{ pdo_mysql_module_entry */ zend_module_entry pdo_mysql_module_entry = { - STANDARD_MODULE_HEADER, + STANDARD_MODULE_HEADER_EX, NULL, + pdo_mysql_deps, "pdo_mysql", pdo_mysql_functions, PHP_MINIT(pdo_mysql), http://cvs.php.net/diff.php/php-src/ext/pdo_sqlite/pdo_sqlite.c?r1=1.7&r2=1.8&ty=u Index: php-src/ext/pdo_sqlite/pdo_sqlite.c diff -u php-src/ext/pdo_sqlite/pdo_sqlite.c:1.7 php-src/ext/pdo_sqlite/pdo_sqlite.c:1.8 --- php-src/ext/pdo_sqlite/pdo_sqlite.c:1.7 Wed Mar 9 13:18:53 2005 +++ php-src/ext/pdo_sqlite/pdo_sqlite.c Fri Jun 17 05:39:20 2005 @@ -16,7 +16,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: pdo_sqlite.c,v 1.7 2005/03/09 18:18:53 wez Exp $ */ +/* $Id: pdo_sqlite.c,v 1.8 2005/06/17 09:39:20 dmitry Exp $ */ #ifdef HAVE_CONFIG_H #include "config.h" @@ -39,10 +39,19 @@ }; /* }}} */ +/* {{{ pdo_sqlite_deps + */ +static zend_module_dep pdo_sqlite_deps[] = { + ZEND_MOD_REQUIRED("pdo") + {NULL, NULL, NULL} +}; +/* }}} */ + /* {{{ pdo_sqlite_module_entry */ zend_module_entry pdo_sqlite_module_entry = { - STANDARD_MODULE_HEADER, + STANDARD_MODULE_HEADER_EX, NULL, + pdo_sqlite_deps, "pdo_sqlite", pdo_sqlite_functions, PHP_MINIT(pdo_sqlite), @@ -85,7 +94,7 @@ "(bundled) " #endif PHP_PDO_SQLITE_MODULE_VERSION - " $Id: pdo_sqlite.c,v 1.7 2005/03/09 18:18:53 wez Exp $"); + " $Id: pdo_sqlite.c,v 1.8 2005/06/17 09:39:20 dmitry Exp $"); php_info_print_table_row(2, "SQLite Library", sqlite3_libversion()); php_info_print_table_end(); } http://cvs.php.net/diff.php/php-src/ext/sqlite/sqlite.c?r1=1.163&r2=1.164&ty=u Index: php-src/ext/sqlite/sqlite.c diff -u php-src/ext/sqlite/sqlite.c:1.163 php-src/ext/sqlite/sqlite.c:1.164 --- php-src/ext/sqlite/sqlite.c:1.163 Tue Jun 7 11:39:35 2005 +++ php-src/ext/sqlite/sqlite.c Fri Jun 17 05:39:20 2005 @@ -17,7 +17,7 @@ | Marcus Boerger <[EMAIL PROTECTED]> | +----------------------------------------------------------------------+ - $Id: sqlite.c,v 1.163 2005/06/07 15:39:35 dmitry Exp $ + $Id: sqlite.c,v 1.164 2005/06/17 09:39:20 dmitry Exp $ */ #ifdef HAVE_CONFIG_H @@ -267,8 +267,25 @@ {NULL, NULL, NULL} }; +/* Dependancies */ +static zend_module_dep sqlite_deps[] = { +#if defined(HAVE_SPL) && ((PHP_MAJOR_VERSION > 5) || (PHP_MAJOR_VERSION == 5 && PHP_MINOR_VERSION >= 1)) + ZEND_MOD_REQUIRED("spl") +#endif +#if HAVE_PHP_SESSION && !defined(COMPILE_DL_SESSION) + ZEND_MOD_REQUIRED("session") +#endif +#if PHP_SQLITE2_HAVE_PDO + ZEND_MOD_REQUIRED("pdo") +#endif + {NULL, NULL, NULL} +}; + zend_module_entry sqlite_module_entry = { -#if ZEND_MODULE_API_NO >= 20010901 +#if ZEND_MODULE_API_NO >= 20050608 + STANDARD_MODULE_HEADER_EX, NULL, + sqlite_deps, +#elif ZEND_MODULE_API_NO >= 20010901 STANDARD_MODULE_HEADER, #endif "SQLite", @@ -1108,7 +1125,7 @@ { php_info_print_table_start(); php_info_print_table_header(2, "SQLite support", "enabled"); - php_info_print_table_row(2, "PECL Module version", PHP_SQLITE_MODULE_VERSION " $Id: sqlite.c,v 1.163 2005/06/07 15:39:35 dmitry Exp $"); + php_info_print_table_row(2, "PECL Module version", PHP_SQLITE_MODULE_VERSION " $Id: sqlite.c,v 1.164 2005/06/17 09:39:20 dmitry Exp $"); php_info_print_table_row(2, "SQLite Library", sqlite_libversion()); php_info_print_table_row(2, "SQLite Encoding", sqlite_libencoding()); php_info_print_table_end(); http://cvs.php.net/diff.php/php-src/ext/standard/dl.c?r1=1.100&r2=1.101&ty=u Index: php-src/ext/standard/dl.c diff -u php-src/ext/standard/dl.c:1.100 php-src/ext/standard/dl.c:1.101 --- php-src/ext/standard/dl.c:1.100 Thu Jun 16 11:36:39 2005 +++ php-src/ext/standard/dl.c Fri Jun 17 05:39:21 2005 @@ -18,7 +18,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: dl.c,v 1.100 2005/06/16 15:36:39 wez Exp $ */ +/* $Id: dl.c,v 1.101 2005/06/17 09:39:21 dmitry Exp $ */ #include "php.h" #include "dl.h" @@ -54,7 +54,7 @@ Load a PHP extension at runtime */ PHP_FUNCTION(dl) { - pval **file; + zval **file; /* obtain arguments */ if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &file) == FAILURE) { @@ -99,7 +99,7 @@ /* {{{ php_dl */ -void php_dl(pval *file, int type, pval *return_value TSRMLS_DC) +void php_dl(zval *file, int type, zval *return_value TSRMLS_DC) { void *handle; char *libpath; @@ -224,14 +224,18 @@ RETURN_FALSE; } + if (type == MODULE_TEMPORARY && zend_startup_module(module_entry TSRMLS_CC) == FAILURE) { + DL_UNLOAD(handle); + RETURN_FALSE; + } + if ((type == MODULE_TEMPORARY) && module_entry->request_startup_func) { - if (module_entry->request_startup_func(type, module_entry->module_number TSRMLS_CC)) { + if (module_entry->request_startup_func(type, module_entry->module_number TSRMLS_CC) == FAILURE) { php_error_docref(NULL TSRMLS_CC, error_type, "Unable to initialize module '%s'", module_entry->name); DL_UNLOAD(handle); RETURN_FALSE; } } - RETURN_TRUE; } /* }}} */ @@ -243,7 +247,7 @@ #else -void php_dl(pval *file, int type, pval *return_value TSRMLS_DC) +void php_dl(zval *file, int type, zval *return_value TSRMLS_DC) { php_error_docref(NULL TSRMLS_CC, E_WARNING, "Cannot dynamically load %s - dynamic modules are not supported", Z_STRVAL_P(file)); RETURN_FALSE; http://cvs.php.net/diff.php/php-src/ext/standard/dl.h?r1=1.20&r2=1.21&ty=u Index: php-src/ext/standard/dl.h diff -u php-src/ext/standard/dl.h:1.20 php-src/ext/standard/dl.h:1.21 --- php-src/ext/standard/dl.h:1.20 Thu Mar 17 07:37:18 2005 +++ php-src/ext/standard/dl.h Fri Jun 17 05:39:21 2005 @@ -18,13 +18,12 @@ +----------------------------------------------------------------------+ */ -/* $Id: dl.h,v 1.20 2005/03/17 12:37:18 rrichards Exp $ */ +/* $Id: dl.h,v 1.21 2005/06/17 09:39:21 dmitry Exp $ */ #ifndef DL_H #define DL_H -PHPAPI void php_dl(pval *file,int type,pval *return_value TSRMLS_DC); - +PHPAPI void php_dl(zval *file,int type, zval *return_value TSRMLS_DC); /* dynamic loading functions */ PHP_FUNCTION(dl); http://cvs.php.net/diff.php/php-src/main/internal_functions.c.in?r1=1.28&r2=1.29&ty=u Index: php-src/main/internal_functions.c.in diff -u php-src/main/internal_functions.c.in:1.28 php-src/main/internal_functions.c.in:1.29 --- php-src/main/internal_functions.c.in:1.28 Tue May 24 11:24:33 2005 +++ php-src/main/internal_functions.c.in Fri Jun 17 05:39:21 2005 @@ -17,7 +17,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: internal_functions.c.in,v 1.28 2005/05/24 15:24:33 sniper Exp $ */ +/* $Id: internal_functions.c.in,v 1.29 2005/06/17 09:39:21 dmitry Exp $ */ #include "php.h" #include "php_main.h" @@ -36,9 +36,9 @@ #define EXTCOUNT (sizeof(php_builtin_extensions)/sizeof(zend_module_entry *)) -int php_startup_internal_extensions(void) +int php_register_internal_extensions(TSRMLS_D) { - return php_startup_extensions(php_builtin_extensions, EXTCOUNT); + return php_register_extensions(php_builtin_extensions, EXTCOUNT TSRMLS_CC); } /* http://cvs.php.net/diff.php/php-src/main/internal_functions_nw.c?r1=1.7&r2=1.8&ty=u Index: php-src/main/internal_functions_nw.c diff -u php-src/main/internal_functions_nw.c:1.7 php-src/main/internal_functions_nw.c:1.8 --- php-src/main/internal_functions_nw.c:1.7 Tue May 24 11:24:33 2005 +++ php-src/main/internal_functions_nw.c Fri Jun 17 05:39:21 2005 @@ -18,7 +18,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: internal_functions_nw.c,v 1.7 2005/05/24 15:24:33 sniper Exp $ */ +/* $Id: internal_functions_nw.c,v 1.8 2005/06/17 09:39:21 dmitry Exp $ */ /* {{{ includes */ @@ -85,9 +85,9 @@ #define EXTCOUNT (sizeof(php_builtin_extensions)/sizeof(zend_module_entry *)) -int php_startup_internal_extensions(void) +int php_register_internal_extensions(TSRMLS_D) { - return php_startup_extensions(php_builtin_extensions, EXTCOUNT); + return php_register_extensions(php_builtin_extensions, EXTCOUNT TSRMLS_CC); } http://cvs.php.net/diff.php/php-src/main/internal_functions_win32.c?r1=1.85&r2=1.86&ty=u Index: php-src/main/internal_functions_win32.c diff -u php-src/main/internal_functions_win32.c:1.85 php-src/main/internal_functions_win32.c:1.86 --- php-src/main/internal_functions_win32.c:1.85 Tue May 24 11:24:33 2005 +++ php-src/main/internal_functions_win32.c Fri Jun 17 05:39:21 2005 @@ -17,7 +17,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: internal_functions_win32.c,v 1.85 2005/05/24 15:24:33 sniper Exp $ */ +/* $Id: internal_functions_win32.c,v 1.86 2005/06/17 09:39:21 dmitry Exp $ */ /* {{{ includes */ @@ -158,9 +158,9 @@ #define EXTCOUNT (sizeof(php_builtin_extensions)/sizeof(zend_module_entry *)) -int php_startup_internal_extensions(void) +int php_register_internal_extensions(TSRMLS_D) { - return php_startup_extensions(php_builtin_extensions, EXTCOUNT); + return php_register_extensions(php_builtin_extensions, EXTCOUNT TSRMLS_CC); } /* http://cvs.php.net/diff.php/php-src/main/main.c?r1=1.631&r2=1.632&ty=u Index: php-src/main/main.c diff -u php-src/main/main.c:1.631 php-src/main/main.c:1.632 --- php-src/main/main.c:1.631 Thu Jun 9 08:15:14 2005 +++ php-src/main/main.c Fri Jun 17 05:39:21 2005 @@ -18,7 +18,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: main.c,v 1.631 2005/06/09 12:15:14 wez Exp $ */ +/* $Id: main.c,v 1.632 2005/06/17 09:39:21 dmitry Exp $ */ /* {{{ includes */ @@ -1287,15 +1287,15 @@ /* }}} */ #endif -/* {{{ php_startup_extensions +/* {{{ php_register_extensions */ -int php_startup_extensions(zend_module_entry **ptr, int count) +int php_register_extensions(zend_module_entry **ptr, int count TSRMLS_DC) { - zend_module_entry **end = ptr+count; + zend_module_entry **end = ptr + count; while (ptr < end) { if (*ptr) { - if (zend_startup_module(*ptr)==FAILURE) { + if (zend_register_internal_module(*ptr TSRMLS_CC)==FAILURE) { return FAILURE; } } @@ -1480,13 +1480,13 @@ zend_register_default_classes(TSRMLS_C); /* startup extensions staticly compiled in */ - if (php_startup_internal_extensions() == FAILURE) { + if (php_register_internal_extensions(TSRMLS_C) == FAILURE) { php_printf("Unable to start builtin modules\n"); return FAILURE; } /* start additional PHP extensions */ - php_startup_extensions(&additional_modules, num_additional_modules); + php_register_extensions(&additional_modules, num_additional_modules TSRMLS_CC); /* load and startup extensions compiled as shared objects (aka DLLs) @@ -1496,7 +1496,8 @@ which is always an internal extension and to be initialized ahead of all other internals */ - php_ini_delayed_modules_startup(TSRMLS_C); + php_ini_register_extensions(TSRMLS_C); + zend_startup_modules(TSRMLS_C); /* disable certain classes and functions as requested by php.ini */ php_disable_functions(TSRMLS_C); http://cvs.php.net/diff.php/php-src/main/php.h?r1=1.218&r2=1.219&ty=u Index: php-src/main/php.h diff -u php-src/main/php.h:1.218 php-src/main/php.h:1.219 --- php-src/main/php.h:1.218 Sun Apr 17 09:37:20 2005 +++ php-src/main/php.h Fri Jun 17 05:39:23 2005 @@ -17,7 +17,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: php.h,v 1.218 2005/04/17 13:37:20 sniper Exp $ */ +/* $Id: php.h,v 1.219 2005/06/17 09:39:23 dmitry Exp $ */ #ifndef PHP_H #define PHP_H @@ -319,7 +319,7 @@ /* functions */ BEGIN_EXTERN_C() -int php_startup_internal_extensions(void); +int php_register_internal_extensions(TSRMLS_D); int php_mergesort(void *base, size_t nmemb, register size_t size, int (*cmp)(const void *, const void * TSRMLS_DC) TSRMLS_DC); http://cvs.php.net/diff.php/php-src/main/php_ini.c?r1=1.129&r2=1.130&ty=u Index: php-src/main/php_ini.c diff -u php-src/main/php_ini.c:1.129 php-src/main/php_ini.c:1.130 --- php-src/main/php_ini.c:1.129 Thu Sep 16 22:48:41 2004 +++ php-src/main/php_ini.c Fri Jun 17 05:39:23 2005 @@ -16,7 +16,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: php_ini.c,v 1.129 2004/09/17 02:48:41 iliaa Exp $ */ +/* $Id: php_ini.c,v 1.130 2005/06/17 09:39:23 dmitry Exp $ */ /* Check CWD for php.ini */ #define INI_CHECK_CWD @@ -544,9 +544,9 @@ } /* }}} */ -/* {{{ php_ini_delayed_modules_startup +/* {{{ php_ini_register_extensions */ -void php_ini_delayed_modules_startup(TSRMLS_D) +void php_ini_register_extensions(TSRMLS_D) { zend_llist_apply(&extension_lists.engine, php_load_zend_extension_cb TSRMLS_CC); zend_llist_apply(&extension_lists.functions, php_load_function_extension_cb TSRMLS_CC); http://cvs.php.net/diff.php/php-src/main/php_ini.h?r1=1.43&r2=1.44&ty=u Index: php-src/main/php_ini.h diff -u php-src/main/php_ini.h:1.43 php-src/main/php_ini.h:1.44 --- php-src/main/php_ini.h:1.43 Thu Jan 8 12:33:04 2004 +++ php-src/main/php_ini.h Fri Jun 17 05:39:23 2005 @@ -16,7 +16,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: php_ini.h,v 1.43 2004/01/08 17:33:04 sniper Exp $ */ +/* $Id: php_ini.h,v 1.44 2005/06/17 09:39:23 dmitry Exp $ */ #ifndef PHP_INI_H #define PHP_INI_H @@ -26,7 +26,7 @@ BEGIN_EXTERN_C() int php_init_config(); int php_shutdown_config(void); -void php_ini_delayed_modules_startup(TSRMLS_D); +void php_ini_register_extensions(TSRMLS_D); zval *cfg_get_entry(char *name, uint name_length); END_EXTERN_C() http://cvs.php.net/diff.php/php-src/main/php_main.h?r1=1.32&r2=1.33&ty=u Index: php-src/main/php_main.h diff -u php-src/main/php_main.h:1.32 php-src/main/php_main.h:1.33 --- php-src/main/php_main.h:1.32 Sun Jan 9 11:30:09 2005 +++ php-src/main/php_main.h Fri Jun 17 05:39:23 2005 @@ -17,7 +17,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: php_main.h,v 1.32 2005/01/09 16:30:09 sniper Exp $ */ +/* $Id: php_main.h,v 1.33 2005/06/17 09:39:23 dmitry Exp $ */ #ifndef PHP_MAIN_H #define PHP_MAIN_H @@ -36,7 +36,7 @@ PHPAPI int php_module_shutdown_wrapper(sapi_module_struct *sapi_globals); PHPAPI int php_request_startup_for_hook(TSRMLS_D); -PHPAPI int php_startup_extensions(zend_module_entry **ptr, int count); +PHPAPI int php_register_extensions(zend_module_entry **ptr, int count TSRMLS_DC); PHPAPI int php_execute_script(zend_file_handle *primary_file TSRMLS_DC); PHPAPI int php_execute_simple_script(zend_file_handle *primary_file, zval **ret TSRMLS_DC);
-- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php