51 lines
2.3 KiB
Diff
51 lines
2.3 KiB
Diff
diff --git a/nix/ofborg-carnix.nix b/nix/ofborg-carnix.nix
|
|
index e974c8f..0094e27 100644
|
|
--- a/nix/ofborg-carnix.nix
|
|
+++ b/nix/ofborg-carnix.nix
|
|
@@ -2,12 +2,39 @@
|
|
{ lib, buildPlatform, buildRustCrate, fetchgit }:
|
|
let kernel = buildPlatform.parsed.kernel.name;
|
|
abi = buildPlatform.parsed.abi.name;
|
|
- include = includedFiles: src: builtins.filterSource (path: type:
|
|
- lib.lists.any (f:
|
|
- let p = toString (src + ("/" + f)); in
|
|
- (path == p) || (type == "directory" && lib.strings.hasPrefix path p)
|
|
- ) includedFiles
|
|
- ) src;
|
|
+ include = includedFiles: src:
|
|
+ # The comments assume the `include` field of the Cargo.toml like:
|
|
+ # include = [ "foo", "bar" ]
|
|
+ # and the package is being built from /mypackage
|
|
+ #
|
|
+ # includeFiles == [ "foo" "bar" ]
|
|
+ let
|
|
+ # and includedFileAbsolutePaths == [ "/mypackage/foo" "/mypackage/bar" ]
|
|
+ includedFileAbsolutePaths = builtins.map (relativePath: toString (src + ("/" + relativePath))) includedFiles;
|
|
+
|
|
+ # Return true only when a possible path exactly matches an
|
|
+ # absolute path, ie:
|
|
+ #
|
|
+ # checkExactMatch "/mypackage/foo" == true
|
|
+ # checkExactMatch "/mypackage/foo/bar" == false
|
|
+ # checkExactMatch "/mypackage/baz" == false
|
|
+ checkExactMatch = possiblePath: builtins.elem possiblePath includedFileAbsolutePaths;
|
|
+
|
|
+ # Return true only when a possible path is a suffix to a
|
|
+ # directory described by the include.
|
|
+ #
|
|
+ # checkPrefixMatch "/mypackage/buzfoo" == false
|
|
+ # checkPrefixMatch "/mypackage/foo" == false
|
|
+ # checkPrefixMatch "/mypackage/foo/bar" == true
|
|
+ # checkPrefixMatch "/mypackage/baz/foo" == false
|
|
+ checkPrefixMatch = possiblePath: lib.lists.any
|
|
+ (acceptablePrefix: lib.strings.hasPrefix "${acceptablePrefix}/" possiblePath)
|
|
+ includedFileAbsolutePaths;
|
|
+
|
|
+ in builtins.filterSource (possiblePath: _type:
|
|
+ ((checkExactMatch possiblePath) || (checkPrefixMatch possiblePath))
|
|
+ )
|
|
+ src;
|
|
updateFeatures = f: up: functions: builtins.deepSeq f (lib.lists.foldl' (features: fun: fun features) (lib.attrsets.recursiveUpdate f up) functions);
|
|
mapFeatures = features: map (fun: fun { features = features; });
|
|
mkFeatures = feat: lib.lists.foldl (features: featureName:
|