From 41768c8984b9625cd8a9c11c431f60a4f773d6cf Mon Sep 17 00:00:00 2001 From: zimbatm Date: Sat, 6 Mar 2021 18:03:50 +0100 Subject: [PATCH 1/2] language.c: bang into shape --- extra/language/c.nix | 37 ++++++++++++++++++++++--------------- 1 file changed, 22 insertions(+), 15 deletions(-) diff --git a/extra/language/c.nix b/extra/language/c.nix index 413c69e9..6cf6373d 100644 --- a/extra/language/c.nix +++ b/extra/language/c.nix @@ -13,8 +13,13 @@ with lib; type = types.listOf strOrPackage; default = [ ]; description = "Use this when another language dependens on a dynamic library"; + example = lib.literalExample '' + [ pkgs.glibc ] + ''; }; + pkg-config = mkEnableOption "use pkg-config"; + includes = mkOption { type = types.listOf strOrPackage; default = [ ]; @@ -25,7 +30,11 @@ with lib; type = strOrPackage; default = pkgs.clang; defaultText = "pkgs.clang"; - description = "Which C compiler to use"; + description = '' + Which C compiler to use. + + For gcc, use pkgs.gcc-unwrapped. + ''; }; }; @@ -35,26 +44,24 @@ with lib; ++ (lib.optionals hasLibraries (map lib.getLib cfg.libraries)) ++ - # Assume we want pkg-config, because it's good - (lib.optionals hasIncludes ([ pkgs.pkg-config ] ++ (map lib.getDev cfg.includes))) + (lib.optional cfg.pkg-config pkgs.pkg-config) ; env = (lib.optionals hasLibraries [ { - name = "LD_LIBRARY_PATH"; - prefix = "$DEVSHELL_DIR/lib"; + name = "LIBRARY_PATH"; + value = lib.concatStringsSep ":" (map (x: "${lib.getLib x}/lib") cfg.libraries); } ]) - ++ lib.optionals hasIncludes [ - { - name = "LD_INCLUDE_PATH"; - prefix = "$DEVSHELL_DIR/include"; - } - { - name = "PKG_CONFIG_PATH"; - prefix = "$DEVSHELL_DIR/lib/pkgconfig"; - } - ]; + ++ (lib.optional hasIncludes { + name = "LD_INCLUDE_PATH"; + prefix = "$DEVSHELL_DIR/include"; + }) + ++ (lib.optional cfg.pkg-config { + name = "PKG_CONFIG_PATH"; + value = lib.concatStringsSep ":" (map (x: "${lib.getLib x}/lib/pkgconfig") cfg.libraries); + }) + ; }; } From 44782cbbd81301a2f507e0597af049d517f24482 Mon Sep 17 00:00:00 2001 From: zimbatm Date: Sat, 6 Mar 2021 18:06:05 +0100 Subject: [PATCH 2/2] language.c: add linker package --- extra/language/c.nix | 30 +++++++++++++++++++----------- 1 file changed, 19 insertions(+), 11 deletions(-) diff --git a/extra/language/c.nix b/extra/language/c.nix index 6cf6373d..103c1ef6 100644 --- a/extra/language/c.nix +++ b/extra/language/c.nix @@ -9,6 +9,24 @@ in with lib; { options.language.c = { + compiler = mkOption { + type = strOrPackage; + default = pkgs.clang; + defaultText = "pkgs.clang"; + description = '' + Which C compiler to use. + + For gcc, use pkgs.gcc-unwrapped. + ''; + }; + + linker = mkOption { + type = strOrPackage; + default = pkgs.binutils; + defaultText = "pkgs.binutils"; + description = "Which linker package to use"; + }; + libraries = mkOption { type = types.listOf strOrPackage; default = [ ]; @@ -26,21 +44,11 @@ with lib; description = "C dependencies from nixpkgs"; }; - compiler = mkOption { - type = strOrPackage; - default = pkgs.clang; - defaultText = "pkgs.clang"; - description = '' - Which C compiler to use. - - For gcc, use pkgs.gcc-unwrapped. - ''; - }; }; config = { devshell.packages = - [ cfg.compiler ] + [ cfg.compiler cfg.linker ] ++ (lib.optionals hasLibraries (map lib.getLib cfg.libraries)) ++