]> git.tdb.fi Git - builder.git/blobdiff - source/vcxprojectgenerator.cpp
Refactor InternalTask to take a functor
[builder.git] / source / vcxprojectgenerator.cpp
index 93c0eb49f7a6076608dd0cde22846492b94fbe36..bafa8d94f42ee629d84454171be34514e4b603e5 100644 (file)
@@ -5,6 +5,7 @@
 #include "builder.h"
 #include "csourcefile.h"
 #include "executable.h"
+#include "internaltask.h"
 #include "sourcepackage.h"
 #include "vcxprojectfile.h"
 #include "vcxprojectgenerator.h"
 using namespace std;
 using namespace Msp;
 
-VcxProjectGenerator::VcxProjectGenerator(Builder &b):
-       Tool(b, "VCXG")
-{ }
-
 Target *VcxProjectGenerator::create_target(const vector<Target *> &, const string &)
 {
        throw logic_error("Not implemented");
@@ -24,21 +21,15 @@ Target *VcxProjectGenerator::create_target(const vector<Target *> &, const strin
 Task *VcxProjectGenerator::run(const Target &target) const
 {
        const VcxProjectFile &project = dynamic_cast<const VcxProjectFile &>(target);
-       Worker *worker = new Worker(project);
-       return new InternalTask(worker);
+       return new InternalTask([&project]{ return _run(project); });
 }
 
-
-VcxProjectGenerator::Worker::Worker(const VcxProjectFile &t):
-       target(t)
-{ }
-
-void VcxProjectGenerator::Worker::main()
+bool VcxProjectGenerator::_run(const VcxProjectFile &project)
 {
-       const SourcePackage &spkg = *target.get_package();
+       const SourcePackage &spkg = *project.get_package();
        Builder &builder = spkg.get_builder();
 
-       IO::BufferedFile out(target.get_path().str(), IO::M_WRITE);
+       IO::BufferedFile out(project.get_path().str(), IO::M_WRITE);
        IO::print(out, "<Project DefaultTargets=\"Build\" ToolsVersion=\"4.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n");
 
        IO::print(out, "\t<ItemGroup Label=\"ProjectConfigurations\">\n");
@@ -57,7 +48,7 @@ void VcxProjectGenerator::Worker::main()
        IO::print(out, "\t<PropertyGroup Label=\"Globals\">\n");
        IO::print(out, "\t\t<VCProjectVersion>15.0</VCProjectVersion>\n");
        IO::print(out, "\t\t<Keyword>MakeFileProj</Keyword>\n");
-       IO::print(out, "\t\t<ProjectGuid>{%s}</ProjectGuid>\n", target.get_guid());
+       IO::print(out, "\t\t<ProjectGuid>{%s}</ProjectGuid>\n", project.get_guid());
        IO::print(out, "\t</PropertyGroup>\n");
 
        IO::print(out, "\t<Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.Default.props\" />\n");
@@ -142,5 +133,5 @@ void VcxProjectGenerator::Worker::main()
        IO::print(out, "\t<Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.targets\" />\n");
        IO::print(out, "</Project>\n");
 
-       status = Task::SUCCESS;
+       return true;
 }