]> git.tdb.fi Git - builder.git/blobdiff - source/gnucompiler.cpp
Handle directory creation and unlinking in Task
[builder.git] / source / gnucompiler.cpp
index e2c5c0e71a494e7bb11079a5be0f76725f135b93..43e8e300ad08132bb8cf5ce72d4d254fdd463cd8 100644 (file)
@@ -37,6 +37,25 @@ Target *GnuCompiler::create_target(const list<Target *> &sources, const string &
        return obj;
 }
 
+string GnuCompiler::create_build_signature(const BuildInfo &binfo) const
+{
+       string result = FS::basename(executable->get_path());
+       if(!architecture->get_cpu().empty())
+       {
+               result += ",m";
+               result += architecture->get_cpu();
+       }
+       result += ',';
+       if(binfo.debug)
+               result += 'g';
+       if(binfo.optimize)
+       {
+               result += 'O';
+               result += (binfo.optimize>0 ? '0'+binfo.optimize : 's');
+       }
+       return result;
+}
+
 Task *GnuCompiler::run(const Target &target) const
 {
        const ObjectFile &object = dynamic_cast<const ObjectFile &>(target);
@@ -60,7 +79,6 @@ Task *GnuCompiler::run(const Target &target) const
                        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");
@@ -74,6 +92,7 @@ Task *GnuCompiler::run(const Target &target) const
                        argv.push_back("-Wfloat-equal");
                        argv.push_back("-Wconversion");
                        argv.push_back("-Wwrite-strings");
+                       argv.push_back("-Winline");
                }
                if(binfo.fatal_warnings)
                        argv.push_back("-Werror");
@@ -117,8 +136,5 @@ Task *GnuCompiler::run(const Target &target) const
        argv.push_back(relative(obj_path, work_dir).str());
        argv.push_back(relative(src_path, work_dir).str());
 
-       if(!builder.get_dry_run())
-               FS::mkpath(FS::dirname(obj_path), 0755);
-
        return new ExternalTask(argv, work_dir);
 }