summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRemi Collet <fedora@famillecollet.com>2015-04-06 08:59:13 +0200
committerRemi Collet <fedora@famillecollet.com>2015-04-06 08:59:13 +0200
commitff139b01eb28803e15307286127e444ed6d21ab4 (patch)
treec9fe8d79a5b2270453058bd5084671dbe4aaaf96
parentb3b8a3e8751a25d6a4cf07e9c31300ad7103b720 (diff)
php-pecl-geoip: add fix for PHP7
-rw-r--r--geoip-php7.patch446
-rw-r--r--php-pecl-geoip.spec63
2 files changed, 489 insertions, 20 deletions
diff --git a/geoip-php7.patch b/geoip-php7.patch
new file mode 100644
index 0000000..6a2dfaa
--- /dev/null
+++ b/geoip-php7.patch
@@ -0,0 +1,446 @@
+--- pecl/geoip/trunk/geoip.c 2015/02/15 15:08:09 335947
++++ pecl/geoip/trunk/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
+@@ -250,7 +258,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;
+@@ -269,7 +277,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;
+@@ -282,7 +290,11 @@
+ }
+
+ if (NULL != GeoIPDBFileName[edition])
++#if PHP_MAJOR_VERSION >= 7
++ RETURN_STRING(GeoIPDBFileName[edition]);
++#else
+ RETURN_STRING(GeoIPDBFileName[edition], 1);
++#endif
+ }
+ /* }}} */
+
+@@ -297,16 +309,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);
+@@ -321,7 +348,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;
+@@ -346,12 +373,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) \
+ { \
+@@ -379,6 +439,7 @@
+ RETURN_STRING((char*)return_code, 1); \
+ \
+ }
++#endif
+ #include "geoip.def"
+ #undef GEOIPDEF
+ /* }}} */
+@@ -390,7 +451,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;
+@@ -408,7 +473,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
+ }
+ /* }}} */
+
+@@ -419,7 +488,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;
+@@ -437,7 +510,11 @@
+ if (org == NULL) {
+ RETURN_FALSE;
+ }
++#if PHP_MAJOR_VERSION >= 7
++ RETVAL_STRING(org);
++#else
+ RETVAL_STRING(org, 1);
++#endif
+ free(org);
+ }
+ /* }}} */
+@@ -449,7 +526,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;
+@@ -467,7 +548,11 @@
+ if (org == NULL) {
+ RETURN_FALSE;
+ }
++#if PHP_MAJOR_VERSION >= 7
++ RETVAL_STRING(org);
++#else
+ RETVAL_STRING(org, 1);
++#endif
+ free(org);
+ }
+ /* }}} */
+@@ -479,7 +564,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;
+@@ -497,7 +586,11 @@
+ if (org == NULL) {
+ RETURN_FALSE;
+ }
++#if PHP_MAJOR_VERSION >= 7
++ RETVAL_STRING(org);
++#else
+ RETVAL_STRING(org, 1);
++#endif
+ free(org);
+ }
+ /* }}} */
+@@ -510,7 +603,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;
+@@ -528,7 +625,11 @@
+ if (org == NULL) {
+ RETURN_FALSE;
+ }
++#if PHP_MAJOR_VERSION >= 7
++ RETVAL_STRING(org);
++#else
+ RETVAL_STRING(org, 1);
++#endif
+ free(org);
+ }
+ /* }}} */
+@@ -540,7 +641,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) {
+@@ -566,15 +671,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
+@@ -594,7 +711,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) {
+@@ -620,7 +741,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) {
+@@ -646,9 +771,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);
+ }
+ /* }}} */
+@@ -660,7 +790,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;
+@@ -678,7 +812,11 @@
+ if (isp == NULL) {
+ RETURN_FALSE;
+ }
++#if PHP_MAJOR_VERSION >= 7
++ RETVAL_STRING(isp);
++#else
+ RETVAL_STRING(isp, 1);
++#endif
+ free(isp);
+ }
+
+@@ -690,7 +828,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, &region_code, &regionlen) == FAILURE) {
+ return;
+@@ -705,7 +847,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
+@@ -718,7 +864,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, &region, &arg2len) == FAILURE) {
+ return;
+@@ -733,7 +883,11 @@
+ if (timezone == NULL) {
+ RETURN_FALSE;
+ }
++#if PHP_MAJOR_VERSION >= 7
++ RETURN_STRING((char*)timezone);
++#else
+ RETURN_STRING((char*)timezone, 1);
++#endif
+ }
+ /* }}} */
+ #endif
+@@ -744,7 +898,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;
+--- pecl/geoip/trunk/php_geoip.h 2015/02/15 15:08:09 335947
++++ pecl/geoip/trunk/php_geoip.h 2015/02/15 17:56:49 335948
+@@ -26,6 +26,10 @@
+
+ #define PHP_GEOIP_VERSION "1.1.0"
+
++#if PHP_MAJOR_VERSION < 7
++typedef long zend_long;
++#endif
++
+ #ifdef PHP_WIN32
+ #define PHP_GEOIP_API __declspec(dllexport)
+ #else
diff --git a/php-pecl-geoip.spec b/php-pecl-geoip.spec
index e85f85d..65f3776 100644
--- a/php-pecl-geoip.spec
+++ b/php-pecl-geoip.spec
@@ -14,7 +14,7 @@
Name: %{?scl_prefix}php-pecl-geoip
Version: 1.1.0
-Release: 3%{?dist}%{!?nophptag:%(%{__php} -r 'echo ".".PHP_MAJOR_VERSION.".".PHP_MINOR_VERSION;')}
+Release: 4%{?dist}%{!?nophptag:%(%{__php} -r 'echo ".".PHP_MAJOR_VERSION.".".PHP_MINOR_VERSION;')}
Summary: Extension to map IP addresses to geographic places
Group: Development/Languages
License: PHP
@@ -23,6 +23,8 @@ Source0: http://pecl.php.net/get/%{pecl_name}-%{version}.tgz
# http://svn.php.net/viewvc?view=revision&revision=333464
Patch0: geoip-build.patch
+# http://svn.php.net/viewvc?view=revision&revision=335948
+Patch1: geoip-php7.patch
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
BuildRequires: GeoIP-devel
@@ -31,8 +33,6 @@ BuildRequires: %{?scl_prefix}php-pear
Requires: %{?scl_prefix}php(zend-abi) = %{php_zend_api}
Requires: %{?scl_prefix}php(api) = %{php_core_api}
-Requires(post): %{__pecl}
-Requires(postun): %{__pecl}
%{?_sclreq:Requires: %{?scl_prefix}runtime%{?_sclreq}%{?_isa}}
Provides: %{?scl_prefix}php-%{pecl_name} = %{version}
@@ -42,17 +42,21 @@ Provides: %{?scl_prefix}php-pecl(%{pecl_name})%{?_isa} = %{version}
%if "%{?vendor}" == "Remi Collet" && 0%{!?scl:1}
# Other third party repo stuff
-Obsoletes: php53-pecl-%{pecl_name}
-Obsoletes: php53u-pecl-%{pecl_name}
-Obsoletes: php54-pecl-%{pecl_name}
-Obsoletes: php54w-pecl-%{pecl_name}
+Obsoletes: php53-pecl-%{pecl_name} <= %{version}
+Obsoletes: php53u-pecl-%{pecl_name} <= %{version}
+Obsoletes: php54-pecl-%{pecl_name} <= %{version}
+Obsoletes: php54w-pecl-%{pecl_name} <= %{version}
%if "%{php_version}" > "5.5"
-Obsoletes: php55u-pecl-%{pecl_name}
-Obsoletes: php55w-pecl-%{pecl_name}
+Obsoletes: php55u-pecl-%{pecl_name} <= %{version}
+Obsoletes: php55w-pecl-%{pecl_name} <= %{version}
%endif
%if "%{php_version}" > "5.6"
-Obsoletes: php56u-pecl-%{pecl_name}
-Obsoletes: php56w-pecl-%{pecl_name}
+Obsoletes: php56u-pecl-%{pecl_name} <= %{version}
+Obsoletes: php56w-pecl-%{pecl_name} <= %{version}
+%endif
+%if "%{php_version}" > "7.0"
+Obsoletes: php70u-pecl-%{pecl_name} <= %{version}
+Obsoletes: php70w-pecl-%{pecl_name} <= %{version}
%endif
%endif
@@ -69,14 +73,20 @@ City, State, Country, Longitude, Latitude, and other information as
all, such as ISP and connection type. It makes use of Maxminds geoip
database
+Package built for PHP %(%{__php} -r 'echo PHP_MAJOR_VERSION.".".PHP_MINOR_VERSION;')%{?scl: as Software Collection}.
+
%prep
%setup -c -q
+# Don't install/register tests
+sed -e 's/role="test"/role="src"/' -i package.xml
+
mv %{pecl_name}-%{version} NTS
cd NTS
%patch0 -p0 -b .svn
+%patch1 -p3 -b .svn
extver=$(sed -n '/#define PHP_GEOIP_VERSION/{s/.* "//;s/".*$//;p}' php_geoip.h)
if test "x${extver}" != "x%{version}"; then
@@ -125,10 +135,7 @@ install -Dpm 644 package.xml %{buildroot}%{pecl_xmldir}/%{name}.xml
# install config file
install -Dpm644 %{ini_name} %{buildroot}%{php_inidir}/%{ini_name}
-# Test & Documentation
-for i in $(grep 'role="test"' package.xml | sed -e 's/^.*name="//;s/".*$//')
-do install -Dpm 644 NTS/$i %{buildroot}%{pecl_testdir}/%{pecl_name}/$i
-done
+# Documentation
for i in $(grep 'role="doc"' package.xml | sed -e 's/^.*name="//;s/".*$//')
do install -Dpm 644 NTS/$i %{buildroot}%{pecl_docdir}/%{pecl_name}/$i
done
@@ -167,22 +174,33 @@ NO_INTERACTION=1 \
rm -rf %{buildroot}
-%post
-%{pecl_install} %{pecl_xmldir}/%{name}.xml >/dev/null || :
+# when pear installed alone, after us
+%triggerin -- %{?scl_prefix}php-pear
+if [ -x %{__pecl} ] ; then
+ %{pecl_install} %{pecl_xmldir}/%{name}.xml >/dev/null || :
+fi
+# posttrans as pear can be installed after us
+%posttrans
+if [ -x %{__pecl} ] ; then
+ %{pecl_install} %{pecl_xmldir}/%{name}.xml >/dev/null || :
+fi
%postun
-if [ $1 -eq 0 ] ; then
+if [ $1 -eq 0 -a -x %{__pecl} ] ; then
%{pecl_uninstall} %{pecl_name} >/dev/null || :
fi
+
%files
%defattr(-,root,root,-)
+%{?_licensedir:%license NTS/LICENSE}
%doc %{pecl_docdir}/%{pecl_name}
-%doc %{pecl_testdir}/%{pecl_name}
+%{pecl_xmldir}/%{name}.xml
+
%config(noreplace) %{php_inidir}/%{ini_name}
%{php_extdir}/%{pecl_name}.so
-%{pecl_xmldir}/%{name}.xml
+
%if %{with_zts}
%{php_ztsextdir}/%{pecl_name}.so
%config(noreplace) %{php_ztsinidir}/%{ini_name}
@@ -190,6 +208,11 @@ fi
%changelog
+* Mon Apr 6 2015 Remi Collet <remi@fedoraproject.org> - 1.1.0-4
+- add fix for PHP 7 compatibility
+- drop runtime dependency on pear, new scriptlets
+- don't install/register tests
+
* Sat Feb 28 2015 Remi Collet <remi@fedoraproject.org> - 1.1.0-3
- ignore 1 test on Fedora >= 22