~andir/nixpkgs-dev

This thread contains a patchset. You're looking at the original emails, but you may wish to use the patch review UI. Review patch
2 2

[PATCH] default-crate-overrides: proc-macro-crate assumes env::var("CARGO")

Details
Message ID
<20240819175702.5810-2-adam@westernsemico.com>
DKIM signature
pass
Download raw message
Patch: +13 -0
Since version 2.0.0, proc-macro-crate has assumed it can exec()
`env::var("CARGO")` in order to run `cargo locate-project`.

This commit adds a crate override to proc-macro-crate which simply writes the
path to buildPlatform.cargo into the proc-macro-crate sources.

This way we don't need to set `env.CARGO` for every build that depends on
proc-macro-crate -- if we do that, the $CARGO environment variable would be
visible to the entire build.  This could potentially lead to incredibly
hard-to-troubleshoot heisenbugs if there is some other crate that expects
`env::var("CARGO")` to exist -- that other crate would mysteriously work only
in projects that use proc-macro-crate but not anywhere else!

This commit is required in order to build Arti (Tor in rust) using crate2nix.

---
 pkgs/build-support/rust/default-crate-overrides.nix | 13 +++++++++++++
 1 file changed, 13 insertions(+)

diff --git a/pkgs/build-support/rust/default-crate-overrides.nix b/pkgs/build-support/rust/default-crate-overrides.nix
index cb0951ce2f39..caa1fb45c6a0 100644
--- a/pkgs/build-support/rust/default-crate-overrides.nix
+++ b/pkgs/build-support/rust/default-crate-overrides.nix
@@ -44,6 +44,7 @@
, nixVersions
, boost
, nlohmann_json
, buildPackages
, ...
}:

@@ -324,4 +325,16 @@ in
    ];
  };

  # Assumes it can run Command::new(env::var("CARGO")).arg("locate-project")
  # https://github.com/bkchr/proc-macro-crate/blame/master/src/lib.rs#L244
  proc-macro-crate = attrs: lib.optionalAttrs (lib.versionAtLeast attrs.version "2.0") {
    prePatch = (attrs.prePatch or "") + ''
      substituteInPlace \
        src/lib.rs \
        --replace-fail \
        'env::var("CARGO").map_err(|_| Error::CargoEnvVariableNotSet)?' \
        '"${lib.getBin buildPackages.cargo}/bin/cargo"'
    '';
  };

}
2.44.1
Details
Message ID
<fep42337mvnpjcapzezaoi2vqywhuedfjghuovvg4bn5cuq3jk@jnvuhsl73ult>
In-Reply-To
<20240819175702.5810-2-adam@westernsemico.com> (view parent)
DKIM signature
pass
Download raw message
Hey,

On Mon, Aug 19, 2024 at 10:57:03AM GMT, Adam Joseph wrote:
>Since version 2.0.0, proc-macro-crate has assumed it can exec()
>`env::var("CARGO")` in order to run `cargo locate-project`.
>
>This commit adds a crate override to proc-macro-crate which simply writes the
>path to buildPlatform.cargo into the proc-macro-crate sources.
>
>This way we don't need to set `env.CARGO` for every build that depends on
>proc-macro-crate -- if we do that, the $CARGO environment variable would be
>visible to the entire build.  This could potentially lead to incredibly
>hard-to-troubleshoot heisenbugs if there is some other crate that expects
>`env::var("CARGO")` to exist -- that other crate would mysteriously work only
>in projects that use proc-macro-crate but not anywhere else!
>
>This commit is required in order to build Arti (Tor in rust) using crate2nix.

This doesn't apply on my nixpkgs checkout. Can you rebase and re-send,
or maybe point to a repo I can pull it from?

Thanks,
flokli
Details
Message ID
<172435851640.17101.5344216662436546428@localhost>
In-Reply-To
<fep42337mvnpjcapzezaoi2vqywhuedfjghuovvg4bn5cuq3jk@jnvuhsl73ult> (view parent)
DKIM signature
pass
Download raw message
Sorry about that, will resend.

  - a

Quoting Florian Klink (2024-08-22 01:45:43)
> Hey,
> 
> On Mon, Aug 19, 2024 at 10:57:03AM GMT, Adam Joseph wrote:
> >Since version 2.0.0, proc-macro-crate has assumed it can exec()
> >`env::var("CARGO")` in order to run `cargo locate-project`.
> >
> >This commit adds a crate override to proc-macro-crate which simply writes the
> >path to buildPlatform.cargo into the proc-macro-crate sources.
> >
> >This way we don't need to set `env.CARGO` for every build that depends on
> >proc-macro-crate -- if we do that, the $CARGO environment variable would be
> >visible to the entire build.  This could potentially lead to incredibly
> >hard-to-troubleshoot heisenbugs if there is some other crate that expects
> >`env::var("CARGO")` to exist -- that other crate would mysteriously work only
> >in projects that use proc-macro-crate but not anywhere else!
> >
> >This commit is required in order to build Arti (Tor in rust) using crate2nix.
> 
> This doesn't apply on my nixpkgs checkout. Can you rebase and re-send,
> or maybe point to a repo I can pull it from?
> 
> Thanks,
> flokli
Reply to thread Export thread (mbox)