buildPackage: do not add jq to nativeBuildInputs (#685)

Doing so ends up resulting in PKG_CONFIG_PATH changing which may result
in various `*-sys` crates needing to be rebuilt
This commit is contained in:
Ivan Petkov 2024-08-22 16:24:53 -07:00 committed by GitHub
parent 3f50200286
commit af693bf608
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
5 changed files with 18 additions and 7 deletions

View File

@ -6,6 +6,13 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.
## Unreleased ## Unreleased
### Changed
* **Breaking** (technically): `buildPackage` no longer adds `jq` to
`nativeBuildInputs` as doing so can result in rebuilding any `*-sys` crates
which rely on `PKG_CONFIG_PATH` remaining stable
* `installFromCargoBuildLogHook` no longer assumes or requires that `jq` is
available on `$PATH` and will instead directly reference `pkgs.jq`
## [0.18.1] - 2024-08-22 ## [0.18.1] - 2024-08-22
### Fixed ### Fixed

View File

@ -233,7 +233,6 @@ environment variables during the build, you can bring them back via
#### Native build dependencies and included hooks #### Native build dependencies and included hooks
The following hooks are automatically added as native build inputs: The following hooks are automatically added as native build inputs:
* `installFromCargoBuildLogHook` * `installFromCargoBuildLogHook`
* `jq`
* `removeReferencesToVendoredSourcesHook` * `removeReferencesToVendoredSourcesHook`
### `craneLib.buildTrunkPackage` ### `craneLib.buildTrunkPackage`
@ -1703,7 +1702,7 @@ takes two positional arguments:
**Automatic behavior:** none **Automatic behavior:** none
**Required nativeBuildInputs**: assumes `cargo` and `jq` are available on the `$PATH` **Required nativeBuildInputs**: assumes `cargo` is available on the `$PATH`
### `craneLib.removeReferencesToVendoredSourcesHook` ### `craneLib.removeReferencesToVendoredSourcesHook`

View File

@ -77,8 +77,9 @@ mkCargoDerivation (cleanedArgs // memoizedArgs // {
''; '';
nativeBuildInputs = (args.nativeBuildInputs or [ ]) ++ [ nativeBuildInputs = (args.nativeBuildInputs or [ ]) ++ [
# NB: avoid adding any non-hook packages here. Doing so will end up
# changing PKG_CONFIG_PATH and cause rebuilds of `*-sys` crates.
installFromCargoBuildLogHook installFromCargoBuildLogHook
jq
removeReferencesToVendoredSourcesHook removeReferencesToVendoredSourcesHook
]; ];
}) })

View File

@ -1,7 +1,11 @@
{ makeSetupHook { makeSetupHook
, pkgsBuildBuild
}: }:
makeSetupHook makeSetupHook
{ {
name = "installFromCargoBuildLogHook"; name = "installFromCargoBuildLogHook";
substitutions = {
jq = "${pkgsBuildBuild.jq}/bin/jq";
};
} ./installFromCargoBuildLogHook.sh } ./installFromCargoBuildLogHook.sh

View File

@ -10,7 +10,7 @@ function installFromCargoBuildLog() (
echo searching for bins/libs to install from cargo build log at ${log} echo searching for bins/libs to install from cargo build log at ${log}
local logs local logs
logs=$(jq -R 'fromjson?' <"${log}") logs=$(@jq@ -R 'fromjson?' <"${log}")
# We automatically ignore any bindeps artifacts as installation candidates. # We automatically ignore any bindeps artifacts as installation candidates.
# Note that if the same binary is built both as a bindep artifact for something else and as a # Note that if the same binary is built both as a bindep artifact for something else and as a
@ -19,7 +19,7 @@ function installFromCargoBuildLog() (
local select_non_deps_artifact='select(contains("/deps/artifact/") | not)' local select_non_deps_artifact='select(contains("/deps/artifact/") | not)'
# Only install binaries and libraries from the current workspace as a sanity check # Only install binaries and libraries from the current workspace as a sanity check
local members="$(command cargo metadata --format-version 1 | jq -c '.workspace_members')" local members="$(command cargo metadata --format-version 1 | @jq@ -c '.workspace_members')"
local select_non_test_members='select(.reason == "compiler-artifact" and .profile.test == false) local select_non_test_members='select(.reason == "compiler-artifact" and .profile.test == false)
| select(.package_id as $pid | select(.package_id as $pid
| '"${members}"' | '"${members}"'
@ -49,8 +49,8 @@ function installFromCargoBuildLog() (
rmdir --ignore-fail-on-non-empty "${loc}" rmdir --ignore-fail-on-non-empty "${loc}"
} }
echo "${logs}" | jq -r "${select_lib_files}" | installArtifacts "${dest}/lib" echo "${logs}" | @jq@ -r "${select_lib_files}" | installArtifacts "${dest}/lib"
echo "${logs}" | jq -r "${select_bins}" | installArtifacts "${dest}/bin" echo "${logs}" | @jq@ -r "${select_bins}" | installArtifacts "${dest}/bin"
echo searching for bins/libs complete echo searching for bins/libs complete
) )