!lheuhImcToQZYTQTuI:nixos.org

Nix on macOS

1137 Members
“There are still many issues with the Darwin platform but most of it is quite usable.” — http://yves.gnu-darwin.org181 Servers

Load older messages


SenderMessageTime
21 Oct 2025
@dbaynard:matrix.orgdbaynard

Hello folks, I want to PR darwin support for libtree (analysis of linked libraries) and I have questions about tests.

There's a passthru.tests attrset at https://github.com/NixOS/nixpkgs/blob/5e2a59a5b1a82f89f2c7e598302a9cacebb72a67/pkgs/by-name/li/libtree/package.nix#L28-L46 which tests ls from coreutils. On macos, by default, it checks the macOS build of ls, which is not an ELF. I can get it to work properly using pkgsCross, as in the following.

    (libtree.override {
      inherit (pkgsCross.aarch64-multiplatform) coreutils;
    }).overrideAttrs
      (old: {
        meta = lib.recursiveUpdate (old.meta or { }) { platforms = lib.platforms.darwin; };
      })

I presume that in this case libtree should always test the pkgsCross coreutils… but certainly the tests fail on macos without it. What's the idiomatic way of handling this case?

16:26:19
@dbaynard:matrix.orgdbaynard *

Hello folks, I want to PR darwin support for libtree (analysis of linked libraries) and I have questions about tests.

There's a passthru.tests attrset at https://github.com/NixOS/nixpkgs/blob/5e2a59a5b1a82f89f2c7e598302a9cacebb72a67/pkgs/by-name/li/libtree/package.nix#L28-L46 which tests ls from coreutils. On macos, by default, it checks the macOS build of ls, which is not an ELF. I can get it to work properly using pkgsCross, as in the following.

    (libtree.override {
      inherit (pkgsCross.aarch64-multiplatform) coreutils;
    }).overrideAttrs
      (old: {
        meta = lib.recursiveUpdate (old.meta or { }) { platforms = lib.platforms.darwin; };
      })

I presume that in this case libtree should always test the pkgsCross coreutils… but certainly the tests fail on macos without it. What's the idiomatic way of handling this case?

