1 dnl SMB Build Environment CC Checks
2 dnl -------------------------------------------------------
3 dnl Copyright (C) Stefan (metze) Metzmacher 2004
4 dnl Released under the GNU GPL
5 dnl -------------------------------------------------------
8 # don't let the AC_PROG_CC macro auto set the CFLAGS
11 CFLAGS="${OLD_CFLAGS}"
12 if test x"$CC" = x""; then
13 AC_MSG_WARN([No c compiler was not found!])
14 AC_MSG_ERROR([Please Install gcc from http://gcc.gnu.org/])
18 # Set the debug symbol option if we have
19 # --enable-*developer or --enable-debug
20 # and the compiler supports it
22 if test x$ac_cv_prog_cc_g = xyes -a x$debug = xyes; then
26 dnl needed before AC_TRY_COMPILE
31 AC_CACHE_CHECK([that the C compiler can precompile header files],samba_cv_precompiled_headers, [
32 dnl Check whether the compiler can generate precompiled headers
34 if ${CC-cc} conftest.h 2> /dev/null && test -f conftest.h.gch; then
35 precompiled_headers=yes
37 precompiled_headers=no
39 AC_SUBST(precompiled_headers)
42 dnl Check if the C compiler understands volatile (it should, being ANSI).
43 AC_CACHE_CHECK([that the C compiler understands volatile],samba_cv_volatile, [
44 AC_TRY_COMPILE([#include <sys/types.h>],[volatile int i = 0],
45 samba_cv_volatile=yes,samba_cv_volatile=no)])
46 if test x"$samba_cv_volatile" = x"yes"; then
47 AC_DEFINE(HAVE_VOLATILE, 1, [Whether the C compiler understands volatile])
50 ############################################
51 # check if the compiler can do immediate structures
52 AC_CACHE_CHECK([for immediate structures],samba_cv_immediate_structures, [
56 typedef struct {unsigned x;} FOOBAR;
57 #define X_FOOBAR(x) ((FOOBAR) { x })
58 #define FOO_ONE X_FOOBAR(1)
66 samba_cv_immediate_structures=yes,samba_cv_immediate_structures=no)])
67 if test x"$samba_cv_immediate_structures" = x"yes"; then
68 AC_DEFINE(HAVE_IMMEDIATE_STRUCTURES,1,[Whether the compiler supports immediate structures])
70 AC_SUBST(samba_cv_immediate_structures)
72 ############################################
73 # check if the compiler handles c99 struct initialization
74 SMB_CC_SUPPORTS_C99_STRUCT_INIT(samba_cv_c99_struct_initialization=yes,
75 samba_cv_c99_struct_initialization=no)
77 if test x"$samba_cv_c99_struct_initialization" != x"yes"; then
78 # We might need to add some flags to CC to get c99 behaviour.
79 AX_CFLAGS_IRIX_OPTION(-c99, CFLAGS)
80 SMB_CC_SUPPORTS_C99_STRUCT_INIT(samba_cv_c99_struct_initialization=yes,
81 samba_cv_c99_struct_initialization=no)
84 if test x"$samba_cv_c99_struct_initialization" != x"yes"; then
85 AC_MSG_WARN([C compiler does not support c99 struct initialization!])
86 AC_MSG_ERROR([Please Install gcc from http://gcc.gnu.org/])
89 ############################################
90 # check if the compiler can handle negative enum values
91 # and don't truncate the values to INT_MAX
92 # a runtime test is needed here
93 AC_CACHE_CHECK([that the C compiler understands negative enum values],SMB_BUILD_CC_NEGATIVE_ENUM_VALUES, [
97 enum negative_values { NEGATIVE_VALUE = 0xFFFFFFFF };
99 enum negative_values v1 = NEGATIVE_VALUE;
100 unsigned v2 = NEGATIVE_VALUE;
102 if (v1 != 0xFFFFFFFF) {
103 printf("%u != 0xFFFFFFFF\n", v1);
106 if (v2 != 0xFFFFFFFF) {
107 printf("%u != 0xFFFFFFFF\n", v2);
114 SMB_BUILD_CC_NEGATIVE_ENUM_VALUES=yes,SMB_BUILD_CC_NEGATIVE_ENUM_VALUES=no)])
115 if test x"$SMB_BUILD_CC_NEGATIVE_ENUM_VALUES" != x"yes"; then
116 AC_MSG_WARN([using --unit-enums for pidl])
117 PIDL_ARGS="$PIDL_ARGS --uint-enums"
120 AC_MSG_CHECKING([for test routines])
121 AC_TRY_RUN([#include "${srcdir-.}/build/tests/trivial.c"],
123 AC_MSG_ERROR([cant find test code. Aborting config]),
124 AC_MSG_WARN([cannot run when cross-compiling]))
127 # Check if the compiler support ELF visibility for symbols
130 visibility_attribute=no
132 if test x"$GCC" = x"yes" ; then
133 AX_CFLAGS_GCC_OPTION([-fvisibility=hidden], VISIBILITY_CFLAGS)
136 if test -n "$VISIBILITY_CFLAGS"; then
137 AC_MSG_CHECKING([whether the C compiler supports the visibility attribute])
140 CFLAGS="$CFLAGS $VISIBILITY_CFLAGS"
142 void vis_foo1(void) {}
143 __attribute__((visibility("default"))) void vis_foo2(void) {}
144 #include "${srcdir-.}/build/tests/trivial.c"
147 AC_DEFINE(HAVE_VISIBILITY_ATTR,1,[Whether the C compiler supports the visibility attribute])
148 visibility_attribute=yes
154 AC_SUBST(visibility_attribute)
157 # Check if the compiler can handle the options we selected by
158 # --enable-*developer
161 if test x$developer = xyes; then
162 OLD_CFLAGS="${CFLAGS}"
164 CFLAGS="${CFLAGS} -D_SAMBA_DEVELOPER_DONNOT_USE_O2_"
165 DEVELOPER_CFLAGS="-DDEBUG_PASSWORD -DDEVELOPER"
166 if test x"$GCC" = x"yes" ; then
167 AX_CFLAGS_GCC_OPTION(-Wall, DEVELOPER_CFLAGS)
168 AX_CFLAGS_GCC_OPTION(-Wshadow, DEVELOPER_CFLAGS)
169 AX_CFLAGS_GCC_OPTION(-Werror-implicit-function-declaration, DEVELOPER_CFLAGS)
170 AX_CFLAGS_GCC_OPTION(-Wstrict-prototypes, DEVELOPER_CFLAGS)
171 AX_CFLAGS_GCC_OPTION(-Wpointer-arith, DEVELOPER_CFLAGS)
172 AX_CFLAGS_GCC_OPTION(-Wcast-qual, DEVELOPER_CFLAGS)
173 AX_CFLAGS_GCC_OPTION(-Wcast-align, DEVELOPER_CFLAGS)
174 AX_CFLAGS_GCC_OPTION(-Wwrite-strings, DEVELOPER_CFLAGS)
175 AX_CFLAGS_GCC_OPTION(-Wmissing-format-attribute, DEVELOPER_CFLAGS)
176 AX_CFLAGS_GCC_OPTION(-Wformat=2, DEVELOPER_CFLAGS)
177 AX_CFLAGS_GCC_OPTION(-Wno-format-y2k, DEVELOPER_CFLAGS)
178 AX_CFLAGS_GCC_OPTION(-Wdeclaration-after-statement, DEVELOPER_CFLAGS)
179 AX_CFLAGS_GCC_OPTION(-Wunused-macros, DEVELOPER_CFLAGS)
181 AX_CFLAGS_IRIX_OPTION(-fullwarn, DEVELOPER_CFLAGS)
184 CFLAGS="${OLD_CFLAGS}"
186 if test -n "$DEVELOPER_CFLAGS"; then
187 OLD_CFLAGS="${CFLAGS}"
188 CFLAGS="${CFLAGS} ${DEVELOPER_CFLAGS}"
189 AC_MSG_CHECKING([that the C compiler can use the DEVELOPER_CFLAGS])
190 AC_TRY_COMPILE([],[],
192 DEVELOPER_CFLAGS=""; AC_MSG_RESULT(no))
193 CFLAGS="${OLD_CFLAGS}"
196 # allow for --with-hostcc=gcc
197 AC_ARG_WITH(hostcc,[ --with-hostcc=compiler choose host compiler],
200 if test z"$cross_compiling" = "yes"; then
208 AC_PATH_PROG(GCOV,gcov)
210 AC_PATH_PROG(MAKE,make)
212 AC_CACHE_CHECK([whether we have GNU make], samba_cv_gnu_make, [
213 if $ac_cv_path_MAKE --version | head -1 | grep GNU 2>/dev/null >/dev/null
215 samba_cv_gnu_make=yes
221 GNU_MAKE=$samba_cv_gnu_make
224 if test "x$GNU_MAKE" = x"yes"; then
225 AC_CACHE_CHECK([GNU make version], samba_cv_gnu_make_version,[
226 samba_cv_gnu_make_version=`$ac_cv_path_MAKE --version | head -1 | cut -d " " -f 3 2>/dev/null`
228 GNU_MAKE_VERSION=$samba_cv_gnu_make_version
229 AC_SUBST(GNU_MAKE_VERSION)
234 AC_MSG_CHECKING([for GNU make >= 3.81])
235 if test x$GNU_MAKE = x"yes"; then
236 if $PERL -e " \$_ = '$GNU_MAKE_VERSION'; s/@<:@^\d\.@:>@.*//g; exit (\$_ < 3.81);"; then
240 AC_MSG_RESULT($new_make)
241 automatic_dependencies=no
242 AX_CFLAGS_GCC_OPTION([-M -MT conftest.d -MF conftest.o], [], [ automatic_dependencies=$new_make ], [])
243 AC_MSG_CHECKING([Whether to use automatic dependencies])
244 AC_MSG_RESULT($automatic_dependencies)
245 AC_SUBST(automatic_dependencies)