diff options
| author | Robert Schumacher <roschuma@microsoft.com> | 2017-10-16 17:17:28 -0700 |
|---|---|---|
| committer | Robert Schumacher <roschuma@microsoft.com> | 2017-10-16 17:17:28 -0700 |
| commit | ee2831c548b54cdccf064663b3fffda5d6a4c6b8 (patch) | |
| tree | 70390dc6e2e22877cb6ede677076c8005fab8a1c /toolsrc/include | |
| parent | d88f53de9c284cfc67ba21707d60a44ba41ede8a (diff) | |
| parent | 374253cb1b12a60925693130132f1a6ab6c3a83a (diff) | |
| download | vcpkg-ee2831c548b54cdccf064663b3fffda5d6a4c6b8.tar.gz vcpkg-ee2831c548b54cdccf064663b3fffda5d6a4c6b8.zip | |
Merge from master
Diffstat (limited to 'toolsrc/include')
| -rw-r--r-- | toolsrc/include/CStringView.h | 54 | ||||
| -rw-r--r-- | toolsrc/include/Span.h | 38 | ||||
| -rw-r--r-- | toolsrc/include/filesystem_fs.h | 16 | ||||
| -rw-r--r-- | toolsrc/include/pch.h | 23 | ||||
| -rw-r--r-- | toolsrc/include/vcpkg/base/checks.h (renamed from toolsrc/include/vcpkg_Checks.h) | 27 | ||||
| -rw-r--r-- | toolsrc/include/vcpkg/base/chrono.h (renamed from toolsrc/include/vcpkg_Chrono.h) | 2 | ||||
| -rw-r--r-- | toolsrc/include/vcpkg/base/cofffilereader.h (renamed from toolsrc/include/coff_file_reader.h) | 8 | ||||
| -rw-r--r-- | toolsrc/include/vcpkg/base/cstringview.h | 69 | ||||
| -rw-r--r-- | toolsrc/include/vcpkg/base/enums.h (renamed from toolsrc/include/vcpkg_Enums.h) | 4 | ||||
| -rw-r--r-- | toolsrc/include/vcpkg/base/expected.h (renamed from toolsrc/include/vcpkg_expected.h) | 9 | ||||
| -rw-r--r-- | toolsrc/include/vcpkg/base/files.h (renamed from toolsrc/include/vcpkg_Files.h) | 32 | ||||
| -rw-r--r-- | toolsrc/include/vcpkg/base/graphs.h (renamed from toolsrc/include/vcpkg_Graphs.h) | 8 | ||||
| -rw-r--r-- | toolsrc/include/vcpkg/base/lazy.h (renamed from toolsrc/include/lazy.h) | 0 | ||||
| -rw-r--r-- | toolsrc/include/vcpkg/base/lineinfo.h (renamed from toolsrc/include/LineInfo.h) | 0 | ||||
| -rw-r--r-- | toolsrc/include/vcpkg/base/machinetype.h (renamed from toolsrc/include/MachineType.h) | 1 | ||||
| -rw-r--r-- | toolsrc/include/vcpkg/base/optional.h (renamed from toolsrc/include/vcpkg_optional.h) | 7 | ||||
| -rw-r--r-- | toolsrc/include/vcpkg/base/sortedvector.h (renamed from toolsrc/include/SortedVector.h) | 0 | ||||
| -rw-r--r-- | toolsrc/include/vcpkg/base/span.h | 60 | ||||
| -rw-r--r-- | toolsrc/include/vcpkg/base/strings.h (renamed from toolsrc/include/vcpkg_Strings.h) | 53 | ||||
| -rw-r--r-- | toolsrc/include/vcpkg/base/system.h (renamed from toolsrc/include/vcpkg_System.h) | 25 | ||||
| -rw-r--r-- | toolsrc/include/vcpkg/base/util.h (renamed from toolsrc/include/vcpkg_Util.h) | 53 | ||||
| -rw-r--r-- | toolsrc/include/vcpkg/binaryparagraph.h (renamed from toolsrc/include/BinaryParagraph.h) | 5 | ||||
| -rw-r--r-- | toolsrc/include/vcpkg/build.h (renamed from toolsrc/include/vcpkg_Build.h) | 37 | ||||
| -rw-r--r-- | toolsrc/include/vcpkg/commands.h | 135 | ||||
| -rw-r--r-- | toolsrc/include/vcpkg/dependencies.h (renamed from toolsrc/include/vcpkg_Dependencies.h) | 21 | ||||
| -rw-r--r-- | toolsrc/include/vcpkg/export.h | 10 | ||||
| -rw-r--r-- | toolsrc/include/vcpkg/export.ifw.h | 26 | ||||
| -rw-r--r-- | toolsrc/include/vcpkg/globalstate.h (renamed from toolsrc/include/vcpkg_GlobalState.h) | 8 | ||||
| -rw-r--r-- | toolsrc/include/vcpkg/help.h | 19 | ||||
| -rw-r--r-- | toolsrc/include/vcpkg/input.h (renamed from toolsrc/include/vcpkg_Input.h) | 3 | ||||
| -rw-r--r-- | toolsrc/include/vcpkg/install.h | 71 | ||||
| -rw-r--r-- | toolsrc/include/vcpkg/metrics.h (renamed from toolsrc/include/metrics.h) | 7 | ||||
| -rw-r--r-- | toolsrc/include/vcpkg/packagespec.h (renamed from toolsrc/include/PackageSpec.h) | 39 | ||||
| -rw-r--r-- | toolsrc/include/vcpkg/packagespecparseresult.h (renamed from toolsrc/include/PackageSpecParseResult.h) | 5 | ||||
| -rw-r--r-- | toolsrc/include/vcpkg/paragraphparseresult.h (renamed from toolsrc/include/ParagraphParseResult.h) | 12 | ||||
| -rw-r--r-- | toolsrc/include/vcpkg/paragraphs.h (renamed from toolsrc/include/Paragraphs.h) | 14 | ||||
| -rw-r--r-- | toolsrc/include/vcpkg/parse.h (renamed from toolsrc/include/vcpkg_Parse.h) | 8 | ||||
| -rw-r--r-- | toolsrc/include/vcpkg/postbuildlint.buildtype.h (renamed from toolsrc/include/PostBuildLint_BuildType.h) | 6 | ||||
| -rw-r--r-- | toolsrc/include/vcpkg/postbuildlint.h (renamed from toolsrc/include/PostBuildLint.h) | 7 | ||||
| -rw-r--r-- | toolsrc/include/vcpkg/remove.h | 26 | ||||
| -rw-r--r-- | toolsrc/include/vcpkg/sourceparagraph.h (renamed from toolsrc/include/SourceParagraph.h) | 16 | ||||
| -rw-r--r-- | toolsrc/include/vcpkg/statusparagraph.h (renamed from toolsrc/include/StatusParagraph.h) | 3 | ||||
| -rw-r--r-- | toolsrc/include/vcpkg/statusparagraphs.h (renamed from toolsrc/include/StatusParagraphs.h) | 3 | ||||
| -rw-r--r-- | toolsrc/include/vcpkg/triplet.h (renamed from toolsrc/include/triplet.h) | 15 | ||||
| -rw-r--r-- | toolsrc/include/vcpkg/update.h | 21 | ||||
| -rw-r--r-- | toolsrc/include/vcpkg/vcpkgcmdarguments.h (renamed from toolsrc/include/VcpkgCmdArguments.h) | 24 | ||||
| -rw-r--r-- | toolsrc/include/vcpkg/vcpkglib.h (renamed from toolsrc/include/vcpkglib.h) | 21 | ||||
| -rw-r--r-- | toolsrc/include/vcpkg/vcpkgpaths.h (renamed from toolsrc/include/VcpkgPaths.h) | 30 | ||||
| -rw-r--r-- | toolsrc/include/vcpkg/versiont.h (renamed from toolsrc/include/VersionT.h) | 0 | ||||
| -rw-r--r-- | toolsrc/include/vcpkg_Commands.h | 215 | ||||
| -rw-r--r-- | toolsrc/include/vcpkg_Maps.h | 30 |
51 files changed, 773 insertions, 553 deletions
diff --git a/toolsrc/include/CStringView.h b/toolsrc/include/CStringView.h deleted file mode 100644 index 282caad3a..000000000 --- a/toolsrc/include/CStringView.h +++ /dev/null @@ -1,54 +0,0 @@ -#pragma once -#include <string> - -namespace vcpkg -{ - template<class CharType> - struct BasicCStringView - { - constexpr BasicCStringView() : cstr(nullptr) {} - constexpr BasicCStringView(const CharType* cstr) : cstr(cstr) {} - constexpr BasicCStringView(const BasicCStringView&) = default; - BasicCStringView(const std::basic_string<CharType>& str) : cstr(str.c_str()) {} - - constexpr operator const CharType*() const { return cstr; } - constexpr const CharType* c_str() const { return cstr; } - - private: - const CharType* cstr; - }; - - template<class CharType> - bool operator==(const std::basic_string<CharType>& l, const BasicCStringView<CharType>& r) - { - return l == r.c_str(); - } - - template<class CharType> - bool operator==(const BasicCStringView<CharType>& r, const std::basic_string<CharType>& l) - { - return l == r.c_str(); - } - - template<class CharType> - bool operator!=(const BasicCStringView<CharType>& r, const std::basic_string<CharType>& l) - { - return l != r.c_str(); - } - - template<class CharType> - bool operator!=(const std::basic_string<CharType>& l, const BasicCStringView<CharType>& r) - { - return l != r.c_str(); - } - - using CStringView = BasicCStringView<char>; - using CWStringView = BasicCStringView<wchar_t>; - - inline const char* to_printf_arg(const CStringView string_view) { return string_view.c_str(); } - - inline const wchar_t* to_wprintf_arg(const CWStringView string_view) { return string_view.c_str(); } - - static_assert(sizeof(CStringView) == sizeof(void*), "CStringView must be a simple wrapper around char*"); - static_assert(sizeof(CWStringView) == sizeof(void*), "CWStringView must be a simple wrapper around wchar_t*"); -} diff --git a/toolsrc/include/Span.h b/toolsrc/include/Span.h deleted file mode 100644 index b16af2cef..000000000 --- a/toolsrc/include/Span.h +++ /dev/null @@ -1,38 +0,0 @@ -#pragma once
-
-#include <array>
-#include <cstddef>
-#include <vector>
-
-template<class T>
-struct span
-{
-public:
- using element_type = T;
- using pointer = T*;
- using reference = T&;
- using iterator = T*;
-
- constexpr span() noexcept : m_ptr(nullptr), m_count(0) {}
- constexpr span(std::nullptr_t) noexcept : span() {}
- constexpr span(T* ptr, size_t count) noexcept : m_ptr(ptr), m_count(count) {}
- constexpr span(T* ptr_begin, T* ptr_end) noexcept : m_ptr(ptr_begin), m_count(ptr_end - ptr_begin) {}
-
- template<size_t N>
- constexpr span(T (&arr)[N]) noexcept : span(arr, N)
- {
- }
-
- span(std::vector<T>& v) noexcept : span(v.data(), v.size()) {}
- span(const std::vector<std::remove_const_t<T>>& v) noexcept : span(v.data(), v.size()) {}
-
- constexpr iterator begin() const { return m_ptr; }
- constexpr iterator end() const { return m_ptr + m_count; }
-
- constexpr reference operator[](size_t i) const { return m_ptr[i]; }
- constexpr size_t size() const { return m_count; }
-
-private:
- pointer m_ptr;
- size_t m_count;
-};
diff --git a/toolsrc/include/filesystem_fs.h b/toolsrc/include/filesystem_fs.h deleted file mode 100644 index 0651ebf25..000000000 --- a/toolsrc/include/filesystem_fs.h +++ /dev/null @@ -1,16 +0,0 @@ -#pragma once - -#include <filesystem> - -namespace fs -{ - namespace stdfs = std::experimental::filesystem; - - using stdfs::path; - using stdfs::copy_options; - using stdfs::file_status; - - inline bool is_regular_file(file_status s) { return stdfs::is_regular_file(s); } - inline bool is_directory(file_status s) { return stdfs::is_directory(s); } - inline bool status_known(file_status s) { return stdfs::status_known(s); } -}
\ No newline at end of file diff --git a/toolsrc/include/pch.h b/toolsrc/include/pch.h index 770bcf07a..5c31fbbd1 100644 --- a/toolsrc/include/pch.h +++ b/toolsrc/include/pch.h @@ -1,10 +1,22 @@ #pragma once +#if defined(_WIN32) #define NOMINMAX #define WIN32_LEAN_AND_MEAN +#pragma warning(suppress : 4768) #include <windows.h> +#pragma warning(suppress : 4768) +#include <Shlobj.h> + +#include <process.h> +#include <shellapi.h> +#include <winhttp.h> +#else +#include <unistd.h> +#endif + #include <algorithm> #include <array> #include <atomic> @@ -15,7 +27,12 @@ #include <cstdarg> #include <cstddef> #include <cstdint> +#if defined(_WIN32) #include <filesystem> +#else +#include <experimental/filesystem> +#endif +#include <cstring> #include <fstream> #include <functional> #include <iomanip> @@ -24,19 +41,17 @@ #include <map> #include <memory> #include <mutex> -#include <process.h> #include <regex> #include <set> -#include <shellapi.h> -#include <shlobj.h> #include <stdexcept> #include <string> #include <sys/timeb.h> +#include <sys/types.h> #include <system_error> +#include <thread> #include <time.h> #include <type_traits> #include <unordered_map> #include <unordered_set> #include <utility> #include <vector> -#include <winhttp.h> diff --git a/toolsrc/include/vcpkg_Checks.h b/toolsrc/include/vcpkg/base/checks.h index 01cb7209b..fb162c897 100644 --- a/toolsrc/include/vcpkg_Checks.h +++ b/toolsrc/include/vcpkg/base/checks.h @@ -1,7 +1,8 @@ #pragma once -#include "LineInfo.h" -#include "vcpkg_Strings.h" +#include <vcpkg/base/cstringview.h> +#include <vcpkg/base/lineinfo.h> +#include <vcpkg/base/strings.h> namespace vcpkg::Checks { @@ -20,33 +21,35 @@ namespace vcpkg::Checks [[noreturn]] inline void exit_success(const LineInfo& line_info) { exit_with_code(line_info, EXIT_SUCCESS); } // Display an error message to the user and exit the tool. - [[noreturn]] void exit_with_message(const LineInfo& line_info, const CStringView errorMessage); + [[noreturn]] void exit_with_message(const LineInfo& line_info, const CStringView error_message); template<class Arg1, class... Args> // Display an error message to the user and exit the tool. [[noreturn]] void exit_with_message(const LineInfo& line_info, - const char* errorMessageTemplate, - const Arg1 errorMessageArg1, - const Args&... errorMessageArgs) + const char* error_message_template, + const Arg1 error_message_arg1, + const Args&... error_message_args) { - exit_with_message(line_info, Strings::format(errorMessageTemplate, errorMessageArg1, errorMessageArgs...)); + exit_with_message(line_info, + Strings::format(error_message_template, error_message_arg1, error_message_args...)); } void check_exit(const LineInfo& line_info, bool expression); - void check_exit(const LineInfo& line_info, bool expression, const CStringView errorMessage); + void check_exit(const LineInfo& line_info, bool expression, const CStringView error_message); template<class Conditional, class Arg1, class... Args> void check_exit(const LineInfo& line_info, Conditional&& expression, - const char* errorMessageTemplate, - const Arg1 errorMessageArg1, - const Args&... errorMessageArgs) + const char* error_message_template, + const Arg1 error_message_arg1, + const Args&... error_message_args) { if (!expression) { // Only create the string if the expression is false - exit_with_message(line_info, Strings::format(errorMessageTemplate, errorMessageArg1, errorMessageArgs...)); + exit_with_message(line_info, + Strings::format(error_message_template, error_message_arg1, error_message_args...)); } } } diff --git a/toolsrc/include/vcpkg_Chrono.h b/toolsrc/include/vcpkg/base/chrono.h index c14019ff9..b525852f2 100644 --- a/toolsrc/include/vcpkg_Chrono.h +++ b/toolsrc/include/vcpkg/base/chrono.h @@ -3,7 +3,7 @@ #include <chrono> #include <string> -namespace vcpkg +namespace vcpkg::Chrono { class ElapsedTime { diff --git a/toolsrc/include/coff_file_reader.h b/toolsrc/include/vcpkg/base/cofffilereader.h index 09f6447c2..ad2cc7b12 100644 --- a/toolsrc/include/coff_file_reader.h +++ b/toolsrc/include/vcpkg/base/cofffilereader.h @@ -1,9 +1,11 @@ #pragma once -#include "MachineType.h" -#include "filesystem_fs.h" + +#include <vcpkg/base/files.h> +#include <vcpkg/base/machinetype.h> + #include <vector> -namespace vcpkg::COFFFileReader +namespace vcpkg::CoffFileReader { struct DllInfo { diff --git a/toolsrc/include/vcpkg/base/cstringview.h b/toolsrc/include/vcpkg/base/cstringview.h new file mode 100644 index 000000000..342455402 --- /dev/null +++ b/toolsrc/include/vcpkg/base/cstringview.h @@ -0,0 +1,69 @@ +#pragma once + +#include <string.h> +#include <string> + +namespace vcpkg +{ + struct CStringView + { + constexpr CStringView() : cstr(nullptr) {} + constexpr CStringView(const char* cstr) : cstr(cstr) {} + constexpr CStringView(const CStringView&) = default; + CStringView(const std::string& str) : cstr(str.c_str()) {} + + constexpr const char* c_str() const { return cstr; } + + private: + const char* cstr; + }; + + struct CWStringView + { + constexpr CWStringView() : cstr(nullptr) {} + constexpr CWStringView(const wchar_t* cstr) : cstr(cstr) {} + constexpr CWStringView(const CWStringView&) = default; + CWStringView(const std::wstring& str) : cstr(str.c_str()) {} + + constexpr const wchar_t* c_str() const { return cstr; } + + private: + const wchar_t* cstr; + }; + + namespace details + { + inline bool vcpkg_strcmp(const char* l, const char* r) { return strcmp(l, r) == 0; } + } + + inline bool operator==(const CStringView& l, const CStringView& r) + { + return details::vcpkg_strcmp(l.c_str(), r.c_str()); + } + + inline bool operator==(const char* l, const CStringView& r) { return details::vcpkg_strcmp(l, r.c_str()); } + + inline bool operator==(const CStringView& r, const char* l) { return details::vcpkg_strcmp(l, r.c_str()); } + + inline bool operator==(const std::string& l, const CStringView& r) { return l == r.c_str(); } + + inline bool operator==(const CStringView& r, const std::string& l) { return l == r.c_str(); } + + // notequals + inline bool operator!=(const CStringView& l, const CStringView& r) + { + return !details::vcpkg_strcmp(l.c_str(), r.c_str()); + } + + inline bool operator!=(const char* l, const CStringView& r) { return !details::vcpkg_strcmp(l, r.c_str()); } + + inline bool operator!=(const CStringView& r, const char* l) { return !details::vcpkg_strcmp(l, r.c_str()); } + + inline bool operator!=(const CStringView& r, const std::string& l) { return l != r.c_str(); } + + inline bool operator!=(const std::string& l, const CStringView& r) { return l != r.c_str(); } + + inline const char* to_printf_arg(const CStringView string_view) { return string_view.c_str(); } + + static_assert(sizeof(CStringView) == sizeof(void*), "CStringView must be a simple wrapper around char*"); +} diff --git a/toolsrc/include/vcpkg_Enums.h b/toolsrc/include/vcpkg/base/enums.h index c75feaa1f..6eca2cfe1 100644 --- a/toolsrc/include/vcpkg_Enums.h +++ b/toolsrc/include/vcpkg/base/enums.h @@ -1,5 +1,7 @@ #pragma once -#include "LineInfo.h" + +#include <vcpkg/base/lineinfo.h> + #include <string> namespace vcpkg::Enums diff --git a/toolsrc/include/vcpkg_expected.h b/toolsrc/include/vcpkg/base/expected.h index 9637ec087..b3b81ae81 100644 --- a/toolsrc/include/vcpkg_expected.h +++ b/toolsrc/include/vcpkg/base/expected.h @@ -1,6 +1,7 @@ #pragma once -#include "vcpkg_Checks.h" +#include <vcpkg/base/checks.h> + #include <system_error> namespace vcpkg @@ -32,7 +33,7 @@ namespace vcpkg ErrorHolder() = default; ErrorHolder(const std::error_code& err) : m_err(err) {} - constexpr bool has_error() const { return bool(m_err); } + bool has_error() const { return bool(m_err); } const std::error_code& error() const { return m_err; } std::error_code& error() { return m_err; } @@ -71,13 +72,13 @@ namespace vcpkg return std::move(this->m_t); } - const T& value_or_exit(const LineInfo& line_info) const & + const T& value_or_exit(const LineInfo& line_info) const& { exit_if_error(line_info); return this->m_t; } - const S& error() const & { return this->m_s.error(); } + const S& error() const& { return this->m_s.error(); } S&& error() && { return std::move(this->m_s.error()); } diff --git a/toolsrc/include/vcpkg_Files.h b/toolsrc/include/vcpkg/base/files.h index 855e8ea45..63cf3c6fd 100644 --- a/toolsrc/include/vcpkg_Files.h +++ b/toolsrc/include/vcpkg/base/files.h @@ -1,11 +1,29 @@ #pragma once -#include "filesystem_fs.h" -#include "vcpkg_expected.h" +#include <vcpkg/base/expected.h> + +#if defined(_WIN32) +#include <filesystem> +#else +#include <experimental/filesystem> +#endif + +namespace fs +{ + namespace stdfs = std::experimental::filesystem; + + using stdfs::copy_options; + using stdfs::file_status; + using stdfs::path; + + inline bool is_regular_file(file_status s) { return stdfs::is_regular_file(s); } + inline bool is_directory(file_status s) { return stdfs::is_directory(s); } + inline bool status_known(file_status s) { return stdfs::status_known(s); } +} namespace vcpkg::Files { - __interface Filesystem + struct Filesystem { virtual Expected<std::string> read_contents(const fs::path& file_path) const = 0; virtual Expected<std::vector<std::string>> read_lines(const fs::path& file_path) const = 0; @@ -26,8 +44,10 @@ namespace vcpkg::Files virtual bool create_directory(const fs::path& path, std::error_code& ec) = 0; virtual bool create_directories(const fs::path& path, std::error_code& ec) = 0; virtual void copy(const fs::path& oldpath, const fs::path& newpath, fs::copy_options opts) = 0; - virtual bool copy_file( - const fs::path& oldpath, const fs::path& newpath, fs::copy_options opts, std::error_code& ec) = 0; + virtual bool copy_file(const fs::path& oldpath, + const fs::path& newpath, + fs::copy_options opts, + std::error_code& ec) = 0; virtual fs::file_status status(const fs::path& path, std::error_code& ec) const = 0; }; @@ -39,5 +59,5 @@ namespace vcpkg::Files void print_paths(const std::vector<fs::path>& paths); - std::vector<fs::path> find_from_PATH(const std::wstring& name); + std::vector<fs::path> find_from_PATH(const std::string& name); } diff --git a/toolsrc/include/vcpkg_Graphs.h b/toolsrc/include/vcpkg/base/graphs.h index 13c0a7136..b585d2bb9 100644 --- a/toolsrc/include/vcpkg_Graphs.h +++ b/toolsrc/include/vcpkg/base/graphs.h @@ -3,6 +3,8 @@ #include <unordered_map> #include <unordered_set> +#include <vcpkg/base/checks.h> + namespace vcpkg::Graphs { enum class ExplorationStatus @@ -18,11 +20,11 @@ namespace vcpkg::Graphs }; template<class V, class U> - __interface AdjacencyProvider + struct AdjacencyProvider { - std::vector<V> adjacency_list(const U& vertex) const; + virtual std::vector<V> adjacency_list(const U& vertex) const = 0; - U load_vertex_data(const V& vertex) const; + virtual U load_vertex_data(const V& vertex) const = 0; }; template<class V, class U> diff --git a/toolsrc/include/lazy.h b/toolsrc/include/vcpkg/base/lazy.h index 58c11c002..58c11c002 100644 --- a/toolsrc/include/lazy.h +++ b/toolsrc/include/vcpkg/base/lazy.h diff --git a/toolsrc/include/LineInfo.h b/toolsrc/include/vcpkg/base/lineinfo.h index 62973462a..62973462a 100644 --- a/toolsrc/include/LineInfo.h +++ b/toolsrc/include/vcpkg/base/lineinfo.h diff --git a/toolsrc/include/MachineType.h b/toolsrc/include/vcpkg/base/machinetype.h index 6f61bbd53..b85cdbb0b 100644 --- a/toolsrc/include/MachineType.h +++ b/toolsrc/include/vcpkg/base/machinetype.h @@ -1,4 +1,5 @@ #pragma once + #include <cstdint> namespace vcpkg diff --git a/toolsrc/include/vcpkg_optional.h b/toolsrc/include/vcpkg/base/optional.h index 31a2d3e88..ff7a210c7 100644 --- a/toolsrc/include/vcpkg_optional.h +++ b/toolsrc/include/vcpkg/base/optional.h @@ -1,5 +1,6 @@ #pragma once -#include "vcpkg_Checks.h" + +#include <vcpkg/base/checks.h> namespace vcpkg { @@ -29,7 +30,7 @@ namespace vcpkg return std::move(this->m_t); } - const T& value_or_exit(const LineInfo& line_info) const & + const T& value_or_exit(const LineInfo& line_info) const& { this->exit_if_null(line_info); return this->m_t; @@ -40,7 +41,7 @@ namespace vcpkg constexpr bool has_value() const { return m_is_present; } template<class U> - T value_or(U&& default_value) const & + T value_or(U&& default_value) const& { return bool(*this) ? this->m_t : static_cast<T>(std::forward<U>(default_value)); } diff --git a/toolsrc/include/SortedVector.h b/toolsrc/include/vcpkg/base/sortedvector.h index 62808cc2f..62808cc2f 100644 --- a/toolsrc/include/SortedVector.h +++ b/toolsrc/include/vcpkg/base/sortedvector.h diff --git a/toolsrc/include/vcpkg/base/span.h b/toolsrc/include/vcpkg/base/span.h new file mode 100644 index 000000000..6be546351 --- /dev/null +++ b/toolsrc/include/vcpkg/base/span.h @@ -0,0 +1,60 @@ +#pragma once
+
+#include <array>
+#include <cstddef>
+#include <initializer_list>
+#include <vector>
+
+namespace vcpkg
+{
+ template<class T>
+ struct Span
+ {
+ public:
+ using element_type = T;
+ using pointer = T*;
+ using reference = T&;
+ using iterator = T*;
+
+ constexpr Span() noexcept : m_ptr(nullptr), m_count(0) {}
+ constexpr Span(std::nullptr_t) noexcept : Span() {}
+ constexpr Span(T* ptr, size_t count) noexcept : m_ptr(ptr), m_count(count) {}
+ constexpr Span(T* ptr_begin, T* ptr_end) noexcept : m_ptr(ptr_begin), m_count(ptr_end - ptr_begin) {}
+ constexpr Span(std::initializer_list<T> l) noexcept : m_ptr(l.begin()), m_count(l.size()) {}
+
+ template<size_t N>
+ constexpr Span(T (&arr)[N]) noexcept : Span(arr, N)
+ {
+ }
+
+ template<size_t N>
+ constexpr Span(const std::array<std::remove_const_t<T>, N>& arr) noexcept : Span(arr.data(), arr.size())
+ {
+ }
+
+ Span(std::vector<T>& v) noexcept : Span(v.data(), v.size()) {}
+ Span(const std::vector<std::remove_const_t<T>>& v) noexcept : Span(v.data(), v.size()) {}
+
+ constexpr iterator begin() const { return m_ptr; }
+ constexpr iterator end() const { return m_ptr + m_count; }
+
+ constexpr reference operator[](size_t i) const { return m_ptr[i]; }
+ constexpr size_t size() const { return m_count; }
+
+ private:
+ pointer m_ptr;
+ size_t m_count;
+ };
+
+ template<class T>
+ Span<T> make_span(std::vector<T>& v)
+ {
+ return {v.data(), v.size()};
+ }
+
+ template<class T>
+ Span<const T> make_span(const std::vector<T>& v)
+ {
+ return {v.data(), v.size()};
+ }
+}
\ No newline at end of file diff --git a/toolsrc/include/vcpkg_Strings.h b/toolsrc/include/vcpkg/base/strings.h index 61f6fab61..d263e3b6b 100644 --- a/toolsrc/include/vcpkg_Strings.h +++ b/toolsrc/include/vcpkg/base/strings.h @@ -1,6 +1,7 @@ #pragma once -#include "CStringView.h" +#include <vcpkg/base/cstringview.h> + #include <vector> namespace vcpkg::Strings::details @@ -15,30 +16,17 @@ namespace vcpkg::Strings::details inline const char* to_printf_arg(const char* s) { return s; } - inline int to_printf_arg(const int s) { return s; } - - inline long long to_printf_arg(const long long s) { return s; } - - inline unsigned long to_printf_arg(const unsigned long s) { return s; } - - inline size_t to_printf_arg(const size_t s) { return s; } - - inline double to_printf_arg(const double s) { return s; } + template<class T, class = std::enable_if_t<std::is_arithmetic<T>::value>> + T to_printf_arg(T s) + { + return s; + } std::string format_internal(const char* fmtstr, ...); - - inline const wchar_t* to_wprintf_arg(const std::wstring& s) { return s.c_str(); } - - inline const wchar_t* to_wprintf_arg(const wchar_t* s) { return s; } - - std::wstring wformat_internal(const wchar_t* fmtstr, ...); } namespace vcpkg::Strings { - static constexpr const char* EMPTY = ""; - static constexpr const wchar_t* WEMPTY = L""; - template<class... Args> std::string format(const char* fmtstr, const Args&... args) { @@ -46,37 +34,32 @@ namespace vcpkg::Strings return details::format_internal(fmtstr, to_printf_arg(to_printf_arg(args))...); } - template<class... Args> - std::wstring wformat(const wchar_t* fmtstr, const Args&... args) - { - using vcpkg::Strings::details::to_wprintf_arg; - return details::wformat_internal(fmtstr, to_wprintf_arg(to_wprintf_arg(args))...); - } - - std::wstring to_utf16(const CStringView s); + std::wstring to_utf16(const CStringView& s); - std::string to_utf8(const CWStringView w); + std::string to_utf8(const CWStringView& w); std::string::const_iterator case_insensitive_ascii_find(const std::string& s, const std::string& pattern); bool case_insensitive_ascii_contains(const std::string& s, const std::string& pattern); - int case_insensitive_ascii_compare(const CStringView left, const CStringView right); + bool case_insensitive_ascii_equals(const CStringView left, const CStringView right); std::string ascii_to_lowercase(const std::string& input); - template<class Container, class Transformer, class CharType> - std::basic_string<CharType> join(const CharType* delimiter, const Container& v, Transformer transformer) + bool case_insensitive_ascii_starts_with(const std::string& s, const std::string& pattern); + + template<class Container, class Transformer> + std::string join(const char* delimiter, const Container& v, Transformer transformer) { const auto begin = v.begin(); const auto end = v.end(); if (begin == end) { - return std::basic_string<CharType>(); + return std::string(); } - std::basic_string<CharType> output; + std::string output; output.append(transformer(*begin)); for (auto it = std::next(begin); it != end; ++it) { @@ -86,8 +69,8 @@ namespace vcpkg::Strings return output; } - template<class Container, class CharType> - std::basic_string<CharType> join(const CharType* delimiter, const Container& v) + template<class Container> + std::string join(const char* delimiter, const Container& v) { using Element = decltype(*v.begin()); return join(delimiter, v, [](const Element& x) -> const Element& { return x; }); diff --git a/toolsrc/include/vcpkg_System.h b/toolsrc/include/vcpkg/base/system.h index 9dd9ea8bd..b396ef293 100644 --- a/toolsrc/include/vcpkg_System.h +++ b/toolsrc/include/vcpkg/base/system.h @@ -1,9 +1,8 @@ #pragma once -#include "filesystem_fs.h" -#include "vcpkg_Strings.h" -#include "vcpkg_optional.h" -#include <Windows.h> +#include <vcpkg/base/files.h> +#include <vcpkg/base/optional.h> +#include <vcpkg/base/strings.h> namespace vcpkg::System { @@ -17,13 +16,13 @@ namespace vcpkg::System std::string output; }; - int cmd_execute_clean(const CWStringView cmd_line); + int cmd_execute_clean(const CStringView cmd_line); - int cmd_execute(const CWStringView cmd_line); + int cmd_execute(const CStringView cmd_line); - ExitCodeAndOutput cmd_execute_and_capture_output(const CWStringView cmd_line); + ExitCodeAndOutput cmd_execute_and_capture_output(const CStringView cmd_line); - std::wstring create_powershell_script_cmd(const fs::path& script_path, const CWStringView args = Strings::WEMPTY); + std::string create_powershell_script_cmd(const fs::path& script_path, const CStringView args = ""); enum class Color { @@ -62,9 +61,9 @@ namespace vcpkg::System return System::println(c, Strings::format(messageTemplate, messageArg1, messageArgs...)); } - Optional<std::wstring> get_environment_variable(const CWStringView varname) noexcept; + Optional<std::string> get_environment_variable(const CStringView varname) noexcept; - Optional<std::wstring> get_registry_string(HKEY base, const CWStringView subkey, const CWStringView valuename); + Optional<std::string> get_registry_string(void* base_hkey, const CStringView subkey, const CStringView valuename); enum class CPUArchitecture { @@ -74,15 +73,15 @@ namespace vcpkg::System ARM64, }; - Optional<CPUArchitecture> to_cpu_architecture(CStringView arch); + Optional<CPUArchitecture> to_cpu_architecture(const CStringView& arch); CPUArchitecture get_host_processor(); std::vector<CPUArchitecture> get_supported_host_architectures(); - const fs::path& get_ProgramFiles_32_bit(); + const fs::path& get_program_files_32_bit(); - const fs::path& get_ProgramFiles_platform_bitness(); + const fs::path& get_program_files_platform_bitness(); } namespace vcpkg::Debug diff --git a/toolsrc/include/vcpkg_Util.h b/toolsrc/include/vcpkg/base/util.h index c76ca01ac..d5db6b6ee 100644 --- a/toolsrc/include/vcpkg_Util.h +++ b/toolsrc/include/vcpkg/base/util.h @@ -1,5 +1,6 @@ #pragma once +#include <algorithm> #include <map> #include <mutex> #include <utility> @@ -7,6 +8,18 @@ namespace vcpkg::Util { + template<class Container> + using ElementT = std::remove_reference_t<decltype(*begin(std::declval<Container>()))>; + + namespace Vectors + { + template<class Container, class T = ElementT<Container>> + void concatenate(std::vector<T>* augend, const Container& addend) + { + augend->insert(augend->end(), addend.begin(), addend.end()); + } + } + template<class Cont, class Func> using FmapOut = decltype(std::declval<Func>()(*begin(std::declval<Cont>()))); @@ -38,6 +51,12 @@ namespace vcpkg::Util } template<class Container, class Pred> + void stable_keep_if(Container& cont, Pred pred) + { + cont.erase(std::stable_partition(cont.begin(), cont.end(), pred), cont.end()); + } + + template<class Container, class Pred> void unstable_keep_if(Container& cont, Pred pred) { cont.erase(std::partition(cont.begin(), cont.end(), pred), cont.end()); @@ -50,25 +69,37 @@ namespace vcpkg::Util } template<class Container, class V> - auto find(const Container& cont, V&& v) + auto find(Container&& cont, V&& v) { - return std::find(cont.cbegin(), cont.cend(), v); + using std::begin; + using std::end; + return std::find(begin(cont), end(cont), v); } template<class Container, class Pred> - auto find_if(const Container& cont, Pred pred) + auto find_if(Container&& cont, Pred pred) + { + using std::begin; + using std::end; + return std::find_if(begin(cont), end(cont), pred); + } + + template<class Container, class T = ElementT<Container>> + std::vector<T*> element_pointers(Container&& cont) { - return std::find_if(cont.cbegin(), cont.cend(), pred); + return fmap(cont, [](auto&& x) { return &x; }); } template<class Container, class Pred> - auto find_if_not(const Container& cont, Pred pred) + auto find_if_not(Container&& cont, Pred pred) { - return std::find_if_not(cont.cbegin(), cont.cend(), pred); + using std::begin; + using std::end; + return std::find_if_not(begin(cont), end(cont), pred); } template<class K, class V, class Container, class Func> - void group_by(const Container& cont, std::map<K, std::vector<const V*>>* output, Func f) + void group_by(const Container& cont, std::map<K, std::vector<const V*>>* output, Func&& f) { for (const V& element : cont) { @@ -77,6 +108,12 @@ namespace vcpkg::Util } } + template<class AssocContainer, class K = std::decay_t<decltype(begin(std::declval<AssocContainer>())->first)>> + std::vector<K> extract_keys(AssocContainer&& input_map) + { + return fmap(input_map, [](auto&& p) { return p.first; }); + } + struct MoveOnlyBase { MoveOnlyBase() = default; @@ -126,4 +163,4 @@ namespace vcpkg::Util std::unique_lock<std::mutex> m_lock; T& m_ptr; }; -}
\ No newline at end of file +} diff --git a/toolsrc/include/BinaryParagraph.h b/toolsrc/include/vcpkg/binaryparagraph.h index 61e03343a..7eb50a6d7 100644 --- a/toolsrc/include/BinaryParagraph.h +++ b/toolsrc/include/vcpkg/binaryparagraph.h @@ -1,7 +1,8 @@ #pragma once -#include "PackageSpec.h" -#include "SourceParagraph.h" +#include <vcpkg/packagespec.h> +#include <vcpkg/sourceparagraph.h> + #include <unordered_map> namespace vcpkg diff --git a/toolsrc/include/vcpkg_Build.h b/toolsrc/include/vcpkg/build.h index fc6f28e24..774e25922 100644 --- a/toolsrc/include/vcpkg_Build.h +++ b/toolsrc/include/vcpkg/build.h @@ -1,19 +1,31 @@ #pragma once -#include "CStringView.h" -#include "PackageSpec.h" -#include "StatusParagraphs.h" -#include "VcpkgPaths.h" -#include "vcpkg_Files.h" -#include "vcpkg_optional.h" +#include <vcpkg/packagespec.h> +#include <vcpkg/statusparagraphs.h> +#include <vcpkg/triplet.h> +#include <vcpkg/vcpkgcmdarguments.h> +#include <vcpkg/vcpkgpaths.h> + +#include <vcpkg/base/cstringview.h> +#include <vcpkg/base/files.h> +#include <vcpkg/base/optional.h> #include <array> #include <map> -#include <unordered_map> #include <vector> namespace vcpkg::Build { + namespace Command + { + void perform_and_exit(const FullPackageSpec& full_spec, + const fs::path& port_dir, + const std::unordered_set<std::string>& options, + const VcpkgPaths& paths); + + void perform_and_exit(const VcpkgCmdArguments& args, const VcpkgPaths& paths, const Triplet& default_triplet); + } + enum class UseHeadVersion { NO = 0, @@ -56,7 +68,7 @@ namespace vcpkg::Build CASCADED_DUE_TO_MISSING_DEPENDENCIES }; - static constexpr std::array<BuildResult, 5> BuildResult_values = { + static constexpr std::array<BuildResult, 5> BUILD_RESULT_VALUES = { BuildResult::SUCCEEDED, BuildResult::BUILD_FAILED, BuildResult::POST_BUILD_CHECKS_FAILED, @@ -80,10 +92,11 @@ namespace vcpkg::Build std::string target_architecture; std::string cmake_system_name; std::string cmake_system_version; - std::string platform_toolset; + Optional<std::string> platform_toolset; + Optional<fs::path> visual_studio_path; }; - std::wstring make_build_env_cmd(const PreBuildInfo& pre_build_info, const Toolset& toolset); + std::string make_build_env_cmd(const PreBuildInfo& pre_build_info, const Toolset& toolset); struct ExtendedBuildResult { @@ -143,7 +156,7 @@ namespace vcpkg::Build COUNT, }; - constexpr std::array<BuildPolicy, size_t(BuildPolicy::COUNT)> g_all_policies = { + constexpr std::array<BuildPolicy, size_t(BuildPolicy::COUNT)> G_ALL_POLICIES = { BuildPolicy::EMPTY_PACKAGE, BuildPolicy::DLLS_WITHOUT_LIBS, BuildPolicy::ONLY_RELEASE_CRT, @@ -159,7 +172,7 @@ namespace vcpkg::Build BuildPolicies() = default; BuildPolicies(std::map<BuildPolicy, bool>&& map) : m_policies(std::move(map)) {} - inline bool is_enabled(BuildPolicy policy) const + bool is_enabled(BuildPolicy policy) const { const auto it = m_policies.find(policy); if (it != m_policies.cend()) return it->second; diff --git a/toolsrc/include/vcpkg/commands.h b/toolsrc/include/vcpkg/commands.h new file mode 100644 index 000000000..e00812c98 --- /dev/null +++ b/toolsrc/include/vcpkg/commands.h @@ -0,0 +1,135 @@ +#pragma once + +#include <vcpkg/build.h> +#include <vcpkg/dependencies.h> +#include <vcpkg/statusparagraphs.h> +#include <vcpkg/vcpkgcmdarguments.h> +#include <vcpkg/vcpkgpaths.h> + +#include <array> + +namespace vcpkg::Commands +{ + using CommandTypeA = void (*)(const VcpkgCmdArguments& args, + const VcpkgPaths& paths, + const Triplet& default_triplet); + using CommandTypeB = void (*)(const VcpkgCmdArguments& args, const VcpkgPaths& paths); + using CommandTypeC = void (*)(const VcpkgCmdArguments& args); + + namespace BuildExternal + { + void perform_and_exit(const VcpkgCmdArguments& args, const VcpkgPaths& paths, const Triplet& default_triplet); + } + + namespace CI + { + void perform_and_exit(const VcpkgCmdArguments& args, const VcpkgPaths& paths, const Triplet& default_triplet); + } + + namespace Env + { + void perform_and_exit(const VcpkgCmdArguments& args, const VcpkgPaths& paths, const Triplet& default_triplet); + } + + namespace Create + { + void perform_and_exit(const VcpkgCmdArguments& args, const VcpkgPaths& paths); + } + + namespace Edit + { + extern const CommandStructure COMMAND_STRUCTURE; + void perform_and_exit(const VcpkgCmdArguments& args, const VcpkgPaths& paths); + } + + namespace DependInfo + { + void perform_and_exit(const VcpkgCmdArguments& args, const VcpkgPaths& paths); + } + + namespace Search + { + void perform_and_exit(const VcpkgCmdArguments& args, const VcpkgPaths& paths); + } + + namespace List + { + void perform_and_exit(const VcpkgCmdArguments& args, const VcpkgPaths& paths); + } + + namespace Owns + { + void perform_and_exit(const VcpkgCmdArguments& args, const VcpkgPaths& paths); + } + + namespace Cache + { + void perform_and_exit(const VcpkgCmdArguments& args, const VcpkgPaths& paths); + } + + namespace Import + { + void perform_and_exit(const VcpkgCmdArguments& args, const VcpkgPaths& paths); + } + + namespace Integrate + { + extern const char* const INTEGRATE_COMMAND_HELPSTRING; + + void perform_and_exit(const VcpkgCmdArguments& args, const VcpkgPaths& paths); + } + + namespace PortsDiff + { + void perform_and_exit(const VcpkgCmdArguments& args, const VcpkgPaths& paths); + } + + namespace Autocomplete + { + void perform_and_exit(const VcpkgCmdArguments& args, const VcpkgPaths& paths); + } + + namespace Version + { + const std::string& version(); + void warn_if_vcpkg_version_mismatch(const VcpkgPaths& paths); + void perform_and_exit(const VcpkgCmdArguments& args); + } + + namespace Contact + { + const std::string& email(); + void perform_and_exit(const VcpkgCmdArguments& args); + } + + namespace Hash + { + void perform_and_exit(const VcpkgCmdArguments& args); + } + + template<class T> + struct PackageNameAndFunction + { + std::string name; + T function; + }; + + Span<const PackageNameAndFunction<CommandTypeA>> get_available_commands_type_a(); + Span<const PackageNameAndFunction<CommandTypeB>> get_available_commands_type_b(); + Span<const PackageNameAndFunction<CommandTypeC>> get_available_commands_type_c(); + + template<typename T> + T find(const std::string& command_name, const std::vector<PackageNameAndFunction<T>> available_commands) + { + for (const PackageNameAndFunction<T>& cmd : available_commands) + { + if (cmd.name == command_name) + { + return cmd.function; + } + } + + // not found + return nullptr; + } +} diff --git a/toolsrc/include/vcpkg_Dependencies.h b/toolsrc/include/vcpkg/dependencies.h index 235abb839..585338ae2 100644 --- a/toolsrc/include/vcpkg_Dependencies.h +++ b/toolsrc/include/vcpkg/dependencies.h @@ -1,10 +1,12 @@ #pragma once -#include "PackageSpec.h" -#include "StatusParagraphs.h" -#include "VcpkgPaths.h" -#include "vcpkg_Graphs.h" -#include "vcpkg_Util.h" -#include "vcpkg_optional.h" + +#include <vcpkg/base/graphs.h> +#include <vcpkg/base/optional.h> +#include <vcpkg/base/util.h> +#include <vcpkg/packagespec.h> +#include <vcpkg/statusparagraphs.h> +#include <vcpkg/vcpkgpaths.h> + #include <vector> namespace vcpkg::Dependencies @@ -89,6 +91,8 @@ namespace vcpkg::Dependencies Optional<InstallPlanAction> install_plan; Optional<RemovePlanAction> remove_plan; + + const PackageSpec& spec() const; }; enum class ExportPlanType @@ -111,7 +115,10 @@ namespace vcpkg::Dependencies RequestType request_type; }; - __interface PortFileProvider { virtual const SourceControlFile& get_control_file(const std::string& spec) const; }; + struct PortFileProvider + { + virtual const SourceControlFile& get_control_file(const std::string& spec) const = 0; + }; struct MapPortFile : Util::ResourceBase, PortFileProvider { diff --git a/toolsrc/include/vcpkg/export.h b/toolsrc/include/vcpkg/export.h new file mode 100644 index 000000000..f3285e187 --- /dev/null +++ b/toolsrc/include/vcpkg/export.h @@ -0,0 +1,10 @@ +#pragma once + +#include <vcpkg/vcpkgpaths.h> + +namespace vcpkg::Export +{ + void perform_and_exit(const VcpkgCmdArguments& args, const VcpkgPaths& paths, const Triplet& default_triplet); + + void export_integration_files(const fs::path& raw_exported_dir_path, const VcpkgPaths& paths); +} diff --git a/toolsrc/include/vcpkg/export.ifw.h b/toolsrc/include/vcpkg/export.ifw.h new file mode 100644 index 000000000..d28a4436d --- /dev/null +++ b/toolsrc/include/vcpkg/export.ifw.h @@ -0,0 +1,26 @@ +#pragma once + +#include <vcpkg/dependencies.h> +#include <vcpkg/vcpkgpaths.h> + +#include <vcpkg/base/files.h> + +#include <string> +#include <vector> + +namespace vcpkg::Export::IFW +{ + struct Options + { + Optional<std::string> maybe_repository_url; + Optional<std::string> maybe_packages_dir_path; + Optional<std::string> maybe_repository_dir_path; + Optional<std::string> maybe_config_file_path; + Optional<std::string> maybe_installer_file_path; + }; + + void do_export(const std::vector<Dependencies::ExportPlanAction>& export_plan, + const std::string& export_id, + const Options& ifw_options, + const VcpkgPaths& paths); +} diff --git a/toolsrc/include/vcpkg_GlobalState.h b/toolsrc/include/vcpkg/globalstate.h index 6522a25bf..7cea361cf 100644 --- a/toolsrc/include/vcpkg_GlobalState.h +++ b/toolsrc/include/vcpkg/globalstate.h @@ -1,15 +1,15 @@ #pragma once -#include <atomic> +#include <vcpkg/base/chrono.h> +#include <vcpkg/base/util.h> -#include "vcpkg_Chrono.h" -#include "vcpkg_Util.h" +#include <atomic> namespace vcpkg { struct GlobalState { - static Util::LockGuarded<ElapsedTime> timer; + static Util::LockGuarded<Chrono::ElapsedTime> timer; static std::atomic<bool> debugging; static std::atomic<bool> feature_packages; diff --git a/toolsrc/include/vcpkg/help.h b/toolsrc/include/vcpkg/help.h new file mode 100644 index 000000000..39ad6912d --- /dev/null +++ b/toolsrc/include/vcpkg/help.h @@ -0,0 +1,19 @@ +#pragma once + +#include <vcpkg/vcpkgcmdarguments.h> +#include <vcpkg/vcpkgpaths.h> + +#include <string> + +namespace vcpkg::Help +{ + void perform_and_exit(const VcpkgCmdArguments& args, const VcpkgPaths& paths); + + void help_topic_valid_triplet(const VcpkgPaths& paths); + + void print_usage(); + + void print_example(const std::string& command_and_arguments); + + std::string create_example_string(const std::string& command_and_arguments); +} diff --git a/toolsrc/include/vcpkg_Input.h b/toolsrc/include/vcpkg/input.h index fa568207a..621139427 100644 --- a/toolsrc/include/vcpkg_Input.h +++ b/toolsrc/include/vcpkg/input.h @@ -1,5 +1,6 @@ #pragma once -#include "PackageSpec.h" + +#include <vcpkg/packagespec.h> namespace vcpkg::Input { diff --git a/toolsrc/include/vcpkg/install.h b/toolsrc/include/vcpkg/install.h new file mode 100644 index 000000000..db6055f4f --- /dev/null +++ b/toolsrc/include/vcpkg/install.h @@ -0,0 +1,71 @@ +#pragma once + +#include <vcpkg/build.h> +#include <vcpkg/dependencies.h> +#include <vcpkg/vcpkgcmdarguments.h> +#include <vcpkg/vcpkgpaths.h> + +#include <vector> + +namespace vcpkg::Install +{ + enum class KeepGoing + { + NO = 0, + YES + }; + + inline KeepGoing to_keep_going(const bool value) { return value ? KeepGoing::YES : KeepGoing::NO; } + + enum class PrintSummary + { + NO = 0, + YES + }; + + inline PrintSummary to_print_summary(const bool value) { return value ? PrintSummary::YES : PrintSummary::NO; } + + struct InstallDir + { + static InstallDir from_destination_root(const fs::path& destination_root, + const std::string& destination_subdirectory, + const fs::path& listfile); + + private: + fs::path m_destination; + std::string m_destination_subdirectory; + fs::path m_listfile; + + public: + const fs::path& destination() const; + const std::string& destination_subdirectory() const; + const fs::path& listfile() const; + }; + + Build::BuildResult perform_install_plan_action(const VcpkgPaths& paths, + const Dependencies::InstallPlanAction& action, + const Build::BuildPackageOptions& install_plan_options, + StatusParagraphs& status_db); + + enum class InstallResult + { + FILE_CONFLICTS, + SUCCESS, + }; + + void install_files_and_write_listfile(Files::Filesystem& fs, const fs::path& source_dir, const InstallDir& dirs); + InstallResult install_package(const VcpkgPaths& paths, + const BinaryControlFile& binary_paragraph, + StatusParagraphs* status_db); + + void perform_and_exit_ex(const std::vector<Dependencies::AnyAction>& action_plan, + const Build::BuildPackageOptions& install_plan_options, + const KeepGoing keep_going, + const PrintSummary print_summary, + const VcpkgPaths& paths, + StatusParagraphs& status_db); + + extern const CommandStructure COMMAND_STRUCTURE; + + void perform_and_exit(const VcpkgCmdArguments& args, const VcpkgPaths& paths, const Triplet& default_triplet); +} diff --git a/toolsrc/include/metrics.h b/toolsrc/include/vcpkg/metrics.h index 8eae426de..f73c636cf 100644 --- a/toolsrc/include/metrics.h +++ b/toolsrc/include/vcpkg/metrics.h @@ -1,8 +1,8 @@ #pragma once -#include <string> +#include <vcpkg/base/util.h> -#include "vcpkg_Util.h" +#include <string> namespace vcpkg::Metrics { @@ -15,7 +15,6 @@ namespace vcpkg::Metrics void track_metric(const std::string& name, double value); void track_property(const std::string& name, const std::string& value); - void track_property(const std::string& name, const std::wstring& value); void upload(const std::string& payload); void flush(); @@ -23,6 +22,6 @@ namespace vcpkg::Metrics extern Util::LockGuarded<Metrics> g_metrics; - std::wstring get_SQM_user(); + std::string get_SQM_user(); bool get_compiled_metrics_enabled(); } diff --git a/toolsrc/include/PackageSpec.h b/toolsrc/include/vcpkg/packagespec.h index c5ce767f9..60c99782e 100644 --- a/toolsrc/include/PackageSpec.h +++ b/toolsrc/include/vcpkg/packagespec.h @@ -1,8 +1,8 @@ #pragma once -#include "PackageSpecParseResult.h" -#include "Triplet.h" -#include "vcpkg_expected.h" +#include <vcpkg/base/expected.h> +#include <vcpkg/packagespecparseresult.h> +#include <vcpkg/triplet.h> namespace vcpkg { @@ -76,20 +76,23 @@ namespace vcpkg bool operator!=(const PackageSpec& left, const PackageSpec& right); } -template<> -struct std::hash<vcpkg::PackageSpec> +namespace std { - size_t operator()(const vcpkg::PackageSpec& value) const + template<> + struct hash<vcpkg::PackageSpec> { - size_t hash = 17; - hash = hash * 31 + std::hash<std::string>()(value.name()); - hash = hash * 31 + std::hash<vcpkg::Triplet>()(value.triplet()); - return hash; - } -}; - -template<> -struct std::equal_to<vcpkg::PackageSpec> -{ - bool operator()(const vcpkg::PackageSpec& left, const vcpkg::PackageSpec& right) const { return left == right; } -}; + size_t operator()(const vcpkg::PackageSpec& value) const + { + size_t hash = 17; + hash = hash * 31 + std::hash<std::string>()(value.name()); + hash = hash * 31 + std::hash<vcpkg::Triplet>()(value.triplet()); + return hash; + } + }; + + template<> + struct equal_to<vcpkg::PackageSpec> + { + bool operator()(const vcpkg::PackageSpec& left, const vcpkg::PackageSpec& right) const { return left == right; } + }; +} diff --git a/toolsrc/include/PackageSpecParseResult.h b/toolsrc/include/vcpkg/packagespecparseresult.h index 1462b8073..dd91c9a67 100644 --- a/toolsrc/include/PackageSpecParseResult.h +++ b/toolsrc/include/vcpkg/packagespecparseresult.h @@ -1,6 +1,7 @@ #pragma once -#include "vcpkg_expected.h" +#include <vcpkg/base/cstringview.h> +#include <vcpkg/base/expected.h> namespace vcpkg { @@ -19,7 +20,7 @@ namespace vcpkg ErrorHolder() : m_err(PackageSpecParseResult::SUCCESS) {} ErrorHolder(PackageSpecParseResult err) : m_err(err) {} - constexpr bool has_error() const { return m_err != PackageSpecParseResult::SUCCESS; } + bool has_error() const { return m_err != PackageSpecParseResult::SUCCESS; } const PackageSpecParseResult& error() const { return m_err; } PackageSpecParseResult& error() { return m_err; } diff --git a/toolsrc/include/ParagraphParseResult.h b/toolsrc/include/vcpkg/paragraphparseresult.h index eaa7e6327..558715bbc 100644 --- a/toolsrc/include/ParagraphParseResult.h +++ b/toolsrc/include/vcpkg/paragraphparseresult.h @@ -1,4 +1,5 @@ #pragma once + #include <system_error> namespace vcpkg @@ -25,8 +26,11 @@ namespace vcpkg ParagraphParseResult to_paragraph_parse_result(std::error_code ec); } -// Enable implicit conversion to std::error_code -template<> -struct std::is_error_code_enum<vcpkg::ParagraphParseResult> : ::std::true_type +namespace std { -}; + // Enable implicit conversion to std::error_code + template<> + struct is_error_code_enum<vcpkg::ParagraphParseResult> : ::std::true_type + { + }; +}
\ No newline at end of file diff --git a/toolsrc/include/Paragraphs.h b/toolsrc/include/vcpkg/paragraphs.h index aae46f7da..c8dbea646 100644 --- a/toolsrc/include/Paragraphs.h +++ b/toolsrc/include/vcpkg/paragraphs.h @@ -1,13 +1,13 @@ #pragma once -#include <map> +#include <vcpkg/binaryparagraph.h> +#include <vcpkg/parse.h> +#include <vcpkg/vcpkgpaths.h> +#include <vcpkg/versiont.h> + +#include <vcpkg/base/expected.h> -#include "BinaryParagraph.h" -#include "VcpkgPaths.h" -#include "VersionT.h" -#include "filesystem_fs.h" -#include "vcpkg_Parse.h" -#include "vcpkg_expected.h" +#include <map> namespace vcpkg::Paragraphs { diff --git a/toolsrc/include/vcpkg_Parse.h b/toolsrc/include/vcpkg/parse.h index e663448b9..4b33e302e 100644 --- a/toolsrc/include/vcpkg_Parse.h +++ b/toolsrc/include/vcpkg/parse.h @@ -1,11 +1,11 @@ #pragma once +#include <vcpkg/base/expected.h> +#include <vcpkg/base/optional.h> + #include <memory> #include <unordered_map> -#include "vcpkg_expected.h" -#include "vcpkg_optional.h" - namespace vcpkg::Parse { struct ParseControlErrorInfo @@ -26,7 +26,7 @@ namespace vcpkg::Parse ParagraphParser(RawParagraph&& fields) : fields(std::move(fields)) {} void required_field(const std::string& fieldname, std::string& out); - std::string optional_field(const std::string& fieldname); + std::string optional_field(const std::string& fieldname) const; std::unique_ptr<ParseControlErrorInfo> error_info(const std::string& name) const; private: diff --git a/toolsrc/include/PostBuildLint_BuildType.h b/toolsrc/include/vcpkg/postbuildlint.buildtype.h index 38ad3084e..ff651fd7a 100644 --- a/toolsrc/include/PostBuildLint_BuildType.h +++ b/toolsrc/include/vcpkg/postbuildlint.buildtype.h @@ -1,6 +1,8 @@ #pragma once -#include "CStringView.h" -#include "vcpkg_Build.h" + +#include <vcpkg/base/cstringview.h> +#include <vcpkg/build.h> + #include <array> #include <regex> diff --git a/toolsrc/include/PostBuildLint.h b/toolsrc/include/vcpkg/postbuildlint.h index 69fafc9f7..5dcfeb8df 100644 --- a/toolsrc/include/PostBuildLint.h +++ b/toolsrc/include/vcpkg/postbuildlint.h @@ -1,7 +1,8 @@ #pragma once -#include "PackageSpec.h" -#include "VcpkgPaths.h" -#include "vcpkg_Build.h" + +#include <vcpkg/build.h> +#include <vcpkg/packagespec.h> +#include <vcpkg/vcpkgpaths.h> namespace vcpkg::PostBuildLint { diff --git a/toolsrc/include/vcpkg/remove.h b/toolsrc/include/vcpkg/remove.h new file mode 100644 index 000000000..6d8a3ebe9 --- /dev/null +++ b/toolsrc/include/vcpkg/remove.h @@ -0,0 +1,26 @@ +#pragma once + +#include <vcpkg/dependencies.h> +#include <vcpkg/vcpkgcmdarguments.h> +#include <vcpkg/vcpkgpaths.h> + +namespace vcpkg::Remove +{ + enum class Purge + { + NO = 0, + YES + }; + + inline Purge to_purge(const bool value) { return value ? Purge::YES : Purge::NO; } + + void perform_remove_plan_action(const VcpkgPaths& paths, + const Dependencies::RemovePlanAction& action, + const Purge purge, + StatusParagraphs& status_db); + + extern const CommandStructure COMMAND_STRUCTURE; + + void perform_and_exit(const VcpkgCmdArguments& args, const VcpkgPaths& paths, const Triplet& default_triplet); + void remove_package(const VcpkgPaths& paths, const PackageSpec& spec, StatusParagraphs* status_db); +} diff --git a/toolsrc/include/SourceParagraph.h b/toolsrc/include/vcpkg/sourceparagraph.h index 8563d83b0..dcbbc1c3b 100644 --- a/toolsrc/include/SourceParagraph.h +++ b/toolsrc/include/vcpkg/sourceparagraph.h @@ -1,13 +1,13 @@ #pragma once -#include "PackageSpec.h" -#include "Span.h" -#include "vcpkg_Parse.h" -#include "vcpkg_System.h" -#include "vcpkg_expected.h" +#include <vcpkg/packagespec.h> +#include <vcpkg/parse.h> + +#include <vcpkg/base/expected.h> +#include <vcpkg/base/span.h> +#include <vcpkg/base/system.h> #include <string> -#include <unordered_map> #include <vector> namespace vcpkg @@ -27,7 +27,7 @@ namespace vcpkg // zlib[uwp] becomes Dependency{"zlib", "uwp"} std::vector<Dependency> expand_qualified_dependencies(const std::vector<std::string>& depends); - const std::string to_string(const Dependency& dep); + std::string to_string(const Dependency& dep); struct FeatureParagraph { @@ -58,7 +58,7 @@ namespace vcpkg std::vector<std::unique_ptr<FeatureParagraph>> feature_paragraphs; }; - void print_error_message(span<const std::unique_ptr<Parse::ParseControlErrorInfo>> error_info_list); + void print_error_message(Span<const std::unique_ptr<Parse::ParseControlErrorInfo>> error_info_list); inline void print_error_message(const std::unique_ptr<Parse::ParseControlErrorInfo>& error_info_list) { return print_error_message({&error_info_list, 1}); diff --git a/toolsrc/include/StatusParagraph.h b/toolsrc/include/vcpkg/statusparagraph.h index b56533d65..ca84b1bb7 100644 --- a/toolsrc/include/StatusParagraph.h +++ b/toolsrc/include/vcpkg/statusparagraph.h @@ -1,6 +1,7 @@ #pragma once -#include "BinaryParagraph.h" +#include <vcpkg/binaryparagraph.h> + #include <unordered_map> namespace vcpkg diff --git a/toolsrc/include/StatusParagraphs.h b/toolsrc/include/vcpkg/statusparagraphs.h index 1a9ee6a03..c2f3b7b8e 100644 --- a/toolsrc/include/StatusParagraphs.h +++ b/toolsrc/include/vcpkg/statusparagraphs.h @@ -1,5 +1,6 @@ #pragma once -#include "StatusParagraph.h" +#include <vcpkg/statusparagraph.h> + #include <iterator> #include <memory> diff --git a/toolsrc/include/triplet.h b/toolsrc/include/vcpkg/triplet.h index be3bcf5b3..50d731593 100644 --- a/toolsrc/include/triplet.h +++ b/toolsrc/include/vcpkg/triplet.h @@ -9,7 +9,7 @@ namespace vcpkg struct Triplet { public: - constexpr Triplet() : m_instance(&default_instance) {} + constexpr Triplet() : m_instance(&DEFAULT_INSTANCE) {} static Triplet from_canonical_name(const std::string& triplet_as_string); @@ -26,7 +26,7 @@ namespace vcpkg bool operator==(const Triplet& other) const; private: - static const TripletInstance default_instance; + static const TripletInstance DEFAULT_INSTANCE; constexpr Triplet(const TripletInstance* ptr) : m_instance(ptr) {} @@ -36,8 +36,11 @@ namespace vcpkg bool operator!=(const Triplet& left, const Triplet& right); } -template<> -struct std::hash<vcpkg::Triplet> +namespace std { - size_t operator()(const vcpkg::Triplet& t) const { return t.hash_code(); } -}; + template<> + struct hash<vcpkg::Triplet> + { + size_t operator()(const vcpkg::Triplet& t) const { return t.hash_code(); } + }; +}
\ No newline at end of file diff --git a/toolsrc/include/vcpkg/update.h b/toolsrc/include/vcpkg/update.h new file mode 100644 index 000000000..e7303d1b0 --- /dev/null +++ b/toolsrc/include/vcpkg/update.h @@ -0,0 +1,21 @@ +#pragma once + +#include <vcpkg/packagespec.h> +#include <vcpkg/statusparagraphs.h> +#include <vcpkg/vcpkgcmdarguments.h> +#include <vcpkg/vcpkgpaths.h> +#include <vcpkg/versiont.h> + +namespace vcpkg::Update +{ + struct OutdatedPackage + { + static bool compare_by_name(const OutdatedPackage& left, const OutdatedPackage& right); + + PackageSpec spec; + VersionDiff version_diff; + }; + + std::vector<OutdatedPackage> find_outdated_packages(const VcpkgPaths& paths, const StatusParagraphs& status_db); + void perform_and_exit(const VcpkgCmdArguments& args, const VcpkgPaths& paths); +}
\ No newline at end of file diff --git a/toolsrc/include/VcpkgCmdArguments.h b/toolsrc/include/vcpkg/vcpkgcmdarguments.h index 0de5747b1..d9895f4b8 100644 --- a/toolsrc/include/VcpkgCmdArguments.h +++ b/toolsrc/include/vcpkg/vcpkgcmdarguments.h @@ -1,6 +1,9 @@ #pragma once -#include "vcpkg_optional.h" +#include <vcpkg/base/cstringview.h> +#include <vcpkg/base/optional.h> +#include <vcpkg/base/span.h> + #include <memory> #include <unordered_map> #include <unordered_set> @@ -16,7 +19,11 @@ namespace vcpkg struct VcpkgCmdArguments { +#if defined(_WIN32) static VcpkgCmdArguments create_from_command_line(const int argc, const wchar_t* const* const argv); +#else + static VcpkgCmdArguments create_from_command_line(const int argc, const char* const* const argv); +#endif static VcpkgCmdArguments create_from_arg_sequence(const std::string* arg_begin, const std::string* arg_end); std::unique_ptr<std::string> vcpkg_root_dir; @@ -46,4 +53,19 @@ namespace vcpkg private: std::unordered_map<std::string, Optional<std::string>> optional_command_arguments; }; + + struct VcpkgPaths; + + struct CommandStructure + { + CStringView example_text; + + size_t minimum_arity; + size_t maximum_arity; + + Span<const std::string> switches; + Span<const std::string> settings; + + std::vector<std::string> (*valid_arguments)(const VcpkgPaths& paths); + }; } diff --git a/toolsrc/include/vcpkglib.h b/toolsrc/include/vcpkg/vcpkglib.h index 0bb75f9b5..9a7fdb861 100644 --- a/toolsrc/include/vcpkglib.h +++ b/toolsrc/include/vcpkg/vcpkglib.h @@ -1,8 +1,8 @@ #pragma once -#include "SortedVector.h" -#include "StatusParagraphs.h" -#include "VcpkgPaths.h" +#include <vcpkg/base/sortedvector.h> +#include <vcpkg/statusparagraphs.h> +#include <vcpkg/vcpkgpaths.h> namespace vcpkg { @@ -22,17 +22,16 @@ namespace vcpkg struct CMakeVariable { - CMakeVariable(const CWStringView varname, const wchar_t* varvalue); - CMakeVariable(const CWStringView varname, const std::string& varvalue); - CMakeVariable(const CWStringView varname, const std::wstring& varvalue); - CMakeVariable(const CWStringView varname, const fs::path& path); + CMakeVariable(const CStringView varname, const char* varvalue); + CMakeVariable(const CStringView varname, const std::string& varvalue); + CMakeVariable(const CStringView varname, const fs::path& path); - std::wstring s; + std::string s; }; - std::wstring make_cmake_cmd(const fs::path& cmake_exe, - const fs::path& cmake_script, - const std::vector<CMakeVariable>& pass_variables); + std::string make_cmake_cmd(const fs::path& cmake_exe, + const fs::path& cmake_script, + const std::vector<CMakeVariable>& pass_variables); std::string shorten_text(const std::string& desc, size_t length); } // namespace vcpkg diff --git a/toolsrc/include/VcpkgPaths.h b/toolsrc/include/vcpkg/vcpkgpaths.h index d55c95fe1..781dabd1a 100644 --- a/toolsrc/include/VcpkgPaths.h +++ b/toolsrc/include/vcpkg/vcpkgpaths.h @@ -1,25 +1,28 @@ #pragma once -#include "BinaryParagraph.h" -#include "Lazy.h" -#include "PackageSpec.h" -#include "filesystem_fs.h" -#include "vcpkg_Files.h" -#include "vcpkg_expected.h" + +#include <vcpkg/binaryparagraph.h> +#include <vcpkg/packagespec.h> + +#include <vcpkg/base/expected.h> +#include <vcpkg/base/files.h> +#include <vcpkg/base/lazy.h> namespace vcpkg { struct ToolsetArchOption { - CWStringView name; + CStringView name; System::CPUArchitecture host_arch; System::CPUArchitecture target_arch; }; struct Toolset { + fs::path visual_studio_root_path; fs::path dumpbin; fs::path vcvarsall; - CWStringView version; + std::vector<std::string> vcvarsall_options; + CStringView version; std::vector<ToolsetArchOption> supported_architectures; }; @@ -33,6 +36,7 @@ namespace vcpkg fs::path build_info_file_path(const PackageSpec& spec) const; fs::path listfile_path(const BinaryParagraph& pgh) const; + const std::vector<std::string>& get_available_triplets() const; bool is_valid_triplet(const Triplet& t) const; fs::path root; @@ -57,19 +61,27 @@ namespace vcpkg const fs::path& get_cmake_exe() const; const fs::path& get_git_exe() const; const fs::path& get_nuget_exe() const; + const fs::path& get_ifw_installerbase_exe() const; + const fs::path& get_ifw_binarycreator_exe() const; + const fs::path& get_ifw_repogen_exe() const; /// <summary>Retrieve a toolset matching a VS version</summary> /// <remarks> /// Valid version strings are "v140", "v141", and "". Empty string gets the latest. /// </remarks> - const Toolset& get_toolset(const std::string& toolset_version) const; + const Toolset& get_toolset(const Optional<std::string>& toolset_version, + const Optional<fs::path>& visual_studio_path) const; Files::Filesystem& get_filesystem() const; private: + Lazy<std::vector<std::string>> available_triplets; Lazy<fs::path> cmake_exe; Lazy<fs::path> git_exe; Lazy<fs::path> nuget_exe; + Lazy<fs::path> ifw_installerbase_exe; + Lazy<fs::path> ifw_binarycreator_exe; + Lazy<fs::path> ifw_repogen_exe; Lazy<std::vector<Toolset>> toolsets; }; } diff --git a/toolsrc/include/VersionT.h b/toolsrc/include/vcpkg/versiont.h index 67efd8da3..67efd8da3 100644 --- a/toolsrc/include/VersionT.h +++ b/toolsrc/include/vcpkg/versiont.h diff --git a/toolsrc/include/vcpkg_Commands.h b/toolsrc/include/vcpkg_Commands.h deleted file mode 100644 index 756a12f01..000000000 --- a/toolsrc/include/vcpkg_Commands.h +++ /dev/null @@ -1,215 +0,0 @@ -#pragma once - -#include "StatusParagraphs.h" -#include "VcpkgCmdArguments.h" -#include "VcpkgPaths.h" -#include "VersionT.h" -#include "vcpkg_Build.h" -#include "vcpkg_Dependencies.h" -#include <array> - -namespace vcpkg::Commands -{ - using CommandTypeA = void (*)(const VcpkgCmdArguments& args, - const VcpkgPaths& paths, - const Triplet& default_triplet); - using CommandTypeB = void (*)(const VcpkgCmdArguments& args, const VcpkgPaths& paths); - using CommandTypeC = void (*)(const VcpkgCmdArguments& args); - - namespace BuildCommand - { - void perform_and_exit(const FullPackageSpec& full_spec, - const fs::path& port_dir, - const std::unordered_set<std::string>& options, - const VcpkgPaths& paths); - - void perform_and_exit(const VcpkgCmdArguments& args, const VcpkgPaths& paths, const Triplet& default_triplet); - } - - namespace BuildExternal - { - void perform_and_exit(const VcpkgCmdArguments& args, const VcpkgPaths& paths, const Triplet& default_triplet); - } - - namespace Install - { - struct InstallDir - { - static InstallDir from_destination_root(const fs::path& destination_root, - const std::string& destination_subdirectory, - const fs::path& listfile); - - private: - fs::path m_destination; - std::string m_destination_subdirectory; - fs::path m_listfile; - - public: - const fs::path& destination() const; - const std::string& destination_subdirectory() const; - const fs::path& listfile() const; - }; - - Build::BuildResult perform_install_plan_action(const VcpkgPaths& paths, - const Dependencies::InstallPlanAction& action, - const Build::BuildPackageOptions& install_plan_options, - StatusParagraphs& status_db); - - enum class InstallResult - { - FILE_CONFLICTS, - SUCCESS, - }; - - void install_files_and_write_listfile(Files::Filesystem& fs, - const fs::path& source_dir, - const InstallDir& dirs); - InstallResult install_package(const VcpkgPaths& paths, - const BinaryControlFile& binary_paragraph, - StatusParagraphs* status_db); - void perform_and_exit(const VcpkgCmdArguments& args, const VcpkgPaths& paths, const Triplet& default_triplet); - } - - namespace Export - { - void perform_and_exit(const VcpkgCmdArguments& args, const VcpkgPaths& paths, const Triplet& default_triplet); - } - - namespace CI - { - void perform_and_exit(const VcpkgCmdArguments& args, const VcpkgPaths& paths, const Triplet& default_triplet); - } - - namespace Remove - { - void perform_and_exit(const VcpkgCmdArguments& args, const VcpkgPaths& paths, const Triplet& default_triplet); - void remove_package(const VcpkgPaths& paths, const PackageSpec& spec, StatusParagraphs* status_db); - } - - namespace Update - { - struct OutdatedPackage - { - static bool compare_by_name(const OutdatedPackage& left, const OutdatedPackage& right); - - PackageSpec spec; - VersionDiff version_diff; - }; - - std::vector<OutdatedPackage> find_outdated_packages(const VcpkgPaths& paths, const StatusParagraphs& status_db); - void perform_and_exit(const VcpkgCmdArguments& args, const VcpkgPaths& paths); - } - - namespace Env - { - void perform_and_exit(const VcpkgCmdArguments& args, const VcpkgPaths& paths, const Triplet& default_triplet); - } - - namespace Create - { - void perform_and_exit(const VcpkgCmdArguments& args, const VcpkgPaths& paths); - } - - namespace Edit - { - void perform_and_exit(const VcpkgCmdArguments& args, const VcpkgPaths& paths); - } - - namespace DependInfo - { - void perform_and_exit(const VcpkgCmdArguments& args, const VcpkgPaths& paths); - } - - namespace Search - { - void perform_and_exit(const VcpkgCmdArguments& args, const VcpkgPaths& paths); - } - - namespace List - { - void perform_and_exit(const VcpkgCmdArguments& args, const VcpkgPaths& paths); - } - - namespace Owns - { - void perform_and_exit(const VcpkgCmdArguments& args, const VcpkgPaths& paths); - } - - namespace Cache - { - void perform_and_exit(const VcpkgCmdArguments& args, const VcpkgPaths& paths); - } - - namespace Import - { - void perform_and_exit(const VcpkgCmdArguments& args, const VcpkgPaths& paths); - } - - namespace Integrate - { - extern const char* const INTEGRATE_COMMAND_HELPSTRING; - - void perform_and_exit(const VcpkgCmdArguments& args, const VcpkgPaths& paths); - } - - namespace PortsDiff - { - void perform_and_exit(const VcpkgCmdArguments& args, const VcpkgPaths& paths); - } - - namespace Help - { - void perform_and_exit(const VcpkgCmdArguments& args, const VcpkgPaths& paths); - - void help_topic_valid_triplet(const VcpkgPaths& paths); - - void print_usage(); - - void print_example(const std::string& command_and_arguments); - - std::string create_example_string(const std::string& command_and_arguments); - } - - namespace Version - { - const std::string& version(); - void perform_and_exit(const VcpkgCmdArguments& args); - } - - namespace Contact - { - const std::string& email(); - void perform_and_exit(const VcpkgCmdArguments& args); - } - - namespace Hash - { - void perform_and_exit(const VcpkgCmdArguments& args); - } - - template<class T> - struct PackageNameAndFunction - { - std::string name; - T function; - }; - - const std::vector<PackageNameAndFunction<CommandTypeA>>& get_available_commands_type_a(); - const std::vector<PackageNameAndFunction<CommandTypeB>>& get_available_commands_type_b(); - const std::vector<PackageNameAndFunction<CommandTypeC>>& get_available_commands_type_c(); - - template<typename T> - T find(const std::string& command_name, const std::vector<PackageNameAndFunction<T>> available_commands) - { - for (const PackageNameAndFunction<T>& cmd : available_commands) - { - if (cmd.name == command_name) - { - return cmd.function; - } - } - - // not found - return nullptr; - } -} diff --git a/toolsrc/include/vcpkg_Maps.h b/toolsrc/include/vcpkg_Maps.h deleted file mode 100644 index aadd81c2b..000000000 --- a/toolsrc/include/vcpkg_Maps.h +++ /dev/null @@ -1,30 +0,0 @@ -#pragma once - -#include <map> -#include <unordered_map> -#include <unordered_set> - -namespace vcpkg::Maps -{ - template<typename K, typename V> - std::vector<K> extract_keys(const std::unordered_map<K, V>& input_map) - { - std::vector<K> key_set; - for (auto const& element : input_map) - { - key_set.push_back(element.first); - } - return key_set; - } - - template<typename K, typename V> - std::vector<K> extract_keys(const std::map<K, V>& input_map) - { - std::vector<K> key_set; - for (auto const& element : input_map) - { - key_set.push_back(element.first); - } - return key_set; - } -} |
