Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
35 commits
Select commit Hold shift + click to select a range
566e8bb
Allow features with platform expressions
autoantwort Nov 15, 2022
57cd5ee
Make msvc happy
autoantwort Nov 16, 2022
e718c02
Make msvc happy
autoantwort Nov 16, 2022
ff26f5e
Add tests
autoantwort Nov 16, 2022
713db12
Merge branch 'main' into feature/features-with-platform-expressions
autoantwort Nov 19, 2022
c571ae4
Dependency class: Save default_features field as explicit boolean ins…
autoantwort Nov 19, 2022
c11783c
Remove unneeded virtual
autoantwort Nov 19, 2022
21025a8
Implement platform dependent default features + add tests
autoantwort Nov 19, 2022
08ab160
Remove unused code
autoantwort Nov 19, 2022
0481b3f
Make msvc happy
autoantwort Nov 19, 2022
f27d722
Copy json schema changes from https://github.com/microsoft/vcpkg/pull…
autoantwort Dec 6, 2022
981db7a
Merge branch 'main' into feature/features-with-platform-expressions
autoantwort Dec 9, 2022
b00ebea
Merge branch 'main' into feature/features-with-platform-expressions
autoantwort Dec 21, 2022
b7960b9
Merge branch 'main' into feature/features-with-platform-expressions
autoantwort Feb 20, 2023
58fe120
Merge branch 'main' into feature/features-with-platform-expressions
autoantwort Feb 28, 2023
60c82a1
Merge branch 'main' into feature/features-with-platform-expressions
autoantwort Mar 16, 2023
71b9f82
Move comparison operator implementations to cpp file
autoantwort Mar 16, 2023
e114d76
Merge branch 'main' into feature/features-with-platform-expressions
autoantwort Mar 23, 2023
3e0bb4d
Fix serialization of dependencies with default-features: false
autoantwort Mar 24, 2023
e960c74
Merge branch 'main' into feature/features-with-platform-expressions
autoantwort Apr 6, 2023
31fc15f
Merge branch 'main' into feature/features-with-platform-expressions
autoantwort Apr 6, 2023
f172293
Remove ImplicitDefault from parse_dependencies_list
autoantwort Apr 6, 2023
08983d3
Undo useless changes
autoantwort Apr 6, 2023
7a3cff3
Merge branch 'main' into feature/features-with-platform-expressions
autoantwort Apr 13, 2023
35434e3
Merge branch 'main' into feature/features-with-platform-expressions
autoantwort Apr 26, 2023
7a8216b
Merge branch 'main' into feature/features-with-platform-expressions
autoantwort Apr 27, 2023
a8782ca
Merge branch 'main' into feature/features-with-platform-expressions
autoantwort Apr 27, 2023
1626f2a
Merge branch 'main' into feature/features-with-platform-expressions
autoantwort May 2, 2023
327c82a
Merge branch 'main' into feature/features-with-platform-expressions
autoantwort May 15, 2023
1acf82f
Merge branch 'main' into feature/features-with-platform-expressions
autoantwort Jun 13, 2023
89dcc0a
Trigger Build
autoantwort Jun 14, 2023
f7208e1
Merge branch 'main' into feature/features-with-platform-expressions
autoantwort Jun 27, 2023
73f649e
Merge branch 'main' into feature/features-with-platform-expressions
autoantwort Jul 25, 2023
f7c6ee5
Don't crash if name is missing
autoantwort Jul 25, 2023
e38749e
Rename nested struct Depedency::Feature to DependencyRequestedFeature
autoantwort Jul 25, 2023
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
29 changes: 28 additions & 1 deletion docs/vcpkg-schema-definitions.schema.json
Original file line number Diff line number Diff line change
Expand Up @@ -211,7 +211,7 @@
"features": {
"type": "array",
"items": {
"$ref": "#/definitions/identifier"
"$ref": "#/definitions/dependency-feature"
}
},
"host": {
Expand Down Expand Up @@ -239,6 +239,33 @@
},
"additionalProperties": false
},
"dependency-feature-object": {
"description": "Expanded form of a dependency feature with platform expression.",
"type": "object",
"properties": {
"name": {
"$ref": "#/definitions/identifier"
},
"platform": {
"$ref": "#/definitions/platform-expression"
}
},
"required": [
"name"
],
"additionalProperties": false
},
"dependency-feature": {
"description": "A feature",
"oneOf": [
{
"$ref": "#/definitions/identifier"
},
{
"$ref": "#/definitions/dependency-feature-object"
}
]
},
"description-field": {
"description": "A string or array of strings containing the description of a package or feature.",
"$ref": "#/definitions/string-or-strings"
Expand Down
2 changes: 1 addition & 1 deletion docs/vcpkg.schema.json
Original file line number Diff line number Diff line change
Expand Up @@ -84,7 +84,7 @@
"description": "Features enabled by default with the package.",
"type": "array",
"items": {
"$ref": "vcpkg-schema-definitions.schema.json#/definitions/identifier"
"$ref": "vcpkg-schema-definitions.schema.json#/definitions/dependency-feature"
}
},
"supports": {
Expand Down
2 changes: 2 additions & 0 deletions include/vcpkg/base/message-data.inc.h
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ DECLARE_MESSAGE(ABoolean, (), "", "a boolean")
DECLARE_MESSAGE(ABuiltinRegistry, (), "", "a builtin registry")
DECLARE_MESSAGE(AConfigurationObject, (), "", "a configuration object")
DECLARE_MESSAGE(ADependency, (), "", "a dependency")
DECLARE_MESSAGE(ADependencyFeature, (), "", "a feature in a dependency")
DECLARE_MESSAGE(ADemandObject,
(),
"'demands' are a concept in the schema of a JSON file the user can edit",
Expand Down Expand Up @@ -124,6 +125,7 @@ DECLARE_MESSAGE(AnArtifactsGitRegistryUrl, (), "", "an artifacts git registry UR
DECLARE_MESSAGE(AnArtifactsRegistry, (), "", "an artifacts registry")
DECLARE_MESSAGE(AnArrayOfDependencies, (), "", "an array of dependencies")
DECLARE_MESSAGE(AnArrayOfDependencyOverrides, (), "", "an array of dependency overrides")
DECLARE_MESSAGE(AnArrayOfFeatures, (), "", "an array of features")
DECLARE_MESSAGE(AnArrayOfIdentifers, (), "", "an array of identifiers")
DECLARE_MESSAGE(AnArrayOfOverlayPaths, (), "", "an array of overlay paths")
DECLARE_MESSAGE(AnArrayOfOverlayTripletsPaths, (), "", "an array of overlay triplets paths")
Expand Down
1 change: 1 addition & 0 deletions include/vcpkg/binaryparagraph.h
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ namespace vcpkg
BinaryParagraph();
explicit BinaryParagraph(Paragraph fields);
BinaryParagraph(const SourceParagraph& spgh,
const std::vector<std::string>& default_features,
Triplet triplet,
const std::string& abi_tag,
std::vector<PackageSpec> deps);
Expand Down
4 changes: 3 additions & 1 deletion include/vcpkg/dependencies.h
Original file line number Diff line number Diff line change
Expand Up @@ -70,7 +70,8 @@ namespace vcpkg
const RequestType& request_type,
Triplet host_triplet,
std::map<std::string, std::vector<FeatureSpec>>&& dependencies,
std::vector<LocalizedString>&& build_failure_messages);
std::vector<LocalizedString>&& build_failure_messages,
std::vector<std::string> default_features);

const std::string& public_abi() const;
bool has_package_abi() const;
Expand All @@ -80,6 +81,7 @@ namespace vcpkg

Optional<const SourceControlFileAndLocation&> source_control_file_and_location;
Optional<InstalledPackageView> installed_package;
Optional<std::vector<std::string>> default_features;

InstallPlanType plan_type;
RequestType request_type;
Expand Down
33 changes: 27 additions & 6 deletions include/vcpkg/sourceparagraph.h
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
#pragma once

#include <vcpkg/fwd/configuration.h>
#include <vcpkg/fwd/packagespec.h>
#include <vcpkg/fwd/vcpkgcmdarguments.h>

#include <vcpkg/base/expected.h>
Expand Down Expand Up @@ -36,18 +37,39 @@ namespace vcpkg
Optional<Version> try_get_minimum_version() const;
};

