aboutsummaryrefslogtreecommitdiff
path: root/toolsrc/include
diff options
context:
space:
mode:
Diffstat (limited to 'toolsrc/include')
-rw-r--r--toolsrc/include/pch.h1
-rw-r--r--toolsrc/include/tests.pch.h1
-rw-r--r--toolsrc/include/tests.utils.h16
-rw-r--r--toolsrc/include/vcpkg/base/chrono.h50
-rw-r--r--toolsrc/include/vcpkg/base/files.h1
-rw-r--r--toolsrc/include/vcpkg/base/graphs.h155
-rw-r--r--toolsrc/include/vcpkg/base/optional.h6
-rw-r--r--toolsrc/include/vcpkg/base/system.h28
-rw-r--r--toolsrc/include/vcpkg/build.h31
-rw-r--r--toolsrc/include/vcpkg/commands.h7
-rw-r--r--toolsrc/include/vcpkg/dependencies.h55
-rw-r--r--toolsrc/include/vcpkg/globalstate.h6
-rw-r--r--toolsrc/include/vcpkg/install.h4
-rw-r--r--toolsrc/include/vcpkg/packagespec.h11
-rw-r--r--toolsrc/include/vcpkg/paragraphs.h3
-rw-r--r--toolsrc/include/vcpkg/postbuildlint.buildtype.h24
-rw-r--r--toolsrc/include/vcpkg/update.h6
-rw-r--r--toolsrc/include/vcpkg/userconfig.h20
-rw-r--r--toolsrc/include/vcpkg/vcpkglib.h15
-rw-r--r--toolsrc/include/vcpkg/vcpkgpaths.h11
20 files changed, 269 insertions, 182 deletions
diff --git a/toolsrc/include/pch.h b/toolsrc/include/pch.h
index 5c31fbbd1..683bef171 100644
--- a/toolsrc/include/pch.h
+++ b/toolsrc/include/pch.h
@@ -41,6 +41,7 @@
#include <map>
#include <memory>
#include <mutex>
+#include <random>
#include <regex>
#include <set>
#include <stdexcept>
diff --git a/toolsrc/include/tests.pch.h b/toolsrc/include/tests.pch.h
index 0037af585..5c00fca4a 100644
--- a/toolsrc/include/tests.pch.h
+++ b/toolsrc/include/tests.pch.h
@@ -2,6 +2,7 @@
#include <CppUnitTest.h>
+#include <vcpkg/base/chrono.h>
#include <vcpkg/base/sortedvector.h>
#include <vcpkg/base/strings.h>
#include <vcpkg/base/util.h>
diff --git a/toolsrc/include/tests.utils.h b/toolsrc/include/tests.utils.h
index 485b8c294..0c0add7ab 100644
--- a/toolsrc/include/tests.utils.h
+++ b/toolsrc/include/tests.utils.h
@@ -23,4 +23,18 @@ std::unique_ptr<vcpkg::StatusParagraph> make_status_pgh(const char* name,
std::unique_ptr<vcpkg::StatusParagraph> make_status_feature_pgh(const char* name,
const char* feature,
const char* depends = "",
- const char* triplet = "x86-windows"); \ No newline at end of file
+ const char* triplet = "x86-windows");
+
+template<class T, class S>
+T&& unwrap(vcpkg::ExpectedT<T, S>&& p)
+{
+ Assert::IsTrue(p.has_value());
+ return std::move(*p.get());
+}
+
+template<class T>
+T&& unwrap(vcpkg::Optional<T>&& opt)
+{
+ Assert::IsTrue(opt.has_value());
+ return std::move(*opt.get());
+}
diff --git a/toolsrc/include/vcpkg/base/chrono.h b/toolsrc/include/vcpkg/base/chrono.h
index b525852f2..4291115f7 100644
--- a/toolsrc/include/vcpkg/base/chrono.h
+++ b/toolsrc/include/vcpkg/base/chrono.h
@@ -2,27 +2,65 @@
#include <chrono>
#include <string>
+#include <time.h>
+#include <vcpkg/base/optional.h>
namespace vcpkg::Chrono
{
class ElapsedTime
{
- public:
- static ElapsedTime create_started();
+ using duration = std::chrono::high_resolution_clock::time_point::duration;
- constexpr ElapsedTime() : m_start_tick() {}
+ public:
+ constexpr ElapsedTime() : m_duration() {}
+ constexpr ElapsedTime(duration d) : m_duration(d) {}
template<class TimeUnit>
- TimeUnit elapsed() const
+ TimeUnit as() const
+ {
+ return std::chrono::duration_cast<TimeUnit>(m_duration);
+ }
+
+ std::string to_string() const;
+
+ private:
+ std::chrono::high_resolution_clock::time_point::duration m_duration;
+ };
+
+ class ElapsedTimer
+ {
+ public:
+ static ElapsedTimer create_started();
+
+ constexpr ElapsedTimer() : m_start_tick() {}
+
+ ElapsedTime elapsed() const
{
- return std::chrono::duration_cast<TimeUnit>(std::chrono::high_resolution_clock::now() - this->m_start_tick);
+ return ElapsedTime(std::chrono::high_resolution_clock::now() - this->m_start_tick);
}
- double microseconds() const { return elapsed<std::chrono::duration<double, std::micro>>().count(); }
+ double microseconds() const { return elapsed().as<std::chrono::duration<double, std::micro>>().count(); }
std::string to_string() const;
private:
std::chrono::high_resolution_clock::time_point m_start_tick;
};
+
+ class CTime
+ {
+ public:
+ static Optional<CTime> get_current_date_time();
+ static Optional<CTime> parse(CStringView str);
+
+ constexpr CTime() : m_tm{0} {}
+ explicit constexpr CTime(tm t) : m_tm{t} {}
+
+ std::string to_string() const;
+
+ std::chrono::system_clock::time_point to_time_point() const;
+
+ private:
+ mutable tm m_tm;
+ };
}
diff --git a/toolsrc/include/vcpkg/base/files.h b/toolsrc/include/vcpkg/base/files.h
index 63cf3c6fd..51a12ceba 100644
--- a/toolsrc/include/vcpkg/base/files.h
+++ b/toolsrc/include/vcpkg/base/files.h
@@ -15,6 +15,7 @@ namespace fs
using stdfs::copy_options;
using stdfs::file_status;
using stdfs::path;
+ using stdfs::u8path;
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); }
diff --git a/toolsrc/include/vcpkg/base/graphs.h b/toolsrc/include/vcpkg/base/graphs.h
index b585d2bb9..bd22bbcb0 100644
--- a/toolsrc/include/vcpkg/base/graphs.h
+++ b/toolsrc/include/vcpkg/base/graphs.h
@@ -4,6 +4,7 @@
#include <unordered_set>
#include <vcpkg/base/checks.h>
+#include <vcpkg/base/span.h>
namespace vcpkg::Graphs
{
@@ -23,139 +24,97 @@ namespace vcpkg::Graphs
struct AdjacencyProvider
{
virtual std::vector<V> adjacency_list(const U& vertex) const = 0;
-
+ virtual std::string to_string(const V& vertex) const = 0;
virtual U load_vertex_data(const V& vertex) const = 0;
};
- template<class V, class U>
- static void topological_sort_internal(const V& vertex,
- const AdjacencyProvider<V, U>& f,
- std::unordered_map<V, ExplorationStatus>& exploration_status,
- std::vector<U>& sorted)
+ namespace details
{
- ExplorationStatus& status = exploration_status[vertex];
- switch (status)
+ template<class V, class U>
+ void topological_sort_internal(const V& vertex,
+ const AdjacencyProvider<V, U>& f,
+ std::unordered_map<V, ExplorationStatus>& exploration_status,
+ std::vector<U>& sorted)
{
- case ExplorationStatus::FULLY_EXPLORED: return;
- case ExplorationStatus::PARTIALLY_EXPLORED: Checks::exit_with_message(VCPKG_LINE_INFO, "cycle in graph");
- case ExplorationStatus::NOT_EXPLORED:
+ ExplorationStatus& status = exploration_status[vertex];
+ switch (status)
{
- status = ExplorationStatus::PARTIALLY_EXPLORED;
- U vertex_data = f.load_vertex_data(vertex);
- for (const V& neighbour : f.adjacency_list(vertex_data))
- topological_sort_internal(neighbour, f, exploration_status, sorted);
-
- sorted.push_back(std::move(vertex_data));
- status = ExplorationStatus::FULLY_EXPLORED;
- return;
+ case ExplorationStatus::FULLY_EXPLORED: return;
+ case ExplorationStatus::PARTIALLY_EXPLORED:
+ {
+ System::println("Cycle detected within graph:");
+ for (auto&& node : exploration_status)
+ {
+ if (node.second == ExplorationStatus::PARTIALLY_EXPLORED)
+ {
+ System::println(" %s", f.to_string(node.first));
+ }
+ }
+ Checks::exit_fail(VCPKG_LINE_INFO);
+ }
+ case ExplorationStatus::NOT_EXPLORED:
+ {
+ status = ExplorationStatus::PARTIALLY_EXPLORED;
+ U vertex_data = f.load_vertex_data(vertex);
+ for (const V& neighbour : f.adjacency_list(vertex_data))
+ topological_sort_internal(neighbour, f, exploration_status, sorted);
+
+ sorted.push_back(std::move(vertex_data));
+ status = ExplorationStatus::FULLY_EXPLORED;
+ return;
+ }
+ default: Checks::unreachable(VCPKG_LINE_INFO);
}
- default: Checks::unreachable(VCPKG_LINE_INFO);
}
}
- template<class V, class U>
- std::vector<U> topological_sort(const std::vector<V>& starting_vertices, const AdjacencyProvider<V, U>& f)
+ template<class VertexRange, class V, class U>
+ std::vector<U> topological_sort(const VertexRange& starting_vertices, const AdjacencyProvider<V, U>& f)
{
std::vector<U> sorted;
std::unordered_map<V, ExplorationStatus> exploration_status;
- for (auto& vertex : starting_vertices)
+ for (auto&& vertex : starting_vertices)
{
- topological_sort_internal(vertex, f, exploration_status, sorted);
+ details::topological_sort_internal(vertex, f, exploration_status, sorted);
}
return sorted;
}
template<class V>
- struct GraphAdjacencyProvider final : AdjacencyProvider<V, V>
- {
- const std::unordered_map<V, std::unordered_set<V>>& vertices;
-
- GraphAdjacencyProvider(const std::unordered_map<V, std::unordered_set<V>>& vertices) : vertices(vertices) {}
-
- std::vector<V> adjacency_list(const V& vertex) const override
- {
- const std::unordered_set<V>& as_set = this->vertices.at(vertex);
- return std::vector<V>(as_set.cbegin(), as_set.cend()); // TODO: Avoid redundant copy
- }
-
- V load_vertex_data(const V& vertex) const override { return vertex; }
- };
-
- template<class V>
- struct Graph
+ struct Graph final : AdjacencyProvider<V, V>
{
public:
- void add_vertex(V v) { this->vertices[v]; }
+ void add_vertex(const V& v) { this->m_edges[v]; }
- // TODO: Change with iterators
- void add_vertices(const std::vector<V>& vs)
+ void add_edge(const V& u, const V& v)
{
- for (const V& v : vs)
- {
- this->vertices[v];
- }
+ this->m_edges[v];
+ this->m_edges[u].insert(v);
}
- void add_edge(V u, V v)
+ std::vector<V> vertex_list() const
{
- this->vertices[v];
- this->vertices[u].insert(v);
+ std::vector<V> vertex_list;
+ for (auto&& vertex : this->m_edges)
+ vertex_list.emplace_back(vertex.first);
+ return vertex_list;
}
- std::vector<V> topological_sort() const
+ std::vector<V> adjacency_list(const V& vertex) const override
{
- GraphAdjacencyProvider<V> adjacency_provider{this->vertices};
- std::unordered_map<V, int> indegrees = count_indegrees();
-
- std::vector<V> sorted;
- sorted.reserve(indegrees.size());
-
- std::unordered_map<V, ExplorationStatus> exploration_status;
- exploration_status.reserve(indegrees.size());
-
- for (auto& pair : indegrees)
- {
- if (pair.second == 0) // Starting from vertices with indegree == 0. Not required.
- {
- V vertex = pair.first;
- topological_sort_internal(vertex, adjacency_provider, exploration_status, sorted);
- }
- }
-
- return sorted;
+ const std::unordered_set<V>& as_set = this->m_edges.at(vertex);
+ return std::vector<V>(as_set.cbegin(), as_set.cend()); // TODO: Avoid redundant copy
}
- std::unordered_map<V, int> count_indegrees() const
- {
- std::unordered_map<V, int> indegrees;
-
- for (auto& pair : this->vertices)
- {
- indegrees[pair.first];
- for (V neighbour : pair.second)
- {
- ++indegrees[neighbour];
- }
- }
-
- return indegrees;
- }
+ V load_vertex_data(const V& vertex) const override { return vertex; }
- const std::unordered_map<V, std::unordered_set<V>>& adjacency_list() const { return this->vertices; }
- std::vector<V> vertex_list() const
- {
- // why no &? it returns 0
- std::vector<V> vertex_list;
- for (const auto& vertex : this->vertices)
- {
- vertex_list.emplace_back(vertex.first);
- }
- return vertex_list;
- }
+ // Note: this function indicates how tied this template is to the exact type it will be templated upon.
+ // Possible fix: This type shouldn't implement to_string() and should instead be derived from?
+ std::string to_string(const V& spec) const override { return spec->spec.to_string(); }
private:
- std::unordered_map<V, std::unordered_set<V>> vertices;
+ std::unordered_map<V, std::unordered_set<V>> m_edges;
};
}
diff --git a/toolsrc/include/vcpkg/base/optional.h b/toolsrc/include/vcpkg/base/optional.h
index aa9e480fd..af2d297a6 100644
--- a/toolsrc/include/vcpkg/base/optional.h
+++ b/toolsrc/include/vcpkg/base/optional.h
@@ -53,10 +53,8 @@ namespace vcpkg
// Constructors are intentionally implicit
constexpr Optional(NullOpt) {}
- Optional(const T& t) : m_base(t) {}
-
- template<class = std::enable_if_t<!std::is_reference<T>::value>>
- Optional(T&& t) : m_base(std::move(t))
+ template<class U>
+ Optional(U&& t) : m_base(std::forward<U>(t))
{
}
diff --git a/toolsrc/include/vcpkg/base/system.h b/toolsrc/include/vcpkg/base/system.h
index 9f2d91435..31034f6b4 100644
--- a/toolsrc/include/vcpkg/base/system.h
+++ b/toolsrc/include/vcpkg/base/system.h
@@ -10,6 +10,28 @@ namespace vcpkg::System
fs::path get_exe_path_of_current_process();
+ struct CMakeVariable
+ {
+ CMakeVariable(const CStringView varname, const char* varvalue);
+ CMakeVariable(const CStringView varname, const std::string& varvalue);
+ CMakeVariable(const CStringView varname, const fs::path& path);
+
+ std::string s;
+ };
+
+ std::string make_cmake_cmd(const fs::path& cmake_exe,
+ const fs::path& cmake_script,
+ const std::vector<CMakeVariable>& pass_variables);
+
+ struct PowershellParameter
+ {
+ PowershellParameter(const CStringView varname, const char* varvalue);
+ PowershellParameter(const CStringView varname, const std::string& varvalue);
+ PowershellParameter(const CStringView varname, const fs::path& path);
+
+ std::string s;
+ };
+
struct ExitCodeAndOutput
{
int exit_code;
@@ -22,9 +44,13 @@ namespace vcpkg::System
ExitCodeAndOutput cmd_execute_and_capture_output(const CStringView cmd_line);
+ void powershell_execute(const std::string& title,
+ const fs::path& script_path,
+ const std::vector<PowershellParameter>& parameters = {});
+
std::string powershell_execute_and_capture_output(const std::string& title,
const fs::path& script_path,
- const CStringView args = "");
+ const std::vector<PowershellParameter>& parameters = {});
enum class Color
{
diff --git a/toolsrc/include/vcpkg/build.h b/toolsrc/include/vcpkg/build.h
index 1f6782ccf..e3f8bf79e 100644
--- a/toolsrc/include/vcpkg/build.h
+++ b/toolsrc/include/vcpkg/build.h
@@ -44,6 +44,12 @@ namespace vcpkg::Build
YES
};
+ enum class ConfigurationType
+ {
+ DEBUG,
+ RELEASE,
+ };
+
struct BuildPackageOptions
{
UseHeadVersion use_head_version;
@@ -89,6 +95,8 @@ namespace vcpkg::Build
std::string cmake_system_version;
Optional<std::string> platform_toolset;
Optional<fs::path> visual_studio_path;
+ Optional<std::string> external_toolchain_file;
+ Optional<ConfigurationType> build_type;
};
std::string make_build_env_cmd(const PreBuildInfo& pre_build_info, const Toolset& toolset);
@@ -106,39 +114,24 @@ namespace vcpkg::Build
struct BuildPackageConfig
{
- BuildPackageConfig(const SourceParagraph& src,
- const Triplet& triplet,
- fs::path&& port_dir,
- const BuildPackageOptions& build_package_options)
- : src(src)
- , scf(nullptr)
- , triplet(triplet)
- , port_dir(std::move(port_dir))
- , build_package_options(build_package_options)
- , feature_list(nullptr)
- {
- }
-
BuildPackageConfig(const SourceControlFile& src,
const Triplet& triplet,
fs::path&& port_dir,
const BuildPackageOptions& build_package_options,
const std::unordered_set<std::string>& feature_list)
- : src(*src.core_paragraph)
- , scf(&src)
+ : scf(src)
, triplet(triplet)
, port_dir(std::move(port_dir))
, build_package_options(build_package_options)
- , feature_list(&feature_list)
+ , feature_list(feature_list)
{
}
- const SourceParagraph& src;
- const SourceControlFile* scf;
+ const SourceControlFile& scf;
const Triplet& triplet;
fs::path port_dir;
const BuildPackageOptions& build_package_options;
- const std::unordered_set<std::string>* feature_list;
+ const std::unordered_set<std::string>& feature_list;
};
ExtendedBuildResult build_package(const VcpkgPaths& paths,
diff --git a/toolsrc/include/vcpkg/commands.h b/toolsrc/include/vcpkg/commands.h
index 74fd80c03..c82f504e0 100644
--- a/toolsrc/include/vcpkg/commands.h
+++ b/toolsrc/include/vcpkg/commands.h
@@ -39,6 +39,12 @@ namespace vcpkg::Commands
void perform_and_exit(const VcpkgCmdArguments& args, const VcpkgPaths& paths);
}
+ namespace Upgrade
+ {
+ extern const CommandStructure COMMAND_STRUCTURE;
+ void perform_and_exit(const VcpkgCmdArguments& args, const VcpkgPaths& paths, const Triplet& default_triplet);
+ }
+
namespace Edit
{
extern const CommandStructure COMMAND_STRUCTURE;
@@ -98,6 +104,7 @@ namespace vcpkg::Commands
namespace Version
{
+ const char* base_version();
const std::string& version();
void warn_if_vcpkg_version_mismatch(const VcpkgPaths& paths);
void perform_and_exit(const VcpkgCmdArguments& args);
diff --git a/toolsrc/include/vcpkg/dependencies.h b/toolsrc/include/vcpkg/dependencies.h
index 5411ee166..8902a7b08 100644
--- a/toolsrc/include/vcpkg/dependencies.h
+++ b/toolsrc/include/vcpkg/dependencies.h
@@ -1,6 +1,5 @@
#pragma once
-#include <vcpkg/base/graphs.h>
#include <vcpkg/base/optional.h>
#include <vcpkg/base/util.h>
#include <vcpkg/build.h>
@@ -30,7 +29,6 @@ namespace vcpkg::Dependencies
Optional<StatusParagraph> status_paragraph;
Optional<BinaryControlFile> binary_control_file;
- Optional<SourceParagraph> source_paragraph;
Optional<const SourceControlFile*> source_control_file;
};
}
@@ -92,11 +90,11 @@ namespace vcpkg::Dependencies
struct AnyAction
{
- AnyAction(InstallPlanAction&& iplan) : install_plan(std::move(iplan)) {}
- AnyAction(RemovePlanAction&& rplan) : remove_plan(std::move(rplan)) {}
+ AnyAction(InstallPlanAction&& iplan) : install_action(std::move(iplan)) {}
+ AnyAction(RemovePlanAction&& rplan) : remove_action(std::move(rplan)) {}
- Optional<InstallPlanAction> install_plan;
- Optional<RemovePlanAction> remove_plan;
+ Optional<InstallPlanAction> install_action;
+ Optional<RemovePlanAction> remove_action;
const PackageSpec& spec() const;
};
@@ -123,22 +121,44 @@ namespace vcpkg::Dependencies
struct PortFileProvider
{
- virtual const SourceControlFile& get_control_file(const std::string& spec) const = 0;
+ virtual Optional<const SourceControlFile&> get_control_file(const std::string& src_name) const = 0;
};
- struct MapPortFile : Util::ResourceBase, PortFileProvider
+ struct MapPortFileProvider : Util::ResourceBase, PortFileProvider
{
+ explicit MapPortFileProvider(const std::unordered_map<std::string, SourceControlFile>& map);
+ Optional<const SourceControlFile&> get_control_file(const std::string& src_name) const override;
+
+ private:
const std::unordered_map<std::string, SourceControlFile>& ports;
- explicit MapPortFile(const std::unordered_map<std::string, SourceControlFile>& map);
- const SourceControlFile& get_control_file(const std::string& spec) const override;
};
- struct PathsPortFile : Util::ResourceBase, PortFileProvider
+ struct PathsPortFileProvider : Util::ResourceBase, PortFileProvider
{
+ explicit PathsPortFileProvider(const VcpkgPaths& paths);
+ Optional<const SourceControlFile&> get_control_file(const std::string& src_name) const override;
+
+ private:
const VcpkgPaths& ports;
mutable std::unordered_map<std::string, SourceControlFile> cache;
- explicit PathsPortFile(const VcpkgPaths& paths);
- const SourceControlFile& get_control_file(const std::string& spec) const override;
+ };
+
+ struct ClusterGraph;
+ struct GraphPlan;
+
+ struct PackageGraph
+ {
+ PackageGraph(const PortFileProvider& provider, const StatusParagraphs& status_db);
+ ~PackageGraph();
+
+ void install(const FeatureSpec& spec);
+ void upgrade(const PackageSpec& spec);
+
+ std::vector<AnyAction> serialize() const;
+
+ private:
+ std::unique_ptr<GraphPlan> m_graph_plan;
+ std::unique_ptr<ClusterGraph> m_graph;
};
std::vector<InstallPlanAction> create_install_plan(const PortFileProvider& port_file_provider,
@@ -148,11 +168,18 @@ namespace vcpkg::Dependencies
std::vector<RemovePlanAction> create_remove_plan(const std::vector<PackageSpec>& specs,
const StatusParagraphs& status_db);
- std::vector<ExportPlanAction> create_export_plan(const VcpkgPaths& paths,
+ std::vector<ExportPlanAction> create_export_plan(const PortFileProvider& port_file_provider,
+ const VcpkgPaths& paths,
const std::vector<PackageSpec>& specs,
const StatusParagraphs& status_db);
std::vector<AnyAction> create_feature_install_plan(const std::unordered_map<std::string, SourceControlFile>& map,
const std::vector<FeatureSpec>& specs,
const StatusParagraphs& status_db);
+
+ std::vector<AnyAction> create_feature_install_plan(const PortFileProvider& port_file_provider,
+ const std::vector<FeatureSpec>& specs,
+ const StatusParagraphs& status_db);
+
+ void print_plan(const std::vector<AnyAction>& action_plan, const bool is_recursive = true);
}
diff --git a/toolsrc/include/vcpkg/globalstate.h b/toolsrc/include/vcpkg/globalstate.h
index 7cea361cf..360d3f43e 100644
--- a/toolsrc/include/vcpkg/globalstate.h
+++ b/toolsrc/include/vcpkg/globalstate.h
@@ -9,11 +9,13 @@ namespace vcpkg
{
struct GlobalState
{
- static Util::LockGuarded<Chrono::ElapsedTime> timer;
+ static Util::LockGuarded<Chrono::ElapsedTimer> timer;
+ static Util::LockGuarded<std::string> g_surveydate;
+
static std::atomic<bool> debugging;
static std::atomic<bool> feature_packages;
static std::atomic<int> g_init_console_cp;
static std::atomic<int> g_init_console_output_cp;
};
-} \ No newline at end of file
+}
diff --git a/toolsrc/include/vcpkg/install.h b/toolsrc/include/vcpkg/install.h
index 28896adee..2e92764dc 100644
--- a/toolsrc/include/vcpkg/install.h
+++ b/toolsrc/include/vcpkg/install.h
@@ -1,5 +1,6 @@
#pragma once
+#include <vcpkg/base/chrono.h>
#include <vcpkg/build.h>
#include <vcpkg/dependencies.h>
#include <vcpkg/vcpkgcmdarguments.h>
@@ -25,7 +26,7 @@ namespace vcpkg::Install
PackageSpec spec;
Build::ExtendedBuildResult build_result;
- std::string timing;
+ vcpkg::Chrono::ElapsedTime timing;
const Dependencies::AnyAction* action;
};
@@ -36,6 +37,7 @@ namespace vcpkg::Install
std::string total_elapsed_time;
void print() const;
+ std::string xunit_results() const;
};
struct InstallDir
diff --git a/toolsrc/include/vcpkg/packagespec.h b/toolsrc/include/vcpkg/packagespec.h
index 0487ae6b8..f1119e2f3 100644
--- a/toolsrc/include/vcpkg/packagespec.h
+++ b/toolsrc/include/vcpkg/packagespec.h
@@ -22,6 +22,10 @@ namespace vcpkg
static std::vector<PackageSpec> to_package_specs(const std::vector<std::string>& ports, const Triplet& triplet);
+ static std::vector<PackageSpec> from_dependencies_of_port(const std::string& port,
+ const std::vector<std::string>& dependencies,
+ const Triplet& triplet);
+
const std::string& name() const;
const Triplet& triplet() const;
@@ -30,6 +34,13 @@ namespace vcpkg
std::string to_string() const;
+ bool operator<(const PackageSpec& other) const
+ {
+ if (name() < other.name()) return true;
+ if (name() > other.name()) return false;
+ return triplet() < other.triplet();
+ }
+
private:
std::string m_name;
Triplet m_triplet;
diff --git a/toolsrc/include/vcpkg/paragraphs.h b/toolsrc/include/vcpkg/paragraphs.h
index c8dbea646..e2c7f2d99 100644
--- a/toolsrc/include/vcpkg/paragraphs.h
+++ b/toolsrc/include/vcpkg/paragraphs.h
@@ -32,7 +32,4 @@ namespace vcpkg::Paragraphs
std::vector<std::unique_ptr<SourceControlFile>> load_all_ports(const Files::Filesystem& fs,
const fs::path& ports_dir);
-
- std::map<std::string, VersionT> load_all_port_names_and_versions(const Files::Filesystem& fs,
- const fs::path& ports_dir);
}
diff --git a/toolsrc/include/vcpkg/postbuildlint.buildtype.h b/toolsrc/include/vcpkg/postbuildlint.buildtype.h
index ff651fd7a..0b469d9a0 100644
--- a/toolsrc/include/vcpkg/postbuildlint.buildtype.h
+++ b/toolsrc/include/vcpkg/postbuildlint.buildtype.h
@@ -8,12 +8,6 @@
namespace vcpkg::PostBuildLint
{
- enum class ConfigurationType
- {
- DEBUG,
- RELEASE,
- };
-
struct BuildType
{
enum class BackingEnum
@@ -24,12 +18,12 @@ namespace vcpkg::PostBuildLint
RELEASE_DYNAMIC
};
- static BuildType value_of(const ConfigurationType& config, const Build::LinkageType& linkage);
+ static BuildType value_of(const Build::ConfigurationType& config, const Build::LinkageType& linkage);
BuildType() = delete;
constexpr BuildType(const BackingEnum backing_enum,
- const ConfigurationType config,
+ const Build::ConfigurationType config,
const Build::LinkageType linkage)
: backing_enum(backing_enum), m_config(config), m_linkage(linkage)
{
@@ -37,14 +31,14 @@ namespace vcpkg::PostBuildLint
constexpr operator BackingEnum() const { return backing_enum; }
- const ConfigurationType& config() const;
+ const Build::ConfigurationType& config() const;
const Build::LinkageType& linkage() const;
const std::regex& crt_regex() const;
const std::string& to_string() const;
private:
BackingEnum backing_enum;
- ConfigurationType m_config;
+ Build::ConfigurationType m_config;
Build::LinkageType m_linkage;
};
@@ -55,12 +49,14 @@ namespace vcpkg::PostBuildLint
static constexpr CStringView ENUM_NAME = "vcpkg::PostBuildLint::BuildType";
- static constexpr BuildType DEBUG_STATIC = {BE::DEBUG_STATIC, ConfigurationType::DEBUG, LinkageType::STATIC};
- static constexpr BuildType DEBUG_DYNAMIC = {BE::DEBUG_DYNAMIC, ConfigurationType::DEBUG, LinkageType::DYNAMIC};
+ static constexpr BuildType DEBUG_STATIC = {
+ BE::DEBUG_STATIC, Build::ConfigurationType::DEBUG, LinkageType::STATIC};
+ static constexpr BuildType DEBUG_DYNAMIC = {
+ BE::DEBUG_DYNAMIC, Build::ConfigurationType::DEBUG, LinkageType::DYNAMIC};
static constexpr BuildType RELEASE_STATIC = {
- BE::RELEASE_STATIC, ConfigurationType::RELEASE, LinkageType::STATIC};
+ BE::RELEASE_STATIC, Build::ConfigurationType::RELEASE, LinkageType::STATIC};
static constexpr BuildType RELEASE_DYNAMIC = {
- BE::RELEASE_DYNAMIC, ConfigurationType::RELEASE, LinkageType::DYNAMIC};
+ BE::RELEASE_DYNAMIC, Build::ConfigurationType::RELEASE, LinkageType::DYNAMIC};
static constexpr std::array<BuildType, 4> VALUES = {
DEBUG_STATIC, DEBUG_DYNAMIC, RELEASE_STATIC, RELEASE_DYNAMIC};
diff --git a/toolsrc/include/vcpkg/update.h b/toolsrc/include/vcpkg/update.h
index 7587b9eb2..b85f7b2b3 100644
--- a/toolsrc/include/vcpkg/update.h
+++ b/toolsrc/include/vcpkg/update.h
@@ -1,5 +1,6 @@
#pragma once
+#include <vcpkg/dependencies.h>
#include <vcpkg/packagespec.h>
#include <vcpkg/statusparagraphs.h>
#include <vcpkg/vcpkgcmdarguments.h>
@@ -16,7 +17,8 @@ namespace vcpkg::Update
VersionDiff version_diff;
};
- std::vector<OutdatedPackage> find_outdated_packages(const std::map<std::string, VersionT>& src_names_to_versions,
+ std::vector<OutdatedPackage> find_outdated_packages(const Dependencies::PortFileProvider& provider,
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/vcpkg/userconfig.h b/toolsrc/include/vcpkg/userconfig.h
new file mode 100644
index 000000000..63b8e5481
--- /dev/null
+++ b/toolsrc/include/vcpkg/userconfig.h
@@ -0,0 +1,20 @@
+#pragma once
+
+#include <string>
+#include <vcpkg/base/files.h>
+
+namespace vcpkg
+{
+ struct UserConfig
+ {
+ std::string user_id;
+ std::string user_time;
+ std::string user_mac;
+
+ std::string last_completed_survey;
+
+ static UserConfig try_read_data(const Files::Filesystem& fs);
+
+ void try_write_data(Files::Filesystem& fs) const;
+ };
+}
diff --git a/toolsrc/include/vcpkg/vcpkglib.h b/toolsrc/include/vcpkg/vcpkglib.h
index 9a7fdb861..3c8e676bf 100644
--- a/toolsrc/include/vcpkg/vcpkglib.h
+++ b/toolsrc/include/vcpkg/vcpkglib.h
@@ -20,18 +20,5 @@ namespace vcpkg
std::vector<StatusParagraphAndAssociatedFiles> get_installed_files(const VcpkgPaths& paths,
const StatusParagraphs& status_db);
- struct CMakeVariable
- {
- CMakeVariable(const CStringView varname, const char* varvalue);
- CMakeVariable(const CStringView varname, const std::string& varvalue);
- CMakeVariable(const CStringView varname, const fs::path& path);
-
- std::string s;
- };
-
- 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);
+ std::string shorten_text(const std::string& desc, const size_t length);
} // namespace vcpkg
diff --git a/toolsrc/include/vcpkg/vcpkgpaths.h b/toolsrc/include/vcpkg/vcpkgpaths.h
index 781dabd1a..33a9b0067 100644
--- a/toolsrc/include/vcpkg/vcpkgpaths.h
+++ b/toolsrc/include/vcpkg/vcpkgpaths.h
@@ -26,6 +26,11 @@ namespace vcpkg
std::vector<ToolsetArchOption> supported_architectures;
};
+ namespace Build
+ {
+ struct PreBuildInfo;
+ }
+
struct VcpkgPaths
{
static Expected<VcpkgPaths> create(const fs::path& vcpkg_root_dir);
@@ -67,10 +72,9 @@ namespace vcpkg
/// <summary>Retrieve a toolset matching a VS version</summary>
/// <remarks>
- /// Valid version strings are "v140", "v141", and "". Empty string gets the latest.
+ /// Valid version strings are "v120", "v140", "v141", and "". Empty string gets the latest.
/// </remarks>
- const Toolset& get_toolset(const Optional<std::string>& toolset_version,
- const Optional<fs::path>& visual_studio_path) const;
+ const Toolset& get_toolset(const Build::PreBuildInfo& prebuildinfo) const;
Files::Filesystem& get_filesystem() const;
@@ -83,5 +87,6 @@ namespace vcpkg
Lazy<fs::path> ifw_binarycreator_exe;
Lazy<fs::path> ifw_repogen_exe;
Lazy<std::vector<Toolset>> toolsets;
+ Lazy<std::vector<Toolset>> toolsets_vs2013;
};
}