# 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.

ldexpl_test = '''
#include <math.h>
extern
#ifdef __cplusplus
"C"
#endif

#if !defined (_MSC_VER) || defined (TEST_LDEXPL_DECL)
long double ldexpl (long double, int);
#endif

int main()
{
  int result = 0;
  {
    volatile long double x = 1.0;
    volatile long double y = ldexpl (x, -1);
    if (y != 0.5L)
      result |= 1;
  }
  {
    volatile long double x = 1.73205L;
    volatile long double y = ldexpl (x, 0);
    if (y != x)
      result |= 2;
  }
  return result;
}
'''

if not meson.is_cross_build() or meson.has_exe_wrapper()
  run_result = cc.run(ldexpl_test,
      name : 'ldexpl works',
      dependencies : [libm])
  gl_cv_func_ldexpl_works = run_result.compiled() and run_result.returncode() == 0
else
  if host_system.startswith ('aix')
    gl_cv_func_ldexpl_works = false
  elif host_system == 'windows'
    gl_cv_func_ldexpl_works = true
  else
    gl_cv_func_ldexpl_works = true
  endif
endif

ldexpl_test_decl = '''
#define TEST_LDEXPL_DECL 1
''' + ldexpl_test

build_result = cc.compiles(ldexpl_test_decl,
    name : 'ldexpl prototype can be re-listed')
gl_cv_func_ldexpl_decl = build_result
