1dnl Copyright (C) 2009 Sun Microsystems 2dnl This file is free software; Sun Microsystems 3dnl gives unlimited permission to copy and/or distribute it, 4dnl with or without modifications, as long as this notice is preserved. 5 6dnl AC_PANDORA_WARNINGS([less-warnings|warnings-always-on]) 7dnl less-warnings turn on a limited set of warnings 8dnl warnings-always-on always set warnings=error regardless of tarball/vc 9 10dnl @TODO: remove less-warnings option as soon as Drizzle is clean enough to 11dnl allow it 12 13AC_DEFUN([PANDORA_WARNINGS],[ 14 m4_define([PW_LESS_WARNINGS],[no]) 15 m4_define([PW_WARN_ALWAYS_ON],[no]) 16 ifdef([m4_define],,[define([m4_define], defn([define]))]) 17 ifdef([m4_undefine],,[define([m4_undefine], defn([undefine]))]) 18 m4_foreach([pw_arg],[$*],[ 19 m4_case(pw_arg, 20 [less-warnings],[ 21 m4_undefine([PW_LESS_WARNINGS]) 22 m4_define([PW_LESS_WARNINGS],[yes]) 23 ], 24 [warnings-always-on],[ 25 m4_undefine([PW_WARN_ALWAYS_ON]) 26 m4_define([PW_WARN_ALWAYS_ON],[yes]) 27 ]) 28 ]) 29 30 AC_REQUIRE([PANDORA_BUILDING_FROM_VC]) 31 m4_if(PW_WARN_ALWAYS_ON, [yes], 32 [ac_cv_warnings_as_errors=yes], 33 AS_IF([test "$ac_cv_building_from_vc" = "yes"], 34 [ac_cv_warnings_as_errors=yes], 35 [ac_cv_warnings_as_errors=no])) 36 37 AC_ARG_ENABLE([profiling], 38 [AS_HELP_STRING([--enable-profiling], 39 [Toggle profiling @<:@default=off@:>@])], 40 [ac_profiling="$enableval"], 41 [ac_profiling="no"]) 42 43 AC_ARG_ENABLE([coverage], 44 [AS_HELP_STRING([--enable-coverage], 45 [Toggle coverage @<:@default=off@:>@])], 46 [ac_coverage="$enableval"], 47 [ac_coverage="no"]) 48 49 AS_IF([test "$GCC" = "yes"],[ 50 51 AS_IF([test "$ac_profiling" = "yes"],[ 52 CC_PROFILING="-pg" 53 GCOV_LIBS="-pg -lgcov" 54 save_LIBS="${LIBS}" 55 LIBS="" 56 AC_CHECK_LIB(c_p, read) 57 LIBC_P="${LIBS}" 58 LIBS="${save_LIBS}" 59 AC_SUBST(LIBC_P) 60 ],[ 61 CC_PROFILING=" " 62 ]) 63 64 AS_IF([test "$ac_coverage" = "yes"], 65 [ 66 CC_COVERAGE="--coverage" 67 GCOV_LIBS="-lgcov" 68 ]) 69 70 71 72 AS_IF([test "$ac_cv_warnings_as_errors" = "yes"], 73 [W_FAIL="-Werror"]) 74 75 AC_CACHE_CHECK([whether it is safe to use -fdiagnostics-show-option], 76 [ac_cv_safe_to_use_fdiagnostics_show_option_], 77 [save_CFLAGS="$CFLAGS" 78 CFLAGS="-fdiagnostics-show-option ${AM_CFLAGS} ${CFLAGS}" 79 AC_COMPILE_IFELSE( 80 [AC_LANG_PROGRAM([],[])], 81 [ac_cv_safe_to_use_fdiagnostics_show_option_=yes], 82 [ac_cv_safe_to_use_fdiagnostics_show_option_=no]) 83 CFLAGS="$save_CFLAGS"]) 84 85 AS_IF([test "$ac_cv_safe_to_use_fdiagnostics_show_option_" = "yes"], 86 [ 87 F_DIAGNOSTICS_SHOW_OPTION="-fdiagnostics-show-option" 88 ]) 89 90 AC_CACHE_CHECK([whether it is safe to use -Wconversion], 91 [ac_cv_safe_to_use_wconversion_], 92 [save_CFLAGS="$CFLAGS" 93 dnl Use -Werror here instead of ${W_FAIL} so that we don't spew 94 dnl conversion warnings to all the tarball folks 95 CFLAGS="-Wconversion -Werror -pedantic ${AM_CFLAGS} ${CFLAGS}" 96 AC_COMPILE_IFELSE( 97 [AC_LANG_PROGRAM([[ 98#include <stdbool.h> 99void foo(bool a) 100{ 101 (void)a; 102} 103 ]],[[ 104foo(0); 105 ]])], 106 [ac_cv_safe_to_use_wconversion_=yes], 107 [ac_cv_safe_to_use_wconversion_=no]) 108 CFLAGS="$save_CFLAGS"]) 109 110 AS_IF([test "$ac_cv_safe_to_use_wconversion_" = "yes"], 111 [W_CONVERSION="-Wconversion" 112 AC_CACHE_CHECK([whether it is safe to use -Wconversion with htons], 113 [ac_cv_safe_to_use_Wconversion_], 114 [save_CFLAGS="$CFLAGS" 115 dnl Use -Werror here instead of ${W_FAIL} so that we don't spew 116 dnl conversion warnings to all the tarball folks 117 CFLAGS="-Wconversion -Werror -pedantic ${AM_CFLAGS} ${CFLAGS}" 118 AC_COMPILE_IFELSE( 119 [AC_LANG_PROGRAM( 120 [[ 121#include <netinet/in.h> 122 ]],[[ 123uint16_t x= htons(80); 124 ]])], 125 [ac_cv_safe_to_use_Wconversion_=yes], 126 [ac_cv_safe_to_use_Wconversion_=no]) 127 CFLAGS="$save_CFLAGS"]) 128 129 AS_IF([test "$ac_cv_safe_to_use_Wconversion_" = "no"], 130 [NO_CONVERSION="-Wno-conversion"]) 131 ]) 132 133 NO_STRICT_ALIASING="-fno-strict-aliasing -Wno-strict-aliasing" 134 NO_SHADOW="-Wno-shadow" 135 136 AS_IF([test "$INTELCC" = "yes"],[ 137 m4_if(PW_LESS_WARNINGS,[no],[ 138 BASE_WARNINGS="-w1 -Werror -Wcheck -Wformat -Wp64 -Woverloaded-virtual -Wcast-qual" 139 ],[ 140 BASE_WARNINGS="-w1 -Wcheck -Wformat -Wp64 -Woverloaded-virtual -Wcast-qual -diag-disable 981" 141 ]) 142 CC_WARNINGS="${BASE_WARNINGS}" 143 CXX_WARNINGS="${BASE_WARNINGS}" 144 ],[ 145 m4_if(PW_LESS_WARNINGS,[no],[ 146 BASE_WARNINGS_FULL="-Wformat=2 ${W_CONVERSION} -Wstrict-aliasing" 147 CC_WARNINGS_FULL="-Wswitch-default -Wswitch-enum -Wwrite-strings" 148 CXX_WARNINGS_FULL="-Weffc++ -Wold-style-cast" 149 ],[ 150 BASE_WARNINGS_FULL="-Wformat ${NO_STRICT_ALIASING}" 151 ]) 152 153 AS_IF([test "${ac_cv_assert}" = "no"], 154 [NO_UNUSED="-Wno-unused-variable -Wno-unused-parameter"]) 155 156 AC_CACHE_CHECK([whether it is safe to use -Wextra], 157 [ac_cv_safe_to_use_Wextra_], 158 [save_CFLAGS="$CFLAGS" 159 CFLAGS="${W_FAIL} -pedantic -Wextra ${AM_CFLAGS} ${CFLAGS}" 160 AC_COMPILE_IFELSE([ 161 AC_LANG_PROGRAM( 162 [[ 163#include <stdio.h> 164 ]], [[]]) 165 ], 166 [ac_cv_safe_to_use_Wextra_=yes], 167 [ac_cv_safe_to_use_Wextra_=no]) 168 CFLAGS="$save_CFLAGS"]) 169 170 BASE_WARNINGS="${W_FAIL} -pedantic -Wall -Wundef -Wshadow ${NO_UNUSED} ${F_DIAGNOSTICS_SHOW_OPTION} ${CFLAG_VISIBILITY} ${BASE_WARNINGS_FULL}" 171 AS_IF([test "$ac_cv_safe_to_use_Wextra_" = "yes"], 172 [BASE_WARNINGS="${BASE_WARNINGS} -Wextra"], 173 [BASE_WARNINGS="${BASE_WARNINGS} -W"]) 174 175 CC_WARNINGS="${BASE_WARNINGS} -Wstrict-prototypes -Wmissing-prototypes -Wredundant-decls -Wmissing-declarations -Wcast-align ${CC_WARNINGS_FULL}" 176 CXX_WARNINGS="${BASE_WARNINGS} -Woverloaded-virtual -Wnon-virtual-dtor -Wctor-dtor-privacy -Wno-long-long ${CXX_WARNINGS_FULL}" 177 178 AC_CACHE_CHECK([whether it is safe to use -Wmissing-declarations from C++], 179 [ac_cv_safe_to_use_Wmissing_declarations_], 180 [AC_LANG_PUSH(C++) 181 save_CXXFLAGS="$CXXFLAGS" 182 CXXFLAGS="-Werror -pedantic -Wmissing-declarations ${AM_CXXFLAGS}" 183 AC_COMPILE_IFELSE([ 184 AC_LANG_PROGRAM( 185 [[ 186#include <stdio.h> 187 ]], [[]]) 188 ], 189 [ac_cv_safe_to_use_Wmissing_declarations_=yes], 190 [ac_cv_safe_to_use_Wmissing_declarations_=no]) 191 CXXFLAGS="$save_CXXFLAGS" 192 AC_LANG_POP() 193 ]) 194 AS_IF([test "$ac_cv_safe_to_use_Wmissing_declarations_" = "yes"], 195 [CXX_WARNINGS="${CXX_WARNINGS} -Wmissing-declarations"]) 196 197 AC_CACHE_CHECK([whether it is safe to use -Wlogical-op], 198 [ac_cv_safe_to_use_Wlogical_op_], 199 [save_CFLAGS="$CFLAGS" 200 CFLAGS="${W_FAIL} -pedantic -Wlogical-op ${AM_CFLAGS} ${CFLAGS}" 201 AC_COMPILE_IFELSE([ 202 AC_LANG_PROGRAM( 203 [[ 204#include <stdio.h> 205 ]], [[]]) 206 ], 207 [ac_cv_safe_to_use_Wlogical_op_=yes], 208 [ac_cv_safe_to_use_Wlogical_op_=no]) 209 CFLAGS="$save_CFLAGS"]) 210 AS_IF([test "$ac_cv_safe_to_use_Wlogical_op_" = "yes"], 211 [CC_WARNINGS="${CC_WARNINGS} -Wlogical-op"]) 212 213 AC_CACHE_CHECK([whether it is safe to use -Wredundant-decls from C++], 214 [ac_cv_safe_to_use_Wredundant_decls_], 215 [AC_LANG_PUSH(C++) 216 save_CXXFLAGS="${CXXFLAGS}" 217 CXXFLAGS="${W_FAIL} -pedantic -Wredundant-decls ${AM_CXXFLAGS}" 218 AC_COMPILE_IFELSE( 219 [AC_LANG_PROGRAM([ 220template <typename E> struct C { void foo(); }; 221template <typename E> void C<E>::foo() { } 222template <> void C<int>::foo(); 223 AC_INCLUDES_DEFAULT])], 224 [ac_cv_safe_to_use_Wredundant_decls_=yes], 225 [ac_cv_safe_to_use_Wredundant_decls_=no]) 226 CXXFLAGS="${save_CXXFLAGS}" 227 AC_LANG_POP()]) 228 AS_IF([test "$ac_cv_safe_to_use_Wredundant_decls_" = "yes"], 229 [CXX_WARNINGS="${CXX_WARNINGS} -Wredundant-decls"], 230 [CXX_WARNINGS="${CXX_WARNINGS} -Wno-redundant-decls"]) 231 232 AC_CACHE_CHECK([whether it is safe to use -Wattributes from C++], 233 [ac_cv_safe_to_use_Wattributes_], 234 [AC_LANG_PUSH(C++) 235 save_CXXFLAGS="${CXXFLAGS}" 236 CXXFLAGS="${W_FAIL} -pedantic -Wattributes -fvisibility=hidden ${AM_CXXFLAGS}" 237 AC_COMPILE_IFELSE( 238 [AC_LANG_PROGRAM([ 239#include <google/protobuf/message.h> 240#include <google/protobuf/descriptor.h> 241 242 243const ::google::protobuf::EnumDescriptor* Table_TableOptions_RowType_descriptor(); 244enum Table_TableOptions_RowType { 245 Table_TableOptions_RowType_ROW_TYPE_DEFAULT = 0, 246 Table_TableOptions_RowType_ROW_TYPE_FIXED = 1, 247 Table_TableOptions_RowType_ROW_TYPE_DYNAMIC = 2, 248 Table_TableOptions_RowType_ROW_TYPE_COMPRESSED = 3, 249 Table_TableOptions_RowType_ROW_TYPE_REDUNDANT = 4, 250 Table_TableOptions_RowType_ROW_TYPE_COMPACT = 5, 251 Table_TableOptions_RowType_ROW_TYPE_PAGE = 6 252}; 253 254namespace google { 255namespace protobuf { 256template <> 257inline const EnumDescriptor* GetEnumDescriptor<Table_TableOptions_RowType>() { 258 return Table_TableOptions_RowType_descriptor(); 259} 260} 261} 262 ])], 263 [ac_cv_safe_to_use_Wattributes_=yes], 264 [ac_cv_safe_to_use_Wattributes_=no]) 265 CXXFLAGS="${save_CXXFLAGS}" 266 AC_LANG_POP()]) 267 AC_CACHE_CHECK([whether it is safe to use -Wno-attributes], 268 [ac_cv_safe_to_use_Wno_attributes_], 269 [save_CFLAGS="$CFLAGS" 270 CFLAGS="${W_FAIL} -pedantic -Wno_attributes_ ${AM_CFLAGS} ${CFLAGS}" 271 AC_COMPILE_IFELSE([ 272 AC_LANG_PROGRAM( 273 [[ 274#include <stdio.h> 275 ]], [[]]) 276 ], 277 [ac_cv_safe_to_use_Wno_attributes_=yes], 278 [ac_cv_safe_to_use_Wno_attributes_=no]) 279 CFLAGS="$save_CFLAGS"]) 280 281 dnl GCC 3.4 doesn't have -Wno-attributes, so we can't turn them off 282 dnl by using that. 283 AS_IF([test "$ac_cv_safe_to_use_Wattributes_" != "yes"],[ 284 AS_IF([test "$ac_cv_safe_to_use_Wno_attributes_" = "yes"],[ 285 CC_WARNINGS="${CC_WARNINGS} -Wno-attributes" 286 NO_ATTRIBUTES="-Wno-attributes"])]) 287 288 289 NO_REDUNDANT_DECLS="-Wno-redundant-decls" 290 dnl TODO: Figure out a better way to deal with this: 291 PROTOSKIP_WARNINGS="-Wno-effc++ -Wno-shadow -Wno-missing-braces ${NO_ATTRIBUTES}" 292 NO_WERROR="-Wno-error" 293 INNOBASE_SKIP_WARNINGS="-Wno-shadow -Wno-cast-align" 294 295 ]) 296 ]) 297 298 AS_IF([test "$SUNCC" = "yes"],[ 299 300 AS_IF([test "$ac_profiling" = "yes"], 301 [CC_PROFILING="-xinstrument=datarace"]) 302 303 AS_IF([test "$ac_cv_warnings_as_errors" = "yes"], 304 [W_FAIL="-errwarn=%all"]) 305 306 AC_CACHE_CHECK([whether E_PASTE_RESULT_NOT_TOKEN is usable], 307 [ac_cv_paste_result], 308 [ 309 save_CFLAGS="${CFLAGS}" 310 CFLAGS="-errwarn=%all -erroff=E_PASTE_RESULT_NOT_TOKEN ${CFLAGS}" 311 AC_COMPILE_IFELSE( 312 [AC_LANG_PROGRAM([ 313 AC_INCLUDES_DEFAULT 314 ],[ 315 int x= 0;])], 316 [ac_cv_paste_result=yes], 317 [ac_cv_paste_result=no]) 318 CFLAGS="${save_CFLAGS}" 319 ]) 320 AS_IF([test $ac_cv_paste_result = yes], 321 [W_PASTE_RESULT=",E_PASTE_RESULT_NOT_TOKEN"]) 322 323 324 m4_if(PW_LESS_WARNINGS, [no],[ 325 CC_WARNINGS_FULL="-erroff=E_INTEGER_OVERFLOW_DETECTED${W_PASTE_RESULT}" 326 CXX_WARNINGS_FULL="-erroff=inllargeuse" 327 ],[ 328 CC_WARNINGS_FULL="-erroff=E_ATTRIBUTE_NOT_VAR" 329 CXX_WARNINGS_FULL="-erroff=attrskipunsup,doubunder,reftotemp,inllargeuse,truncwarn1,signextwarn,inllargeint" 330 ]) 331 332 CC_WARNINGS="-v -errtags=yes ${W_FAIL} ${CC_WARNINGS_FULL} ${CFLAG_VISIBILITY}" 333 CXX_WARNINGS="+w +w2 -xwe -xport64 -errtags=yes ${CXX_WARNINGS_FULL} ${W_FAIL} ${CFLAG_VISIBILITY}" 334 PROTOSKIP_WARNINGS="-erroff=attrskipunsup,doubunder,reftotemp,wbadinitl,identexpected,inllargeuse,truncwarn1,signextwarn,partinit,notused,badargtype2w,wbadinit" 335 NO_UNREACHED="-erroff=E_STATEMENT_NOT_REACHED" 336 NO_WERROR="-errwarn=%none" 337 338 ]) 339 340 AC_SUBST(NO_CONVERSION) 341 AC_SUBST(NO_REDUNDANT_DECLS) 342 AC_SUBST(NO_UNREACHED) 343 AC_SUBST(NO_SHADOW) 344 AC_SUBST(NO_STRICT_ALIASING) 345 AC_SUBST(PROTOSKIP_WARNINGS) 346 AC_SUBST(INNOBASE_SKIP_WARNINGS) 347 AC_SUBST(NO_WERROR) 348 AC_SUBST([GCOV_LIBS]) 349 350]) 351