tests/37 has header: Also test the fallback include check

Also forcibly undefine __has_include and test that the fallback include
check in cc.has_header() works.

This is important because all the latest compilers support it now
and we might have no test coverage at all by accident. GCC 5, ICC 17,
Clang 3.8, and VS2015 Update 2 already support it.
pull/1463/head
Nirbheek Chauhan 8 years ago
parent 1612dbd719
commit b8b05497af
  1. 68
      test cases/common/37 has header/meson.build

@ -9,39 +9,41 @@ configure_file(input : non_existant_header,
output : non_existant_header, output : non_existant_header,
configuration : configuration_data()) configuration : configuration_data())
foreach comp : [meson.get_compiler('c'), meson.get_compiler('cpp')] # Test that the fallback to __has_include also works on all compilers
if not comp.has_header('stdio.h') args = [[], ['-U__has_include']]
error('Stdio missing.')
endif foreach arg : args
foreach comp : [meson.get_compiler('c'), meson.get_compiler('cpp')]
# stdio.h doesn't actually need stdlib.h, but just test that setting the assert(comp.has_header('stdio.h', args : arg), 'Stdio missing.')
# prefix does not result in an error.
if not comp.has_header('stdio.h', prefix : '#include <stdlib.h>') # stdio.h doesn't actually need stdlib.h, but just test that setting the
error('Stdio missing.') # prefix does not result in an error.
endif assert(comp.has_header('stdio.h', prefix : '#include <stdlib.h>', args : arg),
'Stdio missing.')
# XInput.h should not require type definitions from windows.h, but it does
# require macro definitions. Specifically, it requires an arch setting for # XInput.h should not require type definitions from windows.h, but it does
# VS2015 at least. # require macro definitions. Specifically, it requires an arch setting for
# We only do this check on MSVC because MinGW often defines its own wrappers # VS2015 at least.
# that pre-include windows.h # We only do this check on MSVC because MinGW often defines its own wrappers
if comp.get_id() == 'msvc' # that pre-include windows.h
if not comp.has_header('XInput.h', prefix : '#include <windows.h>') if comp.get_id() == 'msvc'
error('XInput.h should not be missing on Windows') assert(comp.has_header('XInput.h', prefix : '#include <windows.h>', args : arg),
'XInput.h should not be missing on Windows')
assert(comp.has_header('XInput.h', prefix : '#define _X86_', args : arg),
'XInput.h should not need windows.h')
endif endif
if not comp.has_header('XInput.h', prefix : '#define _X86_')
error('XInput.h should not need windows.h') # Test that the following GCC bug doesn't happen:
# https://gcc.gnu.org/bugzilla/show_bug.cgi?id=80005
# https://github.com/mesonbuild/meson/issues/1458
if host_system == 'linux'
assert(comp.has_header('linux/if.h', args : arg),
'Could not find <linux/if.h>')
endif endif
endif
# This header exists in the source and the builddir, but we still must not
# Test that the following GCC bug doesn't happen: # find it since we are looking in the system directories.
# https://gcc.gnu.org/bugzilla/show_bug.cgi?id=80005 assert(not comp.has_header(non_existant_header, args : arg),
# https://github.com/mesonbuild/meson/issues/1458 'Found non-existant header.')
if host_system == 'linux' endforeach
assert(comp.has_header('linux/if.h'), 'Could not find <linux/if.h>')
endif
# This header exists in the source and the builddir, but we still must not
# find it since we are looking in the system directories.
assert(not comp.has_header(non_existant_header), 'Found non-existant header.')
endforeach endforeach

Loading…
Cancel
Save