struct DependencyRequestedFeature
{
std::string name;
PlatformExpression::Expr platform;
DependencyRequestedFeature(std::string name)
: DependencyRequestedFeature(std::move(name), PlatformExpression::Expr::Empty())
{
}
DependencyRequestedFeature(std::string name, PlatformExpression::Expr platform)
: name(std::move(name)), platform(std::move(platform))
{
Checks::check_exit(VCPKG_LINE_INFO, !this->name.empty() && this->name != "core" && this->name != "default");
}
friend bool operator==(const DependencyRequestedFeature& lhs, const DependencyRequestedFeature& rhs);
friend bool operator!=(const DependencyRequestedFeature& lhs, const DependencyRequestedFeature& rhs);
};

struct Dependency
{
std::string name;
std::vector<std::string> features;
// a list of "real" features without "core" or "default". Use member default_features instead.
std::vector<DependencyRequestedFeature> features;
PlatformExpression::Expr platform;
DependencyConstraint constraint;
bool host = false;

bool default_features = true;
bool has_platform_expressions() const;

Json::Object extra_info;

/// @param id adds "default" if "core" not present.
FullPackageSpec to_full_spec(Triplet target, Triplet host, ImplicitDefault id) const;
/// @param id adds "default" if `default_features` is false.
FullPackageSpec to_full_spec(View<std::string> features, Triplet target, Triplet host) const;

friend bool operator==(const Dependency& lhs, const Dependency& rhs);
friend bool operator!=(const Dependency& lhs, const Dependency& rhs) { return !(lhs == rhs); }
Expand All @@ -69,8 +91,7 @@ namespace vcpkg
std::vector<FullPackageSpec> filter_dependencies(const std::vector<Dependency>& deps,
Triplet t,
Triplet host,
const std::unordered_map<std::string, std::string>& cmake_vars,
ImplicitDefault id);
const std::unordered_map<std::string, std::string>& cmake_vars);

