]> git.tdb.fi Git - builder.git/blobdiff - source/gnucompiler.cpp
Move to a more abstract way of defining warnings
[builder.git] / source / gnucompiler.cpp
index a6d27052e292e032123e4d5f1e7fbb94aa03c333..e2c5c0e71a494e7bb11079a5be0f76725f135b93 100644 (file)
@@ -47,8 +47,37 @@ Task *GnuCompiler::run(const Target &target) const
        argv.push_back("-c");
 
        const BuildInfo &binfo = comp.get_build_info();
-       for(BuildInfo::WordList::const_iterator i=binfo.warnings.begin(); i!=binfo.warnings.end(); ++i)
-               argv.push_back("-W"+*i);
+       if(binfo.warning_level>=1)
+       {
+               argv.push_back("-Wall");
+               if(binfo.warning_level>=2)
+               {
+                       argv.push_back("-Wextra");
+                       argv.push_back("-Wundef");
+               }
+               if(binfo.warning_level>=3)
+               {
+                       argv.push_back("-pedantic");
+                       argv.push_back("-Wno-long-long");
+                       argv.push_back("-Wshadow");
+                       argv.push_back("-Winline");
+                       if(tag=="CC")
+                       {
+                               argv.push_back("-Wc++-compat");
+                               argv.push_back("-Wstrict-prototypes");
+                       }
+               }
+               if(binfo.warning_level>=4)
+               {
+                       // Some truly paranoid warnings
+                       argv.push_back("-Wstrict-overflow=4");
+                       argv.push_back("-Wfloat-equal");
+                       argv.push_back("-Wconversion");
+                       argv.push_back("-Wwrite-strings");
+               }
+               if(binfo.fatal_warnings)
+                       argv.push_back("-Werror");
+       }
        for(BuildInfo::PathList::const_iterator i=binfo.incpath.begin(); i!=binfo.incpath.end(); ++i)
                argv.push_back("-I"+i->str());
        for(BuildInfo::DefineMap::const_iterator i=binfo.defines.begin(); i!=binfo.defines.end(); ++i)