check_c_source_compiles(<code> <resultVar> [FAIL_REGEX <regex1> [<regex2>...]])
check_c_source_compiles(<code> <resultVar> [FAIL_REGEX <regex1> [<regex2>...]])
check_c_source_compiles ("int test (void *${RESTRICT_KEYWORD} x); int main (void) {return 0;}" IK_RESTRICT_${RESTRICT_KEYWORD})
check_c_source_compiles ("int test (void *${RESTRICT_KEYWORD} x); int main (void) {return 0;}" IK_RESTRICT_${RESTRICT_KEYWORD})
CHECK_C_SOURCE_COMPILES("int main() { return 0;}" ${_RESULT}
# Some compilers do not fail with a bad flag
FAIL_REGEX "error: bad value (.*) for .* switch" # GNU
FAIL_REGEX "argument unused during compilation" # clang
FAIL_REGEX "is valid for .* but not for C" # GNU
FAIL_REGEX "unrecognized .*option" # GNU
FAIL_REGEX "ignoring unknown option" # MSVC
FAIL_REGEX "[Uu]nknown option" # HP
FAIL_REGEX "[Ww]arning: [Oo]ption" # SunPro
FAIL_REGEX "command option .* is not recognized" # XL
FAIL_REGEX "WARNING: unknown flag:" # Open64
FAIL_REGEX " #10159: " # ICC
)
check_c_source_compiles("int main(int argc, char **argv) { return 0; }"
HAVE_GCC_NO_CYGWIN)
check_c_source_compiles("
#include <stdlib.h> /* for NULL */
#include <unistd.h> /* for syscall */
#include <sys/syscall.h> /* for SYS_getrandom */
int main() {
syscall(SYS_getrandom, NULL, 0, 0);
return 0;
}"
HAVE_SYSCALL_GETRANDOM)
check_c_source_compiles("
#include <stdlib.h> /* for NULL */
#include <unistd.h> /* for syscall */
#include <sys/syscall.h> /* for SYS_getrandom */
int main() {
syscall(SYS_getrandom, NULL, 0, 0);
return 0;
}"
HAVE_SYSCALL_GETRANDOM)
check_c_source_compiles("int main(int argc, char **argv) { return 0; }"
HAVE_GCC_NO_CYGWIN)
check_c_source_compiles("int main(int argc, char **argv) { return 0; }"
HAVE_GCC_NO_CYGWIN)
check_c_source_compiles( "#include <hwloc.h>
int main(void) { hwloc_obj_t o; o->type = HWLOC_OBJ_PU; return 0;}" HAVE_HWLOC_OBJ_PU)
check_c_source_compiles("#include<math.h>\nint main(int n,char*v[]){return sqrt(n);}" HAVE_MATH)
check_c_source_compiles("int main(int argc, char **argv) { char buffer[256]; return buffer[argc]=0;}" ${_RESULT})
CHECK_C_SOURCE_COMPILES("int main(void) { return 0; }" ${_RESULT}
# Some compilers do not fail with a bad flag
FAIL_REGEX "warning: command line option .* is valid for .* but not for C"
# Apple gcc
FAIL_REGEX "unrecognized .*option" # GNU
FAIL_REGEX "unknown .*option" # Clang
FAIL_REGEX "ignoring unknown option" # MSVC
FAIL_REGEX "warning D9002" # MSVC, any lang
FAIL_REGEX "[Uu]nknown option" # HP
FAIL_REGEX "[Ww]arning: [Oo]ption" # SunPro
FAIL_REGEX "command option .* is not recognized" # XL
FAIL_REGEX "warning #10156: ignoring option" # INTEL compilers
)
check_c_source_compiles("${_SRC_STRING}" NOT_NEED_LBER_H)
check_c_source_compiles("
# include <sndfile.h>
int main() {return SF_FORMAT_VORBIS;}
"
SNDFILE_HAS_VORBIS
)
check_c_source_compiles( "#include <hwloc.h>
int main(void) { hwloc_obj_t o; o->type = HWLOC_OBJ_PU; return 0;}" HAVE_HWLOC_OBJ_PU)
check_c_source_compiles("${AVX2_C_TEST_SOURCE}" HAVE_AVX2)
check_c_source_compiles("${C99_C_TEST_SOURCE}" C99_FLAG_DETECTED)
check_c_source_compiles(
"#include <sys/types.h>
#include <sys/acl.h>
int main(void) { return ACL_TYPE_DEFAULT_DIR; }" HAVE_ACL_TYPE_DEFAULT_DIR
)
CHECK_C_SOURCE_COMPILES("
#define GCC_VERSION (__GNUC__ * 10000 + __GNUC_MINOR__ * 100 + __GNUC_PATCHLEVEL__)
#if GCC_VERSION < 40600
#error
#endif
int main() { return 0; }" GCC_IS_4_6)
check_c_source_compiles("#include <arm_neon.h>\nint main(){ uint8_t *dest; uint8x8_t res; vst1_u8(dest, res); }"
neon_compile_result)
check_c_source_compiles("${READLINE_TEST_SRC}" READLINE_NO_CURSES_TEST)
check_c_source_compiles("int main(int argc, char **argv) { unsigned long a = argc; return __builtin_ctzl(a); }"
HAVE_BUILTIN_CTZL)
check_C_source_compiles("${_source}" ${_var} ${_common_patterns})
check_c_source_compiles( "#include <hwloc.h>
int main(void) { hwloc_obj_t o; o->type = HWLOC_OBJ_PU; return 0;}" HAVE_HWLOC_OBJ_PU)
check_c_source_compiles("
#include <x86intrin.h>
int main() {
return __rdtsc();
}" HAVE__RDTSC_GCC)
check_c_source_compiles("
${_THREADLOCAL_KEY} int tls;
int main(void) {
return 0;
}" HAVE_THREAD_LOCAL_STORAGE)
check_c_source_compiles(
"
#if defined(__ARM_NEON__) || defined(__ARM_NEON)
int main() { return 0; }
#else
#error
#endif
"
test_arm_neon)
check_c_source_compiles("${CHECK_SINE_C_SOURCE}" CMath_LINKS_WITHOUT_M)
check_c_source_compiles("
typedef int foo_t;
static inline foo_t static_foo() {return 0;}
foo_t foo(){return 0;}
int main(int argc, char *argv[]) {return 0;}"
C_HAS_${inline_keyword})
CHECK_C_SOURCE_COMPILES("int main(void) { return 0; }" ${_RESULT}
# Some compilers do not fail with a bad flag
FAIL_REGEX "warning: command line option .* is valid for .* but not for C"
# Apple gcc
FAIL_REGEX "unrecognized .*option" # GNU
FAIL_REGEX "unknown .*option" # Clang
FAIL_REGEX "ignoring unknown option" # MSVC
FAIL_REGEX "warning D9002" # MSVC, any lang
FAIL_REGEX "[Uu]nknown option" # HP
FAIL_REGEX "[Ww]arning: [Oo]ption" # SunPro
FAIL_REGEX "command option .* is not recognized" # XL
FAIL_REGEX "warning #10156: ignoring option" # INTEL compilers
)
check_c_source_compiles ( "${declspec_thread_src}" HAVE_KEYWORD__DECLSPEC_THREAD )
CHECK_C_SOURCE_COMPILES("
static const char *__crashreporter_info__ = 0;
asm(\".desc ___crashreporter_info__, 0x10\");
int main() { return 0; }"
HAVE_CRASHREPORTER_INFO)
check_c_source_compiles("
__attribute__((__symver__ (\"func@v1\"))) void func_v1() {};
__attribute__((__symver__ (\"func@v2\"))) void func_v2() {};
int main() {}"
HAVE_ATTR_SYMVER)
check_c_source_compiles("${JPEG_TEST_SOURCE}" FOUND_LIBJPEG_TURBO)
check_c_source_compiles("${CHECK_PROGRAM}" TS_HAS_128BIT_CAS)
check_c_source_compiles("int main(int argc, char **argv) { return 0; }"
HAVE_GCC_NO_CYGWIN)
CHECK_C_SOURCE_COMPILES("${TEST_SOURCE}" ${_RESULT}
# Some compilers do not fail with a bad flag
FAIL_REGEX "error: bad value (.*) for .* switch" # GNU
FAIL_REGEX "argument unused during compilation" # clang
FAIL_REGEX "is valid for .* but not for C" # GNU
FAIL_REGEX "unrecognized .*option" # GNU
FAIL_REGEX "ignored for target" # GNU
FAIL_REGEX "ignoring unknown option" # MSVC
FAIL_REGEX "warning D9002" # MSVC
FAIL_REGEX "[Uu]nknown option" # HP
FAIL_REGEX "[Ww]arning: [Oo]ption" # SunPro
FAIL_REGEX "command option .* is not recognized" # XL
FAIL_REGEX "WARNING: unknown flag:" # Open64
FAIL_REGEX "command line error" # ICC
FAIL_REGEX "command line warning" # ICC
FAIL_REGEX "#10236:" # ICC: File not found
FAIL_REGEX " #10159: " # ICC
FAIL_REGEX " #10353: " # ICC: option '-mfma' ignored, suggest using '-march=core-avx2'
)
CHECK_C_SOURCE_COMPILES("// \\\\\\n//\\nint main() {return 0;}"
C_WCOMMENT_ALLOWS_LINE_WRAP)
check_c_source_compiles("${_ATTRIBUTE} int somefunc() { return 0; }
int main() { return somefunc();}" ${_RESULT}
)
CHECK_C_SOURCE_COMPILES("// \\\\\\n//\\nint main() {return 0;}"
C_WCOMMENT_ALLOWS_LINE_WRAP)
CHECK_C_SOURCE_COMPILES("
#include <pthread.h>
int main(int ac, char **av)
{
const char *thread_name= 0;
int ret = pthread_setname_np(pthread_self(), thread_name);
return ret;
}"
HAVE_PTHREAD_SETNAME_NP)
check_c_source_compiles( "#include <hwloc.h>
int main(void) { hwloc_obj_t o; o->type = HWLOC_OBJ_PU; return 0;}" HAVE_HWLOC_OBJ_PU)
check_c_source_compiles("inline void func(); void func() { } int main() { func(); return 0; }" HAVE_INLINE)
CHECK_C_SOURCE_COMPILES("int main(void) { return 0; }" ${RESULT}
FAIL_REGEX "unknown argument ignored"
FAIL_REGEX "argument unused during compilation"
FAIL_REGEX "unsupported .*option"
FAIL_REGEX "unknown .*option"
FAIL_REGEX "unrecognized .*option"
FAIL_REGEX "ignoring unknown option"
FAIL_REGEX "[Ww]arning: [Oo]ption"
FAIL_REGEX "error: visibility"
FAIL_REGEX "warning: visibility"
)
CHECK_C_SOURCE_COMPILES("
void test(const char *format, ...) __attribute__((format(printf, 1, 2)));
int main() {
return 0;
}" HAVE_ATTRIBUTE_FORMAT)
check_c_source_compiles("
#define _GNU_SOURCE
#include <sys/mman.h>
int main(int argc, char** argv) {
memfd_create(\"test\", 0);
}
"
HAVE_MEMFD_CREATE
)
check_c_source_compiles("
#include <dxsdkver.h>
#if _DXSDK_BUILD_MAJOR >= ${DXSDK_DEPRECATION_BUILD}
#error
#else
int main(int argc, char * argv[]) {
return 0;
}
#endif
"
DIRECTX_SDK_SUPPORTS_COMPILER)
check_c_source_compiles("#include <stdio.h>
int main (void) { printf(\"icc fvisibility bug test\"); return 0; }" _no_bug)
check_c_source_compiles("
#ifdef NEWFFMPEGAVCODECPATH
#include <libavcodec/avcodec.h>
#else
#include <ffmpeg/avcodec.h>
#endif
int main() { enum AVMediaType t = AVMEDIA_TYPE_UNKNOWN; return 0; }
" HAVE_FFMPEG_AVMEDIA_TYPE)
CHECK_C_SOURCE_COMPILES("
#include <iconv.h>
int main(){
iconv_t conv = 0;
const char* in = 0;
size_t ilen = 0;
char* out = 0;
size_t olen = 0;
iconv(conv, &in, &ilen, &out, &olen);
return 0;
}
" ICONV_SECOND_ARGUMENT_IS_CONST )
check_c_source_compiles("${_SRC_STRING}" NOT_NEED_LBER_H)
check_c_source_compiles("${test_source} ${DRACO_C_MAIN}" C_TEST_COMPILED)
CHECK_C_SOURCE_COMPILES(${SOURCE} ${VAR})
check_c_source_compiles(
"#include <sys/types.h>
#include <sys/socket.h>
#include <net/if.h>
#include <net/pfvar.h>
int
main(void)
{
return PF_NAT+PF_NONAT+PF_BINAT+PF_NOBINAT+PF_RDR+PF_NORDR;
}
"
HAVE_PF_NAT_THROUGH_PF_NORDR)
check_c_source_compiles("
#include <libsigrokdecode/libsigrokdecode.h>
int main(int argc, char *argv[])
{
(void)argc;
(void)argv;
return srd_session_send_eof(NULL);
}
" HAVE_SRD_SESSION_SEND_EOF)
CHECK_C_SOURCE_COMPILES("int main(void) { return 0; }" ${RESULT}
FAIL_REGEX "argument unused during compilation"
FAIL_REGEX "unsupported .*option"
FAIL_REGEX "unknown .*option"
FAIL_REGEX "unrecognized .*option"
FAIL_REGEX "ignoring unknown option"
FAIL_REGEX "[Ww]arning: [Oo]ption"
)
check_c_source_compiles("
#pragma comment(lib, \"c\")
int main() { return 0; }
" LIBUNWIND_HAS_COMMENT_LIB_PRAGMA)
check_c_source_compiles (
"#include <jack/session.h>
int main(int argc, char **argv)
{
jack_session_event_type_t x = JackSessionSave;
return 0;
}" HasJackSession
)
check_c_source_compiles ("${CPU_SOURCE}" SYSTEM_PROCESSOR_DETECTED)
check_c_source_compiles("${CHECK_CURL_HAS_H2}" CURL_HAS_H2)
check_c_source_compiles("int main() { return 0; }" COREMOTION_EXISTS)
CHECK_C_SOURCE_COMPILES("// \\\\\\n//\\nint main() {return 0;}"
C_WCOMMENT_ALLOWS_LINE_WRAP)
CHECK_C_SOURCE_COMPILES("
static const char *__crashreporter_info__ = 0;
asm(\".desc ___crashreporter_info__, 0x10\");
int main() { return 0; }"
HAVE_CRASHREPORTER_INFO)
CHECK_C_SOURCE_COMPILES("
static const char *__crashreporter_info__ = 0;
asm(\".desc ___crashreporter_info__, 0x10\");
int main() { return 0; }"
HAVE_CRASHREPORTER_INFO)
check_c_source_compiles(
"#include <libavcodec/videotoolbox.h>
int main() {
av_videotoolbox_alloc_context();
return 0;
}" HAVE_VIDEOTOOLBOX)
check_c_source_compiles("#include <pthread.h>
int main(void) {
int r = pthread_yield();
return r;
}" PTHREAD_YIELD_RETURNS_INT)
check_c_source_compiles("
void sym1(void) {}
void sym2(void) {}
int main(void) { return 0; }
" HAVE_LD_VERSION_SCRIPT)
check_c_source_compiles("int foo() __attribute__((visibility(\"protected\")));
int main() {return 0;}" HAVE_GCC_PROTECTED_VISIBILITY)
check_c_source_compiles("
#include <_mingw.h>
#if defined(__MINGW64_VERSION_MAJOR)
#error
#endif
int main(void) {
return 0;
}"
HAVE_MINGW_ORIGINAL)
check_c_source_compiles(
"#define _GNU_SOURCE 1
#include <string.h>
int main()
{
char dummy[128];
return *strerror_r(0, dummy, sizeof(dummy));
}
"
GNU_SPECIFIC_STRERROR_R
)
check_c_source_compiles("inline void func(); void func() { } int main() { func(); return 0; }" HAVE_INLINE)
check_c_source_compiles("
#include <stdlib.h> /* for NULL */
#include <unistd.h> /* for syscall */
#include <sys/syscall.h> /* for SYS_getrandom */
int main() {
syscall(SYS_getrandom, NULL, 0, 0);
return 0;
}"
HAVE_SYSCALL_GETRANDOM)
check_c_source_compiles("int main(int argc, char **argv) { return 0; }"
HAVE_GCC_NO_CYGWIN)
CHECK_C_SOURCE_COMPILES("int main(void) { return 0; }" ${RESULT}
FAIL_REGEX "unknown argument ignored"
FAIL_REGEX "argument unused during compilation"
FAIL_REGEX "unsupported .*option"
FAIL_REGEX "unknown .*option"
FAIL_REGEX "unrecognized .*option"
FAIL_REGEX "ignoring unknown option"
FAIL_REGEX "[Ww]arning: [Oo]ption"
FAIL_REGEX "error: visibility"
FAIL_REGEX "warning: visibility"
)
CHECK_C_SOURCE_COMPILES("${_test_source}" ${_RESULT})
check_c_source_compiles("#include <cdda_interface.h>
#include <cdda_paranoia.h>
int main() { paranoia_cachemodel_size(0, 0); return 0; }"
CDPARANOIA_HAS_CACHEMODEL_SIZE)
CHECK_C_SOURCE_COMPILES("${TEST_SOURCE}" ${_RESULT}
# Some compilers do not fail with a bad flag
FAIL_REGEX "error: bad value (.*) for .* switch" # GNU
FAIL_REGEX "argument unused during compilation" # clang
FAIL_REGEX "is valid for .* but not for C" # GNU
FAIL_REGEX "unrecognized .*option" # GNU
FAIL_REGEX "ignored for target" # GNU
FAIL_REGEX "ignoring unknown option" # MSVC
FAIL_REGEX "warning D9002" # MSVC
FAIL_REGEX "[Uu]nknown option" # HP
FAIL_REGEX "[Ww]arning: [Oo]ption" # SunPro
FAIL_REGEX "command option .* is not recognized" # XL
FAIL_REGEX "WARNING: unknown flag:" # Open64
FAIL_REGEX "command line error" # ICC
FAIL_REGEX "command line warning" # ICC
FAIL_REGEX "#10236:" # ICC: File not found
FAIL_REGEX " #10159: " # ICC
FAIL_REGEX " #10353: " # ICC: option '-mfma' ignored, suggest using '-march=core-avx2'
)
check_c_source_compiles("${LFS_TEST_PROGRAM}" NO_LFS_MACROS_REQUIRED)
check_c_source_compiles("${_SRC_STRING}" NOT_NEED_LBER_H)
check_c_source_compiles(${TLS_CODE} THREAD_LS_ON)
check_c_source_compiles("
#include <Windows.h>
#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP)
int main() {
return 0;
}
#else
it's not windows desktop
#endif
" AWS_HAVE_WINAPI_DESKTOP)
check_c_source_compiles("
#include <stdlib.h> /* for NULL */
#include <unistd.h> /* for syscall */
#include <sys/syscall.h> /* for SYS_getrandom */
int main() {
syscall(SYS_getrandom, NULL, 0, 0);
return 0;
}"
HAVE_SYSCALL_GETRANDOM)
check_c_source_compiles([=[
#include "dis-asm.h"
void main()
{
struct disassemble_info info;
INIT_DISASSEMBLE_INFO(info, stdout, fprintf);
}
]=]
INIT_DISASSEMBLE_INFO_THREE_ARG
)
check_c_source_compiles("
#include <x86intrin.h>
int main() {
return __rdtsc();
}" HAVE__RDTSC_GCC)
check_c_source_compiles(
"
#include <exodusII_par.h>
#if !NC_HAS_HDF5
#error Missing hdf5
#elif !NC_HAS_PNETCDF
#error Missing pnetcdf
#endif
int main()
{
return 0;
}
"
PARALLEL_EXODUS_SUPPORTED
)
check_c_source_compiles ("${source}" ${testname})
check_c_source_compiles("${_ATTRIBUTE} int somefunc() { return 0; }
int main() { return somefunc();}" ${_RESULT}
)
check_c_source_compiles("
#include <simde/simde-arch.h>
#if defined(SIMDE_ARCH_AMD64) || defined(SIMDE_ARCH_X86) || defined(SIMDE_ARCH_WASM)
# include <immintrin.h> // need this first, otherwise we get linker-errors on windows
#else
# define SIMDE_ENABLE_NATIVE_ALIASES
#endif
#include <simde/x86/avx2.h>
#include <stdint.h>
int main()
{
${code}
return 0;
}"
HAVE_INTRIN${symbol_name} )
check_c_source_compiles("int main(){return 0;}" LINKER_SUPPORT_EXCLUDE_LIBS)
check_c_source_compiles("
#include <sys/types.h>
#include <sys/wait.h>
#include <unistd.h>
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
int main() {
int status, pfd[2];
status = pipe(pfd);
status = fork();
if (status < 0) {
;
} else if (status == 0) {
char *arg0 = NULL;
status = dup2(pfd[0], STDIN_FILENO);
close(pfd[1]);
close(pfd[0]);
execlp(\"\", arg0, (char *)0);
perror(\"execl\");
exit(1);
} else {
close(pfd[0]);
}
return 0;
}" UNIX_PIPES_COMPILES)
CHECK_C_SOURCE_COMPILES("int main() {}" C_LD_LLD_RESULT)
check_c_source_compiles("int main(int argc, char **argv) { unsigned long a = argc; return __builtin_ctzl(a); }"
HAVE_BUILTIN_CTZL)
CHECK_C_SOURCE_COMPILES("
#if __x86_64 || __x86_64__ || __amd64 || __AMD64 || _M_X64
// x86-64 target system
#else
#error Not building for x86-64
#endif
int main() {}
" HAVE_X86_64)
check_c_source_compiles(
"\
#include <atomic.h> \
\
int main() \
{ \
uint32_t value; \
atomic_cas_32(&value, 0, 0); \
return 0; \
} \
"
HAVE_ATOMIC_H)
check_c_source_compiles("#include <windows.h>
#include <winhttp.h>
int main(){return 0;}"
HAVE_WINHTTP_H)
check_c_source_compiles("
#include <sys/types.h>
#include <unistd.h>
#include <fcntl.h>
#if defined(sun) || defined(__sun__) || defined(__SUNPRO_C) || defined(__SUNPRO_CC)
# if defined(__SVR4) || defined(__srv4__)
# define PLATFORM_SOLARIS
# else
# define PLATFORM_SUNOS4
# endif
#endif
#if (defined(_AIX) || defined(__xlC__)) && !defined(_AIX41)
# define PLATFORM_AIX_V3
#endif
#if defined(PLATFORM_SUNOS4) || defined(PLATFORM_AIX_V3) || defined(__BEOS__)
#error \"O_NONBLOCK does not work on this platform\"
#endif
int main()
{
int socket;
int flags = fcntl(socket, F_SETFL, flags | O_NONBLOCK);
}"
HAVE_O_NONBLOCK)
CHECK_C_SOURCE_COMPILES(
"
#include <stdio.h>
KEYWORD void a() {}
int main(int argc, char **argv) { a(); return 0; }
" HAVE_${KEYWORD})
check_c_source_compiles("
void sym1(void) {}
void sym2(void) {}
int main(void) { return 0; }
" HAVE_LD_VERSION_SCRIPT)
CHECK_C_SOURCE_COMPILES("${TEST_SOURCE}" ${_RESULT}
# Some compilers do not fail with a bad flag
FAIL_REGEX "error: bad value (.*) for .* switch" # GNU
FAIL_REGEX "argument unused during compilation" # clang
FAIL_REGEX "is valid for .* but not for C" # GNU
FAIL_REGEX "unrecognized .*option" # GNU
FAIL_REGEX "ignored for target" # GNU
FAIL_REGEX "ignoring unknown option" # MSVC
FAIL_REGEX "[Uu]nknown option" # HP
FAIL_REGEX "[Ww]arning: [Oo]ption" # SunPro
FAIL_REGEX "command option .* is not recognized" # XL
FAIL_REGEX "WARNING: unknown flag:" # Open64
FAIL_REGEX "command line error" # ICC
FAIL_REGEX "command line warning" # ICC
FAIL_REGEX "#10236:" # ICC: File not found
FAIL_REGEX " #10159: " # ICC
FAIL_REGEX " #10353: " # ICC: option '-mfma' ignored, suggest using '-march=core-avx2'
)
check_c_source_compiles("${source_code}" ${retval})