Skip to content

Commit

Permalink
Fix test cases/common/37 on Cygwin
Browse files Browse the repository at this point in the history
Including newlib's <stdlib.h> brings in a '#define __has_include 0', so
using -U__has_include on the command line isn't going to remove it (so the
fallback doesn't happen and the test fails)

Instead use a '#undef __has_include' at the end of the prefix to excerise
this.

(newlib's <stdlib.h> is derived from FreeBSD, so the same problem will
probably be seen there)
  • Loading branch information
jon-turney committed Apr 6, 2017
1 parent 205b375 commit 4ef4a65
Showing 1 changed file with 9 additions and 9 deletions.
18 changes: 9 additions & 9 deletions test cases/common/37 has header/meson.build
Original file line number Diff line number Diff line change
Expand Up @@ -11,19 +11,19 @@ configure_file(input : non_existant_header,

# Test that the fallback to __has_include also works on all compilers
if host_system != 'darwin'
args = [[], ['-U__has_include']]
fallbacks = ['', '\n#undef __has_include']
else
# On Darwin's clang you can't redefine builtin macros so the above doesn't work
args = [[]]
fallbacks = ['']
endif

foreach arg : args
foreach fallback : fallbacks
foreach comp : [meson.get_compiler('c'), meson.get_compiler('cpp')]
assert(comp.has_header('stdio.h', args : arg), 'Stdio missing.')
assert(comp.has_header('stdio.h', prefix : fallback), 'Stdio missing.')

# stdio.h doesn't actually need stdlib.h, but just test that setting the
# prefix does not result in an error.
assert(comp.has_header('stdio.h', prefix : '#include <stdlib.h>', args : arg),
assert(comp.has_header('stdio.h', prefix : '#include <stdlib.h>' + fallback),
'Stdio missing.')

# XInput.h should not require type definitions from windows.h, but it does
Expand All @@ -32,23 +32,23 @@ foreach arg : args
# We only do this check on MSVC because MinGW often defines its own wrappers
# that pre-include windows.h
if comp.get_id() == 'msvc'
assert(comp.has_header('XInput.h', prefix : '#include <windows.h>', args : arg),
assert(comp.has_header('XInput.h', prefix : '#include <windows.h>' + fallback),
'XInput.h should not be missing on Windows')
assert(comp.has_header('XInput.h', prefix : '#define _X86_', args : arg),
assert(comp.has_header('XInput.h', prefix : '#define _X86_' + fallback),
'XInput.h should not need windows.h')
endif

# 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),
assert(comp.has_header('linux/if.h', prefix : fallback),
'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, args : arg),
assert(not comp.has_header(non_existant_header, prefix : fallback),
'Found non-existant header.')
endforeach
endforeach

0 comments on commit 4ef4a65

Please sign in to comment.