From b965ede9638b21e9d0ac0b9b36f763f3686dec40 Mon Sep 17 00:00:00 2001 From: Wolfgang Walther Date: Mon, 9 Sep 2024 22:02:23 +0200 Subject: [PATCH 1/3] rust-analyzer: use env. to pass CFG_RELEASE environment variable This is required to test rust-analyzer with structuredAttrs turned on once the cargo setup hooks support it. --- pkgs/development/tools/rust/rust-analyzer/default.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkgs/development/tools/rust/rust-analyzer/default.nix b/pkgs/development/tools/rust/rust-analyzer/default.nix index 6326657372c4..33480259334a 100644 --- a/pkgs/development/tools/rust/rust-analyzer/default.nix +++ b/pkgs/development/tools/rust/rust-analyzer/default.nix @@ -39,7 +39,7 @@ rustPlatform.buildRustPackage rec { buildFeatures = lib.optional useMimalloc "mimalloc"; - CFG_RELEASE = version; + env.CFG_RELEASE = version; inherit doCheck; preCheck = lib.optionalString doCheck '' From 9220a19a4dee6cea4270a4be4855b7de4ac6bf60 Mon Sep 17 00:00:00 2001 From: Wolfgang Walther Date: Sat, 24 Aug 2024 23:27:19 +0200 Subject: [PATCH 2/3] rust: support structuredAttrs in setup hooks Tested the following packages with and without structuredAttrs: - rust-analyzer: cargo-build-hook, cargo-check-hook - jujutsu: cargo-nextest-hook - kornia-rs: maturin-build-hook --- .../rust/hooks/cargo-build-hook.sh | 35 +++++++------------ .../rust/hooks/cargo-check-hook.sh | 35 +++++++++---------- .../rust/hooks/cargo-nextest-hook.sh | 32 ++++++++--------- .../rust/hooks/maturin-build-hook.sh | 24 +++++++------ 4 files changed, 56 insertions(+), 70 deletions(-) diff --git a/pkgs/build-support/rust/hooks/cargo-build-hook.sh b/pkgs/build-support/rust/hooks/cargo-build-hook.sh index 26dde914f22a..4c8d434151b1 100644 --- a/pkgs/build-support/rust/hooks/cargo-build-hook.sh +++ b/pkgs/build-support/rust/hooks/cargo-build-hook.sh @@ -1,5 +1,3 @@ -declare -a cargoBuildFlags - cargoBuildHook() { echo "Executing cargoBuildHook" @@ -16,35 +14,28 @@ cargoBuildHook() { pushd "${buildAndTestSubdir}" fi + local flagsArray=( + "-j" "$NIX_BUILD_CORES" + "--target" "@rustHostPlatformSpec@" + "--offline" + ) + if [ "${cargoBuildType}" != "debug" ]; then - cargoBuildProfileFlag="--profile ${cargoBuildType}" + flagsArray+=("--profile" "${cargoBuildType}") fi if [ -n "${cargoBuildNoDefaultFeatures-}" ]; then - cargoBuildNoDefaultFeaturesFlag=--no-default-features + flagsArray+=("--no-default-features") fi if [ -n "${cargoBuildFeatures-}" ]; then - if [ -n "$__structuredAttrs" ]; then - OLDIFS="$IFS" - IFS=','; cargoBuildFeaturesFlag="--features=${cargoBuildFeatures[*]}" - IFS="$OLDIFS" - unset OLDIFS - else - cargoBuildFeaturesFlag="--features=${cargoBuildFeatures// /,}" - fi + flagsArray+=("--features=$(concatStringsSep "," cargoBuildFeatures)") fi - ( - set -x - @setEnv@ cargo build -j $NIX_BUILD_CORES \ - --target @rustHostPlatformSpec@ \ - --offline \ - ${cargoBuildProfileFlag} \ - ${cargoBuildNoDefaultFeaturesFlag} \ - ${cargoBuildFeaturesFlag} \ - ${cargoBuildFlags} - ) + concatTo flagsArray cargoBuildFlags + + echoCmd 'cargoBuildHook flags' "${flagsArray[@]}" + @setEnv@ cargo build "${flagsArray[@]}" if [ ! -z "${buildAndTestSubdir-}" ]; then popd diff --git a/pkgs/build-support/rust/hooks/cargo-check-hook.sh b/pkgs/build-support/rust/hooks/cargo-check-hook.sh index 96b87dbf15b4..a130a64d392d 100644 --- a/pkgs/build-support/rust/hooks/cargo-check-hook.sh +++ b/pkgs/build-support/rust/hooks/cargo-check-hook.sh @@ -1,6 +1,3 @@ -declare -a checkFlags -declare -a cargoTestFlags - cargoCheckHook() { echo "Executing cargoCheckHook" @@ -10,37 +7,37 @@ cargoCheckHook() { pushd "${buildAndTestSubdir}" fi + local flagsArray=("-j" "$NIX_BUILD_CORES") + if [[ -z ${dontUseCargoParallelTests-} ]]; then - threads=$NIX_BUILD_CORES + prependToVar checkFlags "--test-threads=$NIX_BUILD_CORES" else - threads=1 + prependToVar checkFlags "--test-threads=1" fi if [ "${cargoCheckType}" != "debug" ]; then - cargoCheckProfileFlag="--profile ${cargoCheckType}" + flagsArray+=("--profile" "${cargoCheckType}") fi if [ -n "${cargoCheckNoDefaultFeatures-}" ]; then - cargoCheckNoDefaultFeaturesFlag=--no-default-features + flagsArray+=("--no-default-features") fi if [ -n "${cargoCheckFeatures-}" ]; then - cargoCheckFeaturesFlag="--features=${cargoCheckFeatures// /,}" + flagsArray+=("--features=$(concatStringsSep "," cargoCheckFeatures)") fi - argstr="${cargoCheckProfileFlag} ${cargoCheckNoDefaultFeaturesFlag} ${cargoCheckFeaturesFlag} - --target @rustHostPlatformSpec@ --offline ${cargoTestFlags}" - - ( - set -x - cargo test \ - -j $NIX_BUILD_CORES \ - ${argstr} -- \ - --test-threads=${threads} \ - ${checkFlags} \ - ${checkFlagsArray+"${checkFlagsArray[@]}"} + flagsArray+=( + "--target" "@rustHostPlatformSpec@" + "--offline" ) + prependToVar checkFlags "--" + concatTo flagsArray cargoTestFlags checkFlags checkFlagsArray + + echoCmd 'cargoCheckHook flags' "${flagsArray[@]}" + cargo test "${flagsArray[@]}" + if [[ -n "${buildAndTestSubdir-}" ]]; then popd fi diff --git a/pkgs/build-support/rust/hooks/cargo-nextest-hook.sh b/pkgs/build-support/rust/hooks/cargo-nextest-hook.sh index 16d32513a0d0..0304bbc7cb31 100644 --- a/pkgs/build-support/rust/hooks/cargo-nextest-hook.sh +++ b/pkgs/build-support/rust/hooks/cargo-nextest-hook.sh @@ -1,6 +1,3 @@ -declare -a checkFlags -declare -a cargoTestFlags - cargoNextestHook() { echo "Executing cargoNextestHook" @@ -10,35 +7,34 @@ cargoNextestHook() { pushd "${buildAndTestSubdir}" fi + local flagsArray=( + "--target" "@rustHostPlatformSpec@" + "--offline" + ) + if [[ -z ${dontUseCargoParallelTests-} ]]; then - threads=$NIX_BUILD_CORES + flagsArray+=("-j" "$NIX_BUILD_CORES") else - threads=1 + flagsArray+=("-j" "1") fi if [ "${cargoCheckType}" != "debug" ]; then - cargoCheckProfileFlag="--cargo-profile ${cargoCheckType}" + flagsArray+=("--cargo-profile" "${cargoCheckType}") fi if [ -n "${cargoCheckNoDefaultFeatures-}" ]; then - cargoCheckNoDefaultFeaturesFlag=--no-default-features + flagsArray+=("--no-default-features") fi if [ -n "${cargoCheckFeatures-}" ]; then - cargoCheckFeaturesFlag="--features=${cargoCheckFeatures// /,}" + flagsArray+=("--features=$(concatStringsSep "," cargoCheckFeatures)") fi - argstr="${cargoCheckProfileFlag} ${cargoCheckNoDefaultFeaturesFlag} ${cargoCheckFeaturesFlag} - --target @rustHostPlatformSpec@ --offline ${cargoTestFlags}" + prependToVar checkFlags "--" + concatTo flagsArray cargoTestFlags checkFlags checkFlagsArray - ( - set -x - cargo nextest run \ - -j ${threads} \ - ${argstr} -- \ - ${checkFlags} \ - ${checkFlagsArray+"${checkFlagsArray[@]}"} - ) + echoCmd 'cargoNextestHook flags' "${flagsArray[@]}" + cargo nextest run "${flagsArray[@]}" if [[ -n "${buildAndTestSubdir-}" ]]; then popd diff --git a/pkgs/build-support/rust/hooks/maturin-build-hook.sh b/pkgs/build-support/rust/hooks/maturin-build-hook.sh index c1e701425f00..3a5eeb4234b9 100644 --- a/pkgs/build-support/rust/hooks/maturin-build-hook.sh +++ b/pkgs/build-support/rust/hooks/maturin-build-hook.sh @@ -10,19 +10,21 @@ maturinBuildHook() { pushd "${buildAndTestSubdir}" fi - ( - set -x - @setEnv@ maturin build \ - --jobs=$NIX_BUILD_CORES \ - --offline \ - --target @rustTargetPlatformSpec@ \ - --manylinux off \ - --strip \ - --release \ - --out "$dist" \ - ${maturinBuildFlags-} + local flagsArray=( + "--jobs=$NIX_BUILD_CORES" + "--offline" + "--target" "@rustTargetPlatformSpec@" + "--manylinux" "off" + "--strip" + "--release" + "--out" "$dist" ) + concatTo flagsArray maturinBuildFlags + + echoCmd 'maturinBuildHook flags' "${flagsArray[@]}" + @setEnv@ maturin build "${flagsArray[@]}" + if [ ! -z "${buildAndTestSubdir-}" ]; then popd fi From d5013e942e3ae3655f5537ba32792c5c20e73106 Mon Sep 17 00:00:00 2001 From: Wolfgang Walther Date: Sat, 24 Aug 2024 23:41:25 +0200 Subject: [PATCH 3/3] rust: shellcheck setup hooks --- pkgs/build-support/rust/hooks/cargo-build-hook.sh | 9 ++++++--- pkgs/build-support/rust/hooks/cargo-check-hook.sh | 2 ++ pkgs/build-support/rust/hooks/cargo-nextest-hook.sh | 2 ++ pkgs/build-support/rust/hooks/maturin-build-hook.sh | 6 ++++-- 4 files changed, 14 insertions(+), 5 deletions(-) diff --git a/pkgs/build-support/rust/hooks/cargo-build-hook.sh b/pkgs/build-support/rust/hooks/cargo-build-hook.sh index 4c8d434151b1..749ebed8b01b 100644 --- a/pkgs/build-support/rust/hooks/cargo-build-hook.sh +++ b/pkgs/build-support/rust/hooks/cargo-build-hook.sh @@ -1,3 +1,5 @@ +# shellcheck shell=bash disable=SC2154,SC2164 + cargoBuildHook() { echo "Executing cargoBuildHook" @@ -7,9 +9,10 @@ cargoBuildHook() { # separateDebugInfo. export "CARGO_PROFILE_${cargoBuildType@U}_STRIP"=false - if [ ! -z "${buildAndTestSubdir-}" ]; then + if [ -n "${buildAndTestSubdir-}" ]; then # ensure the output doesn't end up in the subdirectory - export CARGO_TARGET_DIR="$(pwd)/target" + CARGO_TARGET_DIR="$(pwd)/target" + export CARGO_TARGET_DIR pushd "${buildAndTestSubdir}" fi @@ -37,7 +40,7 @@ cargoBuildHook() { echoCmd 'cargoBuildHook flags' "${flagsArray[@]}" @setEnv@ cargo build "${flagsArray[@]}" - if [ ! -z "${buildAndTestSubdir-}" ]; then + if [ -n "${buildAndTestSubdir-}" ]; then popd fi diff --git a/pkgs/build-support/rust/hooks/cargo-check-hook.sh b/pkgs/build-support/rust/hooks/cargo-check-hook.sh index a130a64d392d..07eae85d13ee 100644 --- a/pkgs/build-support/rust/hooks/cargo-check-hook.sh +++ b/pkgs/build-support/rust/hooks/cargo-check-hook.sh @@ -1,3 +1,5 @@ +# shellcheck shell=bash disable=SC2154,SC2164 + cargoCheckHook() { echo "Executing cargoCheckHook" diff --git a/pkgs/build-support/rust/hooks/cargo-nextest-hook.sh b/pkgs/build-support/rust/hooks/cargo-nextest-hook.sh index 0304bbc7cb31..4719d1bad8ae 100644 --- a/pkgs/build-support/rust/hooks/cargo-nextest-hook.sh +++ b/pkgs/build-support/rust/hooks/cargo-nextest-hook.sh @@ -1,3 +1,5 @@ +# shellcheck shell=bash disable=SC2154,SC2164 + cargoNextestHook() { echo "Executing cargoNextestHook" diff --git a/pkgs/build-support/rust/hooks/maturin-build-hook.sh b/pkgs/build-support/rust/hooks/maturin-build-hook.sh index 3a5eeb4234b9..2eab2124e70b 100644 --- a/pkgs/build-support/rust/hooks/maturin-build-hook.sh +++ b/pkgs/build-support/rust/hooks/maturin-build-hook.sh @@ -1,3 +1,5 @@ +# shellcheck shell=bash disable=SC2154,SC2164 + maturinBuildHook() { echo "Executing maturinBuildHook" @@ -6,7 +8,7 @@ maturinBuildHook() { # Put the wheel to dist/ so that regular Python tooling can find it. local dist="$PWD/dist" - if [ ! -z "${buildAndTestSubdir-}" ]; then + if [ -n "${buildAndTestSubdir-}" ]; then pushd "${buildAndTestSubdir}" fi @@ -25,7 +27,7 @@ maturinBuildHook() { echoCmd 'maturinBuildHook flags' "${flagsArray[@]}" @setEnv@ maturin build "${flagsArray[@]}" - if [ ! -z "${buildAndTestSubdir-}" ]; then + if [ -n "${buildAndTestSubdir-}" ]; then popd fi