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>

Changed files
+43 -1
lib
+1 -1
lib/default.nix
···
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
+12
lib/strings.nix
···
*/
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.
+30
lib/tests/misc.nix
···
lists
listToAttrs
makeExtensible
+
makeIncludePath
makeOverridable
mapAttrs
matchAttrs
···
testConcatLines = {
expr = concatLines ["a" "b" "c"];
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 = {