lib/strings: Add makeIncludePath (#296237)
* Update strings.nix * Fix typo in docs * Update lib/strings.nix Co-authored-by: lolbinarycat <dogedoge61+github@gmail.com> * Update lib/strings.nix Co-authored-by: lolbinarycat <dogedoge61+github@gmail.com> * Add unit test with strings * Move test to strings * Add unit test with package structure * testMakeIncludePathWithPkgs: use real pkgs * Revert "testMakeIncludePathWithPkgs: use real pkgs" This reverts commit fb1850c069cfb324f3a43323da740a27a11793f3. * Update lib/tests/misc.nix Co-authored-by: lolbinarycat <dogedoge61+github@gmail.com> * Update lib/tests/misc.nix Co-authored-by: Silvan Mosberger <github@infinisil.com> --------- Co-authored-by: lolbinarycat <dogedoge61+github@gmail.com> Co-authored-by: Silvan Mosberger <github@infinisil.com>
This commit is contained in:
parent
9ce47d84cd
commit
3b883d3cdf
3 changed files with 43 additions and 1 deletions
|
@ -97,7 +97,7 @@ let
|
|||
inherit (self.strings) concatStrings concatMapStrings concatImapStrings
|
||||
intersperse concatStringsSep concatMapStringsSep
|
||||
concatImapStringsSep concatLines makeSearchPath makeSearchPathOutput
|
||||
makeLibraryPath makeBinPath optionalString
|
||||
makeLibraryPath makeIncludePath makeBinPath optionalString
|
||||
hasInfix hasPrefix hasSuffix stringToCharacters stringAsChars escape
|
||||
escapeShellArg escapeShellArgs
|
||||
isStorePath isStringLike
|
||||
|
|
|
@ -206,6 +206,18 @@ rec {
|
|||
*/
|
||||
makeLibraryPath = makeSearchPathOutput "lib" "lib";
|
||||
|
||||
/* Construct an include search path (such as C_INCLUDE_PATH) containing the
|
||||
header files for a set of packages or paths.
|
||||
|
||||
Example:
|
||||
makeIncludePath [ "/usr" "/usr/local" ]
|
||||
=> "/usr/include:/usr/local/include"
|
||||
pkgs = import <nixpkgs> { }
|
||||
makeIncludePath [ pkgs.openssl pkgs.zlib ]
|
||||
=> "/nix/store/9rz8gxhzf8sw4kf2j2f1grr49w8zx5vj-openssl-1.0.1r-dev/include:/nix/store/wwh7mhwh269sfjkm6k5665b5kgp7jrk2-zlib-1.2.8-dev/include"
|
||||
*/
|
||||
makeIncludePath = makeSearchPathOutput "dev" "include";
|
||||
|
||||
/* Construct a binary search path (such as $PATH) containing the
|
||||
binaries for a set of packages.
|
||||
|
||||
|
|
|
@ -64,6 +64,7 @@ let
|
|||
lists
|
||||
listToAttrs
|
||||
makeExtensible
|
||||
makeIncludePath
|
||||
makeOverridable
|
||||
mapAttrs
|
||||
matchAttrs
|
||||
|
@ -296,6 +297,35 @@ runTests {
|
|||
expected = "a\nb\nc\n";
|
||||
};
|
||||
|
||||
testMakeIncludePathWithPkgs = {
|
||||
expr = (makeIncludePath [
|
||||
# makeIncludePath preferably selects the "dev" output
|
||||
{ dev.outPath = "/dev"; out.outPath = "/out"; outPath = "/default"; }
|
||||
# "out" is used if "dev" is not found
|
||||
{ out.outPath = "/out"; outPath = "/default"; }
|
||||
# And it returns the derivation directly if there's no "out" either
|
||||
{ outPath = "/default"; }
|
||||
# Same if the output is specified explicitly, even if there's a "dev"
|
||||
{ dev.outPath = "/dev"; outPath = "/default"; outputSpecified = true; }
|
||||
]);
|
||||
expected = "/dev/include:/out/include:/default/include:/default/include";
|
||||
};
|
||||
|
||||
testMakeIncludePathWithEmptyList = {
|
||||
expr = (makeIncludePath [ ]);
|
||||
expected = "";
|
||||
};
|
||||
|
||||
testMakeIncludePathWithOneString = {
|
||||
expr = (makeIncludePath [ "/usr" ]);
|
||||
expected = "/usr/include";
|
||||
};
|
||||
|
||||
testMakeIncludePathWithManyString = {
|
||||
expr = (makeIncludePath [ "/usr" "/usr/local" ]);
|
||||
expected = "/usr/include:/usr/local/include";
|
||||
};
|
||||
|
||||
testReplicateString = {
|
||||
expr = strings.replicate 5 "hello";
|
||||
expected = "hellohellohellohellohello";
|
||||
|
|
Loading…
Reference in a new issue