diff options
| author | Alexander Karatarakis <alkarata@microsoft.com> | 2017-02-14 16:23:02 -0800 |
|---|---|---|
| committer | Alexander Karatarakis <alkarata@microsoft.com> | 2017-02-14 16:23:02 -0800 |
| commit | a7c5063d4d08c44c100eb62726ef31a95c1e5121 (patch) | |
| tree | d28f395ceeea5bc16a48e4b1cb582ab852b2c948 | |
| parent | b882f365e9aebf95c07c8667e38ae2730931f74e (diff) | |
| download | vcpkg-a7c5063d4d08c44c100eb62726ef31a95c1e5121.tar.gz vcpkg-a7c5063d4d08c44c100eb62726ef31a95c1e5121.zip | |
Add functions to find the Program Files folders on the C++ side. Resolves #606
| -rw-r--r-- | toolsrc/include/vcpkg_Environment.h | 4 | ||||
| -rw-r--r-- | toolsrc/src/commands_edit.cpp | 3 | ||||
| -rw-r--r-- | toolsrc/src/commands_integrate.cpp | 8 | ||||
| -rw-r--r-- | toolsrc/src/vcpkg_Environment.cpp | 49 |
4 files changed, 52 insertions, 12 deletions
diff --git a/toolsrc/include/vcpkg_Environment.h b/toolsrc/include/vcpkg_Environment.h index e4dd47472..c27ce54c2 100644 --- a/toolsrc/include/vcpkg_Environment.h +++ b/toolsrc/include/vcpkg_Environment.h @@ -24,4 +24,8 @@ namespace vcpkg::Environment }; const vcvarsall_and_platform_toolset& get_vcvarsall_bat(const vcpkg_paths& paths); + + const fs::path& get_ProgramFiles_32_bit(); + + const fs::path& get_ProgramFiles_Platform_bitness(); } diff --git a/toolsrc/src/commands_edit.cpp b/toolsrc/src/commands_edit.cpp index 1487c759d..50308cec9 100644 --- a/toolsrc/src/commands_edit.cpp +++ b/toolsrc/src/commands_edit.cpp @@ -2,6 +2,7 @@ #include "vcpkg_Commands.h" #include "vcpkg_System.h" #include "vcpkg_Input.h" +#include "vcpkg_Environment.h" namespace vcpkg::Commands::Edit { @@ -24,7 +25,7 @@ namespace vcpkg::Commands::Edit } else { - static const std::wstring CODE_EXE_PATH = LR"(C:\Program Files (x86)\Microsoft VS Code\Code.exe)"; + static const fs::path CODE_EXE_PATH = Environment::get_ProgramFiles_32_bit() / "Microsoft VS Code/Code.exe"; if (fs::exists(CODE_EXE_PATH)) { env_EDITOR = CODE_EXE_PATH; diff --git a/toolsrc/src/commands_integrate.cpp b/toolsrc/src/commands_integrate.cpp index ed3ab2c7e..aa5edeb8a 100644 --- a/toolsrc/src/commands_integrate.cpp +++ b/toolsrc/src/commands_integrate.cpp @@ -8,10 +8,10 @@ namespace vcpkg::Commands::Integrate { static const std::array<fs::path, 2> old_system_target_files = { - "C:/Program Files (x86)/MSBuild/14.0/Microsoft.Common.Targets/ImportBefore/vcpkg.nuget.targets", - "C:/Program Files (x86)/MSBuild/14.0/Microsoft.Common.Targets/ImportBefore/vcpkg.system.targets" + Environment::get_ProgramFiles_32_bit() / "MSBuild/14.0/Microsoft.Common.Targets/ImportBefore/vcpkg.nuget.targets", + Environment::get_ProgramFiles_32_bit() / "MSBuild/14.0/Microsoft.Common.Targets/ImportBefore/vcpkg.system.targets" }; - static const fs::path system_wide_targets_file = "C:/Program Files (x86)/MSBuild/Microsoft.Cpp/v4.0/V140/ImportBefore/Default/vcpkg.system.props"; + static const fs::path system_wide_targets_file = Environment::get_ProgramFiles_32_bit() / "MSBuild/Microsoft.Cpp/v4.0/V140/ImportBefore/Default/vcpkg.system.props"; static std::string create_appdata_targets_shortcut(const std::string& target_path) noexcept { @@ -109,7 +109,7 @@ namespace vcpkg::Commands::Integrate static elevation_prompt_user_choice elevated_cmd_execute(const std::string& param) { - SHELLEXECUTEINFO shExInfo = {0}; + SHELLEXECUTEINFO shExInfo = { 0 }; shExInfo.cbSize = sizeof(shExInfo); shExInfo.fMask = SEE_MASK_NOCLOSEPROCESS; shExInfo.hwnd = nullptr; diff --git a/toolsrc/src/vcpkg_Environment.cpp b/toolsrc/src/vcpkg_Environment.cpp index 366c198c2..3528623b4 100644 --- a/toolsrc/src/vcpkg_Environment.cpp +++ b/toolsrc/src/vcpkg_Environment.cpp @@ -8,11 +8,6 @@ namespace vcpkg::Environment { - static const fs::path default_cmake_installation_dir = "C:/Program Files/CMake/bin"; - static const fs::path default_cmake_installation_dir_x86 = "C:/Program Files (x86)/CMake/bin"; - static const fs::path default_git_installation_dir = "C:/Program Files/git/cmd"; - static const fs::path default_git_installation_dir_x86 = "C:/Program Files (x86)/git/cmd"; - static void ensure_on_path(const std::array<int, 3>& version, const std::wstring& version_check_cmd, const std::wstring& install_cmd) { System::exit_code_and_output ec_data = System::cmd_execute_and_capture_output(version_check_cmd); @@ -54,12 +49,15 @@ namespace vcpkg::Environment void ensure_git_on_path(const vcpkg_paths& paths) { + static const fs::path default_git_installation_dir = Environment::get_ProgramFiles_Platform_bitness() / "git/cmd"; + static const fs::path default_git_installation_dir_32 = Environment::get_ProgramFiles_32_bit() / "git/cmd"; + const fs::path downloaded_git = paths.downloads / "PortableGit" / "cmd"; const std::wstring path_buf = Strings::wformat(L"%s;%s;%s;%s", downloaded_git.native(), *System::get_environmental_variable(L"PATH"), default_git_installation_dir.native(), - default_git_installation_dir_x86.native()); + default_git_installation_dir_32.native()); System::set_environmental_variable(L"PATH", path_buf.c_str()); static constexpr std::array<int, 3> git_version = { 2,0,0 }; @@ -70,12 +68,15 @@ namespace vcpkg::Environment void ensure_cmake_on_path(const vcpkg_paths& paths) { + static const fs::path default_cmake_installation_dir = Environment::get_ProgramFiles_Platform_bitness() / "CMake/bin"; + static const fs::path default_cmake_installation_dir_32 = Environment::get_ProgramFiles_32_bit() / "CMake/bin"; + const fs::path downloaded_cmake = paths.downloads / "cmake-3.7.2-win32-x86" / "bin"; const std::wstring path_buf = Strings::wformat(L"%s;%s;%s;%s", downloaded_cmake.native(), *System::get_environmental_variable(L"PATH"), default_cmake_installation_dir.native(), - default_cmake_installation_dir_x86.native()); + default_cmake_installation_dir_32.native()); System::set_environmental_variable(L"PATH", path_buf.c_str()); static constexpr std::array<int, 3> cmake_version = { 3,7,2 }; @@ -226,4 +227,38 @@ namespace vcpkg::Environment static const vcvarsall_and_platform_toolset vcvarsall_bat = find_vcvarsall_bat(paths); return vcvarsall_bat; } + + static fs::path find_ProgramFiles_32_bit() + { + const optional<std::wstring> program_files_X86 = System::get_environmental_variable(L"ProgramFiles(x86)"); + if (program_files_X86) + { + return *program_files_X86; + } + + return *System::get_environmental_variable(L"PROGRAMFILES"); + } + + const fs::path& get_ProgramFiles_32_bit() + { + static const fs::path p = find_ProgramFiles_32_bit(); + return p; + } + + static fs::path find_ProgramFiles_Platform_bitness() + { + const optional<std::wstring> program_files_W6432 = System::get_environmental_variable(L"ProgramW6432"); + if (program_files_W6432) + { + return *program_files_W6432; + } + + return *System::get_environmental_variable(L"PROGRAMFILES"); + } + + const fs::path& get_ProgramFiles_Platform_bitness() + { + static const fs::path p = find_ProgramFiles_Platform_bitness(); + return p; + } } |
