aboutsummaryrefslogtreecommitdiff
path: root/toolsrc/src
diff options
context:
space:
mode:
Diffstat (limited to 'toolsrc/src')
-rw-r--r--toolsrc/src/vcpkg-test/catch.cpp3
-rw-r--r--toolsrc/src/vcpkg-test/commands.build.cpp38
-rw-r--r--toolsrc/src/vcpkg-test/manifests.cpp14
-rw-r--r--toolsrc/src/vcpkg-test/optional.cpp27
-rw-r--r--toolsrc/src/vcpkg/build.cpp3
-rw-r--r--toolsrc/src/vcpkg/commands.ci.cpp50
-rw-r--r--toolsrc/src/vcpkg/dependencies.cpp4
-rw-r--r--toolsrc/src/vcpkg/export.prefab.cpp2
-rw-r--r--toolsrc/src/vcpkg/paragraphs.cpp10
-rw-r--r--toolsrc/src/vcpkg/remove.cpp11
-rw-r--r--toolsrc/src/vcpkg/sourceparagraph.cpp9
-rw-r--r--toolsrc/src/vcpkg/triplet.cpp28
12 files changed, 107 insertions, 92 deletions
diff --git a/toolsrc/src/vcpkg-test/catch.cpp b/toolsrc/src/vcpkg-test/catch.cpp
index 50331c644..fb62c5d06 100644
--- a/toolsrc/src/vcpkg-test/catch.cpp
+++ b/toolsrc/src/vcpkg-test/catch.cpp
@@ -2,10 +2,11 @@
#include <catch2/catch.hpp>
#include <vcpkg/base/system.debug.h>
+#include <vcpkg/base/system.h>
int main(int argc, char** argv)
{
- vcpkg::Debug::g_debugging = true;
+ if (vcpkg::System::get_environment_variable("VCPKG_DEBUG").value_or("") == "1") vcpkg::Debug::g_debugging = true;
return Catch::Session().run(argc, argv);
}
diff --git a/toolsrc/src/vcpkg-test/commands.build.cpp b/toolsrc/src/vcpkg-test/commands.build.cpp
deleted file mode 100644
index 467fadd72..000000000
--- a/toolsrc/src/vcpkg-test/commands.build.cpp
+++ /dev/null
@@ -1,38 +0,0 @@
-#include <catch2/catch.hpp>
-
-#include <vcpkg/base/files.h>
-
-#include <vcpkg/build.h>
-#include <vcpkg/commands.h>
-#include <vcpkg/vcpkgcmdarguments.h>
-#include <vcpkg/vcpkgpaths.h>
-
-#include <iterator>
-#include <string>
-
-#include <vcpkg-test/util.h>
-
-using namespace vcpkg;
-
-TEST_CASE ("build smoke test", "[commands-build]")
-{
- static const std::string args_raw[] = {"build", "zlib"};
-
- auto& fs_wrapper = Files::get_real_filesystem();
- VcpkgCmdArguments args = VcpkgCmdArguments::create_from_arg_sequence(std::begin(args_raw), std::end(args_raw));
- args.binary_caching = false;
- args.buildtrees_root_dir =
- std::make_unique<std::string>(fs::u8string(Test::base_temporary_directory() / fs::u8path("buildtrees")));
- args.install_root_dir =
- std::make_unique<std::string>(fs::u8string(Test::base_temporary_directory() / fs::u8path("installed")));
- args.packages_root_dir =
- std::make_unique<std::string>(fs::u8string(Test::base_temporary_directory() / fs::u8path("packages")));
- VcpkgPaths paths(fs_wrapper, args);
- if (fs_wrapper.exists(paths.buildtrees)) fs_wrapper.remove_all_inside(paths.buildtrees, VCPKG_LINE_INFO);
- if (fs_wrapper.exists(paths.packages)) fs_wrapper.remove_all_inside(paths.packages, VCPKG_LINE_INFO);
- if (fs_wrapper.exists(paths.installed)) fs_wrapper.remove_all_inside(paths.installed, VCPKG_LINE_INFO);
- auto triplet = default_triplet(args);
- const auto exit_code = Build::Command::perform(args, paths, triplet);
- REQUIRE(exit_code == 0);
- REQUIRE(paths.get_filesystem().is_directory(paths.buildtrees / fs::u8path("zlib")));
-}
diff --git a/toolsrc/src/vcpkg-test/manifests.cpp b/toolsrc/src/vcpkg-test/manifests.cpp
index 0af9f4f96..7cf92818e 100644
--- a/toolsrc/src/vcpkg-test/manifests.cpp
+++ b/toolsrc/src/vcpkg-test/manifests.cpp
@@ -691,13 +691,21 @@ TEST_CASE ("Serialize all the ports", "[manifests]")
const auto manifest = dir / fs::u8path("vcpkg.json");
if (fs.exists(control))
{
+ INFO(fs::u8string(control));
auto contents = fs.read_contents(control, VCPKG_LINE_INFO);
auto pghs = Paragraphs::parse_paragraphs(contents, fs::u8string(control));
REQUIRE(pghs);
- scfs.push_back(std::move(*SourceControlFile::parse_control_file(
- fs::u8string(control), std::move(pghs).value_or_exit(VCPKG_LINE_INFO))
- .value_or_exit(VCPKG_LINE_INFO)));
+ auto scf = SourceControlFile::parse_control_file(fs::u8string(control),
+ std::move(pghs).value_or_exit(VCPKG_LINE_INFO));
+ if (!scf)
+ {
+ INFO(scf.error()->name);
+ INFO(scf.error()->error);
+ REQUIRE(scf);
+ }
+
+ scfs.push_back(std::move(*scf.value_or_exit(VCPKG_LINE_INFO)));
}
else if (fs.exists(manifest))
{
diff --git a/toolsrc/src/vcpkg-test/optional.cpp b/toolsrc/src/vcpkg-test/optional.cpp
index c2656d97e..f18efb359 100644
--- a/toolsrc/src/vcpkg-test/optional.cpp
+++ b/toolsrc/src/vcpkg-test/optional.cpp
@@ -80,6 +80,33 @@ TEST_CASE ("value conversion", "[optional]")
REQUIRE(o_v.get()->size() == 3);
}
+TEST_CASE ("optional.map", "[optional]")
+{
+ using vcpkg::NullOpt;
+ using vcpkg::nullopt;
+ using vcpkg::Optional;
+
+ const Optional<std::unique_ptr<int>> move_only;
+
+ Optional<int*> m = move_only.map([](auto&& p) { return p.get(); });
+ Optional<Optional<int*>> n =
+ move_only.map([](auto&& p) -> Optional<int*> { return p ? Optional<int*>{p.get()} : nullopt; });
+ Optional<NullOpt> o = move_only.map([](auto&&) { return nullopt; });
+
+ Optional<int> five = 5;
+
+ struct MoveTest
+ {
+ int operator()(int&&) { return 1; }
+ int operator()(const int&) { return -1; }
+ } move_test;
+
+ Optional<int> dst = std::move(five).map(move_test);
+ REQUIRE(dst == 1);
+ Optional<int> dst2 = five.map(move_test);
+ REQUIRE(dst2 == -1);
+}
+
TEST_CASE ("common_projection", "[optional]")
{
using vcpkg::Util::common_projection;
diff --git a/toolsrc/src/vcpkg/build.cpp b/toolsrc/src/vcpkg/build.cpp
index daaed3e98..53bdd8341 100644
--- a/toolsrc/src/vcpkg/build.cpp
+++ b/toolsrc/src/vcpkg/build.cpp
@@ -983,7 +983,8 @@ namespace vcpkg::Build
const auto& abi_info = action.abi_info.value_or_exit(VCPKG_LINE_INFO);
const auto& triplet_abi = paths.get_triplet_info(abi_info);
- abi_tag_entries.emplace_back("triplet", triplet_abi);
+ abi_tag_entries.emplace_back("triplet", triplet.canonical_name());
+ abi_tag_entries.emplace_back("triplet_abi", triplet_abi);
abi_entries_from_abi_info(abi_info, abi_tag_entries);
// If there is an unusually large number of files in the port then
diff --git a/toolsrc/src/vcpkg/commands.ci.cpp b/toolsrc/src/vcpkg/commands.ci.cpp
index efe705e3d..26ae058ad 100644
--- a/toolsrc/src/vcpkg/commands.ci.cpp
+++ b/toolsrc/src/vcpkg/commands.ci.cpp
@@ -271,7 +271,7 @@ namespace vcpkg::Commands::CI
std::vector<FullPackageSpec> unknown;
std::map<PackageSpec, Build::BuildResult> known;
std::map<PackageSpec, std::vector<std::string>> features;
- std::unordered_map<std::string, SourceControlFileLocation> default_feature_provider;
+ Dependencies::ActionPlan plan;
std::map<PackageSpec, std::string> abi_map;
};
@@ -324,28 +324,20 @@ namespace vcpkg::Commands::CI
auto timer = Chrono::ElapsedTimer::create_started();
- Checks::check_exit(VCPKG_LINE_INFO,
- action_plan.already_installed.empty(),
- "Cannot use CI command with packages already installed.");
+ Checks::check_exit(VCPKG_LINE_INFO, action_plan.already_installed.empty());
+ Checks::check_exit(VCPKG_LINE_INFO, action_plan.remove_actions.empty());
Build::compute_all_abis(paths, action_plan, var_provider, {});
+ auto precheck_results = binary_provider_precheck(paths, action_plan, binaryprovider);
{
vcpkg::System::BufferedPrint stdout_print;
- auto precheck_results = binary_provider_precheck(paths, action_plan, binaryprovider);
for (auto&& action : action_plan.install_actions)
{
auto p = &action;
ret->abi_map.emplace(action.spec, action.abi_info.value_or_exit(VCPKG_LINE_INFO).package_abi);
ret->features.emplace(action.spec, action.feature_list);
- if (auto scfl = p->source_control_file_location.get())
- {
- auto emp = ret->default_feature_provider.emplace(p->spec.name(), scfl->clone());
- emp.first->second.source_control_file->core_paragraph->default_features = p->feature_list;
-
- p->build_options = vcpkg::Build::backcompat_prohibiting_package_options;
- }
auto precheck_result = precheck_results.at(&action);
bool b_will_build = false;
@@ -399,6 +391,30 @@ namespace vcpkg::Commands::CI
}
} // flush stdout_print
+ // This algorithm consumes the previous action plan to build and return a reduced one.
+ std::vector<InstallPlanAction>&& input_install_actions = std::move(action_plan.install_actions);
+ std::vector<InstallPlanAction*> rev_install_actions;
+ rev_install_actions.reserve(input_install_actions.size());
+ std::set<PackageSpec> to_keep;
+ for (auto it = input_install_actions.rbegin(); it != input_install_actions.rend(); ++it)
+ {
+ if (!Util::Sets::contains(ret->known, it->spec))
+ {
+ to_keep.insert(it->spec);
+ }
+
+ if (Util::Sets::contains(to_keep, it->spec))
+ {
+ rev_install_actions.push_back(&*it);
+ to_keep.insert(it->package_dependencies.begin(), it->package_dependencies.end());
+ }
+ }
+
+ for (auto it = rev_install_actions.rbegin(); it != rev_install_actions.rend(); ++it)
+ {
+ ret->plan.install_actions.push_back(std::move(**it));
+ }
+
System::printf("Time to determine pass/fail: %s\n", timer.elapsed());
return ret;
}
@@ -480,10 +496,6 @@ namespace vcpkg::Commands::CI
return FullPackageSpec{spec, std::move(default_features)};
});
- auto split_specs = find_unknown_ports_for_ci(
- paths, exclusions_set, provider, var_provider, all_default_full_specs, binaryprovider);
- PortFileProvider::MapPortFileProvider new_default_provider(split_specs->default_feature_provider);
-
Dependencies::CreateInstallPlanOptions serialize_options;
struct RandomizerInstance : Graphs::Randomizer
@@ -503,8 +515,10 @@ namespace vcpkg::Commands::CI
serialize_options.randomizer = &randomizer_instance;
}
- auto action_plan = Dependencies::create_feature_install_plan(
- new_default_provider, var_provider, split_specs->unknown, status_db, serialize_options);
+ auto split_specs = find_unknown_ports_for_ci(
+ paths, exclusions_set, provider, var_provider, all_default_full_specs, binaryprovider);
+
+ auto& action_plan = split_specs->plan;
for (auto&& action : action_plan.install_actions)
{
diff --git a/toolsrc/src/vcpkg/dependencies.cpp b/toolsrc/src/vcpkg/dependencies.cpp
index 68415b9aa..83066312e 100644
--- a/toolsrc/src/vcpkg/dependencies.cpp
+++ b/toolsrc/src/vcpkg/dependencies.cpp
@@ -503,7 +503,7 @@ namespace vcpkg::Dependencies
return nullopt;
}
- std::vector<PackageSpec> ExportPlanAction::dependencies(Triplet) const
+ std::vector<PackageSpec> ExportPlanAction::dependencies() const
{
if (auto p_ip = m_installed_package.get())
return p_ip->dependencies();
@@ -590,7 +590,7 @@ namespace vcpkg::Dependencies
std::vector<PackageSpec> adjacency_list(const ExportPlanAction& plan) const override
{
- return plan.dependencies(plan.spec.triplet());
+ return plan.dependencies();
}
ExportPlanAction load_vertex_data(const PackageSpec& spec) const override
diff --git a/toolsrc/src/vcpkg/export.prefab.cpp b/toolsrc/src/vcpkg/export.prefab.cpp
index 852a49981..2ca8e87f7 100644
--- a/toolsrc/src/vcpkg/export.prefab.cpp
+++ b/toolsrc/src/vcpkg/export.prefab.cpp
@@ -378,7 +378,7 @@ namespace vcpkg::Export::Prefab
for (const auto& action : export_plan)
{
const std::string name = action.spec.name();
- auto dependencies = action.dependencies(default_triplet);
+ auto dependencies = action.dependencies();
const auto action_build_info = Build::read_build_info(utils, paths.build_info_file_path(action.spec));
const bool is_empty_package = action_build_info.policies.is_enabled(Build::BuildPolicy::EMPTY_PACKAGE);
diff --git a/toolsrc/src/vcpkg/paragraphs.cpp b/toolsrc/src/vcpkg/paragraphs.cpp
index dc93ee2db..4b4621968 100644
--- a/toolsrc/src/vcpkg/paragraphs.cpp
+++ b/toolsrc/src/vcpkg/paragraphs.cpp
@@ -399,6 +399,16 @@ namespace vcpkg::Paragraphs
bcf.features =
Util::fmap(*p, [&](auto&& raw_feature) -> BinaryParagraph { return BinaryParagraph(raw_feature); });
+ if (bcf.core_paragraph.spec != spec)
+ {
+ return Strings::concat("Mismatched spec in package at ",
+ fs::u8string(paths.package_dir(spec)),
+ ": expected ",
+ spec,
+ ", actual ",
+ bcf.core_paragraph.spec);
+ }
+
return bcf;
}
diff --git a/toolsrc/src/vcpkg/remove.cpp b/toolsrc/src/vcpkg/remove.cpp
index e06691747..e29ae16c8 100644
--- a/toolsrc/src/vcpkg/remove.cpp
+++ b/toolsrc/src/vcpkg/remove.cpp
@@ -214,7 +214,9 @@ namespace vcpkg::Remove
&valid_arguments,
};
- void perform_and_exit(const VcpkgCmdArguments& args, const VcpkgPaths& paths, Triplet default_triplet)
+ void RemoveCommand::perform_and_exit(const VcpkgCmdArguments& args,
+ const VcpkgPaths& paths,
+ Triplet default_triplet) const
{
if (paths.manifest_mode_enabled())
{
@@ -332,11 +334,4 @@ namespace vcpkg::Remove
Checks::exit_success(VCPKG_LINE_INFO);
}
-
- void RemoveCommand::perform_and_exit(const VcpkgCmdArguments& args,
- const VcpkgPaths& paths,
- Triplet default_triplet) const
- {
- Remove::perform_and_exit(args, paths, default_triplet);
- }
}
diff --git a/toolsrc/src/vcpkg/sourceparagraph.cpp b/toolsrc/src/vcpkg/sourceparagraph.cpp
index 61cc7f826..52f72da94 100644
--- a/toolsrc/src/vcpkg/sourceparagraph.cpp
+++ b/toolsrc/src/vcpkg/sourceparagraph.cpp
@@ -1202,6 +1202,12 @@ namespace vcpkg
return ret;
}
+ static bool is_dependency_trivial(const Dependency& dep)
+ {
+ return dep.features.empty() && dep.platform.is_empty() && dep.extra_info.is_empty() &&
+ dep.constraint.type == Versions::Constraint::Type::None;
+ }
+
static Json::Object serialize_manifest_impl(const SourceControlFile& scf, bool debug)
{
auto serialize_paragraph =
@@ -1246,8 +1252,7 @@ namespace vcpkg
}
};
auto serialize_dependency = [&](Json::Array& arr, const Dependency& dep) {
- if (dep.features.empty() && dep.platform.is_empty() && dep.extra_info.is_empty() &&
- dep.constraint.type == Versions::Constraint::Type::None)
+ if (is_dependency_trivial(dep))
{
arr.push_back(Json::Value::string(dep.name));
}
diff --git a/toolsrc/src/vcpkg/triplet.cpp b/toolsrc/src/vcpkg/triplet.cpp
index e69f75b11..9943ec9a8 100644
--- a/toolsrc/src/vcpkg/triplet.cpp
+++ b/toolsrc/src/vcpkg/triplet.cpp
@@ -81,38 +81,30 @@ namespace vcpkg
}
else
{
- auto vcpkg_default_triplet_env = System::get_environment_variable("VCPKG_DEFAULT_TRIPLET");
- if (auto v = vcpkg_default_triplet_env.get())
- {
- return Triplet::from_canonical_name(std::move(*v));
- }
- else
- {
#if defined(_WIN32)
- return Triplet::from_canonical_name("x86-windows");
+ return Triplet::from_canonical_name("x86-windows");
#elif defined(__APPLE__)
- return Triplet::from_canonical_name("x64-osx");
+ return Triplet::from_canonical_name("x64-osx");
#elif defined(__FreeBSD__)
- return Triplet::from_canonical_name("x64-freebsd");
+ return Triplet::from_canonical_name("x64-freebsd");
#elif defined(__OpenBSD__)
- return Triplet::from_canonical_name("x64-openbsd");
+ return Triplet::from_canonical_name("x64-openbsd");
#elif defined(__GLIBC__)
#if defined(__aarch64__)
- return Triplet::from_canonical_name("arm64-linux");
+ return Triplet::from_canonical_name("arm64-linux");
#elif defined(__arm__)
- return Triplet::from_canonical_name("arm-linux");
+ return Triplet::from_canonical_name("arm-linux");
#elif defined(__s390x__)
- return Triplet::from_canonical_name("s390x-linux");
+ return Triplet::from_canonical_name("s390x-linux");
#elif (defined(__ppc64__) || defined(__PPC64__) || defined(__ppc64le__) || defined(__PPC64LE__)) && \
defined(__BYTE_ORDER__) && (__BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__)
- return Triplet::from_canonical_name("ppc64le-linux");
+ return Triplet::from_canonical_name("ppc64le-linux");
#else
- return Triplet::from_canonical_name("x64-linux");
+ return Triplet::from_canonical_name("x64-linux");
#endif
#else
- return Triplet::from_canonical_name("x64-linux-musl");
+ return Triplet::from_canonical_name("x64-linux-musl");
#endif
- }
}
}
}