/// <summary>
/// Port metadata of additional feature in a package (part of CONTROL file)
Expand Down Expand Up @@ -108,7 +129,7 @@ namespace vcpkg
std::string documentation;
std::vector<Dependency> dependencies;
std::vector<DependencyOverride> overrides;
std::vector<std::string> default_features;
std::vector<DependencyRequestedFeature> default_features;

// there are two distinct "empty" states here
// "user did not provide a license" -> nullopt
Expand Down
2 changes: 2 additions & 0 deletions locales/messages.json
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
"ADemandObject": "a demand object",
"_ADemandObject.comment": "'demands' are a concept in the schema of a JSON file the user can edit",
"ADependency": "a dependency",
"ADependencyFeature": "a feature in a dependency",
"ADictionaryOfContacts": "a dictionary of contacts",
"AFeature": "a feature",
"AFilesystemRegistry": "a filesystem registry",
Expand Down Expand Up @@ -115,6 +116,7 @@
"_AmbiguousConfigDeleteConfigFile.comment": "An example of {path} is /foo/bar.",
"AnArrayOfDependencies": "an array of dependencies",
"AnArrayOfDependencyOverrides": "an array of dependency overrides",
"AnArrayOfFeatures": "an array of features",
"AnArrayOfIdentifers": "an array of identifiers",
"AnArrayOfOverlayPaths": "an array of overlay paths",
"AnArrayOfOverlayTripletsPaths": "an array of overlay triplets paths",
Expand Down
10 changes: 7 additions & 3 deletions src/vcpkg-test/binarycaching.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -227,6 +227,7 @@ Build-Depends: bzip
RequestType::USER_REQUESTED,
Test::ARM_UWP,
{{"a", {}}, {"b", {}}},
{},
{});

ipa.abi_info = AbiInfo{};
Expand Down Expand Up @@ -352,7 +353,8 @@ Version: 1.5
RequestType::USER_REQUESTED,
Test::ARM_UWP,
std::map<std::string, std::vector<FeatureSpec>>{},
std::vector<LocalizedString>{});
std::vector<LocalizedString>{},
std::vector<std::string>{});
InstallPlanAction& ipa_without_abi = install_plan.back();
ipa_without_abi.package_dir = "pkgs/someheadpackage";

Expand Down Expand Up @@ -428,7 +430,8 @@ Description: a spiffy compression library wrapper
RequestType::USER_REQUESTED,
Test::ARM64_WINDOWS,
std::map<std::string, std::vector<FeatureSpec>>{},
std::vector<LocalizedString>{});
std::vector<LocalizedString>{},
std::vector<std::string>{});
plan.install_actions[0].abi_info = AbiInfo{};
plan.install_actions[0].abi_info.get()->package_abi = "packageabi";

Expand All @@ -455,7 +458,8 @@ Description: a spiffy compression library wrapper
RequestType::USER_REQUESTED,
Test::ARM64_WINDOWS,
std::map<std::string, std::vector<FeatureSpec>>{},
std::vector<LocalizedString>{});
std::vector<LocalizedString>{},
std::vector<std::string>{});
plan.install_actions[1].abi_info = AbiInfo{};
plan.install_actions[1].abi_info.get()->package_abi = "packageabi2";

Expand Down
Loading