# Copyright (C) 2002-2004, 2006-2018 Free Software Foundation, Inc.
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.

# Test whether the *printf family of functions supports the - flag correctly.
# (ISO C99.) See
# <https://lists.gnu.org/r/bug-coreutils/2008-02/msg00035.html>
# Result is gl_cv_func_printf_flag_leftadjust.

printf_flag_grouping_test = '''
#include <stdio.h>
#include <string.h>
static char buf[100];
int main ()
{
  if (sprintf (buf, "%'d %d", 1234567, 99) < 0
      || buf[strlen (buf) - 1] != '9')
    return 1;
  return 0;
}'''

if not meson.is_cross_build() or meson.has_exe_wrapper()
  run_result = cc.run(printf_flag_grouping_test,
      name : 'printf supports the grouping flag')
  gl_cv_func_printf_flag_grouping = run_result.compiled() and run_result.returncode() == 0
else
  if host_system.startswith ('cygwin')
    gl_cv_func_printf_flag_grouping = false
  elif host_system.startswith ('netbsd')
    gl_cv_func_printf_flag_grouping = false
  elif host_system == 'windows'
    gl_cv_func_printf_flag_grouping = false
  else
    gl_cv_func_printf_flag_grouping = true
  endif
endif
