From: Bruno Haible Date: Sun, 16 Sep 2018 12:43:20 +0000 (+0200) Subject: Use newer macOS APIs when possible. X-Git-Tag: v0.20~392 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=12116ea90478d91e6b8b1483fc2a7a6f6c24ecba;p=thirdparty%2Fgettext.git Use newer macOS APIs when possible. * gettext-runtime/m4/intlmacosx.m4 (gt_INTL_MACOSX): Check for CFLocaleCopyPreferredLanguages. * gettext-runtime/intl/langprefs.c (_nl_language_preferences_default): Use CFLocaleCopyPreferredLanguages when it exists. --- diff --git a/gettext-runtime/intl/langprefs.c b/gettext-runtime/intl/langprefs.c index 98232745b..93c0aad5e 100644 --- a/gettext-runtime/intl/langprefs.c +++ b/gettext-runtime/intl/langprefs.c @@ -23,9 +23,13 @@ #include -#if HAVE_CFPREFERENCESCOPYAPPVALUE +#if HAVE_CFLOCALECOPYPREFERREDLANGUAGES || HAVE_CFPREFERENCESCOPYAPPVALUE # include -# include +# if HAVE_CFLOCALECOPYPREFERREDLANGUAGES +# include +# elif HAVE_CFPREFERENCESCOPYAPPVALUE +# include +# endif # include # include # include @@ -233,7 +237,8 @@ _nl_language_preferences_win32_system (HMODULE kernel32) const char * _nl_language_preferences_default (void) { -#if HAVE_CFPREFERENCESCOPYAPPVALUE /* MacOS X 10.2 or newer */ +#if HAVE_CFLOCALECOPYPREFERREDLANGUAGES || HAVE_CFPREFERENCESCOPYAPPVALUE + /* MacOS X 10.4 or newer */ { /* Cache the preferences list, since CoreFoundation calls are expensive. */ static const char *cached_languages; @@ -241,6 +246,9 @@ _nl_language_preferences_default (void) if (!cache_initialized) { +# if HAVE_CFLOCALECOPYPREFERREDLANGUAGES /* MacOS X 10.5 or newer */ + CFArrayRef prefArray = CFLocaleCopyPreferredLanguages (); +# elif HAVE_CFPREFERENCESCOPYAPPVALUE /* MacOS X 10.4 or newer */ CFTypeRef preferences = CFPreferencesCopyAppValue (CFSTR ("AppleLanguages"), kCFPreferencesCurrentApplication); @@ -248,6 +256,8 @@ _nl_language_preferences_default (void) && CFGetTypeID (preferences) == CFArrayGetTypeID ()) { CFArrayRef prefArray = (CFArrayRef)preferences; +# endif + int n = CFArrayGetCount (prefArray); char buf[256]; size_t size = 0; @@ -331,7 +341,12 @@ _nl_language_preferences_default (void) cached_languages = languages; } } + +# if HAVE_CFLOCALECOPYPREFERREDLANGUAGES /* MacOS X 10.5 or newer */ + CFRelease (prefArray); +# elif HAVE_CFPREFERENCESCOPYAPPVALUE /* MacOS X 10.4 or newer */ } +# endif cache_initialized = 1; } if (cached_languages != NULL) diff --git a/gettext-runtime/m4/intlmacosx.m4 b/gettext-runtime/m4/intlmacosx.m4 index aca924c6c..2bc0df274 100644 --- a/gettext-runtime/m4/intlmacosx.m4 +++ b/gettext-runtime/m4/intlmacosx.m4 @@ -1,4 +1,4 @@ -# intlmacosx.m4 serial 5 (gettext-0.18.2) +# intlmacosx.m4 serial 6 (gettext-0.19.9) dnl Copyright (C) 2004-2014, 2016 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, @@ -17,7 +17,7 @@ dnl Checks for special options needed on Mac OS X. dnl Defines INTL_MACOSX_LIBS. AC_DEFUN([gt_INTL_MACOSX], [ - dnl Check for API introduced in Mac OS X 10.2. + dnl Check for API introduced in Mac OS X 10.4. AC_CACHE_CHECK([for CFPreferencesCopyAppValue], [gt_cv_func_CFPreferencesCopyAppValue], [gt_save_LIBS="$LIBS" @@ -33,7 +33,7 @@ AC_DEFUN([gt_INTL_MACOSX], AC_DEFINE([HAVE_CFPREFERENCESCOPYAPPVALUE], [1], [Define to 1 if you have the Mac OS X function CFPreferencesCopyAppValue in the CoreFoundation framework.]) fi - dnl Check for API introduced in Mac OS X 10.3. + dnl Check for API introduced in Mac OS X 10.5. AC_CACHE_CHECK([for CFLocaleCopyCurrent], [gt_cv_func_CFLocaleCopyCurrent], [gt_save_LIBS="$LIBS" LIBS="$LIBS -Wl,-framework -Wl,CoreFoundation" @@ -48,8 +48,22 @@ AC_DEFUN([gt_INTL_MACOSX], AC_DEFINE([HAVE_CFLOCALECOPYCURRENT], [1], [Define to 1 if you have the Mac OS X function CFLocaleCopyCurrent in the CoreFoundation framework.]) fi + AC_CACHE_CHECK([for CFLocaleCopyPreferredLanguages], [gt_cv_func_CFLocaleCopyPreferredLanguages], + [gt_save_LIBS="$LIBS" + LIBS="$LIBS -Wl,-framework -Wl,CoreFoundation" + AC_LINK_IFELSE( + [AC_LANG_PROGRAM( + [[#include ]], + [[CFLocaleCopyPreferredLanguages();]])], + [gt_cv_func_CFLocaleCopyPreferredLanguages=yes], + [gt_cv_func_CFLocaleCopyPreferredLanguages=no]) + LIBS="$gt_save_LIBS"]) + if test $gt_cv_func_CFLocaleCopyCurrent = yes; then + AC_DEFINE([HAVE_CFLOCALECOPYPREFERREDLANGUAGES], [1], + [Define to 1 if you have the Mac OS X function CFLocaleCopyPreferredLanguages in the CoreFoundation framework.]) + fi INTL_MACOSX_LIBS= - if test $gt_cv_func_CFPreferencesCopyAppValue = yes || test $gt_cv_func_CFLocaleCopyCurrent = yes; then + if test $gt_cv_func_CFPreferencesCopyAppValue = yes || test $gt_cv_func_CFLocaleCopyCurrent = yes || test $gt_cv_func_CFLocaleCopyPreferredLanguages = yes; then INTL_MACOSX_LIBS="-Wl,-framework -Wl,CoreFoundation" fi AC_SUBST([INTL_MACOSX_LIBS])