diff --git a/CMakeLists.txt b/CMakeLists.txt
index 08767bfc2f0350f0153a503d1047592d582803c5..4a4400cc4b532a08349900fb1b1e5ec5e0eab134 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -1037,23 +1037,38 @@ if(WIN32 OR CYGWIN)
   list(APPEND EXTERNAL_LIBRARIES winmm wsock32 ws2_32 psapi)
 endif(WIN32 OR CYGWIN)
 
-# disable compile optimization on some known problematic files
-check_cxx_compiler_flag("-O0" NOOPT)
-if(NOOPT)
-  file(GLOB_RECURSE NON_OPTIMIZED_SRC Numeric/robustPredicates.cpp Mesh/BDS.cpp
-       Parser/Gmsh.tab.cpp contrib/Tetgen*/*.cxx)
-  set_source_files_properties(${NON_OPTIMIZED_SRC} COMPILE_FLAGS "-O0")
-endif(NOOPT)
-
 # force full warnings to encourage everybody to write clean(er) code
 check_cxx_compiler_flag("-Wall" WALL)
 if(WALL AND NOT MSVC)
   file(GLOB_RECURSE WALL_SRC Common/*.cpp Fltk/*.cpp FunctionSpace/*.cpp
        Geo/*.cpp Graphics/*.cpp Mesh/*.cpp Numeric/*.cpp Parser/*.cpp
-       Plugin/*.cpp Post/*.cpp Qt/*.cpp Solver/*.cpp contrib/onelab/*.cpp)
-  set_source_files_properties(${WALL_SRC} COMPILE_FLAGS "-Wall")
+       Plugin/*.cpp Post/*.cpp Qt/*.cpp Solver/*.cpp)
+  set_source_files_properties(${WALL_SRC} PROPERTIES COMPILE_FLAGS "-Wall")
 endif(WALL AND NOT MSVC)
 
+# don't issue warnings for contributed libraries
+check_cxx_compiler_flag("-w" NOWARN)
+if(NOWARN)
+  file(GLOB_RECURSE NOWARN_SRC contrib/*.cpp contrib/*.cc contrib/*.cxx
+                               contrib/*.c)
+  set_source_files_properties(${NOWARN_SRC} PROPERTIES COMPILE_FLAGS "-w")
+endif(NOWARN)
+
+# disable compile optimization on some known problematic files
+check_cxx_compiler_flag("-O0" NOOPT)
+if(NOOPT)
+  file(GLOB_RECURSE NOOPT_SRC Numeric/robustPredicates.cpp Mesh/BDS.cpp
+                              Parser/Gmsh.tab.cpp contrib/Tetgen*/*.cxx)
+  foreach(FILE ${NOOPT_SRC})
+    get_source_file_property(PROP ${FILE} COMPILE_FLAGS)
+    if(PROP)
+      set_source_files_properties(${FILE} PROPERTIES COMPILE_FLAGS "${PROP} -O0")
+    else(PROP)
+      set_source_files_properties(${FILE} PROPERTIES COMPILE_FLAGS "-O0")
+    endif(PROP)
+  endforeach(FILE)
+endif(NOOPT)
+
 list(SORT CONFIG_OPTIONS)
 set(GMSH_CONFIG_OPTIONS "")
 foreach(OPT ${CONFIG_OPTIONS})