]> git.tdb.fi Git - builder.git/blobdiff - source/microsofttools.cpp
Add gcc's private library directory to ClangLinker's system path
[builder.git] / source / microsofttools.cpp
index 9d3f1da92ee8f47fc2b854c0c6d66da80f7a9eaf..c320ecb6ee38d35a989465f071b8e1c9edcc0c0a 100644 (file)
@@ -1,6 +1,5 @@
 #include <msp/core/algorithm.h>
 #include <msp/fs/dir.h>
-#include <msp/strings/format.h>
 #include <msp/strings/utils.h>
 #include "builder.h"
 #include "externaltask.h"
@@ -14,7 +13,8 @@
 using namespace std;
 using namespace Msp;
 
-MicrosoftTools::MicrosoftTools(Builder &builder, const Architecture &arch)
+MicrosoftTools::MicrosoftTools(Builder &builder, const Architecture &arch):
+       Toolchain("msvc", get_priority(arch))
 {
        find_vc_bin_dir(builder, arch);
        find_windows_sdk_dir(builder);
@@ -35,15 +35,15 @@ void MicrosoftTools::find_vc_bin_dir(Builder &builder, const Architecture &arch)
        argv.push_back("-property");
        argv.push_back("installationPath");
 
-       builder.get_logger().log("auxcommands", format("Running %s", join(argv.begin(), argv.end())));
+       builder.get_logger().log("auxcommands", "Running %s", join(argv.begin(), argv.end()));
 
        string output = ExternalTask::run_and_capture_output(argv, FS::Path(), true);
        FS::Path vs_path = strip(output);
 
-       builder.get_logger().log("tools", format("Visual Studio found in %s", vs_path));
+       builder.get_logger().log("tools", "Visual Studio found in %s", vs_path);
 
        FS::Path vc_aux_build_dir = vs_path/"VC"/"Auxiliary"/"Build";
-       builder.get_logger().log("files", format("Traversing %s", vc_aux_build_dir));
+       builder.get_logger().log("files", "Traversing %s", vc_aux_build_dir);
        vector<string> vc_version_files = FS::list_filtered(vc_aux_build_dir, "^Microsoft\\.VCToolsVersion\\.");
        if(vc_version_files.empty())
        {
@@ -53,12 +53,12 @@ void MicrosoftTools::find_vc_bin_dir(Builder &builder, const Architecture &arch)
 
        sort(vc_version_files);
        FS::Path vc_version_fn = vc_aux_build_dir/vc_version_files.back();
-       builder.get_logger().log("files", format("Reading %s", vc_version_fn));
+       builder.get_logger().log("files", "Reading %s", vc_version_fn);
        char buffer[256];
        unsigned len = IO::File(vc_version_fn.str()).read(buffer, sizeof(buffer));
        string vc_version = strip(string(buffer, len));
 
-       builder.get_logger().log("tools", format("Detected MSVC version %s", vc_version));
+       builder.get_logger().log("tools", "Detected MSVC version %s", vc_version);
 
        const Architecture &native_arch = builder.get_native_arch();
        string host = (native_arch.get_bits()==64 ? "Hostx64" : "Hostx86");
@@ -74,7 +74,7 @@ void MicrosoftTools::find_windows_sdk_dir(Builder &builder)
        if(win_sdk_dir.empty())
                win_sdk_dir = get_program_files_x86_dir()/"Windows Kits"/"10";
 
-       builder.get_logger().log("files", format("Traversing %s", win_sdk_dir/"include"));
+       builder.get_logger().log("files", "Traversing %s", win_sdk_dir/"include");
        vector<string> sdk_versions = FS::list_filtered(win_sdk_dir/"include", "^10\\.");
        if(sdk_versions.empty())
        {
@@ -85,5 +85,15 @@ void MicrosoftTools::find_windows_sdk_dir(Builder &builder)
        sort(sdk_versions);
        win_sdk_version = sdk_versions.back();
 
-       builder.get_logger().log("tools", format("Windows SDK version %s found in %s", win_sdk_version, win_sdk_dir));
+       builder.get_logger().log("tools", "Windows SDK version %s found in %s", win_sdk_version, win_sdk_dir);
+}
+
+int MicrosoftTools::get_priority(const Architecture &arch)
+{
+       if(arch.get_toolchain()=="msvc")
+               return 20;
+       else if(arch.get_system()=="windows")
+               return 10;
+       else
+               return 0;
 }