In CMake, check for thousands-grouping support in the GLib printf routines.

We do that with the autotools; do it with CMake as well.

We could, in theory, handle thosands-grouping ourselves, on all
platforms supporting ANSI C (for which read "all platforms we care
about") by using localeconv()'s thousands_sep and grouping items, but
that's a bit more work.

Fix autotools' comment for that item while we're at it (it checks the
GLib printf routines, not the system printf routines).

Change-Id: I000f0f3b955d9b192ade15e3fabc46d6b48a052e
Reviewed-on: https://code.wireshark.org/review/6317
Reviewed-by: Guy Harris <guy@alum.mit.edu>
This commit is contained in:
Guy Harris 2015-01-04 17:43:19 -08:00
parent 533f85785b
commit fc39b9b151
3 changed files with 35 additions and 1 deletions

View File

@ -147,3 +147,34 @@ if (NL_FOUND)
HAVE_NL80211_SPLIT_WIPHY_DUMP
)
endif()
#
# Check whether GLib's printf supports thousands grouping. (This might
# be different from the system's printf since GLib can optionally use
# its own printf implementation.)
#
if (CMAKE_CROSSCOMPILING)
#
# Play it safe when cross-compiling.
#
set(HAVE_GLIB_PRINTF_GROUPING FALSE)
else()
cmake_push_check_state()
set(CMAKE_REQUIRED_INCLUDES ${GLIB2_INCLUDE_DIRS})
set(CMAKE_REQUIRED_LIBRARIES ${GLIB2_LIBRARIES})
check_c_source_runs(
"#include <glib.h>
#include <locale.h>
#include <stdio.h>
#include <string.h>
int
main ()
{
gchar *str;
setlocale(LC_ALL, \"en_US.UTF-8\");
str = g_strdup_printf(\"%'u\", 123456);
return (strcmp (str, \"123,456\") != 0);
}" HAVE_GLIB_PRINTF_GROUPING)
cmake_pop_check_state()
endif()

View File

@ -78,6 +78,9 @@
/* Define to 1 if you have the <getopt.h> header file. */
#cmakedefine HAVE_GETOPT_H 1
/* Define if GLib's printf functions support thousands grouping. */
#cmakedefine HAVE_GLIB_PRINTF_GROUPING 1
/* Define to 1 if you have the `getprotobynumber' function. */
#cmakedefine HAVE_GETPROTOBYNUMBER 1

View File

@ -1880,7 +1880,7 @@ CFLAGS="$ac_save_CFLAGS"
LIBS="$ac_save_LIBS"
if test "$ac_cv_glib_supports_printf_grouping" = yes ; then
AC_MSG_RESULT(yes)
AC_DEFINE(HAVE_GLIB_PRINTF_GROUPING, 1, [Define if your printf() function supports thousands grouping.])
AC_DEFINE(HAVE_GLIB_PRINTF_GROUPING, 1, [Define if GLib's printf functions support thousands grouping.])
else
AC_MSG_RESULT(no)
fi