diff options
| author | Remi Collet <fedora@famillecollet.com> | 2015-04-06 08:59:13 +0200 | 
|---|---|---|
| committer | Remi Collet <fedora@famillecollet.com> | 2015-04-06 08:59:13 +0200 | 
| commit | ff139b01eb28803e15307286127e444ed6d21ab4 (patch) | |
| tree | c9fe8d79a5b2270453058bd5084671dbe4aaaf96 | |
| parent | b3b8a3e8751a25d6a4cf07e9c31300ad7103b720 (diff) | |
php-pecl-geoip: add fix for PHP7
| -rw-r--r-- | geoip-php7.patch | 446 | ||||
| -rw-r--r-- | php-pecl-geoip.spec | 63 | 
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, ®ion_code, ®ionlen) == 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, ®ion, &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  | 
