compilers: Add prefix before limits.h in has_function checks

prefix might define _GNU_SOURCE, which *must* be defined before your
first include of limits.h, so we must define it first.

There's not really any downsides to including limits.h after the
prefix.
pull/1328/head
Nirbheek Chauhan 8 years ago
parent 3433fc54c9
commit 748fe80423
  1. 12
      mesonbuild/compilers.py

@ -949,12 +949,13 @@ class CCompiler(Compiler):
""" """
# Define the symbol to something else since it is defined by the # Define the symbol to something else since it is defined by the
# includes or defines listed by the user or by the compiler. This may # includes or defines listed by the user or by the compiler. This may
# include, for instance _GNU_SOURCE. Then, undef the symbol to get rid # include, for instance _GNU_SOURCE which must be defined before
# of it completely. # limits.h, which includes features.h
# Then, undef the symbol to get rid of it completely.
head = ''' head = '''
#define {func} meson_disable_define_of_{func} #define {func} meson_disable_define_of_{func}
#include <limits.h>
{prefix} {prefix}
#include <limits.h>
#undef {func} #undef {func}
''' '''
# Override any GCC internal prototype and declare our own definition for # Override any GCC internal prototype and declare our own definition for
@ -980,8 +981,9 @@ class CCompiler(Compiler):
user for the function prototype while checking if a function exists. user for the function prototype while checking if a function exists.
""" """
# Add the 'prefix', aka defines, includes, etc that the user provides # Add the 'prefix', aka defines, includes, etc that the user provides
# This may include, for instance _GNU_SOURCE # This may include, for instance _GNU_SOURCE which must be defined
head = '#include <limits.h>\n{prefix}\n' # before limits.h, which includes features.h
head = '{prefix}\n#include <limits.h>\n'
# We don't know what the function takes or returns, so return it as an int. # We don't know what the function takes or returns, so return it as an int.
# Just taking the address or comparing it to void is not enough because # Just taking the address or comparing it to void is not enough because
# compilers are smart enough to optimize it away. The resulting binary # compilers are smart enough to optimize it away. The resulting binary

Loading…
Cancel
Save