s4:samldb LDB module - make the "userAccountControl" and "groupType" modify handlers...
[ira/wip.git] / source4 / build / m4 / check_cc.m4
index 251d0a5491f35a28c4c46b1ac3f48fafb49d9543..8149a8ff55ee0e9729a2e349776808bb65916cfd 100644 (file)
@@ -5,101 +5,176 @@ dnl  Released under the GNU GPL
 dnl -------------------------------------------------------
 dnl
 
-AC_PROG_CC
-if test x"$CC" = x""; then
-       AC_MSG_WARN([No c compiler was not found!])
-       AC_MSG_ERROR([Please Install gcc from http://gcc.gnu.org/])
-fi
-
-AC_C_INLINE
-
-dnl needed before AC_TRY_COMPILE
-AC_ISC_POSIX
+AC_LIBREPLACE_CC_CHECKS
 
-dnl Check if C compiler understands -c and -o at the same time
-AC_PROG_CC_C_O
-if eval "test \"`echo '$ac_cv_prog_cc_'${ac_cc}_c_o`\" = no"; then
-       BROKEN_CC=
-else
-       BROKEN_CC=#
-fi
-AC_SUBST(BROKEN_CC)
-
-AC_CACHE_CHECK([that the C compiler can precompile header files],samba_cv_precompiled_headers, [
-       dnl Check whether the compiler can generate precompiled headers
-       touch conftest.h
-       if ${CC-cc} conftest.h 2> /dev/null && test -f conftest.h.gch; then
-               samba_cv_precompiled_headers=yes
-       else
-               samba_cv_precompiled_headers=no
-       fi])
-PCH_AVAILABLE="#"
-if test x"$samba_cv_precompiled_headers" = x"yes"; then
-       PCH_AVAILABLE=""
+#
+# Set the debug symbol option if we have
+# --enable-*developer or --enable-debug
+# and the compiler supports it
+#
+if test x$ac_cv_prog_cc_g = xyes -a x$debug = xyes; then
+       CFLAGS="${CFLAGS} -g"
 fi
-AC_SUBST(PCH_AVAILABLE)
 
+dnl ###########################################################################
+dnl _AC_LANG_COMPILER_SUNCC
+dnl Check whether the compiler for the current language is really Sun compiler.
+dnl ###########################################################################
+m4_define([AC_LANG_COMPILER_SUNCC],
+[AC_CACHE_CHECK([whether we are really using the Sun _AC_LANG compiler],
+                [ac_cv_[]_AC_LANG_ABBREV[]_compiler_suncc],
+[_AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [[#ifndef __SUNPRO_C
+       choke me
+#endif
+]])],
+                   [ac_compiler_suncc=yes],
+                   [ac_compiler_suncc=no])
+ac_cv_[]_AC_LANG_ABBREV[]_compiler_suncc=$ac_compiler_suncc
+])])
 
