Skip to content

Commit 95fbae8

Browse files
committed
Compatibility with old versions of ICU (4.0+).
1 parent 69f75bb commit 95fbae8

33 files changed

+108
-0
lines changed

ext/intl/calendar/calendar_class.cpp

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -377,7 +377,9 @@ ZEND_END_ARG_INFO()
377377
static const zend_function_entry Calendar_class_functions[] = {
378378
PHP_ME(IntlCalendar, __construct, ainfo_cal_void, ZEND_ACC_PRIVATE)
379379
PHP_ME_MAPPING(createInstance, intlcal_create_instance, ainfo_cal_createInstance, ZEND_ACC_STATIC | ZEND_ACC_PUBLIC)
380+
#if U_ICU_VERSION_MAJOR_NUM * 10 + U_ICU_VERSION_MINOR_NUM >= 42
380381
PHP_ME_MAPPING(getKeywordValuesForLocale, intlcal_get_keyword_values_for_locale, ainfo_cal_get_keyword_values_for_locale, ZEND_ACC_STATIC | ZEND_ACC_PUBLIC)
382+
#endif
381383
PHP_ME_MAPPING(getNow, intlcal_get_now, ainfo_cal_void, ZEND_ACC_STATIC | ZEND_ACC_PUBLIC)
382384
PHP_ME_MAPPING(getAvailableLocales, intlcal_get_available_locales, ainfo_cal_void, ZEND_ACC_STATIC | ZEND_ACC_PUBLIC)
383385
PHP_ME_MAPPING(get, intlcal_get, ainfo_cal_field, ZEND_ACC_PUBLIC)
@@ -393,7 +395,9 @@ static const zend_function_entry Calendar_class_functions[] = {
393395
PHP_ME_MAPPING(fieldDifference, intlcal_field_difference, ainfo_cal_field_difference, ZEND_ACC_PUBLIC)
394396
PHP_ME_MAPPING(getActualMaximum, intlcal_get_actual_maximum, ainfo_cal_field, ZEND_ACC_PUBLIC)
395397
PHP_ME_MAPPING(getActualMinimum, intlcal_get_actual_minimum, ainfo_cal_field, ZEND_ACC_PUBLIC)
398+
#if U_ICU_VERSION_MAJOR_NUM * 10 + U_ICU_VERSION_MINOR_NUM >= 44
396399
PHP_ME_MAPPING(getDayOfWeekType, intlcal_get_day_of_week_type, ainfo_cal_dow, ZEND_ACC_PUBLIC)
400+
#endif
397401
PHP_ME_MAPPING(getFirstDayOfWeek, intlcal_get_first_day_of_week, ainfo_cal_void, ZEND_ACC_PUBLIC)
398402
PHP_ME_MAPPING(getGreatestMinimum, intlcal_get_greatest_minimum, ainfo_cal_field, ZEND_ACC_PUBLIC)
399403
PHP_ME_MAPPING(getLeastMaximum, intlcal_get_least_maximum, ainfo_cal_field, ZEND_ACC_PUBLIC)
@@ -403,12 +407,16 @@ static const zend_function_entry Calendar_class_functions[] = {
403407
PHP_ME_MAPPING(getMinimum, intlcal_get_minimum, ainfo_cal_field, ZEND_ACC_PUBLIC)
404408
PHP_ME_MAPPING(getTimeZone, intlcal_get_time_zone, ainfo_cal_void, ZEND_ACC_PUBLIC)
405409
PHP_ME_MAPPING(getType, intlcal_get_type, ainfo_cal_void, ZEND_ACC_PUBLIC)
410+
#if U_ICU_VERSION_MAJOR_NUM * 10 + U_ICU_VERSION_MINOR_NUM >= 44
406411
PHP_ME_MAPPING(getWeekendTransition,intlcal_get_weekend_transition, ainfo_cal_dow, ZEND_ACC_PUBLIC)
412+
#endif
407413
PHP_ME_MAPPING(inDaylightTime, intlcal_in_daylight_time, ainfo_cal_void, ZEND_ACC_PUBLIC)
408414
PHP_ME_MAPPING(isEquivalentTo, intlcal_is_equivalent_to, ainfo_cal_other_cal, ZEND_ACC_PUBLIC)
409415
PHP_ME_MAPPING(isLenient, intlcal_is_lenient, ainfo_cal_void, ZEND_ACC_PUBLIC)
410416
PHP_ME_MAPPING(isSet, intlcal_is_set, ainfo_cal_field, ZEND_ACC_PUBLIC)
417+
#if U_ICU_VERSION_MAJOR_NUM * 10 + U_ICU_VERSION_MINOR_NUM >= 44
411418
PHP_ME_MAPPING(isWeekend, intlcal_is_weekend, ainfo_cal_date_optional, ZEND_ACC_PUBLIC)
419+
#endif
412420
PHP_ME_MAPPING(setFirstDayOfWeek, intlcal_set_first_day_of_week, ainfo_cal_dow, ZEND_ACC_PUBLIC)
413421
PHP_ME_MAPPING(setLenient, intlcal_set_lenient, ainfo_cal_setLenient, ZEND_ACC_PUBLIC)
414422
PHP_ME_MAPPING(equals, intlcal_equals, ainfo_cal_other_cal, ZEND_ACC_PUBLIC)
@@ -510,10 +518,12 @@ void calendar_register_IntlCalendar_class(TSRMLS_D)
510518
CALENDAR_DECL_LONG_CONST("DOW_FRIDAY", UCAL_FRIDAY);
511519
CALENDAR_DECL_LONG_CONST("DOW_SATURDAY", UCAL_SATURDAY);
512520

521+
#if U_ICU_VERSION_MAJOR_NUM * 10 + U_ICU_VERSION_MINOR_NUM >= 44
513522
CALENDAR_DECL_LONG_CONST("DOW_TYPE_WEEKDAY", UCAL_WEEKDAY);
514523
CALENDAR_DECL_LONG_CONST("DOW_TYPE_WEEKEND", UCAL_WEEKEND);
515524
CALENDAR_DECL_LONG_CONST("DOW_TYPE_WEEKEND_OFFSET", UCAL_WEEKEND_ONSET);
516525
CALENDAR_DECL_LONG_CONST("DOW_TYPE_WEEKEND_CEASE", UCAL_WEEKEND_CEASE);
526+
#endif
517527

518528
#if U_ICU_VERSION_MAJOR_NUM >= 49
519529
CALENDAR_DECL_LONG_CONST("WALLTIME_FIRST", UCAL_WALLTIME_FIRST);

ext/intl/calendar/calendar_methods.cpp

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,7 @@ U_CFUNC PHP_FUNCTION(intlcal_create_instance)
7777
calendar_object_create(return_value, cal TSRMLS_CC);
7878
}
7979

80+
#if U_ICU_VERSION_MAJOR_NUM * 10 + U_ICU_VERSION_MINOR_NUM >= 42
8081
class BugStringCharEnumeration : public StringEnumeration
8182
{
8283
public:
@@ -172,6 +173,7 @@ U_CFUNC PHP_FUNCTION(intlcal_get_keyword_values_for_locale)
172173

173174
IntlIterator_from_StringEnumeration(se, return_value TSRMLS_CC);
174175
}
176+
#endif //ICU 4.2 only
175177

176178
U_CFUNC PHP_FUNCTION(intlcal_get_now)
177179
{
@@ -613,6 +615,7 @@ U_CFUNC PHP_FUNCTION(intlcal_get_actual_minimum)
613615
"intlcal_get_actual_minimum", INTERNAL_FUNCTION_PARAM_PASSTHRU);
614616
}
615617

618+
#if U_ICU_VERSION_MAJOR_NUM * 10 + U_ICU_VERSION_MINOR_NUM >= 44
616619
U_CFUNC PHP_FUNCTION(intlcal_get_day_of_week_type)
617620
{
618621
long dow;
@@ -640,6 +643,7 @@ U_CFUNC PHP_FUNCTION(intlcal_get_day_of_week_type)
640643

641644
RETURN_LONG((long)result);
642645
}
646+
#endif
643647

644648
U_CFUNC PHP_FUNCTION(intlcal_get_first_day_of_week)
645649
{
@@ -804,6 +808,7 @@ U_CFUNC PHP_FUNCTION(intlcal_get_type)
804808
RETURN_STRING(co->ucal->getType(), 1);
805809
}
806810

811+
#if U_ICU_VERSION_MAJOR_NUM * 10 + U_ICU_VERSION_MINOR_NUM >= 44
807812
U_CFUNC PHP_FUNCTION(intlcal_get_weekend_transition)
808813
{
809814
long dow;
@@ -831,6 +836,7 @@ U_CFUNC PHP_FUNCTION(intlcal_get_weekend_transition)
831836

832837
RETURN_LONG((long)res);
833838
}
839+
#endif
834840

835841
U_CFUNC PHP_FUNCTION(intlcal_in_daylight_time)
836842
{
@@ -917,6 +923,7 @@ U_CFUNC PHP_FUNCTION(intlcal_is_set)
917923
RETURN_BOOL((int)co->ucal->isSet((UCalendarDateFields)field));
918924
}
919925

926+
#if U_ICU_VERSION_MAJOR_NUM * 10 + U_ICU_VERSION_MINOR_NUM >= 44
920927
U_CFUNC PHP_FUNCTION(intlcal_is_weekend)
921928
{
922929
double date;
@@ -945,6 +952,7 @@ U_CFUNC PHP_FUNCTION(intlcal_is_weekend)
945952
RETURN_BOOL((int)ret);
946953
}
947954
}
955+
#endif
948956

