]> git.ipfire.org Git - thirdparty/gettext.git/commitdiff
Use newer macOS APIs when possible.
authorBruno Haible <bruno@clisp.org>
Sun, 16 Sep 2018 12:43:20 +0000 (14:43 +0200)
committerBruno Haible <bruno@clisp.org>
Sun, 16 Sep 2018 12:43:20 +0000 (14:43 +0200)
* 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.

gettext-runtime/intl/langprefs.c
gettext-runtime/m4/intlmacosx.m4

index 98232745b74a3cf765b0ed689b1b6db62ada62f4..93c0aad5e976a00edbbf1105dd3f9ca297f8b6ad 100644 (file)
 
 #include <stdlib.h>
 
-#if HAVE_CFPREFERENCESCOPYAPPVALUE
+#if HAVE_CFLOCALECOPYPREFERREDLANGUAGES || HAVE_CFPREFERENCESCOPYAPPVALUE
 # include <string.h>
-# include <CoreFoundation/CFPreferences.h>
+# if HAVE_CFLOCALECOPYPREFERREDLANGUAGES
+#  include <CoreFoundation/CFLocale.h>
+# elif HAVE_CFPREFERENCESCOPYAPPVALUE
+#  include <CoreFoundation/CFPreferences.h>
+# endif
 # include <CoreFoundation/CFPropertyList.h>
 # include <CoreFoundation/CFArray.h>
 # include <CoreFoundation/CFString.h>
@@ -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)
index aca924c6cd3a930004c2df053006ba4e87aab217..2bc0df27464b115a80779337873689abad4278db 100644 (file)
@@ -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 <CoreFoundation/CFLocale.h>]],
+          [[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])