diff options
Diffstat (limited to 'toolsrc/src')
| -rw-r--r-- | toolsrc/src/vcpkg-test/catch.cpp | 3 | ||||
| -rw-r--r-- | toolsrc/src/vcpkg-test/commands.build.cpp | 38 | ||||
| -rw-r--r-- | toolsrc/src/vcpkg-test/manifests.cpp | 14 | ||||
| -rw-r--r-- | toolsrc/src/vcpkg-test/optional.cpp | 27 | ||||
| -rw-r--r-- | toolsrc/src/vcpkg/build.cpp | 3 | ||||
| -rw-r--r-- | toolsrc/src/vcpkg/commands.ci.cpp | 50 | ||||
| -rw-r--r-- | toolsrc/src/vcpkg/dependencies.cpp | 4 | ||||
| -rw-r--r-- | toolsrc/src/vcpkg/export.prefab.cpp | 2 | ||||
| -rw-r--r-- | toolsrc/src/vcpkg/paragraphs.cpp | 10 | ||||
| -rw-r--r-- | toolsrc/src/vcpkg/remove.cpp | 11 | ||||
| -rw-r--r-- | toolsrc/src/vcpkg/sourceparagraph.cpp | 9 | ||||
| -rw-r--r-- | toolsrc/src/vcpkg/triplet.cpp | 28 |
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 - } } } } |
