@@ -25,52 +25,44 @@ dnl $HEADER$
2525dnl
2626
2727AC_DEFUN([PMIX_CC_HELPER],[
28- PMIX_VAR_SCOPE_PUSH([pmix_prog_cc_c11_helper_tmp ])
28+ PMIX_VAR_SCOPE_PUSH([pmix_cc_helper_result ])
2929 AC_MSG_CHECKING([$1 ])
3030
31- pmix_prog_cc_c11_helper_tmp= 0
31+ AC_LINK_IFELSE([AC_LANG_PROGRAM([$3 ],[$4 ])],
32+ [$2 = 1
33+ pmix_cc_helper_result= yes],
34+ [$2 = 0
35+ pmix_cc_helper_result= no])
3236
33- AC_LINK_IFELSE([AC_LANG_PROGRAM([$3 ],[$4 ])],[
34- $2 = yes
35- pmix_prog_cc_c11_helper_tmp= 1], [$2 = no])
36-
37- AC_DEFINE_UNQUOTED([$5 ], [$pmix_prog_cc_c11_helper_tmp ], [$6 ])
38-
39- AC_MSG_RESULT([$$ 2])
37+ AC_MSG_RESULT([$pmix_cc_helper_result ])
4038 PMIX_VAR_SCOPE_POP
4139])
4240
4341
4442AC_DEFUN([PMIX_PROG_CC_C11_HELPER],[
45- PMIX_VAR_SCOPE_PUSH([pmix_prog_cc_c11_helper_CFLAGS_save pmix_prog_cc_c11_helper__Thread_local_available pmix_prog_cc_c11_helper_atomic_var_available pmix_prog_cc_c11_helper__Atomic_available pmix_prog_cc_c11_helper__static_assert_available pmix_prog_cc_c11_helper__Generic_available ])
43+ PMIX_VAR_SCOPE_PUSH([pmix_prog_cc_c11_helper_CFLAGS_save])
4644
4745 pmix_prog_cc_c11_helper_CFLAGS_save= $CFLAGS
4846 CFLAGS= " $CFLAGS $1 "
4947
5048 PMIX_CC_HELPER([if $CC $1 supports C11 _Thread_local], [pmix_prog_cc_c11_helper__Thread_local_available],
51- [],[[static _Thread_local int foo = 1; ++foo; ]], [PMIX_C_HAVE__THREAD_LOCAL],
52- [Whether C compiler supports __Thread_local])
49+ [],[[static _Thread_local int foo = 1; ++foo; ]])
5350
5451 PMIX_CC_HELPER([if $CC $1 supports C11 atomic variables], [pmix_prog_cc_c11_helper_atomic_var_available],
55- [[# include <stdatomic.h>]], [[static atomic_long foo = 1;++foo;]], [PMIX_C_HAVE_ATOMIC_CONV_VAR],
56- [Whether C compiler support atomic convenience variables in stdatomic.h])
52+ [[# include <stdatomic.h>]], [[static atomic_long foo = 1;++foo;]])
5753
5854 PMIX_CC_HELPER([if $CC $1 supports C11 _Atomic keyword], [pmix_prog_cc_c11_helper__Atomic_available],
59- [[# include <stdatomic.h>]],[[static _Atomic long foo = 1;++foo;]], [PMIX_C_HAVE__ATOMIC],
60- [Whether C compiler supports __Atomic keyword])
55+ [[# include <stdatomic.h>]],[[static _Atomic long foo = 1;++foo;]])
6156
6257 PMIX_CC_HELPER([if $CC $1 supports C11 _Generic keyword], [pmix_prog_cc_c11_helper__Generic_available],
63- [[# define FOO(x) (_Generic (x, int: 1))]], [[static int x, y; y = FOO(x);]], [PMIX_C_HAVE__GENERIC],
64- [Whether C compiler supports __Generic keyword])
58+ [[# define FOO(x) (_Generic (x, int: 1))]], [[static int x, y; y = FOO(x);]])
6559
6660 PMIX_CC_HELPER([if $CC $1 supports C11 _Static_assert], [pmix_prog_cc_c11_helper__static_assert_available],
67- [[# include <stdint.h>]],[[_Static_assert(sizeof(int64_t) == 8, "WTH");]], [PMIX_C_HAVE__STATIC_ASSERT],
68- [Whether C compiler support _Static_assert keyword])
61+ [[# include <stdint.h>]],[[_Static_assert(sizeof(int64_t) == 8, "WTH");]])
6962
70- dnl At this time Open MPI only needs thread local and the atomic convenience types for C11 support. These
71- dnl will likely be required in the future.
72- AS_IF([test " x$pmix_prog_cc_c11_helper__Thread_local_available " = " xyes" && test " x$pmix_prog_cc_c11_helper_atomic_var_available " = " xyes" ],
73- [$2 ], [$3 ])
63+ AS_IF([test $pmix_prog_cc_c11_helper__Thread_local_available -eq 1 && test $pmix_prog_cc_c11_helper_atomic_var_available -eq 1],
64+ [$2 ],
65+ [$3 ])
7466
7567 CFLAGS= $pmix_prog_cc_c11_helper_CFLAGS_save
7668
@@ -136,6 +128,8 @@ AC_DEFUN([PMIX_SETUP_CC],[
136128 AC_REQUIRE([_PMIX_PROG_CC])
137129 AC_REQUIRE([AM_PROG_CC_C_O])
138130
131+ PMIX_VAR_SCOPE_PUSH([pmix_prog_cc_c11_helper__Thread_local_available pmix_prog_cc_c11_helper_atomic_var_available pmix_prog_cc_c11_helper__Atomic_available pmix_prog_cc_c11_helper__static_assert_available pmix_prog_cc_c11_helper__Generic_available pmix_prog_cc__thread_available])
132+
139133 PMIX_PROG_CC_C11
140134
141135 if test $pmix_cv_c11_supported = no ; then
@@ -157,11 +151,32 @@ AC_DEFUN([PMIX_SETUP_CC],[
157151 fi
158152
159153 # Check if compiler support __thread
160- PMIX_VAR_SCOPE_PUSH([pmix_prog_cc__thread_available])
161154 PMIX_CC_HELPER([if $CC $1 supports __thread], [pmix_prog_cc__thread_available],
162- [],[[static __thread int foo = 1; ++foo; ]], [PMIX_C_HAVE___THREAD],
163- [Whether C compiler supports __thread])
164- PMIX_VAR_SCOPE_POP
155+ [],[[static __thread int foo = 1; ++foo; ]])
156+
157+
158+ PMIX_CC_HELPER([if $CC $1 supports C11 _Thread_local], [pmix_prog_cc_c11_helper__Thread_local_available],
159+ [],[[static _Thread_local int foo = 1; ++foo; ]])
160+
161+ dnl At this time, PMIx only needs thread local and the atomic convenience tyes for C11 suport. These
162+ dnl will likely be required in the future.
163+ AC_DEFINE_UNQUOTED([PMIX_C_HAVE__THREAD_LOCAL], [$pmix_prog_cc_c11_helper__Thread_local_available ],
164+ [Whether C compiler supports __Thread_local])
165+
166+ AC_DEFINE_UNQUOTED([PMIX_C_HAVE_ATOMIC_CONV_VAR], [$pmix_prog_cc_c11_helper_atomic_var_available ],
167+ [Whether C compiler supports atomic convenience variables in stdatomic.h])
168+
169+ AC_DEFINE_UNQUOTED([PMIX_C_HAVE__ATOMIC], [$pmix_prog_cc_c11_helper__Atomic_available ],
170+ [Whether C compiler supports __Atomic keyword])
171+
172+ AC_DEFINE_UNQUOTED([PMIX_C_HAVE__GENERIC], [$pmix_prog_cc_c11_helper__Generic_available ],
173+ [Whether C compiler supports __Generic keyword])
174+
175+ AC_DEFINE_UNQUOTED([PMIX_C_HAVE__STATIC_ASSERT], [$pmix_prog_cc_c11_helper__static_assert_available ],
176+ [Whether C compiler supports _Static_assert keyword])
177+
178+ AC_DEFINE_UNQUOTED([PMIX_C_HAVE___THREAD], [$pmix_prog_cc__thread_available ],
179+ [Whether C compiler supports __thread])
165180
166181 PMIX_C_COMPILER_VENDOR([pmix_c_vendor])
167182
@@ -456,6 +471,7 @@ AC_DEFUN([PMIX_SETUP_CC],[
456471 PMIX_ENSURE_CONTAINS_OPTFLAGS([" $CFLAGS " ])
457472 AC_MSG_RESULT([$co_result ])
458473 CFLAGS=" $co_result "
474+ PMIX_VAR_SCOPE_POP
459475])
460476
461477
0 commit comments