# 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 %F format
# directive. (ISO C99, POSIX:2001)
# Result is gl_cv_func_printf_directive_f.

printf_directive_f_test = '''
#include <stdio.h>
#include <string.h>
static char buf[100];
static double zero = 0.0;
int main ()
{
  int result = 0;
  if (sprintf (buf, "%F %d", 1234567.0, 33, 44, 55) < 0
      || strcmp (buf, "1234567.000000 33") != 0)
    result |= 1;
  if (sprintf (buf, "%F", 1.0 / zero) < 0
      || (strcmp (buf, "INF") != 0 && strcmp (buf, "INFINITY") != 0))
    result |= 2;
  /* This catches a Cygwin 1.5.x bug.  */
  if (sprintf (buf, "%.F", 1234.0) < 0
      || strcmp (buf, "1234") != 0)
    result |= 4;
  return result;
}
'''

if not meson.is_cross_build() or meson.has_exe_wrapper()
  run_result = cc.run(printf_directive_f_test,
      name : 'printf supports the \'F\' directive')
  gl_cv_func_printf_directive_f = run_result.compiled() and run_result.returncode() == 0
else
  if host_system == 'linux'
    gl_cv_func_printf_directive_f = true
  elif (host_system.startswith ('freebsd1') or
        host_system.startswith ('freebsd2') or
        host_system.startswith ('freebsd3') or
        host_system.startswith ('freebsd4') or
        host_system.startswith ('freebsd5'))
    gl_cv_func_printf_directive_f = false
  elif (host_system.startswith ('freebsd') or
        host_system.startswith ('kfreebsd'))
    gl_cv_func_printf_directive_f = true
  elif (host_system.startswith ('darwin1') or
        host_system.startswith ('darwin2') or
        host_system.startswith ('darwin3') or
        host_system.startswith ('darwin4') or
        host_system.startswith ('darwin5') or
        host_system.startswith ('darwin6'))
    gl_cv_func_printf_directive_f = false
  elif host_system.startswith ('darwin')
    gl_cv_func_printf_directive_f = true
# Split the check from the main if statement, ensure that
# some meson versions (old ones, presumable) won't try
# to evaluate host_system[9] when it's shorter than that
  elif host_system.startswith ('solaris2.')
    if (host_system[9] == '1' and
        '0123456789'.contains (host_system[10])) or
       ('23456789'.contains (host_system[9]) == '1' and
        '0123456789'.contains (host_system[10]))
      gl_cv_func_printf_directive_f = true
    elif host_system.startswith ('solaris')
      gl_cv_func_printf_directive_f = false
    endif
  elif host_system.startswith ('solaris')
    gl_cv_func_printf_directive_f = false
  elif host_system == 'windows'
    # Guess yes on MSVC, no on mingw.
    if cc.get_id() == 'msvc' or cc.get_id() == 'clang-cl'
      gl_cv_func_printf_directive_f = true
    else
      gl_cv_func_printf_directive_f = false
    endif
  else
    gl_cv_func_printf_directive_f = false
  endif
endif
