From 2c8393d80338e09a6ec56b28da86a0540cba92f4 Mon Sep 17 00:00:00 2001 From: Brian Evans Date: Tue, 9 Aug 2016 09:25:27 -0400 Subject: dev-php/pecl-geoip: Revbump with unreleased upstream patches wrt bug 590850 Two patches were included in the upstream repo but never released 1.1.0-public-init.patch replaces a private API database initializer with a public one 1.1.0-php7-support.patch adds basic PHP 7 support to the extension Package-Manager: portage-2.3.0 --- dev-php/pecl-geoip/files/1.1.0-php7-support.patch | 446 ++++++++++++++++++++++ dev-php/pecl-geoip/files/1.1.0-public-init.patch | 21 + dev-php/pecl-geoip/pecl-geoip-1.1.0-r1.ebuild | 28 ++ 3 files changed, 495 insertions(+) create mode 100644 dev-php/pecl-geoip/files/1.1.0-php7-support.patch create mode 100644 dev-php/pecl-geoip/files/1.1.0-public-init.patch create mode 100644 dev-php/pecl-geoip/pecl-geoip-1.1.0-r1.ebuild (limited to 'dev-php') diff --git a/dev-php/pecl-geoip/files/1.1.0-php7-support.patch b/dev-php/pecl-geoip/files/1.1.0-php7-support.patch new file mode 100644 index 000000000000..bd503268d604 --- /dev/null +++ b/dev-php/pecl-geoip/files/1.1.0-php7-support.patch @@ -0,0 +1,446 @@ +--- a/geoip.c 2015/02/15 15:08:09 335947 ++++ b/geoip.c 2015/02/15 17:56:49 335948 +@@ -129,11 +129,19 @@ + { + if (stage == PHP_INI_STAGE_RUNTIME || stage == PHP_INI_STAGE_HTACCESS) { + GEOIP_G(set_runtime_custom_directory) = 1; ++#if PHP_MAJOR_VERSION >= 7 ++ geoip_change_custom_directory(new_value->val); ++#else + geoip_change_custom_directory(new_value); ++#endif + return SUCCESS; + } + ++#if PHP_MAJOR_VERSION >= 7 ++ return OnUpdateString(entry, new_value, mh_arg1, mh_arg2, mh_arg3, stage TSRMLS_CC); ++#else + return OnUpdateString(entry, new_value, new_value_length, mh_arg1, mh_arg2, mh_arg3, stage TSRMLS_CC); ++#endif + } + /* }}} */ + #endif +@@ -251,7 +259,7 @@ + /* {{{ proto boolean geoip_db_avail( [ int database ] ) */ + PHP_FUNCTION(geoip_db_avail) + { +- long edition; ++ zend_long edition; + + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &edition) == FAILURE) { + return; +@@ -270,7 +278,7 @@ + /* {{{ proto string geoip_db_filename( [ int database ] ) */ + PHP_FUNCTION(geoip_db_filename) + { +- long edition; ++ zend_long edition; + + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &edition) == FAILURE) { + return; +@@ -283,7 +291,11 @@ + } + + if (NULL != GeoIPDBFileName[edition]) ++#if PHP_MAJOR_VERSION >= 7 ++ RETURN_STRING(GeoIPDBFileName[edition]); ++#else + RETURN_STRING(GeoIPDBFileName[edition], 1); ++#endif + } + /* }}} */ + +@@ -298,16 +310,31 @@ + { + if (NULL != GeoIPDBDescription[i]) + { ++#if PHP_MAJOR_VERSION >= 7 ++ zval real_row; ++ zval *row = &real_row; ++ ++ array_init(row); ++#else + zval *row; + ALLOC_INIT_ZVAL(row); + array_init(row); ++#endif + + add_assoc_bool(row, "available", GeoIP_db_avail(i)); + if (GeoIPDBDescription[i]) { ++#if PHP_MAJOR_VERSION >= 7 ++ add_assoc_string(row, "description", (char *)GeoIPDBDescription[i]); ++#else + add_assoc_string(row, "description", (char *)GeoIPDBDescription[i], 1); ++#endif + } + if (GeoIPDBFileName[i]) { ++#if PHP_MAJOR_VERSION >= 7 ++ add_assoc_string(row, "filename", GeoIPDBFileName[i]); ++#else + add_assoc_string(row, "filename", GeoIPDBFileName[i], 1); ++#endif + } + + add_index_zval(return_value, i, row); +@@ -322,7 +349,7 @@ + { + GeoIP * gi; + char * db_info; +- long edition = GEOIP_COUNTRY_EDITION; ++ zend_long edition = GEOIP_COUNTRY_EDITION; + + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|l", &edition) == FAILURE) { + return; +@@ -347,12 +374,45 @@ + db_info = GeoIP_database_info(gi); + GeoIP_delete(gi); + ++#if PHP_MAJOR_VERSION >= 7 ++ RETVAL_STRING(db_info); ++#else + RETVAL_STRING(db_info, 1); ++#endif + free(db_info); + } + /* }}} */ + + /* {{{ */ ++#if PHP_MAJOR_VERSION >= 7 ++#define GEOIPDEF(php_func, c_func, db_type) \ ++ PHP_FUNCTION(php_func) \ ++ { \ ++ GeoIP * gi; \ ++ char * hostname = NULL; \ ++ const char * return_code; \ ++ size_t arglen; \ ++ \ ++ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &hostname, &arglen) == FAILURE) { \ ++ return; \ ++ } \ ++ \ ++ if (GeoIP_db_avail(db_type)) { \ ++ gi = GeoIP_open_type(db_type, GEOIP_STANDARD); \ ++ } else { \ ++ php_error_docref(NULL TSRMLS_CC, E_WARNING, "Required database not available at %s.", GeoIPDBFileName[db_type]); \ ++ return; \ ++ } \ ++ \ ++ return_code = c_func(gi, hostname); \ ++ GeoIP_delete(gi); \ ++ if (return_code == NULL) { \ ++ RETURN_FALSE; \ ++ } \ ++ RETURN_STRING((char*)return_code); \ ++ \ ++ } ++#else + #define GEOIPDEF(php_func, c_func, db_type) \ + PHP_FUNCTION(php_func) \ + { \ +@@ -380,6 +440,7 @@ + RETURN_STRING((char*)return_code, 1); \ + \ + } ++#endif + #include "geoip.def" + #undef GEOIPDEF + /* }}} */ +@@ -391,7 +452,11 @@ + GeoIP * gi; + char * hostname = NULL; + int id; ++#if PHP_MAJOR_VERSION >= 7 ++ size_t arglen; ++#else + int arglen; ++#endif + + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &hostname, &arglen) == FAILURE) { + return; +@@ -409,7 +474,11 @@ + if (id == 0) { + RETURN_FALSE; + } ++#if PHP_MAJOR_VERSION >= 7 ++ RETURN_STRING((char *)GeoIP_country_continent[id]); ++#else + RETURN_STRING((char *)GeoIP_country_continent[id], 1); ++#endif + } + /* }}} */ + +@@ -420,7 +489,11 @@ + GeoIP * gi; + char * hostname = NULL; + char * org; ++#if PHP_MAJOR_VERSION >= 7 ++ size_t arglen; ++#else + int arglen; ++#endif + + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &hostname, &arglen) == FAILURE) { + return; +@@ -438,7 +511,11 @@ + if (org == NULL) { + RETURN_FALSE; + } ++#if PHP_MAJOR_VERSION >= 7 ++ RETVAL_STRING(org); ++#else + RETVAL_STRING(org, 1); ++#endif + free(org); + } + /* }}} */ +@@ -450,7 +527,11 @@ + GeoIP * gi; + char * hostname = NULL; + char * org; ++#if PHP_MAJOR_VERSION >= 7 ++ size_t arglen; ++#else + int arglen; ++#endif + + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &hostname, &arglen) == FAILURE) { + return; +@@ -468,7 +549,11 @@ + if (org == NULL) { + RETURN_FALSE; + } ++#if PHP_MAJOR_VERSION >= 7 ++ RETVAL_STRING(org); ++#else + RETVAL_STRING(org, 1); ++#endif + free(org); + } + /* }}} */ +@@ -480,7 +565,11 @@ + GeoIP * gi; + char * hostname = NULL; + char * org; ++#if PHP_MAJOR_VERSION >= 7 ++ size_t arglen; ++#else + int arglen; ++#endif + + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &hostname, &arglen) == FAILURE) { + return; +@@ -498,7 +587,11 @@ + if (org == NULL) { + RETURN_FALSE; + } ++#if PHP_MAJOR_VERSION >= 7 ++ RETVAL_STRING(org); ++#else + RETVAL_STRING(org, 1); ++#endif + free(org); + } + /* }}} */ +@@ -511,7 +604,11 @@ + GeoIP * gi; + char * hostname = NULL; + char * org; ++#if PHP_MAJOR_VERSION >= 7 ++ size_t arglen; ++#else + int arglen; ++#endif + + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &hostname, &arglen) == FAILURE) { + return; +@@ -529,7 +626,11 @@ + if (org == NULL) { + RETURN_FALSE; + } ++#if PHP_MAJOR_VERSION >= 7 ++ RETVAL_STRING(org); ++#else + RETVAL_STRING(org, 1); ++#endif + free(org); + } + /* }}} */ +@@ -541,7 +642,11 @@ + { + GeoIP * gi; + char * hostname = NULL; ++#if PHP_MAJOR_VERSION >= 7 ++ size_t arglen; ++#else + int arglen; ++#endif + GeoIPRecord * gir; + + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &hostname, &arglen) == FAILURE) { +@@ -567,15 +672,27 @@ + } + + array_init(return_value); +-#if LIBGEOIP_VERSION >= 1004003 ++#if PHP_MAJOR_VERSION >= 7 ++# if LIBGEOIP_VERSION >= 1004003 ++ add_assoc_string(return_value, "continent_code", (gir->continent_code == NULL) ? "" : gir->continent_code); ++# endif ++ add_assoc_string(return_value, "country_code", (gir->country_code == NULL) ? "" : gir->country_code); ++ add_assoc_string(return_value, "country_code3", (gir->country_code3 == NULL) ? "" : gir->country_code3); ++ add_assoc_string(return_value, "country_name", (gir->country_name == NULL) ? "" : gir->country_name); ++ add_assoc_string(return_value, "region", (gir->region == NULL) ? "" : gir->region); ++ add_assoc_string(return_value, "city", (gir->city == NULL) ? "" : gir->city); ++ add_assoc_string(return_value, "postal_code", (gir->postal_code == NULL) ? "" : gir->postal_code); ++#else ++# if LIBGEOIP_VERSION >= 1004003 + add_assoc_string(return_value, "continent_code", (gir->continent_code == NULL) ? "" : gir->continent_code, 1); +-#endif ++# endif + add_assoc_string(return_value, "country_code", (gir->country_code == NULL) ? "" : gir->country_code, 1); + add_assoc_string(return_value, "country_code3", (gir->country_code3 == NULL) ? "" : gir->country_code3, 1); + add_assoc_string(return_value, "country_name", (gir->country_name == NULL) ? "" : gir->country_name, 1); + add_assoc_string(return_value, "region", (gir->region == NULL) ? "" : gir->region, 1); + add_assoc_string(return_value, "city", (gir->city == NULL) ? "" : gir->city, 1); + add_assoc_string(return_value, "postal_code", (gir->postal_code == NULL) ? "" : gir->postal_code, 1); ++#endif + add_assoc_double(return_value, "latitude", gir->latitude); + add_assoc_double(return_value, "longitude", gir->longitude); + #if LIBGEOIP_VERSION >= 1004005 +@@ -595,7 +712,11 @@ + { + GeoIP * gi; + char * hostname = NULL; ++#if PHP_MAJOR_VERSION >= 7 ++ size_t arglen; ++#else + int arglen; ++#endif + int netspeed; + + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &hostname, &arglen) == FAILURE) { +@@ -621,7 +742,11 @@ + { + GeoIP * gi; + char * hostname = NULL; ++#if PHP_MAJOR_VERSION >= 7 ++ size_t arglen; ++#else + int arglen; ++#endif + GeoIPRegion * region; + + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &hostname, &arglen) == FAILURE) { +@@ -647,9 +772,14 @@ + } + + array_init(return_value); ++#if PHP_MAJOR_VERSION >= 7 ++ add_assoc_string(return_value, "country_code", region->country_code); ++ add_assoc_string(return_value, "region", region->region); ++#else + add_assoc_string(return_value, "country_code", region->country_code, 1); + add_assoc_string(return_value, "region", region->region, 1); +- ++#endif ++ + GeoIPRegion_delete(region); + } + /* }}} */ +@@ -661,7 +791,11 @@ + GeoIP * gi; + char * hostname = NULL; + char * isp; ++#if PHP_MAJOR_VERSION >= 7 ++ size_t arglen; ++#else + int arglen; ++#endif + + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &hostname, &arglen) == FAILURE) { + return; +@@ -679,7 +813,11 @@ + if (isp == NULL) { + RETURN_FALSE; + } ++#if PHP_MAJOR_VERSION >= 7 ++ RETVAL_STRING(isp); ++#else + RETVAL_STRING(isp, 1); ++#endif + free(isp); + } + +@@ -691,7 +829,11 @@ + char * country_code = NULL; + char * region_code = NULL; + const char * region_name; ++#if PHP_MAJOR_VERSION >= 7 ++ size_t countrylen, regionlen; ++#else + int countrylen, regionlen; ++#endif + + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ss", &country_code, &countrylen, ®ion_code, ®ionlen) == FAILURE) { + return; +@@ -706,7 +848,11 @@ + if (region_name == NULL) { + RETURN_FALSE; + } ++#if PHP_MAJOR_VERSION >= 7 ++ RETURN_STRING((char*)region_name); ++#else + RETURN_STRING((char*)region_name, 1); ++#endif + } + /* }}} */ + #endif +@@ -719,7 +865,11 @@ + char * country = NULL; + char * region = NULL; + const char * timezone; ++#if PHP_MAJOR_VERSION >= 7 ++ size_t countrylen, arg2len; ++#else + int countrylen, arg2len; ++#endif + + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|s", &country, &countrylen, ®ion, &arg2len) == FAILURE) { + return; +@@ -734,7 +884,11 @@ + if (timezone == NULL) { + RETURN_FALSE; + } ++#if PHP_MAJOR_VERSION >= 7 ++ RETURN_STRING((char*)timezone); ++#else + RETURN_STRING((char*)timezone, 1); ++#endif + } + /* }}} */ + #endif +@@ -745,7 +899,11 @@ + PHP_FUNCTION(geoip_setup_custom_directory) + { + char * dir = NULL; ++#if PHP_MAJOR_VERSION >= 7 ++ size_t dirlen; ++#else + int dirlen; ++#endif + + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &dir, &dirlen) == FAILURE) { + return; +--- a/php_geoip.h 2015/02/15 15:08:09 335947 ++++ b/php_geoip.h 2015/02/15 17:56:49 335948 +@@ -26,6 +26,10 @@ + + #define PHP_GEOIP_VERSION "1.1.1-dev" + ++#if PHP_MAJOR_VERSION < 7 ++typedef long zend_long; ++#endif ++ + #ifdef PHP_WIN32 + #define PHP_GEOIP_API __declspec(dllexport) + #else diff --git a/dev-php/pecl-geoip/files/1.1.0-public-init.patch b/dev-php/pecl-geoip/files/1.1.0-public-init.patch new file mode 100644 index 000000000000..36c5fa6e33fe --- /dev/null +++ b/dev-php/pecl-geoip/files/1.1.0-public-init.patch @@ -0,0 +1,21 @@ +--- a/geoip.c 2014/05/06 12:11:37 333484 ++++ b/geoip.c 2014/05/06 12:52:25 333485 +@@ -117,7 +117,7 @@ + #endif + + GeoIP_setup_custom_directory(value); +- _GeoIP_setup_dbfilename(); ++ GeoIP_db_avail(GEOIP_COUNTRY_EDITION); + } + /* }}} */ + #endif +@@ -168,7 +168,8 @@ + #ifdef HAVE_CUSTOM_DIRECTORY + GeoIP_setup_custom_directory(GEOIP_G(custom_directory)); + #endif +- _GeoIP_setup_dbfilename(); ++ /* This will initialize file structure */ ++ GeoIP_db_avail(GEOIP_COUNTRY_EDITION); + + /* For database type constants */ + REGISTER_LONG_CONSTANT("GEOIP_COUNTRY_EDITION", GEOIP_COUNTRY_EDITION, CONST_CS | CONST_PERSISTENT); diff --git a/dev-php/pecl-geoip/pecl-geoip-1.1.0-r1.ebuild b/dev-php/pecl-geoip/pecl-geoip-1.1.0-r1.ebuild new file mode 100644 index 000000000000..8dcfd62890c2 --- /dev/null +++ b/dev-php/pecl-geoip/pecl-geoip-1.1.0-r1.ebuild @@ -0,0 +1,28 @@ +# Copyright 1999-2016 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 +# $Id$ + +EAPI="6" + +PHP_EXT_NAME="geoip" +PHP_EXT_INI="yes" +PHP_EXT_ZENDEXT="no" +DOCS="README ChangeLog" + +USE_PHP="php7-0 php5-6 php5-5" + +inherit php-ext-pecl-r3 + +KEYWORDS="~amd64 ~x86" + +DESCRIPTION="PHP extension to map IP address to geographic places" +LICENSE="PHP-3" +SLOT="0" +IUSE="" + +DEPEND=">=dev-libs/geoip-1.4.0" +RDEPEND="${DEPEND}" + +PATCHES=( + "${FILESDIR}/${PV}-public-init.patch" + "${FILESDIR}/${PV}-php7-support.patch" ) -- cgit v1.2.3-65-gdbad