mirror of
https://github.com/ipetkov/crane.git
synced 2024-11-23 16:32:23 +03:00
e908c1afea
when trying to use crane with a non local src (eg, not `./.`) we get the error ``` $ nix flake show <...> error: access to absolute path '/Cargo.toml' is forbidden in pure eval mode (use '--impure' to override) (use '--show-trace' to show detailed location information) ``` To fix this, we quote the relative paths so to properly append them to the base path. https://nixos.wiki/wiki/Nix_Expression_Language#Coercing_a_relative_path_with_interpolated_variables_to_an_absolute_path_.28for_imports.29 ## Reproduction flake ``` { description = "Build a cargo project without extra checks"; inputs = { nixpkgs.url = "github:NixOS/nixpkgs/nixpkgs-unstable"; crane = { url = "github:ipetkov/crane"; inputs.nixpkgs.follows = "nixpkgs"; }; external-crate-source = { url = "github:ray-kast/empress"; flake = false; }; flake-utils.url = "github:numtide/flake-utils"; }; outputs = { self, nixpkgs, crane, flake-utils, external-crate-source, ... }: flake-utils.lib.eachDefaultSystem (system: let pkgs = nixpkgs.legacyPackages.${system}; test-crate = crane.lib.${system}.buildPackage { src = external-crate-source.outPath; }; in { packages.default = test-crate; }); } ```
25 lines
530 B
Nix
25 lines
530 B
Nix
{ cleanCargoToml
|
|
, linkFarmFromDrvs
|
|
, runCommand
|
|
, writeTOML
|
|
}:
|
|
|
|
let
|
|
cmpCleanCargoToml = name: path:
|
|
let
|
|
cleaned = cleanCargoToml {
|
|
cargoToml = path + "/Cargo.toml";
|
|
};
|
|
cleanedToml = writeTOML "cleaned.toml" cleaned;
|
|
expected = path + "/expected.toml";
|
|
in
|
|
runCommand "compare-${name}" { } ''
|
|
diff ${expected} ${cleanedToml}
|
|
touch $out
|
|
'';
|
|
in
|
|
linkFarmFromDrvs "cleanCargoToml" [
|
|
(cmpCleanCargoToml "barebones" ./barebones)
|
|
(cmpCleanCargoToml "complex" ./complex)
|
|
]
|