#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>
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");