Unverified Commit 9bf4ec69 authored by Jörg Thalheim's avatar Jörg Thalheim Committed by GitHub
Browse files

Merge pull request #206645 from Mic92/nix-ld

nixos/nix-ld: set NIX_LD by default
parents 1c387ed1 aa65dd12
Loading
Loading
Loading
Loading
+60 −2
Original line number Diff line number Diff line
{ pkgs, lib, config, ... }:
let
  cfg = config.programs.nix-ld;

  # TODO make glibc here configureable?
  nix-ld-so = pkgs.runCommand "ld.so" {} ''
    ln -s "$(cat '${pkgs.stdenv.cc}/nix-support/dynamic-linker')" $out
  '';

  nix-ld-libraries = pkgs.buildEnv {
    name = "lb-library-path";
    pathsToLink = [ "/lib" ];
    paths = map lib.getLib cfg.libraries;
    extraPrefix = "/share/nix-ld";
    ignoreCollisions = true;
  };

  # We currently take all libraries from systemd and nix as the default.
  # Is there a better list?
  baseLibraries = with pkgs; [
    zlib
    zstd
    stdenv.cc.cc
    curl
    openssl
    attr
    libssh
    bzip2
    libxml2
    acl
    libsodium
    util-linux
    xz
    systemd
  ];
in
{
  meta.maintainers = [ lib.maintainers.mic92 ];
  options = {
    programs.nix-ld.enable = lib.mkEnableOption (lib.mdDoc ''nix-ld, Documentation: <https://github.com/Mic92/nix-ld>'');
    programs.nix-ld = {
      enable = lib.mkEnableOption (lib.mdDoc ''nix-ld, Documentation: <https://github.com/Mic92/nix-ld>'');
      package = lib.mkOption {
        type = lib.types.package;
        description = lib.mdDoc "Which package to use for the nix-ld.";
        default = pkgs.nix-ld;
        defaultText = lib.mdDoc "pkgs.nix-ld";
      };
      libraries = lib.mkOption {
        type = lib.types.listOf lib.types.package;
        description = lib.mdDoc "Libraries that automatically become available to all programs. The default set includes common libraries.";
        default = baseLibraries;
        defaultText = lib.mdDoc "baseLibraries";
      };
    };
  };
  config = lib.mkIf config.programs.nix-ld.enable {
    systemd.tmpfiles.packages = [ pkgs.nix-ld ];
    systemd.tmpfiles.packages = [ cfg.package ];

    environment.systemPackages = [ nix-ld-libraries ];

    environment.pathsToLink = [ "/share/nix-ld" ];

    environment.variables = {
      NIX_LD = toString nix-ld-so;
      NIX_LD_LIBRARY_PATH = "/run/current-system/sw/share/nix-ld/lib";
    };
  };
}
+1 −4
Original line number Diff line number Diff line
@@ -12,9 +12,6 @@ import ./make-test-python.nix ({ lib, pkgs, ...} :
  };
  testScript = ''
    start_all()
    path = "${pkgs.stdenv.cc}/nix-support/dynamic-linker"
    with open(path) as f:
        real_ld = f.read().strip()
    machine.succeed(f"NIX_LD={real_ld} hello")
    machine.succeed("hello")
 '';
})
+2 −2
Original line number Diff line number Diff line
@@ -12,13 +12,13 @@ let
in
stdenv.mkDerivation rec {
  pname = "nix-ld";
  version = "1.0.2";
  version = "1.0.3";

  src = fetchFromGitHub {
    owner = "mic92";
    repo = "nix-ld";
    rev = version;
    sha256 = "sha256-DlWU5i/MykqWgB9vstYbECy3e+XagXWCxi+XDJNey0s=";
    sha256 = "sha256-KmnT8YfU/KI4VxBlFMUltlAVLNvF7fTEQEsp41ZUHlA=";
  };

  doCheck = true;