949957

950958
U_CFUNC PHP_FUNCTION(intlcal_set_first_day_of_week)

ext/intl/calendar/gregoriancalendar_methods.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -140,7 +140,12 @@ static void _php_intlgregcal_constructor_body(INTERNAL_FUNCTION_PARAMETERS)
140140
}
141141

142142
timelib_tzinfo *tzinfo = get_timezone_info(TSRMLS_C);
143+
#if U_ICU_VERSION_MAJOR_NUM * 10 + U_ICU_VERSION_MINOR_NUM >= 42
143144
UnicodeString tzstr = UnicodeString::fromUTF8(StringPiece(tzinfo->name));
145+
#else
146+
UnicodeString tzstr = UnicodeString(tzinfo->name,
147+
strlen(tzinfo->name), US_INV);
148+
#endif
144149
if (tzstr.isBogus()) {
145150
intl_error_set(NULL, U_ILLEGAL_ARGUMENT_ERROR,
146151
"intlgregcal_create_instance: could not create UTF-8 string "

ext/intl/common/common_enum.cpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,9 @@
1818
#include "config.h"
1919
#endif
2020

21+
// Fix build on Windows/old versions of ICU
22+
#include <stdio.h>
23+
2124
#include "common_enum.h"
2225

2326
extern "C" {

ext/intl/intl_convertcpp.cpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,9 @@
1616

1717
/* $Id$ */
1818

19+
//Fixes the build on old versions of ICU with Windows
20+
#include <stdio.h>
21+
1922
#include "intl_convertcpp.h"
2023
#include <unicode/ustring.h>
2124
extern "C" {

ext/intl/msgformat/msgformat_helpers.cpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,9 @@
1818
#include "config.h"
1919
#endif
2020

21+
// Fix build on Windows / old versions of ICU
22+
#include <stdio.h>
23+
2124
#include <math.h>
2225
#include <unicode/msgfmt.h>
2326
#include <unicode/chariter.h>

ext/intl/php_intl.c

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -723,9 +723,13 @@ zend_function_entry intl_functions[] = {
723723
#endif
724724
PHP_FE( intltz_create_enumeration, arginfo_tz_create_enumeration )
725725
PHP_FE( intltz_count_equivalent_ids, arginfo_tz_idarg_static )
726+
#if U_ICU_VERSION_MAJOR_NUM * 10 + U_ICU_VERSION_MINOR_NUM >= 48
726727
PHP_FE( intltz_create_time_zone_id_enumeration, arginfo_tz_create_time_zone_id_enumeration )
728+
#endif
727729
PHP_FE( intltz_get_canonical_id, arginfo_tz_get_canonical_id )
730+
#if U_ICU_VERSION_MAJOR_NUM * 10 + U_ICU_VERSION_MINOR_NUM >= 48
728731
PHP_FE( intltz_get_region, arginfo_tz_idarg_static )
732+
#endif
729733
PHP_FE( intltz_get_tz_data_version, arginfo_tz_void )
730734
PHP_FE( intltz_get_equivalent_id, arginfo_tz_get_equivalent_id )
731735
PHP_FE( intltz_use_daylight_time, arginfo_tz_only_tz )
@@ -738,7 +742,9 @@ zend_function_entry intl_functions[] = {
738742
PHP_FE( intltz_get_error_message, arginfo_tz_only_tz )
739743

740744
PHP_FE( intlcal_create_instance, ainfo_cal_create_instance )
745+
#if U_ICU_VERSION_MAJOR_NUM * 10 + U_ICU_VERSION_MINOR_NUM >= 42
741746
PHP_FE( intlcal_get_keyword_values_for_locale, ainfo_cal_get_keyword_values_for_locale )
747+
#endif
742748
PHP_FE( intlcal_get_now, ainfo_cal_void )
743749
PHP_FE( intlcal_get_available_locales, ainfo_cal_void )
744750
PHP_FE( intlcal_get, ainfo_cal_field )
@@ -754,7 +760,9 @@ zend_function_entry intl_functions[] = {
754760
PHP_FE( intlcal_field_difference, ainfo_cal_field_difference )
755761
PHP_FE( intlcal_get_actual_maximum, ainfo_cal_field )
756762
PHP_FE( intlcal_get_actual_minimum, ainfo_cal_field )
763+
#if U_ICU_VERSION_MAJOR_NUM * 10 + U_ICU_VERSION_MINOR_NUM >= 44
757764
PHP_FE( intlcal_get_day_of_week_type, ainfo_cal_dow )
765+
#endif
758766
PHP_FE( intlcal_get_first_day_of_week, ainfo_cal_only_cal )
759767
PHP_FE( intlcal_get_greatest_minimum, ainfo_cal_field )
760768
PHP_FE( intlcal_get_least_maximum, ainfo_cal_field )
@@ -764,12 +772,16 @@ zend_function_entry intl_functions[] = {
764772
PHP_FE( intlcal_get_minimum, ainfo_cal_field )
765773
PHP_FE( intlcal_get_time_zone, ainfo_cal_only_cal )
766774
PHP_FE( intlcal_get_type, ainfo_cal_only_cal )
775+
#if U_ICU_VERSION_MAJOR_NUM * 10 + U_ICU_VERSION_MINOR_NUM >= 44
767776
PHP_FE( intlcal_get_weekend_transition, ainfo_cal_dow )
777+
#endif
768778
PHP_FE( intlcal_in_daylight_time, ainfo_cal_only_cal )
769779
PHP_FE( intlcal_is_equivalent_to, ainfo_cal_other_cal )
770780
PHP_FE( intlcal_is_lenient, ainfo_cal_only_cal )
771781
PHP_FE( intlcal_is_set, ainfo_cal_field )
782+
#if U_ICU_VERSION_MAJOR_NUM * 10 + U_ICU_VERSION_MINOR_NUM >= 44
772783
PHP_FE( intlcal_is_weekend, ainfo_cal_date_optional )
784+
#endif
773785
PHP_FE( intlcal_set_first_day_of_week, ainfo_cal_dow )
774786
PHP_FE( intlcal_set_lenient, ainfo_cal_set_lenient )
775787
PHP_FE( intlcal_equals, ainfo_cal_other_cal )

ext/intl/tests/calendar_createInstance_basic.phpt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@ IntlCalendar::createInstance() basic test
44
<?php
55
if (!extension_loaded('intl'))
66
die('skip intl extension not enabled');
7+
if (version_compare(INTL_ICU_VERSION, '4.8') < 0)
8+
die('skip for ICU 4.8+');
79
--FILE--
810
<?php
911
ini_set("intl.error_level", E_WARNING);

ext/intl/tests/calendar_createInstance_variation1.phpt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@ IntlCalendar::createInstance() argument variations
44
<?php
55
if (!extension_loaded('intl'))
66
die('skip intl extension not enabled');
7+
if (version_compare(INTL_ICU_VERSION, '4.8') < 0)
8+
die('skip for ICU 4.8+');
79
--FILE--
810
<?php
911
ini_set("intl.error_level", E_WARNING);

ext/intl/tests/calendar_getDayOfWeekType_basic.phpt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@ IntlCalendar::getDayOfWeekType() basic test
44
<?php
55
if (!extension_loaded('intl'))
66
die('skip intl extension not enabled');
7+
if (version_compare(INTL_ICU_VERSION, '4.4') < 0)
8+
die('skip for ICU 4.4+');
79
--FILE--
810
<?php
911
ini_set("intl.error_level", E_WARNING);

0 commit comments

Comments
 (0)