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
|
inherit (self.strings) concatStrings concatMapStrings concatImapStrings
|
||||||
intersperse concatStringsSep concatMapStringsSep
|
intersperse concatStringsSep concatMapStringsSep
|
||||||
concatImapStringsSep concatLines makeSearchPath makeSearchPathOutput
|
concatImapStringsSep concatLines makeSearchPath makeSearchPathOutput
|
||||||
makeLibraryPath makeBinPath optionalString
|
makeLibraryPath makeIncludePath makeBinPath optionalString
|
||||||
hasInfix hasPrefix hasSuffix stringToCharacters stringAsChars escape
|
hasInfix hasPrefix hasSuffix stringToCharacters stringAsChars escape
|
||||||
escapeShellArg escapeShellArgs
|
escapeShellArg escapeShellArgs
|
||||||
isStorePath isStringLike
|
isStorePath isStringLike
|
||||||
|
|
|
@ -206,6 +206,18 @@ rec {
|
||||||
*/
|
*/
|
||||||
makeLibraryPath = makeSearchPathOutput "lib" "lib";
|
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
|
/* Construct a binary search path (such as $PATH) containing the
|
||||||
binaries for a set of packages.
|
binaries for a set of packages.
|
||||||
|
|
||||||
|
|
|
@ -64,6 +64,7 @@ let
|
||||||
lists
|
lists
|
||||||
listToAttrs
|
listToAttrs
|
||||||
makeExtensible
|
makeExtensible
|
||||||
|
makeIncludePath
|
||||||
makeOverridable
|
makeOverridable
|
||||||
mapAttrs
|
mapAttrs
|
||||||
matchAttrs
|
matchAttrs
|
||||||
|
@ -296,6 +297,35 @@ runTests {
|
||||||
expected = "a\nb\nc\n";
|
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 = {
|
testReplicateString = {
|
||||||
expr = strings.replicate 5 "hello";
|
expr = strings.replicate 5 "hello";
|
||||||
expected = "hellohellohellohellohello";
|
expected = "hellohellohellohellohello";
|
||||||
|
|
Loading…
Reference in a new issue