]> git.tdb.fi Git - builder.git/commitdiff
Include package path in Visual Studio projects
authorMikko Rasa <tdb@tdb.fi>
Thu, 4 May 2023 08:35:49 +0000 (11:35 +0300)
committerMikko Rasa <tdb@tdb.fi>
Thu, 4 May 2023 08:35:49 +0000 (11:35 +0300)
plugins/msvc/vcxprojectgenerator.cpp

index 7cb9faf13a38c97fb4196d40185282e9b457d3db..a9bbd5203c995adf294b3ed1e5b88e07cec32fe9 100644 (file)
@@ -2,6 +2,7 @@
 #include <msp/builder/csourcefile.h>
 #include <msp/builder/executable.h>
 #include <msp/builder/sourcepackage.h>
+#include <msp/core/algorithm.h>
 #include <msp/core/application.h>
 #include <msp/fs/utils.h>
 #include <msp/io/print.h>
@@ -58,17 +59,31 @@ bool VcxProjectGenerator::_run(const VcxProjectFile &project)
                        if((exe = dynamic_cast<const Executable *>(t)))
                                break;
 
+       Package::Requirements reqs;
+       spkg.collect_required_packages(reqs);
+       vector<FS::Path> pkg_path;
+       for(const Package *r: reqs)
+               if(const SourcePackage *s = dynamic_cast<const SourcePackage *>(r))
+               {
+                       FS::Path path = FS::dirname(s->get_source_directory());
+                       if(!any_equals(pkg_path, path))
+                               pkg_path.push_back(path);
+               }
+
        const char *argv0 = Application::get_argv0();
        const string &toolchain = builder.get_current_arch().get_toolchain();
+       string base_cmd = format("%s --prefix=%s", argv0, builder.get_prefix());
+       for(const FS::Path &p: pkg_path)
+               base_cmd += format(" --package-dir=%s", p);
        for(const char *p: platforms)
                for(const string &b: build_types)
                {
-                       string base_cmd = format("%s --arch=%s-%s --build-type=%s --prefix=%s", argv0, p, toolchain, b, builder.get_prefix());
+                       string config_cmd = format("%s --arch=%s-%s --build-type=%s", base_cmd, p, toolchain, b);
                        IO::print(out, "\t<PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='%s|%s'\" Label=\"Configuration\">\n", b, p);
                        IO::print(out, "\t\t<ConfigurationType>MakeFile</ConfigurationType>\n");
-                       IO::print(out, "\t\t<NMakeBuildCommandLine>%s</NMakeBuildCommandLine>\n", base_cmd);
-                       IO::print(out, "\t\t<NMakeCleanCommandLine>%s -c</NMakeCleanCommandLine>\n", base_cmd);
-                       IO::print(out, "\t\t<NMakeReBuildCommandLine>%s -B</NMakeReBuildCommandLine>\n", base_cmd);
+                       IO::print(out, "\t\t<NMakeBuildCommandLine>%s</NMakeBuildCommandLine>\n", config_cmd);
+                       IO::print(out, "\t\t<NMakeCleanCommandLine>%s -c</NMakeCleanCommandLine>\n", config_cmd);
+                       IO::print(out, "\t\t<NMakeReBuildCommandLine>%s -B</NMakeReBuildCommandLine>\n", config_cmd);
                        if(exe)
                                IO::print(out, "\t\t<NMakeOutput>%s</NMakeOutput>\n", exe->get_path());
                        IO::print(out, "\t</PropertyGroup>\n");