configure: check for stdatomic.h

Message ID 1475417517-12956-1-git-send-email-anton@khirnov.net
State Committed
Commit 13f5d2bf75b95a0bfdb9940a5e359a719e242bed
Headers show

Commit Message

Anton Khirnov Oct. 2, 2016, 2:11 p.m.
Since this is a C11 feature, it requires -std=c11.

Not actually used for anything yet, that will be added in the following
commits.
---
A slightly simpler test using check_builtin
---
 configure | 29 ++++++++++++++++++++++++++++-
 1 file changed, 28 insertions(+), 1 deletion(-)

Comments

Luca Barbato Oct. 2, 2016, 2:59 p.m. | #1
On 02/10/16 16:11, Anton Khirnov wrote:
> Since this is a C11 feature, it requires -std=c11.
> 
> Not actually used for anything yet, that will be added in the following
> commits.
> ---
> A slightly simpler test using check_builtin
> ---
>  configure | 29 ++++++++++++++++++++++++++++-
>  1 file changed, 28 insertions(+), 1 deletion(-)
> 
> diff --git a/configure b/configure
> index 3c416da..b3ab226 100755
> --- a/configure
> +++ b/configure
> @@ -986,6 +986,19 @@ check_cpp_condition(){
>  EOF
>  }
>  
> +test_cflags_cpp(){
> +    log test_cflags_cpp "$@"
> +    flags=$1
> +    condition=$2
> +    shift 2
> +    set -- $($cflags_filter "$flags")
> +    check_cpp "$@" <<EOF
> +#if !($condition)
> +#error "unsatisfied condition: $condition"
> +#endif
> +EOF
> +}
> +
>  check_lib(){
>      log check_lib "$@"
>      headers="$1"
> @@ -1505,6 +1518,7 @@ HEADERS_LIST="
>      poll_h
>      sndio_h
>      soundcard_h
> +    stdatomic_h
>      sys_mman_h
>      sys_param_h
>      sys_resource_h
> @@ -3684,7 +3698,15 @@ if test "$?" != 0; then
>  fi
>  
>  add_cppflags -D_ISOC99_SOURCE
> -check_cflags -std=c99
> +
> +# some compilers silently accept -std=c11, so we also need to check that the
> +# version macro is defined properly
> +if test_cflags_cpp -std=c11 "__STDC_VERSION__ >= 201112L"; then
> +    add_cflags -std=c11
> +else
> +    check_cflags -std=c99
> +fi
> +
>  check_cc -D_FILE_OFFSET_BITS=64 <<EOF && add_cppflags -D_FILE_OFFSET_BITS=64
>  #include <stdlib.h>
>  EOF
> @@ -4520,6 +4542,11 @@ check_header VideoDecodeAcceleration/VDADecoder.h
>  check_header windows.h
>  check_header X11/extensions/XvMClib.h
>  
> +# it seems there are versions of clang in some distros that try to use the
> +# gcc headers, which explodes for stdatomic
> +# so we also check that atomics actually work here
> +check_builtin stdatomic_h stdatomic.h "atomic_int foo; atomic_store(&foo, 0)"
> +
>  check_lib "windows.h shellapi.h" CommandLineToArgvW   -lshell32
>  check_lib "windows.h wincrypt.h" CryptGenRandom       -ladvapi32
>  check_lib "windows.h psapi.h"    GetProcessMemoryInfo -lpsapi
> 

Fine for me.

Patch

diff --git a/configure b/configure
index 3c416da..b3ab226 100755
--- a/configure
+++ b/configure
@@ -986,6 +986,19 @@  check_cpp_condition(){
 EOF
 }
 
+test_cflags_cpp(){
+    log test_cflags_cpp "$@"
+    flags=$1
+    condition=$2
+    shift 2
+    set -- $($cflags_filter "$flags")
+    check_cpp "$@" <<EOF
+#if !($condition)
+#error "unsatisfied condition: $condition"
+#endif
+EOF
+}
+
 check_lib(){
     log check_lib "$@"
     headers="$1"
@@ -1505,6 +1518,7 @@  HEADERS_LIST="
     poll_h
     sndio_h
     soundcard_h
+    stdatomic_h
     sys_mman_h
     sys_param_h
     sys_resource_h
@@ -3684,7 +3698,15 @@  if test "$?" != 0; then
 fi
 
 add_cppflags -D_ISOC99_SOURCE
-check_cflags -std=c99
+
+# some compilers silently accept -std=c11, so we also need to check that the
+# version macro is defined properly
+if test_cflags_cpp -std=c11 "__STDC_VERSION__ >= 201112L"; then
+    add_cflags -std=c11
+else
+    check_cflags -std=c99
+fi
+
 check_cc -D_FILE_OFFSET_BITS=64 <<EOF && add_cppflags -D_FILE_OFFSET_BITS=64
 #include <stdlib.h>
 EOF
@@ -4520,6 +4542,11 @@  check_header VideoDecodeAcceleration/VDADecoder.h
 check_header windows.h
 check_header X11/extensions/XvMClib.h
 
+# it seems there are versions of clang in some distros that try to use the
+# gcc headers, which explodes for stdatomic
+# so we also check that atomics actually work here
+check_builtin stdatomic_h stdatomic.h "atomic_int foo; atomic_store(&foo, 0)"
+
 check_lib "windows.h shellapi.h" CommandLineToArgvW   -lshell32
 check_lib "windows.h wincrypt.h" CryptGenRandom       -ladvapi32
 check_lib "windows.h psapi.h"    GetProcessMemoryInfo -lpsapi