Revision: 43782 http://brlcad.svn.sourceforge.net/brlcad/?rev=43782&view=rev Author: starseeker Date: 2011-03-08 18:05:07 +0000 (Tue, 08 Mar 2011)
Log Message: ----------- Rework how CFLAGS are assigned in CMake. Major changes are using build type specific flags to hold things instead of the catch-all, and changing the STRICT_FLAGS brlcad_config.h include to WARNING_FLAGS. The way CMake sets things up, turning on the warnings but not strict just means you're expecting to see all the same output without failing. Conditionalizing the bu.h undef/redefine logic on strict and not warning violated that principle, because format warnings would appear without strict being set but disappeared once it was set. Conditionalize instead on whether we have the warnings - it's possible to be strict without the extra warnings, and not strict with the warnings, so the warnings are a better variable to key off of. Need to adjust configure.ac in trunk to define WARNING_FLAGS instead of STRICT_FLAGS, or change how it behaves as well - probably simpler to rename variable and just go with existing behavior until cmake logic goes live. Modified Paths: -------------- brlcad/branches/cmake/CMakeLists.txt brlcad/branches/cmake/configure.cmake.sh brlcad/branches/cmake/include/bu.h brlcad/branches/cmake/misc/CMake/CompilerFlags.cmake brlcad/branches/cmake/src/libpc/CMakeLists.txt brlcad/branches/cmake/src/mged/points/CMakeLists.txt Modified: brlcad/branches/cmake/CMakeLists.txt =================================================================== --- brlcad/branches/cmake/CMakeLists.txt 2011-03-08 15:51:01 UTC (rev 43781) +++ brlcad/branches/cmake/CMakeLists.txt 2011-03-08 18:05:07 UTC (rev 43782) @@ -610,15 +610,21 @@ FILE(APPEND ${CONFIG_H_FILE} "#define NO_DEBUG_CHECKING 1\n") ENDIF(NOT BRLCAD-ENABLE_RUNTIME_DEBUG) +# Build with compiler warning flags +OPTION(BRLCAD-ENABLE_COMPILER_WARNINGS "Use compiler warning flags" ON) +IF(BRLCAD-ENABLE_COMPILER_WARNINGS) + FILE(APPEND ${CONFIG_H_FILE} "#define WARNING_FLAGS 1\n") +ENDIF(BRLCAD-ENABLE_COMPILER_WARNINGS) +MARK_AS_ADVANCED(BRLCAD-ENABLE_COMPILER_WARNINGS) + # Enable/disable strict compiler settings - these are limited to libraries that # specifically inform the BRLCAD_ADDLIB macro they can be built with STRICT flags. OPTION(BRLCAD-ENABLE_STRICT "Use strict compiler settings on libraries that support them" ON) OPTION(BRLCAD-ENABLE_CXX_STRICT "Use strict compiler settings on cxx files in libraries that build with strict" OFF) -if (BRLCAD-ENABLE_STRICT) -MARK_AS_ADVANCED(BRLCAD-ENABLE_STRICT) -MARK_AS_ADVANCED(BRLCAD-ENABLE_CXX_STRICT) - FILE(APPEND ${CONFIG_H_FILE} "#define STRICT_FLAGS 1\n") -endif (BRLCAD-ENABLE_STRICT) +IF(BRLCAD-ENABLE_STRICT) + MARK_AS_ADVANCED(BRLCAD-ENABLE_STRICT) + MARK_AS_ADVANCED(BRLCAD-ENABLE_CXX_STRICT) +ENDIF(BRLCAD-ENABLE_STRICT) # Build with O3 compiler optimization. This should be on for release builds IF("${CMAKE_BUILD_TYPE}" MATCHES "Release") @@ -631,10 +637,6 @@ MESSAGE("Warning - build type is Release but optimization has been disabled") ENDIF("${CMAKE_BUILD_TYPE}" MATCHES "Release" AND NOT BRLCAD-ENABLE_OPTIMIZED_BUILD) -# Build with compiler warning flags -OPTION(BRLCAD-ENABLE_COMPILER_WARNINGS "Use compiler warning flags" ON) -MARK_AS_ADVANCED(BRLCAD-ENABLE_COMPILER_WARNINGS) - # By default, we don't want any error reports at all from src/other OPTION(BRLCAD-DISABLE_SRC_OTHER_WARN "Disable warnings for src/other" ON) MARK_AS_ADVANCED(BRLCAD-DISABLE_SRC_OTHER_WARN) @@ -1023,12 +1025,8 @@ # *** Check for Compile Characteristics - Stage 7 of 9 *** # ******************************************************************* -SET(CMAKE_C_FLAGS "" CACHE STRING "compiler flags" FORCE) -SET(CMAKE_CXX_FLAGS "" CACHE STRING "cxx compiler flags" FORCE) INCLUDE(${BRLCAD_CMAKE_DIR}/CompilerFlags.cmake) - - # ******************************************************************* # *** Check for System Services - Stage 8 of 9 *** # ******************************************************************* @@ -1041,14 +1039,10 @@ # Before we finalize, set some specific global compiler flags IF(MSVC) - #SET(CMAKE_C_FLAGS ${CMAKE_C_FLAGS} -nologo -D_CRT_SECURE_NO_WARNINGS) - SET(CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS} -nologo -D_CRT_SECURE_NO_WARNINGS) SET(CMAKE_EXE_LINKER_FLAGS_INIT ${CMAKE_EXE_LINKER_FLAGS_INIT} /NOLOGO) SET(CMAKE_SHARED_LINKER_FLAGS_INIT ${CMAKE_EXE_LINKER_FLAGS_INIT} /NOLOGO) SET(CMAKE_MODULE_LINKER_FLAGS_INIT ${CMAKE_EXE_LINKER_FLAGS_INIT} /NOLOGO) ENDIF(MSVC) -SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${${CMAKE_PROJECT_NAME}_C_FLAGS}") -SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${${CMAKE_PROJECT_NAME}_CXX_FLAGS}") # We've done the toplevel configure steps, now add the subdirectories ADD_SUBDIRECTORY(src) @@ -1119,8 +1113,8 @@ SET(CMAKE_ALL_C_FLAGS "${CMAKE_C_FLAGS}") SET(CMAKE_ALL_CXX_FLAGS "${CMAKE_CXX_FLAGS}") ELSE(NOT BUILD_TYPE) - SET(CMAKE_ALL_C_FLAGS "${CMAKE_C_FLAGS} ${CMAKE_C_FLAGS_${BUILD_TYPE}}") - SET(CMAKE_ALL_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${CMAKE_CXX_FLAGS_${BUILD_TYPE}}") + SET(CMAKE_ALL_C_FLAGS "${CMAKE_C_FLAGS_${BUILD_TYPE}}") + SET(CMAKE_ALL_CXX_FLAGS "${CMAKE_CXX_FLAGS_${BUILD_TYPE}}") ENDIF(NOT BUILD_TYPE) # Compiler settings - in this case there are additional "special case" flags that get Modified: brlcad/branches/cmake/configure.cmake.sh =================================================================== --- brlcad/branches/cmake/configure.cmake.sh 2011-03-08 15:51:01 UTC (rev 43781) +++ brlcad/branches/cmake/configure.cmake.sh 2011-03-08 18:05:07 UTC (rev 43782) @@ -16,6 +16,8 @@ shift;; --disable-docs) options="$options -DBRLCAD-BUILD_EXTRADOCS=OFF"; shift;; + --disable-opengl) options="$options -DBRLCAD-ENABLE_OPENGL=OFF"; + shift;; --disable-strict) options="$options -DBRLCAD-ENABLE_STRICT=OFF"; shift;; --disable-warnings) options="$options -DBRLCAD-ENABLE_WARNINGS=OFF"; Modified: brlcad/branches/cmake/include/bu.h =================================================================== --- brlcad/branches/cmake/include/bu.h 2011-03-08 15:51:01 UTC (rev 43781) +++ brlcad/branches/cmake/include/bu.h 2011-03-08 18:05:07 UTC (rev 43782) @@ -152,12 +152,12 @@ #define __BU_ATTR_NORETURN __attribute__ ((__noreturn__)) /** - * If we're compiling strict, turn off "format string vs arguments" + * If we're compiling with extran warnings, turn off "format string vs arguments" * checks - BRL-CAD customizes the arguments to some of these * function types (adding bu_vls support) and that is a problem with * strict checking. */ -#if defined(STRICT_FLAGS) +#if defined(WARNING_FLAGS) # undef __BU_ATTR_FORMAT12 # undef __BU_ATTR_FORMAT23 # undef __BU_ATTR_NORETURN Modified: brlcad/branches/cmake/misc/CMake/CompilerFlags.cmake =================================================================== --- brlcad/branches/cmake/misc/CMake/CompilerFlags.cmake 2011-03-08 15:51:01 UTC (rev 43781) +++ brlcad/branches/cmake/misc/CMake/CompilerFlags.cmake 2011-03-08 18:05:07 UTC (rev 43782) @@ -1,6 +1,15 @@ INCLUDE(CheckCCompilerFlag) INCLUDE(CheckCXXCompilerFlag) +STRING(TOUPPER "${CMAKE_BUILD_TYPE}" BUILD_TYPE) +IF(BUILD_TYPE) + SET(C_FLAGS CMAKE_C_FLAGS_${BUILD_TYPE}) + SET(CXX_FLAGS CMAKE_CXX_FLAGS_${BUILD_TYPE}) +ELSE(BUILD_TYPE) + SET(C_FLAGS CMAKE_C_FLAGS) + SET(CXX_FLAGS CMAKE_CXX_FLAGS) +ENDIF(BUILD_TYPE) + MACRO(CHECK_C_FLAG flag) STRING(TOUPPER ${flag} UPPER_FLAG) STRING(REGEX REPLACE " " "_" UPPER_FLAG ${UPPER_FLAG}) @@ -8,7 +17,7 @@ IF(${ARGC} LESS 2) CHECK_C_COMPILER_FLAG(-${flag} ${UPPER_FLAG}_COMPILER_FLAG) IF(${UPPER_FLAG}_COMPILER_FLAG) - SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -${flag}") + SET(${C_FLAGS} "${${C_FLAGS}} -${flag}") ENDIF(${UPPER_FLAG}_COMPILER_FLAG) ELSE(${ARGC} LESS 2) IF(NOT ${ARGV1}) @@ -31,7 +40,7 @@ IF(${ARGC} LESS 2) CHECK_CXX_COMPILER_FLAG(-${flag} ${UPPER_FLAG}_COMPILER_FLAG) IF(${UPPER_FLAG}_COMPILER_FLAG) - SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -${flag}") + SET(${CXX_FLAGS} "${${CXX_FLAGS}} -${flag}") ENDIF(${UPPER_FLAG}_COMPILER_FLAG) ELSE(${ARGC} LESS 2) IF(NOT ${ARGV1}) @@ -57,8 +66,6 @@ ENDIF(${UPPER_FLAG}_COMPILER_FLAG) ENDMACRO() -SET(CMAKE_C_FLAGS "") -SET(CMAKE_CXX_FLAGS "") # try to use -pipe to speed up the compiles CHECK_C_FLAG(pipe) CHECK_CXX_FLAG(pipe) @@ -95,18 +102,8 @@ # CHECK_C_FLAG(msse2) # Check for gnu c99 support -CHECK_C_FLAG("std=gnu99" C99_FLAG) -MARK_AS_ADVANCED(C99_FLAG) +CHECK_C_FLAG("std=gnu99") -# On some platforms (at least Gentoo linux, so far) -# we'll need _XOPEN_SOURCE with std=c99. Eventually, -# we'll probably want to wrap this up with some -# feature based testing - i.e. use it if we need it. -IF(C99_FLAG) - CHECK_C_FLAG("D_XOPEN_SOURCE=600" XOPEN_DEFINE) - MARK_AS_ADVANCED(XOPEN_DEFINE) -ENDIF(C99_FLAG) - # 64bit compilation flags IF(BRLCAD-ENABLE_64BIT) IF(NOT 64BIT_FLAG AND NOT N64BIT_FLAG) @@ -117,8 +114,8 @@ CHECK_C_FLAG("mabi=64" 64BIT_FLAG) CHECK_C_FLAG(m64 64BIT_FLAG) CHECK_C_FLAG(q64 64BIT_FLAG) - SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${64BIT_FLAG}") - SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${64BIT_FLAG}") + SET(${C_FLAGS} "${${C_FLAGS}} ${64BIT_FLAG}") + SET(${CXX_FLAGS} "${${CXX_FLAGS}} ${64BIT_FLAG}") IF(NOT 64BIT_FLAG) SET(N64BIT_FLAG 1) ENDIF(NOT 64BIT_FLAG) @@ -134,33 +131,34 @@ MESSAGE("Warning - profiling requested, but don't know how to profile with this compiler - disabling.") SET(BRLCAD-ENABLE_PROFILING OFF) ELSE(NOT PROFILE_FLAG) - SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${PROFILE_FLAG}") - SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${PROFILE_FLAG}") + SET(${C_FLAGS} "${${C_FLAGS}} ${PROFILE_FLAG}") + SET(${CXX_FLAGS} "${${CXX_FLAGS}} ${PROFILE_FLAG}") ENDIF(NOT PROFILE_FLAG) ENDIF(BRLCAD-ENABLE_PROFILING) # Debugging flags -IF(APPLE) - EXEC_PROGRAM(sw_vers ARGS -productVersion OUTPUT_VARIABLE MACOSX_VERSION) - IF(${MACOSX_VERSION} VERSION_LESS "10.5") - CHECK_C_FLAG(ggdb3 DEBUG_FLAG) - ELSE(${MACOSX_VERSION} VERSION_LESS "10.5") - #CHECK_C_COMPILER_FLAG silently eats gstabs+ - SET(DEBUG_FLAG "-gstabs+") - ENDIF(${MACOSX_VERSION} VERSION_LESS "10.5") -ELSE(APPLE) - CHECK_C_FLAG(ggdb3 DEBUG_FLAG) -ENDIF(APPLE) -CHECK_C_FLAG(g DEBUG_FLAG) -CHECK_C_FLAG(debug DEBUG_FLAG) -# add -D_FORTIFY_SOURCE=2 to flags. provides compile-time -# best-practice error checking on certain libc functions -# (e.g., memcpy), and provides run-time checks on buffer -# lengths and memory regions. -CHECK_C_FLAG_GATHER("D_FORTIFY_SOURCE=2" DEBUG_FLAG) -SET(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} ${DEBUG_FLAG}") -SET(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} ${DEBUG_FLAG}") -MARK_AS_ADVANCED(DEBUG_FLAG) +IF(BUILD_TYPE MATCHES "DEBUG") + IF(APPLE) + EXEC_PROGRAM(sw_vers ARGS -productVersion OUTPUT_VARIABLE MACOSX_VERSION) + IF(${MACOSX_VERSION} VERSION_LESS "10.5") + CHECK_C_FLAG_GATHER(ggdb3 DEBUG_FLAG) + ELSE(${MACOSX_VERSION} VERSION_LESS "10.5") + #CHECK_C_COMPILER_FLAG silently eats gstabs+ + SET(DEBUG_FLAG "${DEBUG_FLAG} -gstabs+") + ENDIF(${MACOSX_VERSION} VERSION_LESS "10.5") + ELSE(APPLE) + CHECK_C_FLAG_GATHER(ggdb3 DEBUG_FLAG) + ENDIF(APPLE) + CHECK_C_FLAG(debug DEBUG_FLAG) + # add -D_FORTIFY_SOURCE=2 to flags. provides compile-time + # best-practice error checking on certain libc functions + # (e.g., memcpy), and provides run-time checks on buffer + # lengths and memory regions. + CHECK_C_FLAG_GATHER("D_FORTIFY_SOURCE=2" DEBUG_FLAG) + SET(${C_FLAGS} "${${C_FLAGS}} ${DEBUG_FLAG}") + SET(${CXX_FLAGS} "${${CXX_FLAGS}} ${DEBUG_FLAG}") + MARK_AS_ADVANCED(DEBUG_FLAG) +ENDIF(BUILD_TYPE MATCHES "DEBUG") # -fast provokes a stack corruption in the shadow computations because # of strict aliasing getting enabled. we _require_ @@ -177,8 +175,8 @@ ELSE(NOT ${CMAKE_BUILD_TYPE} MATCHES "^Debug$" AND NOT BRLCAD-ENABLE_DEBUG) CHECK_C_FLAG_GATHER(fno-omit-frame-pointer OPTIMIZE_FLAGS) ENDIF(NOT ${CMAKE_BUILD_TYPE} MATCHES "^Debug$" AND NOT BRLCAD-ENABLE_DEBUG) - SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${OPTIMIZE_FLAGS}") - SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OPTIMIZE_FLAGS}") + SET(${C_FLAGS} "${${C_FLAGS}} ${OPTIMIZE_FLAGS}") + SET(${CXX_FLAGS} "${${CXX_FLAGS}} ${OPTIMIZE_FLAGS}") ENDIF(BRLCAD-ENABLE_OPTIMIZED_BUILD) MARK_AS_ADVANCED(OPTIMIZE_FLAGS) #need to strip out non-debug-compat flags after the fact based on build type, or do something else @@ -203,15 +201,15 @@ CHECK_C_FLAG_GATHER(Winline WARNING_FLAGS) # Need this for tcl.h CHECK_C_FLAG_GATHER(Wno-long-long WARNING_FLAGS) - SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${WARNING_FLAGS}") - SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${WARNING_FLAGS}") + SET(${C_FLAGS} "${${C_FLAGS}} ${WARNING_FLAGS}") + SET(${CXX_FLAGS} "${${CXX_FLAGS}} ${WARNING_FLAGS}") ENDIF(BRLCAD-ENABLE_COMPILER_WARNINGS OR BRLCAD-ENABLE_STRICT) MARK_AS_ADVANCED(WARNING_FLAGS) IF(BRLCAD-ENABLE_STRICT) CHECK_C_FLAG_GATHER(Werror STRICT_FLAGS) - SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${STRICT_FLAGS}") - SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${STRICT_FLAGS}") + SET(${C_FLAGS} "${${C_FLAGS}} ${STRICT_FLAGS}") + SET(${CXX_FLAGS} "${${CXX_FLAGS}} ${STRICT_FLAGS}") ENDIF(BRLCAD-ENABLE_STRICT) MARK_AS_ADVANCED(STRICT_FLAGS) Modified: brlcad/branches/cmake/src/libpc/CMakeLists.txt =================================================================== --- brlcad/branches/cmake/src/libpc/CMakeLists.txt 2011-03-08 15:51:01 UTC (rev 43781) +++ brlcad/branches/cmake/src/libpc/CMakeLists.txt 2011-03-08 18:05:07 UTC (rev 43782) @@ -6,7 +6,12 @@ # No point in warnings here, we can't do anything about # it until the boost issue is handled -SET(CMAKE_CXX_FLAGS "-w") +STRING(TOUPPER "${CMAKE_BUILD_TYPE}" BUILD_TYPE) +IF(BUILD_TYPE) + SET(CMAKE_CXX_FLAGS_${BUILD_TYPE} "-w") +ELSE(BUILD_TYPE) + SET(CMAKE_CXX_FLAGS "-w") +ENDIF(BUILD_TYPE) include_directories( ${CMAKE_SOURCE_DIR}/src/other Modified: brlcad/branches/cmake/src/mged/points/CMakeLists.txt =================================================================== --- brlcad/branches/cmake/src/mged/points/CMakeLists.txt 2011-03-08 15:51:01 UTC (rev 43781) +++ brlcad/branches/cmake/src/mged/points/CMakeLists.txt 2011-03-08 18:05:07 UTC (rev 43782) @@ -3,7 +3,12 @@ # so for this one directory, go vanilla until we can get a lex/yacc # setup that reliably produces code that will work in strict # environments -SET(CMAKE_C_FLAGS "") +STRING(TOUPPER "${CMAKE_BUILD_TYPE}" BUILD_TYPE) +IF(BUILD_TYPE) + SET(CMAKE_C_FLAGS_${BUILD_TYPE} "") +ELSE(BUILD_TYPE) + SET(CMAKE_C_FLAGS "") +ENDIF(BUILD_TYPE) include_directories( ${CMAKE_CURRENT_SOURCE_DIR} This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. ------------------------------------------------------------------------------ What You Don't Know About Data Connectivity CAN Hurt You This paper provides an overview of data connectivity, details its effect on application quality, and explores various alternative solutions. http://p.sf.net/sfu/progress-d2d _______________________________________________ BRL-CAD Source Commits mailing list brlcad-commits@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/brlcad-commits