-dnl Check if the C compiler understands volatile (it should, being ANSI).
-AC_CACHE_CHECK([that the C compiler understands volatile],samba_cv_volatile, [
-       AC_TRY_COMPILE([#include <sys/types.h>],[volatile int i = 0],
-               samba_cv_volatile=yes,samba_cv_volatile=no)])
-if test x"$samba_cv_volatile" = x"yes"; then
-       AC_DEFINE(HAVE_VOLATILE, 1, [Whether the C compiler understands volatile])
-fi
+AC_LANG_COMPILER_SUNCC
 
 ############################################
-# check if the compiler can do immediate structures
-AC_CACHE_CHECK([for immediate structures],samba_cv_immediate_structures, [
-    AC_TRY_COMPILE([
-#include <stdio.h>],
-[
-   typedef struct {unsigned x;} FOOBAR;
-   #define X_FOOBAR(x) ((FOOBAR) { x })
-   #define FOO_ONE X_FOOBAR(1)
-   FOOBAR f = FOO_ONE;   
-   static struct {
-       FOOBAR y; 
-       } f2[] = {
-               {FOO_ONE}
-       };   
-],
-       samba_cv_immediate_structures=yes,samba_cv_immediate_structures=no)])
-if test x"$samba_cv_immediate_structures" = x"yes"; then
-   AC_DEFINE(HAVE_IMMEDIATE_STRUCTURES,1,[Whether the compiler supports immediate structures])
+# check if the compiler handles c99 struct initialization
+LIBREPLACE_C99_STRUCT_INIT(samba_cv_c99_struct_initialization=yes,
+                   samba_cv_c99_struct_initialization=no)
+
+if test x"$samba_cv_c99_struct_initialization" != x"yes"; then
+       AC_MSG_WARN([C compiler does not support c99 struct initialization!])
+       AC_MSG_ERROR([Please Install gcc from http://gcc.gnu.org/])
 fi
 
 ############################################
 # check if the compiler can handle negative enum values
-AC_CACHE_CHECK([that the C compiler understands negative enum values],SMB_BUILD_CC_NEGATIVE_ENUM_VALUES, [
-    AC_TRY_COMPILE([
-#include <stdio.h>],
+# and don't truncate the values to INT_MAX
+# a runtime test is needed here
+AC_CACHE_CHECK([that the C compiler understands negative enum values],samba_cv_CC_NEGATIVE_ENUM_VALUES, [
+    AC_TRY_RUN(
 [
+       #include <stdio.h>
        enum negative_values { NEGATIVE_VALUE = 0xFFFFFFFF };
+       int main(void) {
+               enum negative_values v1 = NEGATIVE_VALUE;
+               unsigned v2 = 0xFFFFFFFF;
+               if (v1 != v2) {
+                       printf("v1=0x%08x v2=0x%08x\n", v1, v2);
+                       return 1;
+               }
+               return 0;
+       }
 ],
-       SMB_BUILD_CC_NEGATIVE_ENUM_VALUES=yes,SMB_BUILD_CC_NEGATIVE_ENUM_VALUES=no)])
-if test x"$SMB_BUILD_CC_NEGATIVE_ENUM_VALUES" != x"yes"; then
-       AC_MSG_WARN([using --unit-enums for pidl])
-       PIDL_ARGS="$PIDL_ARGS --uint-enums"
+       samba_cv_CC_NEGATIVE_ENUM_VALUES=yes,
+       samba_cv_CC_NEGATIVE_ENUM_VALUES=no,
+       samba_cv_CC_NEGATIVE_ENUM_VALUES=yes)])
+if test x"$samba_cv_CC_NEGATIVE_ENUM_VALUES" != x"yes"; then
+       AC_DEFINE(USE_UINT_ENUMS, 1, [Whether the compiler has uint enum support])
 fi
 
 AC_MSG_CHECKING([for test routines])
-AC_TRY_RUN([#include "${srcdir-.}/build/tests/trivial.c"],
+AC_TRY_RUN([#include "${srcdir-.}/../tests/trivial.c"],
            AC_MSG_RESULT(yes),
            AC_MSG_ERROR([cant find test code. Aborting config]),
            AC_MSG_WARN([cannot run when cross-compiling]))
 
+#
+# Check if the compiler support ELF visibility for symbols
+#
+
+visibility_attribute=no
+VISIBILITY_CFLAGS=""
+if test x"$GCC" = x"yes" ; then
+       AX_CFLAGS_GCC_OPTION([-fvisibility=hidden], VISIBILITY_CFLAGS)
+fi
+
+if test -n "$VISIBILITY_CFLAGS"; then
+       AC_MSG_CHECKING([whether the C compiler supports the visibility attribute])
+       OLD_CFLAGS="$CFLAGS"
+
+       CFLAGS="$CFLAGS $VISIBILITY_CFLAGS"
+       AC_TRY_LINK([
+               void vis_foo1(void) {}
+               __attribute__((visibility("default"))) void vis_foo2(void) {}
+       ],[
+       ],[
+               AC_MSG_RESULT(yes)
+               AC_DEFINE(HAVE_VISIBILITY_ATTR,1,[Whether the C compiler supports the visibility attribute])
+               visibility_attribute=yes
+       ],[
+               AC_MSG_RESULT(no)
+       ])
+       CFLAGS="$OLD_CFLAGS"
+fi
+AC_SUBST(visibility_attribute)
+
 #
 # Check if the compiler can handle the options we selected by
 # --enable-*developer
 #
+DEVELOPER_CFLAGS=""
+if test x$developer = xyes; then
+       OLD_CFLAGS="${CFLAGS}"
+
+       CFLAGS="${CFLAGS} -D_SAMBA_DEVELOPER_DONNOT_USE_O2_"
+       DEVELOPER_CFLAGS="-DDEBUG_PASSWORD -DDEVELOPER"
+       if test x"$GCC" = x"yes" ; then
+           #
+           # warnings we want...
+           #
+           AX_CFLAGS_GCC_OPTION(-Wall, DEVELOPER_CFLAGS)
+           AX_CFLAGS_GCC_OPTION(-Wshadow, DEVELOPER_CFLAGS)
+           AX_CFLAGS_GCC_OPTION(-Werror-implicit-function-declaration, DEVELOPER_CFLAGS)
+           AX_CFLAGS_GCC_OPTION(-Wstrict-prototypes, DEVELOPER_CFLAGS)
+           AX_CFLAGS_GCC_OPTION(-Wpointer-arith, DEVELOPER_CFLAGS)
+           AX_CFLAGS_GCC_OPTION(-Wcast-qual, DEVELOPER_CFLAGS)
+           AX_CFLAGS_GCC_OPTION(-Wcast-align, DEVELOPER_CFLAGS)
+           AX_CFLAGS_GCC_OPTION(-Wwrite-strings, DEVELOPER_CFLAGS)
+           AX_CFLAGS_GCC_OPTION(-Wmissing-format-attribute, DEVELOPER_CFLAGS)
+           AX_CFLAGS_GCC_OPTION(-Wformat=2, DEVELOPER_CFLAGS)
+           AX_CFLAGS_GCC_OPTION(-Wdeclaration-after-statement, DEVELOPER_CFLAGS)
+           AX_CFLAGS_GCC_OPTION(-Wunused-macros, DEVELOPER_CFLAGS)
+#          AX_CFLAGS_GCC_OPTION(-Wextra, DEVELOPER_CFLAGS)
+#          AX_CFLAGS_GCC_OPTION(-Wc++-compat, DEVELOPER_CFLAGS)
+#          AX_CFLAGS_GCC_OPTION(-Wmissing-prototypes, DEVELOPER_CFLAGS)
+#          AX_CFLAGS_GCC_OPTION(-Wmissing-declarations, DEVELOPER_CFLAGS)
+#          AX_CFLAGS_GCC_OPTION(-Wmissing-field-initializers, DEVELOPER_CFLAGS)
+           #
+           # warnings we don't want...
+           #
+           AX_CFLAGS_GCC_OPTION(-Wno-format-y2k, DEVELOPER_CFLAGS)
+           AX_CFLAGS_GCC_OPTION(-Wno-unused-parameter, DEVELOPER_CFLAGS)
+           #
+           # warnings we don't want just for some files e.g. swig bindings
+           #
+           AX_CFLAGS_GCC_OPTION(-Wno-cast-qual, CFLAG_NO_CAST_QUAL)
+           AC_SUBST(CFLAG_NO_CAST_QUAL)
+           AX_CFLAGS_GCC_OPTION(-Wno-unused-macros, CFLAG_NO_UNUSED_MACROS)
+           AC_SUBST(CFLAG_NO_UNUSED_MACROS)
+       elif test x"$ac_cv_c_compiler_suncc" != x"yes"; then
+           AX_CFLAGS_IRIX_OPTION(-fullwarn, DEVELOPER_CFLAGS)
+       fi
+
+       CFLAGS="${OLD_CFLAGS}"
+fi
 if test -n "$DEVELOPER_CFLAGS"; then
        OLD_CFLAGS="${CFLAGS}"
        CFLAGS="${CFLAGS} ${DEVELOPER_CFLAGS}"
        AC_MSG_CHECKING([that the C compiler can use the DEVELOPER_CFLAGS])
-       AC_TRY_RUN([#include "${srcdir-.}/build/tests/trivial.c"],
+       AC_TRY_COMPILE([],[],
                AC_MSG_RESULT(yes),
-               DEVELOPER_CFLAGS=""; AC_MSG_RESULT(no),
-               AC_MSG_WARN([cannot run when cross-compiling]))
+               DEVELOPER_CFLAGS=""; AC_MSG_RESULT(no))
        CFLAGS="${OLD_CFLAGS}"
 fi
+
+# allow for --with-hostcc=gcc
+AC_ARG_WITH(hostcc,[  --with-hostcc=compiler  choose host compiler],
+[HOSTCC=$withval],
+[
+if test z"$cross_compiling" = "yes"; then 
+       HOSTCC=cc
+else 
+       HOSTCC=$CC
+fi
+])
+AC_SUBST(HOSTCC)
+
+AC_PATH_PROG(GCOV,gcov)