[Edit: I don't mean idiomatic way of implementing the changes, as opposed to the override, I mean the idiomatic way of handling the cross-platform dependency in the tests.]

16:31:14
@lt1379:matrix.orgLun joined the room.18:35:15
@reckenrode:matrix.orgRandy EckenrodeYou might want to ask in https://matrix.to/#/%23cross-compiling:nixos.org.20:09:54
@reckenrode:matrix.orgRandy Eckenrode I know there is a desire to move pkgsCross to variants.nix, which would prevent it from being used in nixpkgs. I assume that applies to passthru.tests. 20:10:01
@reckenrode:matrix.orgRandy EckenrodeI feel like a better (more portable) test would be to use an unwrapped Clang and LLD to generate a shared library and link a trivial program against it.20:12:12
@reckenrode:matrix.orgRandy Eckenrode (I bet pkgsStatic.libtree.tests.checkCoreUtils fails.) 20:13:58
@reckenrode:matrix.orgRandy Eckenrode * (I bet pkgsStatic.libtree.tests.checkCoreUtils fails on Linux.) 20:14:16
@emilazy:matrix.orgemilydoes it only support ELF even on Darwin?20:14:45
@emilazy:matrix.orgemilylooking at the code… does this program actually work on Darwin?20:15:34
@emilazy:matrix.orgemilyit seems to make a fair few assumptions about the system being ELF-y20:15:40
@reckenrode:matrix.orgRandy Eckenrode

Yes. There’s an open issue for Mach-O support, but it’s old.

https://github.com/haampie/libtree/issues/22

20:16:05
@JoelMcCracken:matrix.orgJoelMcCrackenI heard something about nixpkgs dropping x86_64-darwin support, is that discussion happpening anywhere easy to find? 20:16:14
@emilazy:matrix.orgemily it has paths like /usr/lib and /etc/ld.so.conf hardcoded though 20:16:33
@emilazy:matrix.orgemilyit's in the 25.11 release notes, https://github.com/NixOS/nixpkgs/pull/41556620:16:47
@emilazy:matrix.orgemilyI was meaning to post it on Discourse too though, I should do that20:16:56
@reckenrode:matrix.orgRandy EckenrodeNote that that wouldn’t happen until 26.11. The announcement about dropping support in DetNix is unrelated to our schedule.20:17:49
@reckenrode:matrix.orgRandy EckenrodeDoes the latter even exist on NixOS?20:18:34
@emilazy:matrix.orgemilyI think no, but I guess it can not-exist gracefully20:18:54
@emilazy:matrix.orgemilyI'm just surprised if this program runs on macOS at all20:18:59
@reckenrode:matrix.orgRandy Eckenrode * 20:49:58
@dbaynard:matrix.orgdbaynard
> nix build -L '.#libtree.tests.checkCoreUtils' --no-link --print-out-paths
/nix/store/40xm11r0sklkl4x5cp8xdckp5sha0yfd-libtree-ls-test

> nix build -L '.#libtree.tests.checkCoreUtils' --no-link --print-out-paths | xargs bat
───────┬──────────────────────────────────────────────────────────────────────────────────────────────
       │ File: /nix/store/40xm11r0sklkl4x5cp8xdckp5sha0yfd-libtree-ls-test
───────┼──────────────────────────────────────────────────────────────────────────────────────────────
   1   │ /nix/store/x2s54dnz7kd4vbslfcv1x3g69p30fz7y-coreutils-aarch64-unknown-linux-gnu-9.7/bin/ls
   2   │ ├── libacl.so.1 [runpath]
   3   │ │   └── libattr.so.1 [runpath]
   4   │ ├── libattr.so.1 [runpath]
   5   │ └── libgmp.so.10 [runpath]
───────┴──────────────────────────────────────────────────────────────────────────────────────────────
23:46:29
@dbaynard:matrix.orgdbaynard *
> nix build -L '.#libtree.tests.checkCoreUtils' --no-link --print-out-paths
/nix/store/40xm11r0sklkl4x5cp8xdckp5sha0yfd-libtree-ls-test

> nix build -L '.#libtree.tests.checkCoreUtils' --no-link --print-out-paths | xargs bat
───────┬──────────────────────────────────────────────────────────────────────────────────────────────
       │ File: /nix/store/40xm11r0sklkl4x5cp8xdckp5sha0yfd-libtree-ls-test
───────┼──────────────────────────────────────────────────────────────────────────────────────────────
   1   │ /nix/store/x2s54dnz7kd4vbslfcv1x3g69p30fz7y-coreutils-aarch64-unknown-linux-gnu-9.7/bin/ls
   2   │ ├── libacl.so.1 [runpath]
   3   │ │   └── libattr.so.1 [runpath]
   4   │ ├── libattr.so.1 [runpath]
   5   │ └── libgmp.so.10 [runpath]
───────┴──────────────────────────────────────────────────────────────────────────────────────────────

This is the test result, making the above change to use the pkgsCross (but not pkgsStatic!) coreutils.

23:47:21
@dbaynard:matrix.orgdbaynardThanks for your help. I should have been more explicit that this is working, reasonably, for me (I haven't used all the functionality but I have found it useful as a tool that works on macos that can analyze ELFs). I'll ask in the cross compile channel, when I return to this.23:50:07
@emilazy:matrix.orgemilyno worries :)23:50:38
@emilazy:matrix.orgemily I agree with Randy Eckenrode about the best way to test it 23:50:44
@emilazy:matrix.orgemily pull in clang-unwrapped on all platforms and make a couple basic .sos with --target= 23:51:16
@emilazy:matrix.orgemily no need for pkgsCross 23:51:25
22 Oct 2025
@reckenrode:matrix.orgRandy Eckenrodehttps://github.com/NixOS/nixpkgs/pull/45440200:37:38
@reckenrode:matrix.orgRandy EckenrodeDarwin source release updates to 15.600:37:42

Show newer messages


Back to Room ListRoom Version: 6