Unverified Commit 3b883d3c authored by Florian Richer's avatar Florian Richer Committed by GitHub
Browse files

lib/strings: Add makeIncludePath (#296237)



* Update strings.nix

* Fix typo in docs

* Update lib/strings.nix

Co-authored-by: default avatarlolbinarycat <dogedoge61+github@gmail.com>

* Update lib/strings.nix

Co-authored-by: default avatarlolbinarycat <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: default avatarlolbinarycat <dogedoge61+github@gmail.com>

* Update lib/tests/misc.nix

Co-authored-by: default avatarSilvan Mosberger <github@infinisil.com>

---------

Co-authored-by: default avatarlolbinarycat <dogedoge61+github@gmail.com>
Co-authored-by: default avatarSilvan Mosberger <github@infinisil.com>
parent 9ce47d84
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -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
+12 −0
Original line number Diff line number Diff line
@@ -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.

+30 −0
Original line number Diff line number Diff line
@@ -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";