From f4bd64233ae875b6b3315fe4fab279335a6adf2b Mon Sep 17 00:00:00 2001 From: Cristian Adam Date: Sat, 18 Jul 2020 17:48:01 +0200 Subject: [PATCH] Build fix with MinGW GCC 9.2.0 (#12084) * Build fix with MinGW GCC 9.2.0 * Fix MinGW tripplets Fixes #12065 * clang-format * Fix unused read_symlink_implementation warning marked as error read_symlink_implementation was used only in copy_symlink_implementation when #if defined(_WIN32) && !VCPKG_USE_STD_FILESYSTEM was true. Removed the warning otherwise. Co-authored-by: JackBoosY --- scripts/ports.cmake | 3 +++ toolsrc/include/vcpkg/base/system_headers.h | 5 +++++ toolsrc/src/vcpkg/base/files.cpp | 6 ++---- toolsrc/src/vcpkg/base/system.process.cpp | 4 ++-- toolsrc/src/vcpkg/build.cpp | 8 ++++++-- 5 files changed, 18 insertions(+), 8 deletions(-) diff --git a/scripts/ports.cmake b/scripts/ports.cmake index f4ac28e6a2..5e21e3d7d2 100644 --- a/scripts/ports.cmake +++ b/scripts/ports.cmake @@ -17,6 +17,9 @@ if((NOT DEFINED VCPKG_ROOT_DIR) ]]) endif() +file(TO_CMAKE_PATH ${BUILDTREES_DIR} BUILDTREES_DIR) +file(TO_CMAKE_PATH ${PACKAGES_DIR} PACKAGES_DIR) + list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_LIST_DIR}/cmake) set(CURRENT_INSTALLED_DIR ${_VCPKG_INSTALLED_DIR}/${TARGET_TRIPLET} CACHE PATH "Location to install final packages") set(SCRIPTS ${CMAKE_CURRENT_LIST_DIR} CACHE PATH "Location to stored scripts") diff --git a/toolsrc/include/vcpkg/base/system_headers.h b/toolsrc/include/vcpkg/base/system_headers.h index 858cf58cca..6667fd3951 100644 --- a/toolsrc/include/vcpkg/base/system_headers.h +++ b/toolsrc/include/vcpkg/base/system_headers.h @@ -2,8 +2,13 @@ #if defined(_WIN32) +#ifndef NOMINMAX #define NOMINMAX +#endif + +#ifndef WIN32_LEAN_AND_MEAN #define WIN32_LEAN_AND_MEAN +#endif #pragma warning(suppress : 4768) #include diff --git a/toolsrc/src/vcpkg/base/files.cpp b/toolsrc/src/vcpkg/base/files.cpp index 704f5c24f6..902b482d2a 100644 --- a/toolsrc/src/vcpkg/base/files.cpp +++ b/toolsrc/src/vcpkg/base/files.cpp @@ -102,9 +102,9 @@ namespace vcpkg::Files return status_implementation(false, p, ec); } +#if defined(_WIN32) && !VCPKG_USE_STD_FILESYSTEM fs::path read_symlink_implementation(const fs::path& oldpath, std::error_code& ec) { -#if defined(_WIN32) && !VCPKG_USE_STD_FILESYSTEM ec.clear(); auto handle = CreateFileW(oldpath.c_str(), 0, // open just the metadata @@ -132,10 +132,8 @@ namespace vcpkg::Files } CloseHandle(handle); return target; -#else // ^^^ defined(_WIN32) && !VCPKG_USE_STD_FILESYSTEM // !defined(_WIN32) || VCPKG_USE_STD_FILESYSTEM vvv - return fs::stdfs::read_symlink(oldpath, ec); -#endif // ^^^ !defined(_WIN32) || VCPKG_USE_STD_FILESYSTEM } +#endif // ^^^ !defined(_WIN32) || VCPKG_USE_STD_FILESYSTEM void copy_symlink_implementation(const fs::path& oldpath, const fs::path& newpath, std::error_code& ec) { diff --git a/toolsrc/src/vcpkg/base/system.process.cpp b/toolsrc/src/vcpkg/base/system.process.cpp index fba866fb85..bc67c11142 100644 --- a/toolsrc/src/vcpkg/base/system.process.cpp +++ b/toolsrc/src/vcpkg/base/system.process.cpp @@ -598,7 +598,7 @@ namespace vcpkg #if defined(_WIN32) using vcpkg::g_ctrl_c_state; g_ctrl_c_state.transition_to_spawn_process(); - auto proc_info = windows_create_process(cmd_line, env, NULL); + auto proc_info = windows_create_process(cmd_line, env, 0); auto long_exit_code = [&]() -> unsigned long { if (auto p = proc_info.get()) return p->wait(); @@ -660,7 +660,7 @@ namespace vcpkg using vcpkg::g_ctrl_c_state; g_ctrl_c_state.transition_to_spawn_process(); - auto maybe_proc_info = windows_create_process_redirect(cmd_line, env, NULL); + auto maybe_proc_info = windows_create_process_redirect(cmd_line, env, 0); auto exit_code = [&]() -> unsigned long { if (auto p = maybe_proc_info.get()) return p->wait_and_stream_output(data_cb); diff --git a/toolsrc/src/vcpkg/build.cpp b/toolsrc/src/vcpkg/build.cpp index 147ad46b26..bcd0a7f89c 100644 --- a/toolsrc/src/vcpkg/build.cpp +++ b/toolsrc/src/vcpkg/build.cpp @@ -490,7 +490,7 @@ namespace vcpkg::Build std::ofstream out_file(stdoutlog.native().c_str(), std::ios::out | std::ios::binary | std::ios::trunc); Checks::check_exit(VCPKG_LINE_INFO, out_file, "Failed to open '%s' for writing", stdoutlog.u8string()); std::string compiler_hash; - const int return_code = System::cmd_execute_and_stream_lines( + System::cmd_execute_and_stream_lines( command, [&](const std::string& s) { static const StringLiteral s_marker = "#COMPILER_HASH#"; @@ -616,6 +616,10 @@ namespace vcpkg::Build { return m_paths.scripts / fs::u8path("toolchains/ios.cmake"); } + else if (cmake_system_name == "MinGW") + { + return m_paths.scripts / fs::u8path("toolchains/mingw.cmake"); + } else if (cmake_system_name.empty() || cmake_system_name == "Windows" || cmake_system_name == "WindowsStore") { return m_paths.scripts / fs::u8path("toolchains/windows.cmake"); @@ -1148,7 +1152,7 @@ namespace vcpkg::Build PreBuildInfo::PreBuildInfo(const VcpkgPaths& paths, Triplet triplet, const std::unordered_map& cmakevars) - : m_paths(paths), triplet(triplet) + : triplet(triplet), m_paths(paths) { enum class VcpkgTripletVar {