[CMake] CHECK_FUNCTION_EXISTS and -Werror

Mathieu Malaterre mathieu.malaterre at gmail.com
Sat Dec 6 05:20:24 EST 2008


On Fri, Dec 5, 2008 at 12:27 PM, Mathieu Malaterre
<mathieu.malaterre at gmail.com> wrote:
> On Fri, Dec 5, 2008 at 12:12 PM, Eric Noulard <eric.noulard at gmail.com> wrote:
>> 2008/12/5 Mathieu Malaterre <mathieu.malaterre at gmail.com>:
>>> 'lo there,
>>>
>>>  I had my CFLAGS set to -Werror, and because of that a try compile failed with:
>>>
>> [...]
>>> /usr/share/cmake-2.6/Modules/CheckFunctionExists.c:3: warning:
>>> conflicting types for built-in function 'strncasecmp'
>>>
>>>
>>>  Does this means strncasecmp is some kinf of function known by the
>>> gcc compiler ?
>>
>> It should comes from  #include <string.h>
>> and not from gcc itself but I may be wrong...
>
> Ok that's a builtin function since gcc 4.1 (at least).
>
> http://gcc.gnu.org/onlinedocs/gcc-4.1.2/gcc/Other-Builtins.html
>


Would it make sense to prepend: -fno-builtin when gcc is detected ?

Thanks
-- 
Mathieu


Ref:
    -fno-builtin
       -fno-builtin-function
           Don't recognize built-in functions that do not begin with
__builtin_ as prefix.

           GCC normally generates special code to handle certain
built-in functions more efficiently; for instance, calls to "alloca"
may become single instructions that adjust the stack directly, and
calls to "memcpy" may become
           inline copy loops.  The resulting code is often both
smaller and faster, but since the function calls no longer appear as
such, you cannot set a breakpoint on those calls, nor can you change
the behavior of the
           functions by linking with a different library.  In
addition, when a function is recognized as a built-in function, GCC
may use information about that function to warn about problems with
calls to that function, or to
           generate more efficient code, even if the resulting code
still contains calls to that function.  For example, warnings are
given with -Wformat for bad calls to "printf", when "printf" is built
in, and "strlen" is known
           not to modify global memory.

           With the -fno-builtin-function option only the built-in
function function is disabled.  function must not begin with
__builtin_.  If a function is named this is not built-in in this
version of GCC, this option is
           ignored.  There is no corresponding -fbuiltin-function
option; if you wish to enable built-in functions selectively when
using -fno-builtin or -ffreestanding, you may define macros such as:

                   #define abs(n)          __builtin_abs ((n))
                   #define strcpy(d, s)    __builtin_strcpy ((d), (s))


More information about the CMake mailing list