]> granicus.if.org Git - php/commitdiff
do fancy-shmancy zip dependency validation because ZEND_MOD_OPTIONAL_EX doesn't do...
authorGreg Beaver <cellog@php.net>
Thu, 17 Jan 2008 05:52:18 +0000 (05:52 +0000)
committerGreg Beaver <cellog@php.net>
Thu, 17 Jan 2008 05:52:18 +0000 (05:52 +0000)
ext/phar/phar.c
ext/phar/phar_internal.h

index 00b9a7477e4f6c5890a40d1d336b601b4ef3f928..ecc318f388c1a97a02fc13ed195b2a934838c492 100644 (file)
@@ -3191,12 +3191,24 @@ skip_phar:
 
 PHP_MINIT_FUNCTION(phar) /* {{{ */
 {
+       zend_module_entry *test;
+
        ZEND_INIT_MODULE_GLOBALS(phar, php_phar_init_globals_module, NULL);
        REGISTER_INI_ENTRIES();
 
        phar_has_bz2 = zend_hash_exists(&module_registry, "bz2", sizeof("bz2"));
        phar_has_zlib = zend_hash_exists(&module_registry, "zlib", sizeof("zlib"));
-       phar_has_zip = zend_hash_exists(&module_registry, "zip", sizeof("zip"));
+       if (SUCCESS == zend_hash_find(&module_registry, "zip", sizeof("zip"), (void **) &test)) {
+               if (strlen(test->version) == sizeof("1.8.11")-1 && !strncmp(test->version, "1.8.11", sizeof("1.8.11")-1)) {
+                       phar_has_zip = 1;
+               } else {
+                       phar_has_zip = 0;
+               }
+               phar_zip_ver = test->version;
+       } else {
+               phar_has_zip = 0;
+               phar_zip_ver = NULL;
+       }
 
        phar_orig_compile_file = zend_compile_file;
        zend_compile_file = phar_compile_file;
@@ -3280,7 +3292,14 @@ PHP_MINFO_FUNCTION(phar) /* {{{ */
        if (phar_has_zip) {
                php_info_print_table_row(2, "ZIP-based phar archives", "enabled");
        } else {
-               php_info_print_table_row(2, "ZIP-based phar archives", "disabled (install pecl/zip)");
+               if (phar_zip_ver) {
+                       char *tmp;
+                       spprintf(&tmp, 0, "disabled (pecl/zip version %s installed, we need zip >= 1.8.11)", phar_zip_ver);
+                       php_info_print_table_row(2, "ZIP-based phar archives", tmp);
+                       efree(tmp);
+               } else {
+                       php_info_print_table_row(2, "ZIP-based phar archives", "disabled (install pecl/zip)");
+               }
        }
 #else
        php_info_print_table_row(2, "ZIP-based phar archives", "unavailable");
@@ -3313,7 +3332,7 @@ PHP_MINFO_FUNCTION(phar) /* {{{ */
  */
 static zend_module_dep phar_deps[] = {
 #if HAVE_PHAR_ZIP
-       ZEND_MOD_OPTIONAL_EX("zip", ">=", "1.8.11")
+       ZEND_MOD_OPTIONAL("zip")
 #endif
        ZEND_MOD_OPTIONAL("zlib")
        ZEND_MOD_OPTIONAL("bz2")
index 7e718eaa4bdb1c9fa3e6f95a06ef8425730675dd..4fc713ae46c17dce00ee344e358194c4701bd568 100755 (executable)
@@ -171,6 +171,7 @@ ZEND_EXTERN_MODULE_GLOBALS(phar)
 int phar_has_bz2;
 int phar_has_zlib;
 int phar_has_zip;
+char *phar_zip_ver;
 
 #ifdef ZTS
 #      include "TSRM.h"