From a20704cf252b1bc0048fb8af3b0f7ee74f28e1d7 Mon Sep 17 00:00:00 2001 From: "pe@pijul.org" Date: Thu, 2 Nov 2017 21:04:04 +0100 Subject: [PATCH 01/47] Reintroducing mkRustCrate This is another way to compile Rust programs, which uses Nix instead of Cargo to manage dependencies. Compiling a package can reuse previously compiled dependencies. This uses a companion Rust crate called generate-nix-pkg to produce the .nix files from a Cargo.lock. --- pkgs/build-support/rust/rust-utils.nix | 263 +++++++++++++++++++++++++ 1 file changed, 263 insertions(+) create mode 100644 pkgs/build-support/rust/rust-utils.nix diff --git a/pkgs/build-support/rust/rust-utils.nix b/pkgs/build-support/rust/rust-utils.nix new file mode 100644 index 00000000000000..c861e7eb271159 --- /dev/null +++ b/pkgs/build-support/rust/rust-utils.nix @@ -0,0 +1,263 @@ +# Copyright 2017 Pierre-Étienne Meunier +# +# This file is licensed under the Apache-2.0 license, and under the +# MIT license, at your convenience. + +{ lib, buildPlatform, stdenv }: + +let buildCrate = { crateName, crateVersion, dependencies, complete, crateFeatures, libName, build, release, libPath, crateType, metadata, crateBin, finalBins, verboseBuild }: + + let depsDir = builtins.foldl' (deps: dep: deps + " " + dep.out) "" dependencies; + completeDepsDir = builtins.foldl' (deps: dep: deps + " " + dep.out) "" complete; + deps = + builtins.foldl' (deps: dep: + let extern = lib.strings.replaceStrings ["-"] ["_"] dep.libName; in + deps + (if dep.crateType == "lib" then + " --extern ${extern}=${dep.out}/lib${extern}-${dep.metadata}.rlib" + else + " --extern ${extern}=${dep.out}/lib${extern}-${dep.metadata}.so") + ) "" dependencies; + optLevel = if release then 3 else 0; + rustcOpts = (if release then "-C opt-level=3" else "-C debuginfo=2"); + rustcMeta = "-C metadata=" + metadata + " -C extra-filename=-" + metadata; + in '' + + norm="$(printf '\033[0m')" #returns to "normal" + bold="$(printf '\033[0;1m')" #set bold + green="$(printf '\033[0;32m')" #set red + boldgreen="$(printf '\033[0;1;32m')" #set bold, and set red. + + mkdir -p target/deps + mkdir -p target/build + chmod uga+w target -R + for i in ${completeDepsDir}; do + ln -s -f $i/*.rlib target/deps #*/ + ln -s -f $i/*.so target/deps #*/ + if [ -e "$i/link" ]; then + cat $i/link >> target/link + cat $i/link >> target/link.final + fi + if [ -e $i/env ]; then + source $i/env + fi + done + if [ -e target/link ]; then + sort -u target/link > target/link.sorted + mv target/link.sorted target/link + sort -u target/link.final > target/link.final.sorted + mv target/link.final.sorted target/link.final + tr '\n' ' ' < target/link > target/link_ + fi + EXTRA_BUILD="" + BUILD_OUT_DIR="" + export CARGO_PKG_NAME=${crateName} + export CARGO_PKG_VERSION=${crateVersion} + export CARGO_CFG_TARGET_ARCH=$(echo ${buildPlatform.system} | sed -e "s/\([^-]*\)-\([^-]*\)/\1/") + export CARGO_CFG_TARGET_OS=$(echo ${buildPlatform.system} | sed -e "s/\([^-]*\)-\([^-]*\)/\2/") + + export CARGO_CFG_TARGET_ENV="gnu" + export CARGO_MANIFEST_DIR="." + export DEBUG="${toString (!release)}" + export OPT_LEVEL="${toString optLevel}" + export TARGET="${buildPlatform.system}-gnu" + export HOST="${buildPlatform.system}-gnu" + export PROFILE=${if release then "release" else "debug"} + export OUT_DIR=$(pwd)/target/build/${crateName}.out + + if [[ ! -z "${build}" ]] ; then + echo "$boldgreen" "Building ${build} (${libName})" "$norm" + mkdir -p target/build/${crateName} + if [ -e target/link_ ]; then + rustc --crate-name build_script_build ${build} --crate-type bin ${rustcOpts} ${crateFeatures} --out-dir target/build/${crateName} --emit=dep-info,link -L dependency=target/deps ${deps} --cap-lints allow $(cat target/link_) + else + rustc --crate-name build_script_build ${build} --crate-type bin ${rustcOpts} ${crateFeatures} --out-dir target/build/${crateName} --emit=dep-info,link -L dependency=target/deps ${deps} --cap-lints allow + fi + mkdir -p target/build/${crateName}.out + export RUST_BACKTRACE=1 + BUILD_OUT_DIR="-L $OUT_DIR" + mkdir -p $OUT_DIR + target/build/${crateName}/build_script_build > target/build/${crateName}.opt + set +e + EXTRA_BUILD=$(grep "^cargo:rustc-flags=" target/build/${crateName}.opt | sed -e "s/cargo:rustc-flags=\(.*\)/\1/") + EXTRA_FEATURES=$(grep "^cargo:rustc-cfg=" target/build/${crateName}.opt | sed -e "s/cargo:rustc-cfg=\(.*\)/--cfg \1/") + + EXTRA_LINK=$(grep "^cargo:rustc-link-lib=" target/build/${crateName}.opt | sed -e "s/cargo:rustc-link-lib=\(.*\)/\1/") + EXTRA_LINK_SEARCH=$(grep "^cargo:rustc-link-search=" target/build/${crateName}.opt | sed -e "s/cargo:rustc-link-search=\(.*\)/\1/") + CRATENAME=$(echo ${crateName} | sed -e "s/\(.*\)-sys$/\1/" | tr '[:lower:]' '[:upper:]') + grep "^cargo:" target/build/${crateName}.opt | grep -v "^cargo:rustc-" | grep -v "^cargo:warning=" | grep -v "^cargo:rerun-if-changed=" | grep -v "^cargo:rerun-if-env-changed" | sed -e "s/cargo:\([^=]*\)=\(.*\)/export DEP_$(echo $CRATENAME)_\U\1\E=\2/" > target/env + + set -e + if [ -n "$(ls target/build/${crateName}.out)" ]; then + + if [ -e "${libPath}" ] ; then + cp -r target/build/${crateName}.out/* $(dirname ${libPath}) #*/ + else + cp -r target/build/${crateName}.out/* src #*/ + fi + fi + fi + # echo "Features: ${crateFeatures}" $EXTRA_FEATURES + + EXTRA_LIB="" + CRATE_NAME=$(echo ${libName} | sed -e "s/-/_/g") + # echo "Libname" ${libName} ${libPath} + # echo "Deps: ${deps}" + if [ -e "${libPath}" ] ; then + + echo "$boldgreen" "Building ${libPath}" "$norm" + if ${verboseBuild}; then + echo "$boldgreen" "Running" "$norm" "rustc --crate-name $CRATE_NAME ${libPath} --crate-type ${crateType} ${rustcOpts} ${rustcMeta} ${crateFeatures} --out-dir target/deps --emit=dep-info,link -L dependency=target/deps ${deps} --cap-lints allow $BUILD_OUT_DIR $EXTRA_BUILD $EXTRA_FEATURES" + fi + rustc --crate-name $CRATE_NAME ${libPath} --crate-type ${crateType} ${rustcOpts} ${rustcMeta} ${crateFeatures} --out-dir target/deps --emit=dep-info,link -L dependency=target/deps ${deps} --cap-lints allow $BUILD_OUT_DIR $EXTRA_BUILD $EXTRA_FEATURES + EXTRA_LIB=" --extern $CRATE_NAME=target/deps/lib$CRATE_NAME-${metadata}.rlib" + if [ -e target/deps/lib$CRATE_NAME-${metadata}.so ]; then + EXTRA_LIB="$EXTRA_LIB --extern $CRATE_NAME=target/deps/lib$CRATE_NAME-${metadata}.so" + fi + elif [ -e src/lib.rs ] ; then + + echo "$boldgreen" "Building src/lib.rs (${libName})" "$norm" + if ${verboseBuild}; then + echo "$boldgreen" "Running" "$norm" "rustc --crate-name $CRATE_NAME src/lib.rs --crate-type ${crateType} ${rustcOpts} ${rustcMeta} ${crateFeatures} --out-dir target/deps --emit=dep-info,link -L dependency=target/deps ${deps} --cap-lints allow $BUILD_OUT_DIR $EXTRA_BUILD $EXTRA_FEATURES"; + fi + + rustc --crate-name $CRATE_NAME src/lib.rs --crate-type ${crateType} ${rustcOpts} ${rustcMeta} ${crateFeatures} --out-dir target/deps --emit=dep-info,link -L dependency=target/deps ${deps} --cap-lints allow $BUILD_OUT_DIR $EXTRA_BUILD $EXTRA_FEATURES + EXTRA_LIB=" --extern $CRATE_NAME=target/deps/lib$CRATE_NAME-${metadata}.rlib" + if [ -e target/deps/lib$CRATE_NAME-${metadata}.so ]; then + EXTRA_LIB="$EXTRA_LIB --extern $CRATE_NAME=target/deps/lib$CRATE_NAME-${metadata}.so" + fi + + elif [ -e src/${libName}.rs ] ; then + + echo "$boldgreen" "Building src/${libName}.rs" "$norm" + + if ${verboseBuild}; then + echo "rustc --crate-name $CRATE_NAME src/${libName}.rs --crate-type ${crateType} ${rustcOpts} ${rustcMeta} ${crateFeatures} --out-dir target/deps --emit=dep-info,link -L dependency=target/deps ${deps} --cap-lints allow $BUILD_OUT_DIR $EXTRA_BUILD $EXTRA_FEATURES" + fi + + rustc --crate-name $CRATE_NAME src/${libName}.rs --crate-type ${crateType} ${rustcOpts} ${rustcMeta} ${crateFeatures} --out-dir target/deps --emit=dep-info,link -L dependency=target/deps ${deps} --cap-lints allow $BUILD_OUT_DIR $EXTRA_BUILD $EXTRA_FEATURES + EXTRA_LIB=" --extern $CRATE_NAME=target/deps/lib$CRATE_NAME-${metadata}.rlib" + if [ -e target/deps/lib$CRATE_NAME-${metadata}.so ]; then + EXTRA_LIB="$EXTRA_LIB --extern $CRATE_NAME=target/deps/lib$CRATE_NAME-${metadata}.so" + fi + + fi + + echo "$EXTRA_LINK_SEARCH" | while read i; do + if [ ! -z "$i" ]; then + echo "-L $i" >> target/link + L=$(echo $i | sed -e "s#$(pwd)/target/build#$out#") + echo "-L $L" >> target/link.final + fi + done + echo "$EXTRA_LINK" | while read i; do + if [ ! -z "$i" ]; then + echo "-l $i" >> target/link + echo "-l $i" >> target/link.final + fi + done + + if [ -e target/link ]; then + sort -u target/link.final > target/link.final.sorted + mv target/link.final.sorted target/link.final + sort -u target/link > target/link.sorted + mv target/link.sorted target/link + + tr '\n' ' ' < target/link > target/link_ + LINK=$(cat target/link_) + fi + + mkdir -p target/bin + echo "${crateBin}" | sed -n 1'p' | tr ',' '\n' | while read BIN; do + if [ ! -z "$BIN" ]; then + printf "%s" "$boldgreen" + echo "Building $BIN" + printf "%s" "$norm" + if ${verboseBuild}; then + echo "$boldgreen" "Running" "$norm" " rustc --crate-name $BIN --crate-type bin ${rustcOpts} ${crateFeatures} --out-dir target/bin --emit=dep-info,link -L dependency=target/deps $LINK ${deps}$EXTRA_LIB --cap-lints allow $BUILD_OUT_DIR $EXTRA_BUILD $EXTRA_FEATURES" + fi + rustc --crate-name $BIN --crate-type bin ${rustcOpts} ${crateFeatures} --out-dir target/bin --emit=dep-info,link -L dependency=target/deps $LINK ${deps}$EXTRA_LIB --cap-lints allow $BUILD_OUT_DIR $EXTRA_BUILD $EXTRA_FEATURES + fi + done + if [[ (-z "${crateBin}") && (-e src/main.rs) ]]; then + printf "%s" "$boldgreen" + echo "Building src/main.rs" + printf "%s" "$norm" + if ${verboseBuild}; then + echo "$boldgreen" "Running" "$norm" "rustc --crate-name $CRATE_NAME src/main.rs --crate-type bin ${rustcOpts} ${crateFeatures} --out-dir target/bin --emit=dep-info,link -L dependency=target/deps $LINK ${deps}$EXTRA_LIB --cap-lints allow $BUILD_OUT_DIR $EXTRA_BUILD $EXTRA_FEATURES" + fi + rustc --crate-name $CRATE_NAME src/main.rs --crate-type bin ${rustcOpts} ${crateFeatures} --out-dir target/bin --emit=dep-info,link -L dependency=target/deps $LINK ${deps}$EXTRA_LIB --cap-lints allow $BUILD_OUT_DIR $EXTRA_BUILD $EXTRA_FEATURES + fi + '' + finalBins; + + installCrate = crateName: '' + mkdir -p $out + if [ -s target/env ]; then + cp target/env $out/env + fi + if [ -s target/link.final ]; then + cp target/link.final $out/link + fi + cp target/deps/* $out # */ + if [ "$(ls -A target/build)" ]; then # */ + cp -r target/build/* $out # */ + fi + if [ "$(ls -A target/bin)" ]; then # */ + mkdir -p $out/bin + cp -P target/bin/* $out/bin # */ + fi + ''; +in + +crate: rust: stdenv.mkDerivation rec { + + inherit (crate) crateName src; + + release = if crate ? release then crate.release else false; + name = "rust_${crate.crateName}-${crate.version}"; + buildInputs = [ rust ] ++ (lib.attrByPath ["buildInputs"] [] crate); + dependencies = builtins.map (dep: dep rust) (lib.attrByPath ["dependencies"] [] crate); + + complete = builtins.foldl' (comp: dep: if lib.lists.any (x: x == comp) dep.complete then comp ++ dep.complete else comp) dependencies dependencies; + + crateFeatures = if crate ? features then + builtins.foldl' (features: f: features + " --cfg feature=\\\"${f}\\\"") "" crate.features + else ""; + + libName = if crate ? libName then crate.libName else crate.crateName; + libPath = if crate ? libPath then crate.libPath else ""; + + metadata = builtins.substring 0 10 (builtins.hashString "sha256" (crateName + "-" + crateVersion)); + + crateBin = if crate ? crateBin then + builtins.foldl' (bins: bin: + let name = + lib.strings.replaceStrings ["-"] ["_"] + (if bin ? name then bin.name else crateName); + path = if bin ? path then bin.path else "src/main.rs"; + in + bins + (if bin == "" then "" else ",") + "${name} ${path}" + + ) "" crate.crateBin + else ""; + + finalBins = if crate ? crateBin then + builtins.foldl' (bins: bin: + let name = lib.strings.replaceStrings ["-"] ["_"] + (if bin ? name then bin.name else crateName); + new_name = if bin ? name then bin.name else crateName; + in + if name == new_name then bins else + (bins + "mv target/bin/${name} target/bin/${new_name};") + + ) "" crate.crateBin + else ""; + + build = if crate ? build then crate.build else ""; + crateVersion = crate.version; + crateType = + if lib.attrByPath ["procMacro"] false crate then "proc-macro" else + if lib.attrByPath ["plugin"] false crate then "dylib" else "lib"; + verboseBuild = if lib.attrByPath [ "verbose" ] false crate then "true" else "false"; + buildPhase = buildCrate { inherit crateName dependencies complete crateFeatures libName build release libPath crateType crateVersion metadata crateBin finalBins verboseBuild; }; + installPhase = installCrate crateName; +} From 7979239b1c1680eb617f773d27b055d07d053360 Mon Sep 17 00:00:00 2001 From: "pe@pijul.org" Date: Thu, 2 Nov 2017 21:16:15 +0100 Subject: [PATCH 02/47] mkRustCrate in all-packages.nix --- pkgs/top-level/all-packages.nix | 2 ++ 1 file changed, 2 insertions(+) diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 9dc3f0c7a8867b..6d1b6f5e318828 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -6215,6 +6215,8 @@ with pkgs; rust = callPackage ../development/compilers/rust { }; inherit (rust) cargo rustc; + mkRustCrate = callPackage ../build-support/rust/rust-utils.nix { }; + rustPlatform = recurseIntoAttrs (makeRustPlatform rust); makeRustPlatform = rust: lib.fix (self: From 2d85124382eda5a8f1444eb3acffe234b75f015a Mon Sep 17 00:00:00 2001 From: "pe@pijul.org" Date: Fri, 3 Nov 2017 09:41:34 +0100 Subject: [PATCH 03/47] Handling packages that don't have a "build=" in their Cargo.toml --- pkgs/build-support/rust/rust-utils.nix | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/pkgs/build-support/rust/rust-utils.nix b/pkgs/build-support/rust/rust-utils.nix index c861e7eb271159..be6c6ef1ebf0cd 100644 --- a/pkgs/build-support/rust/rust-utils.nix +++ b/pkgs/build-support/rust/rust-utils.nix @@ -64,13 +64,19 @@ let buildCrate = { crateName, crateVersion, dependencies, complete, crateFeature export PROFILE=${if release then "release" else "debug"} export OUT_DIR=$(pwd)/target/build/${crateName}.out + BUILD="" if [[ ! -z "${build}" ]] ; then - echo "$boldgreen" "Building ${build} (${libName})" "$norm" + BUILD=${build} + elif [[ -e "build.rs" ]]; then + BUILD="build.rs" + fi + if [[ ! -z "$BUILD" ]] ; then + echo "$boldgreen" "Building $BUILD (${libName})" "$norm" mkdir -p target/build/${crateName} if [ -e target/link_ ]; then - rustc --crate-name build_script_build ${build} --crate-type bin ${rustcOpts} ${crateFeatures} --out-dir target/build/${crateName} --emit=dep-info,link -L dependency=target/deps ${deps} --cap-lints allow $(cat target/link_) + rustc --crate-name build_script_build $BUILD --crate-type bin ${rustcOpts} ${crateFeatures} --out-dir target/build/${crateName} --emit=dep-info,link -L dependency=target/deps ${deps} --cap-lints allow $(cat target/link_) else - rustc --crate-name build_script_build ${build} --crate-type bin ${rustcOpts} ${crateFeatures} --out-dir target/build/${crateName} --emit=dep-info,link -L dependency=target/deps ${deps} --cap-lints allow + rustc --crate-name build_script_build $BUILD --crate-type bin ${rustcOpts} ${crateFeatures} --out-dir target/build/${crateName} --emit=dep-info,link -L dependency=target/deps ${deps} --cap-lints allow fi mkdir -p target/build/${crateName}.out export RUST_BACKTRACE=1 @@ -84,6 +90,7 @@ let buildCrate = { crateName, crateVersion, dependencies, complete, crateFeature EXTRA_LINK=$(grep "^cargo:rustc-link-lib=" target/build/${crateName}.opt | sed -e "s/cargo:rustc-link-lib=\(.*\)/\1/") EXTRA_LINK_SEARCH=$(grep "^cargo:rustc-link-search=" target/build/${crateName}.opt | sed -e "s/cargo:rustc-link-search=\(.*\)/\1/") CRATENAME=$(echo ${crateName} | sed -e "s/\(.*\)-sys$/\1/" | tr '[:lower:]' '[:upper:]') + grep "^cargo:" target/build/${crateName}.opt | grep -v "^cargo:rustc-" | grep -v "^cargo:warning=" | grep -v "^cargo:rerun-if-changed=" | grep -v "^cargo:rerun-if-env-changed" | sed -e "s/cargo:\([^=]*\)=\(.*\)/export DEP_$(echo $CRATENAME)_\U\1\E=\2/" > target/env set -e From 00e93d57f83a567f39baef2264a99d7fcdc80175 Mon Sep 17 00:00:00 2001 From: "pe@pijul.org" Date: Fri, 3 Nov 2017 22:03:06 +0100 Subject: [PATCH 04/47] Correction after review --- pkgs/build-support/rust/rust-utils.nix | 120 +++++++++++++++---------- 1 file changed, 71 insertions(+), 49 deletions(-) diff --git a/pkgs/build-support/rust/rust-utils.nix b/pkgs/build-support/rust/rust-utils.nix index be6c6ef1ebf0cd..62ed6582f20a97 100644 --- a/pkgs/build-support/rust/rust-utils.nix +++ b/pkgs/build-support/rust/rust-utils.nix @@ -3,30 +3,30 @@ # This file is licensed under the Apache-2.0 license, and under the # MIT license, at your convenience. -{ lib, buildPlatform, stdenv }: +{ lib, buildPlatform, stdenv, pkgs }: -let buildCrate = { crateName, crateVersion, dependencies, complete, crateFeatures, libName, build, release, libPath, crateType, metadata, crateBin, finalBins, verboseBuild }: +let buildCrate = { crateName, crateVersion, dependencies, complete, + crateFeatures, libName, build, release, libPath, + crateType, metadata, crateBin, finalBins, verboseBuild }: - let depsDir = builtins.foldl' (deps: dep: deps + " " + dep.out) "" dependencies; - completeDepsDir = builtins.foldl' (deps: dep: deps + " " + dep.out) "" complete; + let depsDir = lib.concatStringsSep " " dependencies; + completeDepsDir = lib.concatStringsSep " " complete; deps = - builtins.foldl' (deps: dep: + lib.concatMapStringsSep " " (dep: let extern = lib.strings.replaceStrings ["-"] ["_"] dep.libName; in - deps + (if dep.crateType == "lib" then + (if dep.crateType == "lib" then " --extern ${extern}=${dep.out}/lib${extern}-${dep.metadata}.rlib" else " --extern ${extern}=${dep.out}/lib${extern}-${dep.metadata}.so") - ) "" dependencies; + ) dependencies; optLevel = if release then 3 else 0; rustcOpts = (if release then "-C opt-level=3" else "-C debuginfo=2"); - rustcMeta = "-C metadata=" + metadata + " -C extra-filename=-" + metadata; + rustcMeta = "-C metadata=${metadata} -C extra-filename=-${metadata}"; in '' - norm="$(printf '\033[0m')" #returns to "normal" bold="$(printf '\033[0;1m')" #set bold green="$(printf '\033[0;32m')" #set red boldgreen="$(printf '\033[0;1;32m')" #set bold, and set red. - mkdir -p target/deps mkdir -p target/build chmod uga+w target -R @@ -52,15 +52,15 @@ let buildCrate = { crateName, crateVersion, dependencies, complete, crateFeature BUILD_OUT_DIR="" export CARGO_PKG_NAME=${crateName} export CARGO_PKG_VERSION=${crateVersion} - export CARGO_CFG_TARGET_ARCH=$(echo ${buildPlatform.system} | sed -e "s/\([^-]*\)-\([^-]*\)/\1/") - export CARGO_CFG_TARGET_OS=$(echo ${buildPlatform.system} | sed -e "s/\([^-]*\)-\([^-]*\)/\2/") + export CARGO_CFG_TARGET_ARCH=${buildPlatform.parsed.cpu.name} + export CARGO_CFG_TARGET_OS=${buildPlatform.parsed.kernel.name} export CARGO_CFG_TARGET_ENV="gnu" export CARGO_MANIFEST_DIR="." export DEBUG="${toString (!release)}" export OPT_LEVEL="${toString optLevel}" - export TARGET="${buildPlatform.system}-gnu" - export HOST="${buildPlatform.system}-gnu" + export TARGET="${buildPlatform.config}" + export HOST="${buildPlatform.config}" export PROFILE=${if release then "release" else "debug"} export OUT_DIR=$(pwd)/target/build/${crateName}.out @@ -71,12 +71,16 @@ let buildCrate = { crateName, crateVersion, dependencies, complete, crateFeature BUILD="build.rs" fi if [[ ! -z "$BUILD" ]] ; then - echo "$boldgreen" "Building $BUILD (${libName})" "$norm" + echo "$boldgreen""Building $BUILD (${libName})""$norm" mkdir -p target/build/${crateName} if [ -e target/link_ ]; then - rustc --crate-name build_script_build $BUILD --crate-type bin ${rustcOpts} ${crateFeatures} --out-dir target/build/${crateName} --emit=dep-info,link -L dependency=target/deps ${deps} --cap-lints allow $(cat target/link_) + rustc --crate-name build_script_build $BUILD --crate-type bin ${rustcOpts} \ + ${crateFeatures} --out-dir target/build/${crateName} --emit=dep-info,link \ + -L dependency=target/deps ${deps} --cap-lints allow $(cat target/link_) else - rustc --crate-name build_script_build $BUILD --crate-type bin ${rustcOpts} ${crateFeatures} --out-dir target/build/${crateName} --emit=dep-info,link -L dependency=target/deps ${deps} --cap-lints allow + rustc --crate-name build_script_build $BUILD --crate-type bin ${rustcOpts} \ + ${crateFeatures} --out-dir target/build/${crateName} --emit=dep-info,link \ + -L dependency=target/deps ${deps} --cap-lints allow fi mkdir -p target/build/${crateName}.out export RUST_BACKTRACE=1 @@ -84,14 +88,17 @@ let buildCrate = { crateName, crateVersion, dependencies, complete, crateFeature mkdir -p $OUT_DIR target/build/${crateName}/build_script_build > target/build/${crateName}.opt set +e - EXTRA_BUILD=$(grep "^cargo:rustc-flags=" target/build/${crateName}.opt | sed -e "s/cargo:rustc-flags=\(.*\)/\1/") - EXTRA_FEATURES=$(grep "^cargo:rustc-cfg=" target/build/${crateName}.opt | sed -e "s/cargo:rustc-cfg=\(.*\)/--cfg \1/") - - EXTRA_LINK=$(grep "^cargo:rustc-link-lib=" target/build/${crateName}.opt | sed -e "s/cargo:rustc-link-lib=\(.*\)/\1/") - EXTRA_LINK_SEARCH=$(grep "^cargo:rustc-link-search=" target/build/${crateName}.opt | sed -e "s/cargo:rustc-link-search=\(.*\)/\1/") + EXTRA_BUILD=$(sed -n "s/^cargo:rustc-flags=\(.*\)/\1/p" target/build/${crateName}.opt) + EXTRA_FEATURES=$(sed -n "s/^cargo:rustc-cfg=\(.*\)/--cfg \1/p" target/build/${crateName}.opt) + EXTRA_LINK=$(sed -n "s/^cargo:rustc-link-lib=\(.*\)/\1/p" target/build/${crateName}.opt) + EXTRA_LINK_SEARCH=$(sed -n "s/^cargo:rustc-link-search=\(.*\)/\1/p" target/build/${crateName}.opt) CRATENAME=$(echo ${crateName} | sed -e "s/\(.*\)-sys$/\1/" | tr '[:lower:]' '[:upper:]') - - grep "^cargo:" target/build/${crateName}.opt | grep -v "^cargo:rustc-" | grep -v "^cargo:warning=" | grep -v "^cargo:rerun-if-changed=" | grep -v "^cargo:rerun-if-env-changed" | sed -e "s/cargo:\([^=]*\)=\(.*\)/export DEP_$(echo $CRATENAME)_\U\1\E=\2/" > target/env + grep "^cargo:" target/build/${crateName}.opt \ + | grep -v "^cargo:rustc-" \ + | grep -v "^cargo:warning=" \ + | grep -v "^cargo:rerun-if-changed=" \ + | grep -v "^cargo:rerun-if-env-changed" \ + | sed -e "s/cargo:\([^=]*\)=\(.*\)/export DEP_$(echo $CRATENAME)_\U\1\E=\2/" > target/env set -e if [ -n "$(ls target/build/${crateName}.out)" ]; then @@ -103,31 +110,36 @@ let buildCrate = { crateName, crateVersion, dependencies, complete, crateFeature fi fi fi - # echo "Features: ${crateFeatures}" $EXTRA_FEATURES EXTRA_LIB="" CRATE_NAME=$(echo ${libName} | sed -e "s/-/_/g") - # echo "Libname" ${libName} ${libPath} - # echo "Deps: ${deps}" + if [ -e "${libPath}" ] ; then - echo "$boldgreen" "Building ${libPath}" "$norm" if ${verboseBuild}; then - echo "$boldgreen" "Running" "$norm" "rustc --crate-name $CRATE_NAME ${libPath} --crate-type ${crateType} ${rustcOpts} ${rustcMeta} ${crateFeatures} --out-dir target/deps --emit=dep-info,link -L dependency=target/deps ${deps} --cap-lints allow $BUILD_OUT_DIR $EXTRA_BUILD $EXTRA_FEATURES" + echo $boldgreen""Building ${libPath}$norm rustc --crate-name $CRATE_NAME ${libPath} --crate-type ${crateType} ${rustcOpts} ${rustcMeta} ${crateFeatures} --out-dir target/deps --emit=dep-info,link -L dependency=target/deps ${deps} --cap-lints allow $BUILD_OUT_DIR $EXTRA_BUILD $EXTRA_FEATURES fi - rustc --crate-name $CRATE_NAME ${libPath} --crate-type ${crateType} ${rustcOpts} ${rustcMeta} ${crateFeatures} --out-dir target/deps --emit=dep-info,link -L dependency=target/deps ${deps} --cap-lints allow $BUILD_OUT_DIR $EXTRA_BUILD $EXTRA_FEATURES + rustc --crate-name $CRATE_NAME ${libPath} --crate-type ${crateType} \ + ${rustcOpts} ${rustcMeta} ${crateFeatures} --out-dir target/deps \ + --emit=dep-info,link -L dependency=target/deps ${deps} --cap-lints allow \ + $BUILD_OUT_DIR $EXTRA_BUILD $EXTRA_FEATURES + EXTRA_LIB=" --extern $CRATE_NAME=target/deps/lib$CRATE_NAME-${metadata}.rlib" if [ -e target/deps/lib$CRATE_NAME-${metadata}.so ]; then EXTRA_LIB="$EXTRA_LIB --extern $CRATE_NAME=target/deps/lib$CRATE_NAME-${metadata}.so" fi elif [ -e src/lib.rs ] ; then - echo "$boldgreen" "Building src/lib.rs (${libName})" "$norm" + echo "$boldgreen""Building src/lib.rs (${libName})""$norm" + if ${verboseBuild}; then - echo "$boldgreen" "Running" "$norm" "rustc --crate-name $CRATE_NAME src/lib.rs --crate-type ${crateType} ${rustcOpts} ${rustcMeta} ${crateFeatures} --out-dir target/deps --emit=dep-info,link -L dependency=target/deps ${deps} --cap-lints allow $BUILD_OUT_DIR $EXTRA_BUILD $EXTRA_FEATURES"; + echo $boldgreen""Running$norm rustc --crate-name $CRATE_NAME src/lib.rs --crate-type ${crateType} ${rustcOpts} ${rustcMeta} ${crateFeatures} --out-dir target/deps --emit=dep-info,link -L dependency=target/deps ${deps} --cap-lints allow $BUILD_OUT_DIR $EXTRA_BUILD $EXTRA_FEATURES fi + rustc --crate-name $CRATE_NAME src/lib.rs --crate-type ${crateType} \ + ${rustcOpts} ${rustcMeta} ${crateFeatures} --out-dir target/deps \ + --emit=dep-info,link -L dependency=target/deps ${deps} --cap-lints allow \ + $BUILD_OUT_DIR $EXTRA_BUILD $EXTRA_FEATURES - rustc --crate-name $CRATE_NAME src/lib.rs --crate-type ${crateType} ${rustcOpts} ${rustcMeta} ${crateFeatures} --out-dir target/deps --emit=dep-info,link -L dependency=target/deps ${deps} --cap-lints allow $BUILD_OUT_DIR $EXTRA_BUILD $EXTRA_FEATURES EXTRA_LIB=" --extern $CRATE_NAME=target/deps/lib$CRATE_NAME-${metadata}.rlib" if [ -e target/deps/lib$CRATE_NAME-${metadata}.so ]; then EXTRA_LIB="$EXTRA_LIB --extern $CRATE_NAME=target/deps/lib$CRATE_NAME-${metadata}.so" @@ -135,13 +147,15 @@ let buildCrate = { crateName, crateVersion, dependencies, complete, crateFeature elif [ -e src/${libName}.rs ] ; then - echo "$boldgreen" "Building src/${libName}.rs" "$norm" - + echo "$boldgreen""Building src/${libName}.rs""$norm" if ${verboseBuild}; then - echo "rustc --crate-name $CRATE_NAME src/${libName}.rs --crate-type ${crateType} ${rustcOpts} ${rustcMeta} ${crateFeatures} --out-dir target/deps --emit=dep-info,link -L dependency=target/deps ${deps} --cap-lints allow $BUILD_OUT_DIR $EXTRA_BUILD $EXTRA_FEATURES" + echo $boldgreen""Running$norm rustc --crate-name $CRATE_NAME src/${libName}.rs --crate-type ${crateType} ${rustcOpts} ${rustcMeta} ${crateFeatures} --out-dir target/deps --emit=dep-info,link -L dependency=target/deps ${deps} --cap-lints allow $BUILD_OUT_DIR $EXTRA_BUILD $EXTRA_FEATURES fi + rustc --crate-name $CRATE_NAME src/${libName}.rs --crate-type ${crateType} \ + ${rustcOpts} ${rustcMeta} ${crateFeatures} --out-dir target/deps \ + --emit=dep-info,link -L dependency=target/deps ${deps} --cap-lints allow \ + $BUILD_OUT_DIR $EXTRA_BUILD $EXTRA_FEATURES - rustc --crate-name $CRATE_NAME src/${libName}.rs --crate-type ${crateType} ${rustcOpts} ${rustcMeta} ${crateFeatures} --out-dir target/deps --emit=dep-info,link -L dependency=target/deps ${deps} --cap-lints allow $BUILD_OUT_DIR $EXTRA_BUILD $EXTRA_FEATURES EXTRA_LIB=" --extern $CRATE_NAME=target/deps/lib$CRATE_NAME-${metadata}.rlib" if [ -e target/deps/lib$CRATE_NAME-${metadata}.so ]; then EXTRA_LIB="$EXTRA_LIB --extern $CRATE_NAME=target/deps/lib$CRATE_NAME-${metadata}.so" @@ -176,24 +190,32 @@ let buildCrate = { crateName, crateVersion, dependencies, complete, crateFeature mkdir -p target/bin echo "${crateBin}" | sed -n 1'p' | tr ',' '\n' | while read BIN; do if [ ! -z "$BIN" ]; then - printf "%s" "$boldgreen" - echo "Building $BIN" - printf "%s" "$norm" + echo "`tput setaf 2``tput bold`Building $BIN`tput sgr0`" if ${verboseBuild}; then - echo "$boldgreen" "Running" "$norm" " rustc --crate-name $BIN --crate-type bin ${rustcOpts} ${crateFeatures} --out-dir target/bin --emit=dep-info,link -L dependency=target/deps $LINK ${deps}$EXTRA_LIB --cap-lints allow $BUILD_OUT_DIR $EXTRA_BUILD $EXTRA_FEATURES" + echo -n "`tput setaf 2``tput bold`Running`tput sgr0`" + set -x fi - rustc --crate-name $BIN --crate-type bin ${rustcOpts} ${crateFeatures} --out-dir target/bin --emit=dep-info,link -L dependency=target/deps $LINK ${deps}$EXTRA_LIB --cap-lints allow $BUILD_OUT_DIR $EXTRA_BUILD $EXTRA_FEATURES + rustc --crate-name $BIN --crate-type bin ${rustcOpts} ${crateFeatures} \ + --out-dir target/bin --emit=dep-info,link -L dependency=target/deps \ + $LINK ${deps}$EXTRA_LIB --cap-lints allow \ + $BUILD_OUT_DIR $EXTRA_BUILD $EXTRA_FEATURES + set +x fi done if [[ (-z "${crateBin}") && (-e src/main.rs) ]]; then - printf "%s" "$boldgreen" - echo "Building src/main.rs" - printf "%s" "$norm" + echo "`tput setaf 2``tput bold`Building src/main.rs (${crateName})`tput sgr0`" if ${verboseBuild}; then - echo "$boldgreen" "Running" "$norm" "rustc --crate-name $CRATE_NAME src/main.rs --crate-type bin ${rustcOpts} ${crateFeatures} --out-dir target/bin --emit=dep-info,link -L dependency=target/deps $LINK ${deps}$EXTRA_LIB --cap-lints allow $BUILD_OUT_DIR $EXTRA_BUILD $EXTRA_FEATURES" + echo -n "`tput setaf 2``tput bold`Running`tput sgr0`" + set -x fi - rustc --crate-name $CRATE_NAME src/main.rs --crate-type bin ${rustcOpts} ${crateFeatures} --out-dir target/bin --emit=dep-info,link -L dependency=target/deps $LINK ${deps}$EXTRA_LIB --cap-lints allow $BUILD_OUT_DIR $EXTRA_BUILD $EXTRA_FEATURES + rustc --crate-name $CRATE_NAME src/main.rs --crate-type bin ${rustcOpts} \ + ${crateFeatures} --out-dir target/bin --emit=dep-info,link \ + -L dependency=target/deps $LINK ${deps}$EXTRA_LIB --cap-lints allow + $BUILD_OUT_DIR $EXTRA_BUILD $EXTRA_FEATURES + set +x fi + # Remove object files to avoid "wrong ELF type" + rm -f $(find target -name "*.o") '' + finalBins; installCrate = crateName: '' @@ -221,13 +243,13 @@ crate: rust: stdenv.mkDerivation rec { release = if crate ? release then crate.release else false; name = "rust_${crate.crateName}-${crate.version}"; - buildInputs = [ rust ] ++ (lib.attrByPath ["buildInputs"] [] crate); + buildInputs = [ rust pkgs.ncurses ] ++ (lib.attrByPath ["buildInputs"] [] crate); dependencies = builtins.map (dep: dep rust) (lib.attrByPath ["dependencies"] [] crate); complete = builtins.foldl' (comp: dep: if lib.lists.any (x: x == comp) dep.complete then comp ++ dep.complete else comp) dependencies dependencies; crateFeatures = if crate ? features then - builtins.foldl' (features: f: features + " --cfg feature=\\\"${f}\\\"") "" crate.features + lib.concatMapStringsSep " " (f: "--cfg feature=\\\"${f}\\\"") crate.features else ""; libName = if crate ? libName then crate.libName else crate.crateName; From 4b5aa822e185fab3aa4d9d92f7d49850eafe8392 Mon Sep 17 00:00:00 2001 From: "pe@pijul.org" Date: Sat, 4 Nov 2017 10:44:16 +0100 Subject: [PATCH 05/47] Handling build dependencies for the latest generate-nix-pkg --- pkgs/build-support/rust/rust-utils.nix | 54 +++++++++++++++++++------- 1 file changed, 40 insertions(+), 14 deletions(-) diff --git a/pkgs/build-support/rust/rust-utils.nix b/pkgs/build-support/rust/rust-utils.nix index 62ed6582f20a97..50c145b9986c40 100644 --- a/pkgs/build-support/rust/rust-utils.nix +++ b/pkgs/build-support/rust/rust-utils.nix @@ -5,20 +5,24 @@ { lib, buildPlatform, stdenv, pkgs }: -let buildCrate = { crateName, crateVersion, dependencies, complete, +let buildCrate = { crateName, crateVersion, buildDependencies, dependencies, + completeDeps, completeBuildDeps, crateFeatures, libName, build, release, libPath, crateType, metadata, crateBin, finalBins, verboseBuild }: let depsDir = lib.concatStringsSep " " dependencies; - completeDepsDir = lib.concatStringsSep " " complete; - deps = - lib.concatMapStringsSep " " (dep: + completeDepsDir = lib.concatStringsSep " " completeDeps; + completeBuildDepsDir = lib.concatStringsSep " " completeBuildDeps; + makeDeps = dependencies: + (lib.concatMapStringsSep " " (dep: let extern = lib.strings.replaceStrings ["-"] ["_"] dep.libName; in (if dep.crateType == "lib" then " --extern ${extern}=${dep.out}/lib${extern}-${dep.metadata}.rlib" else " --extern ${extern}=${dep.out}/lib${extern}-${dep.metadata}.so") - ) dependencies; + ) dependencies); + deps = makeDeps dependencies; + buildDeps = makeDeps buildDependencies; optLevel = if release then 3 else 0; rustcOpts = (if release then "-C opt-level=3" else "-C debuginfo=2"); rustcMeta = "-C metadata=${metadata} -C extra-filename=-${metadata}"; @@ -29,6 +33,7 @@ let buildCrate = { crateName, crateVersion, dependencies, complete, boldgreen="$(printf '\033[0;1;32m')" #set bold, and set red. mkdir -p target/deps mkdir -p target/build + mkdir -p target/buildDeps chmod uga+w target -R for i in ${completeDepsDir}; do ln -s -f $i/*.rlib target/deps #*/ @@ -41,6 +46,16 @@ let buildCrate = { crateName, crateVersion, dependencies, complete, source $i/env fi done + for i in ${completeBuildDepsDir}; do + ln -s -f $i/*.rlib target/buildDeps #*/ + ln -s -f $i/*.so target/buildDeps #*/ + if [ -e "$i/link" ]; then + cat $i/link >> target/link.build + fi + if [ -e $i/env ]; then + source $i/env + fi + done if [ -e target/link ]; then sort -u target/link > target/link.sorted mv target/link.sorted target/link @@ -73,15 +88,20 @@ let buildCrate = { crateName, crateVersion, dependencies, complete, if [[ ! -z "$BUILD" ]] ; then echo "$boldgreen""Building $BUILD (${libName})""$norm" mkdir -p target/build/${crateName} + EXTRA_BUILD_FLAGS="" if [ -e target/link_ ]; then - rustc --crate-name build_script_build $BUILD --crate-type bin ${rustcOpts} \ - ${crateFeatures} --out-dir target/build/${crateName} --emit=dep-info,link \ - -L dependency=target/deps ${deps} --cap-lints allow $(cat target/link_) - else - rustc --crate-name build_script_build $BUILD --crate-type bin ${rustcOpts} \ - ${crateFeatures} --out-dir target/build/${crateName} --emit=dep-info,link \ - -L dependency=target/deps ${deps} --cap-lints allow + EXTRA_BUILD_FLAGS=$(cat target/link_) + fi + if [ -e target/link.build ]; then + EXTRA_BUILD_FLAGS="$EXTRA_BUILD_FLAGS $(cat target/link.build)" fi + if ${verboseBuild}; then + echo $boldgreen""Running$norm rustc --crate-name build_script_build $BUILD --crate-type bin ${rustcOpts} ${crateFeatures} --out-dir target/build/${crateName} --emit=dep-info,link -L dependency=target/buildDeps ${buildDeps} --cap-lints allow $EXTRA_BUILD_FLAGS + fi + rustc --crate-name build_script_build $BUILD --crate-type bin ${rustcOpts} \ + ${crateFeatures} --out-dir target/build/${crateName} --emit=dep-info,link \ + -L dependency=target/buildDeps ${buildDeps} --cap-lints allow $EXTRA_BUILD_FLAGS + mkdir -p target/build/${crateName}.out export RUST_BACKTRACE=1 BUILD_OUT_DIR="-L $OUT_DIR" @@ -245,8 +265,10 @@ crate: rust: stdenv.mkDerivation rec { name = "rust_${crate.crateName}-${crate.version}"; buildInputs = [ rust pkgs.ncurses ] ++ (lib.attrByPath ["buildInputs"] [] crate); dependencies = builtins.map (dep: dep rust) (lib.attrByPath ["dependencies"] [] crate); + buildDependencies = builtins.map (dep: dep rust) (lib.attrByPath ["buildDependencies"] [] crate); - complete = builtins.foldl' (comp: dep: if lib.lists.any (x: x == comp) dep.complete then comp ++ dep.complete else comp) dependencies dependencies; + completeDeps = builtins.foldl' (comp: dep: if lib.lists.any (x: x == comp) dep.completeDeps then comp ++ dep.complete else comp) dependencies dependencies; + completeBuildDeps = builtins.foldl' (comp: dep: if lib.lists.any (x: x == comp) dep.completeBuildDeps then comp ++ dep.complete else comp) buildDependencies buildDependencies; crateFeatures = if crate ? features then lib.concatMapStringsSep " " (f: "--cfg feature=\\\"${f}\\\"") crate.features @@ -287,6 +309,10 @@ crate: rust: stdenv.mkDerivation rec { if lib.attrByPath ["procMacro"] false crate then "proc-macro" else if lib.attrByPath ["plugin"] false crate then "dylib" else "lib"; verboseBuild = if lib.attrByPath [ "verbose" ] false crate then "true" else "false"; - buildPhase = buildCrate { inherit crateName dependencies complete crateFeatures libName build release libPath crateType crateVersion metadata crateBin finalBins verboseBuild; }; + buildPhase = buildCrate { + inherit crateName dependencies buildDependencies completeDeps completeBuildDeps + crateFeatures libName build release libPath crateType crateVersion + metadata crateBin finalBins verboseBuild; + }; installPhase = installCrate crateName; } From 08046cec2a8d4a4890edab882d2689045cd8c211 Mon Sep 17 00:00:00 2001 From: "pe@pijul.org" Date: Wed, 8 Nov 2017 17:19:31 +0100 Subject: [PATCH 06/47] Adding the tool "carnix", compiled with rust-utils.nix --- pkgs/build-support/rust/carnix.nix | 773 +++++++++++++++++++++++++ pkgs/build-support/rust/rust-utils.nix | 59 +- pkgs/top-level/all-packages.nix | 2 + 3 files changed, 809 insertions(+), 25 deletions(-) create mode 100644 pkgs/build-support/rust/carnix.nix diff --git a/pkgs/build-support/rust/carnix.nix b/pkgs/build-support/rust/carnix.nix new file mode 100644 index 00000000000000..f2b6648d593042 --- /dev/null +++ b/pkgs/build-support/rust/carnix.nix @@ -0,0 +1,773 @@ +{ pkgs }: +with pkgs; +let release = false; + verbose = true; + aho_corasick_0_6_3_ = { dependencies?[], buildDependencies?[], features?[] }: mkRustCrate { + crateName = "aho-corasick"; + version = "0.6.3"; + src = fetchzip { + url = "https://crates.io/api/v1/crates/aho-corasick/0.6.3/download"; + sha256 = "1cpqzf6acj8lm06z3f1cg41wn6c2n9l3v49nh0dvimv4055qib6k"; + name = "aho-corasick-0.6.3.tar.gz"; + }; + libName = "aho_corasick"; + crateBin = [ { name = "aho-corasick-dot"; } ]; + inherit dependencies buildDependencies features release verbose; + }; + ansi_term_0_9_0_ = { dependencies?[], buildDependencies?[], features?[] }: mkRustCrate { + crateName = "ansi_term"; + version = "0.9.0"; + src = fetchzip { + url = "https://crates.io/api/v1/crates/ansi_term/0.9.0/download"; + sha256 = "1vcd8m2hglrdi4zmqnkkz5zy3c73ifgii245k7vj6qr5dzpn9hij"; + name = "ansi_term-0.9.0.tar.gz"; + }; + libName = "ansi_term"; + inherit dependencies buildDependencies features release verbose; + }; + atty_0_2_3_ = { dependencies?[], buildDependencies?[], features?[] }: mkRustCrate { + crateName = "atty"; + version = "0.2.3"; + src = fetchzip { + url = "https://crates.io/api/v1/crates/atty/0.2.3/download"; + sha256 = "0zl0cjfgarp5y78nd755lpki5bbkj4hgmi88v265m543yg29i88f"; + name = "atty-0.2.3.tar.gz"; + }; + inherit dependencies buildDependencies features release verbose; + }; + backtrace_0_3_3_ = { dependencies?[], buildDependencies?[], features?[] }: mkRustCrate { + crateName = "backtrace"; + version = "0.3.3"; + src = fetchzip { + url = "https://crates.io/api/v1/crates/backtrace/0.3.3/download"; + sha256 = "0invfdxkj85v8zyrjs3amfxjdk2a36x8irq7wq7kny6q49hh8y0z"; + name = "backtrace-0.3.3.tar.gz"; + }; + inherit dependencies buildDependencies features release verbose; + }; + backtrace_sys_0_1_16_ = { dependencies?[], buildDependencies?[], features?[] }: mkRustCrate { + crateName = "backtrace-sys"; + version = "0.1.16"; + src = fetchzip { + url = "https://crates.io/api/v1/crates/backtrace-sys/0.1.16/download"; + sha256 = "1cn2c8q3dn06crmnk0p62czkngam4l8nf57wy33nz1y5g25pszwy"; + name = "backtrace-sys-0.1.16.tar.gz"; + }; + build = "build.rs"; + inherit dependencies buildDependencies features release verbose; + }; + bitflags_0_7_0_ = { dependencies?[], buildDependencies?[], features?[] }: mkRustCrate { + crateName = "bitflags"; + version = "0.7.0"; + src = fetchzip { + url = "https://crates.io/api/v1/crates/bitflags/0.7.0/download"; + sha256 = "1hr72xg5slm0z4pxs2hiy4wcyx3jva70h58b7mid8l0a4c8f7gn5"; + name = "bitflags-0.7.0.tar.gz"; + }; + inherit dependencies buildDependencies features release verbose; + }; + bitflags_0_9_1_ = { dependencies?[], buildDependencies?[], features?[] }: mkRustCrate { + crateName = "bitflags"; + version = "0.9.1"; + src = fetchzip { + url = "https://crates.io/api/v1/crates/bitflags/0.9.1/download"; + sha256 = "18h073l5jd88rx4qdr95fjddr9rk79pb1aqnshzdnw16cfmb9rws"; + name = "bitflags-0.9.1.tar.gz"; + }; + inherit dependencies buildDependencies features release verbose; + }; + carnix_0_4_0_ = { dependencies?[], buildDependencies?[], features?[] }: mkRustCrate { + crateName = "carnix"; + version = "0.4.0"; + src = fetchzip { + url = "https://crates.io/api/v1/crates/carnix/0.4.0/download"; + sha256 = "1swlx9fp4s8sx1lybglnc9ap7c3fsrbzh2grfx5x94c050lrwl6j"; + name = "carnix-0.4.0.tar.gz"; + }; + inherit dependencies buildDependencies features release verbose; + }; + cc_1_0_3_ = { dependencies?[], buildDependencies?[], features?[] }: mkRustCrate { + crateName = "cc"; + version = "1.0.3"; + src = fetchzip { + url = "https://crates.io/api/v1/crates/cc/1.0.3/download"; + sha256 = "193pwqgh79w6k0k29svyds5nnlrwx44myqyrw605d5jj4yk2zmpr"; + name = "cc-1.0.3.tar.gz"; + }; + inherit dependencies buildDependencies features release verbose; + }; + cfg_if_0_1_2_ = { dependencies?[], buildDependencies?[], features?[] }: mkRustCrate { + crateName = "cfg-if"; + version = "0.1.2"; + src = fetchzip { + url = "https://crates.io/api/v1/crates/cfg-if/0.1.2/download"; + sha256 = "0x06hvrrqy96m97593823vvxcgvjaxckghwyy2jcyc8qc7c6cyhi"; + name = "cfg-if-0.1.2.tar.gz"; + }; + inherit dependencies buildDependencies features release verbose; + }; + clap_2_27_1_ = { dependencies?[], buildDependencies?[], features?[] }: mkRustCrate { + crateName = "clap"; + version = "2.27.1"; + src = fetchzip { + url = "https://crates.io/api/v1/crates/clap/2.27.1/download"; + sha256 = "0zx8rskqfl3iqn3vlyxzyd99hpifa7bm871akhxpz9wvrm688zaj"; + name = "clap-2.27.1.tar.gz"; + }; + inherit dependencies buildDependencies features release verbose; + }; + dbghelp_sys_0_2_0_ = { dependencies?[], buildDependencies?[], features?[] }: mkRustCrate { + crateName = "dbghelp-sys"; + version = "0.2.0"; + src = fetchzip { + url = "https://crates.io/api/v1/crates/dbghelp-sys/0.2.0/download"; + sha256 = "0ylpi3bbiy233m57hnisn1df1v0lbl7nsxn34b0anzsgg440hqpq"; + name = "dbghelp-sys-0.2.0.tar.gz"; + }; + libName = "dbghelp"; + build = "build.rs"; + inherit dependencies buildDependencies features release verbose; + }; + dtoa_0_4_2_ = { dependencies?[], buildDependencies?[], features?[] }: mkRustCrate { + crateName = "dtoa"; + version = "0.4.2"; + src = fetchzip { + url = "https://crates.io/api/v1/crates/dtoa/0.4.2/download"; + sha256 = "1bxsh6fags7nr36vlz07ik2a1rzyipc8x1y30kjk832hf2pzadmw"; + name = "dtoa-0.4.2.tar.gz"; + }; + inherit dependencies buildDependencies features release verbose; + }; + env_logger_0_4_3_ = { dependencies?[], buildDependencies?[], features?[] }: mkRustCrate { + crateName = "env_logger"; + version = "0.4.3"; + src = fetchzip { + url = "https://crates.io/api/v1/crates/env_logger/0.4.3/download"; + sha256 = "0nrx04p4xa86d5kc7aq4fwvipbqji9cmgy449h47nc9f1chafhgg"; + name = "env_logger-0.4.3.tar.gz"; + }; + inherit dependencies buildDependencies features release verbose; + }; + error_chain_0_11_0_ = { dependencies?[], buildDependencies?[], features?[] }: mkRustCrate { + crateName = "error-chain"; + version = "0.11.0"; + src = fetchzip { + url = "https://crates.io/api/v1/crates/error-chain/0.11.0/download"; + sha256 = "19nz17q6dzp0mx2jhh9qbj45gkvvgcl7zq9z2ai5a8ihbisfj6d7"; + name = "error-chain-0.11.0.tar.gz"; + }; + inherit dependencies buildDependencies features release verbose; + }; + fuchsia_zircon_0_2_1_ = { dependencies?[], buildDependencies?[], features?[] }: mkRustCrate { + crateName = "fuchsia-zircon"; + version = "0.2.1"; + src = fetchzip { + url = "https://crates.io/api/v1/crates/fuchsia-zircon/0.2.1/download"; + sha256 = "0yd4rd7ql1vdr349p6vgq2dnwmpylky1kjp8g1zgvp250jxrhddb"; + name = "fuchsia-zircon-0.2.1.tar.gz"; + }; + inherit dependencies buildDependencies features release verbose; + }; + fuchsia_zircon_sys_0_2_0_ = { dependencies?[], buildDependencies?[], features?[] }: mkRustCrate { + crateName = "fuchsia-zircon-sys"; + version = "0.2.0"; + src = fetchzip { + url = "https://crates.io/api/v1/crates/fuchsia-zircon-sys/0.2.0/download"; + sha256 = "1yrqsrjwlhl3di6prxf5xmyd82gyjaysldbka5wwk83z11mpqh4w"; + name = "fuchsia-zircon-sys-0.2.0.tar.gz"; + }; + inherit dependencies buildDependencies features release verbose; + }; + itoa_0_3_4_ = { dependencies?[], buildDependencies?[], features?[] }: mkRustCrate { + crateName = "itoa"; + version = "0.3.4"; + src = fetchzip { + url = "https://crates.io/api/v1/crates/itoa/0.3.4/download"; + sha256 = "1nfkzz6vrgj0d9l3yzjkkkqzdgs68y294fjdbl7jq118qi8xc9d9"; + name = "itoa-0.3.4.tar.gz"; + }; + inherit dependencies buildDependencies features release verbose; + }; + kernel32_sys_0_2_2_ = { dependencies?[], buildDependencies?[], features?[] }: mkRustCrate { + crateName = "kernel32-sys"; + version = "0.2.2"; + src = fetchzip { + url = "https://crates.io/api/v1/crates/kernel32-sys/0.2.2/download"; + sha256 = "1lrw1hbinyvr6cp28g60z97w32w8vsk6pahk64pmrv2fmby8srfj"; + name = "kernel32-sys-0.2.2.tar.gz"; + }; + libName = "kernel32"; + build = "build.rs"; + inherit dependencies buildDependencies features release verbose; + }; + lazy_static_0_2_9_ = { dependencies?[], buildDependencies?[], features?[] }: mkRustCrate { + crateName = "lazy_static"; + version = "0.2.9"; + src = fetchzip { + url = "https://crates.io/api/v1/crates/lazy_static/0.2.9/download"; + sha256 = "08ldzr5292y3hvi6l6v8l4i6v95lm1aysmnfln65h10sqrfh6iw7"; + name = "lazy_static-0.2.9.tar.gz"; + }; + inherit dependencies buildDependencies features release verbose; + }; + libc_0_2_33_ = { dependencies?[], buildDependencies?[], features?[] }: mkRustCrate { + crateName = "libc"; + version = "0.2.33"; + src = fetchzip { + url = "https://crates.io/api/v1/crates/libc/0.2.33/download"; + sha256 = "1l7synziccnvarsq2kk22vps720ih6chmn016bhr2bq54hblbnl1"; + name = "libc-0.2.33.tar.gz"; + }; + inherit dependencies buildDependencies features release verbose; + }; + libsqlite3_sys_0_8_1_ = { dependencies?[], buildDependencies?[], features?[] }: mkRustCrate { + crateName = "libsqlite3-sys"; + version = "0.8.1"; + src = fetchzip { + url = "https://crates.io/api/v1/crates/libsqlite3-sys/0.8.1/download"; + sha256 = "131bjlxzni2aw3048p7sj8cs3v0jpkb3fxdpc5i7ndyhvpz3gdza"; + name = "libsqlite3-sys-0.8.1.tar.gz"; + }; + build = "build.rs"; + buildInputs = [ pkgs.pkgconfig pkgs.sqlite ]; + inherit dependencies buildDependencies features release verbose; + }; + linked_hash_map_0_4_2_ = { dependencies?[], buildDependencies?[], features?[] }: mkRustCrate { + crateName = "linked-hash-map"; + version = "0.4.2"; + src = fetchzip { + url = "https://crates.io/api/v1/crates/linked-hash-map/0.4.2/download"; + sha256 = "04da208h6jb69f46j37jnvsw2i1wqplglp4d61csqcrhh83avbgl"; + name = "linked-hash-map-0.4.2.tar.gz"; + }; + inherit dependencies buildDependencies features release verbose; + }; + log_0_3_8_ = { dependencies?[], buildDependencies?[], features?[] }: mkRustCrate { + crateName = "log"; + version = "0.3.8"; + src = fetchzip { + url = "https://crates.io/api/v1/crates/log/0.3.8/download"; + sha256 = "1c43z4z85sxrsgir4s1hi84558ab5ic7jrn5qgmsiqcv90vvn006"; + name = "log-0.3.8.tar.gz"; + }; + inherit dependencies buildDependencies features release verbose; + }; + lru_cache_0_1_1_ = { dependencies?[], buildDependencies?[], features?[] }: mkRustCrate { + crateName = "lru-cache"; + version = "0.1.1"; + src = fetchzip { + url = "https://crates.io/api/v1/crates/lru-cache/0.1.1/download"; + sha256 = "1hl6kii1g54sq649gnscv858mmw7a02xj081l4vcgvrswdi2z8fw"; + name = "lru-cache-0.1.1.tar.gz"; + }; + inherit dependencies buildDependencies features release verbose; + }; + memchr_1_0_2_ = { dependencies?[], buildDependencies?[], features?[] }: mkRustCrate { + crateName = "memchr"; + version = "1.0.2"; + src = fetchzip { + url = "https://crates.io/api/v1/crates/memchr/1.0.2/download"; + sha256 = "0dfb8ifl9nrc9kzgd5z91q6qg87sh285q1ih7xgrsglmqfav9lg7"; + name = "memchr-1.0.2.tar.gz"; + }; + libName = "memchr"; + inherit dependencies buildDependencies features release verbose; + }; + nom_3_2_1_ = { dependencies?[], buildDependencies?[], features?[] }: mkRustCrate { + crateName = "nom"; + version = "3.2.1"; + src = fetchzip { + url = "https://crates.io/api/v1/crates/nom/3.2.1/download"; + sha256 = "1vcllxrz9hdw6j25kn020ka3psz1vkaqh1hm3yfak2240zrxgi07"; + name = "nom-3.2.1.tar.gz"; + }; + inherit dependencies buildDependencies features release verbose; + }; + num_traits_0_1_40_ = { dependencies?[], buildDependencies?[], features?[] }: mkRustCrate { + crateName = "num-traits"; + version = "0.1.40"; + src = fetchzip { + url = "https://crates.io/api/v1/crates/num-traits/0.1.40/download"; + sha256 = "1fr8ghp4i97q3agki54i0hpmqxv3s65i2mqd1pinc7w7arc3fplw"; + name = "num-traits-0.1.40.tar.gz"; + }; + inherit dependencies buildDependencies features release verbose; + }; + pkg_config_0_3_9_ = { dependencies?[], buildDependencies?[], features?[] }: mkRustCrate { + crateName = "pkg-config"; + version = "0.3.9"; + src = fetchzip { + url = "https://crates.io/api/v1/crates/pkg-config/0.3.9/download"; + sha256 = "06k8fxgrsrxj8mjpjcq1n7mn2p1shpxif4zg9y5h09c7vy20s146"; + name = "pkg-config-0.3.9.tar.gz"; + }; + inherit dependencies buildDependencies features release verbose; + }; + quote_0_3_15_ = { dependencies?[], buildDependencies?[], features?[] }: mkRustCrate { + crateName = "quote"; + version = "0.3.15"; + src = fetchzip { + url = "https://crates.io/api/v1/crates/quote/0.3.15/download"; + sha256 = "09il61jv4kd1360spaj46qwyl21fv1qz18fsv2jra8wdnlgl5jsg"; + name = "quote-0.3.15.tar.gz"; + }; + inherit dependencies buildDependencies features release verbose; + }; + rand_0_3_18_ = { dependencies?[], buildDependencies?[], features?[] }: mkRustCrate { + crateName = "rand"; + version = "0.3.18"; + src = fetchzip { + url = "https://crates.io/api/v1/crates/rand/0.3.18/download"; + sha256 = "15d7c3myn968dzjs0a2pgv58hzdavxnq6swgj032lw2v966ir4xv"; + name = "rand-0.3.18.tar.gz"; + }; + inherit dependencies buildDependencies features release verbose; + }; + redox_syscall_0_1_31_ = { dependencies?[], buildDependencies?[], features?[] }: mkRustCrate { + crateName = "redox_syscall"; + version = "0.1.31"; + src = fetchzip { + url = "https://crates.io/api/v1/crates/redox_syscall/0.1.31/download"; + sha256 = "0kipd9qslzin4fgj4jrxv6yz5l3l71gnbd7fq1jhk2j7f2sq33j4"; + name = "redox_syscall-0.1.31.tar.gz"; + }; + libName = "syscall"; + inherit dependencies buildDependencies features release verbose; + }; + redox_termios_0_1_1_ = { dependencies?[], buildDependencies?[], features?[] }: mkRustCrate { + crateName = "redox_termios"; + version = "0.1.1"; + src = fetchzip { + url = "https://crates.io/api/v1/crates/redox_termios/0.1.1/download"; + sha256 = "04s6yyzjca552hdaqlvqhp3vw0zqbc304md5czyd3axh56iry8wh"; + name = "redox_termios-0.1.1.tar.gz"; + }; + libPath = "src/lib.rs"; + libName = "redox_termios"; + inherit dependencies buildDependencies features release verbose; + }; + regex_0_2_2_ = { dependencies?[], buildDependencies?[], features?[] }: mkRustCrate { + crateName = "regex"; + version = "0.2.2"; + src = fetchzip { + url = "https://crates.io/api/v1/crates/regex/0.2.2/download"; + sha256 = "1f1zrrynfylg0vcfyfp60bybq4rp5g1yk2k7lc7fyz7mmc7k2qr7"; + name = "regex-0.2.2.tar.gz"; + }; + inherit dependencies buildDependencies features release verbose; + }; + regex_syntax_0_4_1_ = { dependencies?[], buildDependencies?[], features?[] }: mkRustCrate { + crateName = "regex-syntax"; + version = "0.4.1"; + src = fetchzip { + url = "https://crates.io/api/v1/crates/regex-syntax/0.4.1/download"; + sha256 = "01yrsm68lj86ad1whgg1z95c2pfsvv58fz8qjcgw7mlszc0c08ls"; + name = "regex-syntax-0.4.1.tar.gz"; + }; + inherit dependencies buildDependencies features release verbose; + }; + rusqlite_0_12_0_ = { dependencies?[], buildDependencies?[], features?[] }: mkRustCrate { + crateName = "rusqlite"; + version = "0.12.0"; + src = fetchzip { + url = "https://crates.io/api/v1/crates/rusqlite/0.12.0/download"; + sha256 = "18fybr7bd012j7axf4gzpphx0iil2amksdlab4dhhipjl6hyam6j"; + name = "rusqlite-0.12.0.tar.gz"; + }; + libName = "rusqlite"; + buildInputs = [ pkgs.pkgconfig pkgs.sqlite ]; + inherit dependencies buildDependencies features release verbose; + }; + rustc_demangle_0_1_5_ = { dependencies?[], buildDependencies?[], features?[] }: mkRustCrate { + crateName = "rustc-demangle"; + version = "0.1.5"; + src = fetchzip { + url = "https://crates.io/api/v1/crates/rustc-demangle/0.1.5/download"; + sha256 = "096kkcx9j747700fhxj1s4rlwkj21pqjmvj64psdj6bakb2q13nc"; + name = "rustc-demangle-0.1.5.tar.gz"; + }; + inherit dependencies buildDependencies features release verbose; + }; + serde_1_0_19_ = { dependencies?[], buildDependencies?[], features?[] }: mkRustCrate { + crateName = "serde"; + version = "1.0.19"; + src = fetchzip { + url = "https://crates.io/api/v1/crates/serde/1.0.19/download"; + sha256 = "0dfhkkbrpr0vr1b2hhbddizb8bq4phi5ck0jhy3yx31bc2byb1l1"; + name = "serde-1.0.19.tar.gz"; + }; + inherit dependencies buildDependencies features release verbose; + }; + serde_derive_1_0_19_ = { dependencies?[], buildDependencies?[], features?[] }: mkRustCrate { + crateName = "serde_derive"; + version = "1.0.19"; + src = fetchzip { + url = "https://crates.io/api/v1/crates/serde_derive/1.0.19/download"; + sha256 = "1fbr1zi25fgwy49mvpjq8g611mnv3vcd4n0mgca2lfdsp5n2nw5v"; + name = "serde_derive-1.0.19.tar.gz"; + }; + libName = "serde_derive"; + procMacro = true; + inherit dependencies buildDependencies features release verbose; + }; + serde_derive_internals_0_17_0_ = { dependencies?[], buildDependencies?[], features?[] }: mkRustCrate { + crateName = "serde_derive_internals"; + version = "0.17.0"; + src = fetchzip { + url = "https://crates.io/api/v1/crates/serde_derive_internals/0.17.0/download"; + sha256 = "1g1j3v6pj9wbcz3v3w4smjpwrcdwjicmf6yd5cbai04as9iwhw74"; + name = "serde_derive_internals-0.17.0.tar.gz"; + }; + inherit dependencies buildDependencies features release verbose; + }; + serde_json_1_0_5_ = { dependencies?[], buildDependencies?[], features?[] }: mkRustCrate { + crateName = "serde_json"; + version = "1.0.5"; + src = fetchzip { + url = "https://crates.io/api/v1/crates/serde_json/1.0.5/download"; + sha256 = "1yka3aa2gfi30415jpf0935k54r08jhyw6r7rjz2nv1kqgbw2brs"; + name = "serde_json-1.0.5.tar.gz"; + }; + inherit dependencies buildDependencies features release verbose; + }; + strsim_0_6_0_ = { dependencies?[], buildDependencies?[], features?[] }: mkRustCrate { + crateName = "strsim"; + version = "0.6.0"; + src = fetchzip { + url = "https://crates.io/api/v1/crates/strsim/0.6.0/download"; + sha256 = "1lz85l6y68hr62lv4baww29yy7g8pg20dlr0lbaswxmmcb0wl7gd"; + name = "strsim-0.6.0.tar.gz"; + }; + inherit dependencies buildDependencies features release verbose; + }; + syn_0_11_11_ = { dependencies?[], buildDependencies?[], features?[] }: mkRustCrate { + crateName = "syn"; + version = "0.11.11"; + src = fetchzip { + url = "https://crates.io/api/v1/crates/syn/0.11.11/download"; + sha256 = "0yw8ng7x1dn5a6ykg0ib49y7r9nhzgpiq2989rqdp7rdz3n85502"; + name = "syn-0.11.11.tar.gz"; + }; + inherit dependencies buildDependencies features release verbose; + }; + synom_0_11_3_ = { dependencies?[], buildDependencies?[], features?[] }: mkRustCrate { + crateName = "synom"; + version = "0.11.3"; + src = fetchzip { + url = "https://crates.io/api/v1/crates/synom/0.11.3/download"; + sha256 = "1l6d1s9qjfp6ng2s2z8219igvlv7gyk8gby97sdykqc1r93d8rhc"; + name = "synom-0.11.3.tar.gz"; + }; + inherit dependencies buildDependencies features release verbose; + }; + tempdir_0_3_5_ = { dependencies?[], buildDependencies?[], features?[] }: mkRustCrate { + crateName = "tempdir"; + version = "0.3.5"; + src = fetchzip { + url = "https://crates.io/api/v1/crates/tempdir/0.3.5/download"; + sha256 = "0rirc5prqppzgd15fm8ayan349lgk2k5iqdkrbwrwrv5pm4znsnz"; + name = "tempdir-0.3.5.tar.gz"; + }; + inherit dependencies buildDependencies features release verbose; + }; + termion_1_5_1_ = { dependencies?[], buildDependencies?[], features?[] }: mkRustCrate { + crateName = "termion"; + version = "1.5.1"; + src = fetchzip { + url = "https://crates.io/api/v1/crates/termion/1.5.1/download"; + sha256 = "02gq4vd8iws1f3gjrgrgpajsk2bk43nds5acbbb4s8dvrdvr8nf1"; + name = "termion-1.5.1.tar.gz"; + }; + inherit dependencies buildDependencies features release verbose; + }; + textwrap_0_9_0_ = { dependencies?[], buildDependencies?[], features?[] }: mkRustCrate { + crateName = "textwrap"; + version = "0.9.0"; + src = fetchzip { + url = "https://crates.io/api/v1/crates/textwrap/0.9.0/download"; + sha256 = "18jg79ndjlwndz01mlbh82kkr2arqm658yn5kwp65l5n1hz8w4yb"; + name = "textwrap-0.9.0.tar.gz"; + }; + inherit dependencies buildDependencies features release verbose; + }; + thread_local_0_3_4_ = { dependencies?[], buildDependencies?[], features?[] }: mkRustCrate { + crateName = "thread_local"; + version = "0.3.4"; + src = fetchzip { + url = "https://crates.io/api/v1/crates/thread_local/0.3.4/download"; + sha256 = "1y6cwyhhx2nkz4b3dziwhqdvgq830z8wjp32b40pjd8r0hxqv2jr"; + name = "thread_local-0.3.4.tar.gz"; + }; + inherit dependencies buildDependencies features release verbose; + }; + time_0_1_38_ = { dependencies?[], buildDependencies?[], features?[] }: mkRustCrate { + crateName = "time"; + version = "0.1.38"; + src = fetchzip { + url = "https://crates.io/api/v1/crates/time/0.1.38/download"; + sha256 = "1ws283vvz7c6jfiwn53rmc6kybapr4pjaahfxxrz232b0qzw7gcp"; + name = "time-0.1.38.tar.gz"; + }; + inherit dependencies buildDependencies features release verbose; + }; + toml_0_4_5_ = { dependencies?[], buildDependencies?[], features?[] }: mkRustCrate { + crateName = "toml"; + version = "0.4.5"; + src = fetchzip { + url = "https://crates.io/api/v1/crates/toml/0.4.5/download"; + sha256 = "06zxqhn3y58yzjfaykhcrvlf7p2dnn54kn3g4apmja3cn5b18lkk"; + name = "toml-0.4.5.tar.gz"; + }; + inherit dependencies buildDependencies features release verbose; + }; + unicode_width_0_1_4_ = { dependencies?[], buildDependencies?[], features?[] }: mkRustCrate { + crateName = "unicode-width"; + version = "0.1.4"; + src = fetchzip { + url = "https://crates.io/api/v1/crates/unicode-width/0.1.4/download"; + sha256 = "1rp7a04icn9y5c0lm74nrd4py0rdl0af8bhdwq7g478n1xifpifl"; + name = "unicode-width-0.1.4.tar.gz"; + }; + inherit dependencies buildDependencies features release verbose; + }; + unicode_xid_0_0_4_ = { dependencies?[], buildDependencies?[], features?[] }: mkRustCrate { + crateName = "unicode-xid"; + version = "0.0.4"; + src = fetchzip { + url = "https://crates.io/api/v1/crates/unicode-xid/0.0.4/download"; + sha256 = "1dc8wkkcd3s6534s5aw4lbjn8m67flkkbnajp5bl8408wdg8rh9v"; + name = "unicode-xid-0.0.4.tar.gz"; + }; + inherit dependencies buildDependencies features release verbose; + }; + unreachable_1_0_0_ = { dependencies?[], buildDependencies?[], features?[] }: mkRustCrate { + crateName = "unreachable"; + version = "1.0.0"; + src = fetchzip { + url = "https://crates.io/api/v1/crates/unreachable/1.0.0/download"; + sha256 = "1am8czbk5wwr25gbp2zr007744fxjshhdqjz9liz7wl4pnv3whcf"; + name = "unreachable-1.0.0.tar.gz"; + }; + inherit dependencies buildDependencies features release verbose; + }; + utf8_ranges_1_0_0_ = { dependencies?[], buildDependencies?[], features?[] }: mkRustCrate { + crateName = "utf8-ranges"; + version = "1.0.0"; + src = fetchzip { + url = "https://crates.io/api/v1/crates/utf8-ranges/1.0.0/download"; + sha256 = "0rzmqprwjv9yp1n0qqgahgm24872x6c0xddfym5pfndy7a36vkn0"; + name = "utf8-ranges-1.0.0.tar.gz"; + }; + inherit dependencies buildDependencies features release verbose; + }; + vcpkg_0_2_2_ = { dependencies?[], buildDependencies?[], features?[] }: mkRustCrate { + crateName = "vcpkg"; + version = "0.2.2"; + src = fetchzip { + url = "https://crates.io/api/v1/crates/vcpkg/0.2.2/download"; + sha256 = "1fl5j0ksnwrnsrf1b1a9lqbjgnajdipq0030vsbhx81mb7d9478a"; + name = "vcpkg-0.2.2.tar.gz"; + }; + inherit dependencies buildDependencies features release verbose; + }; + vec_map_0_8_0_ = { dependencies?[], buildDependencies?[], features?[] }: mkRustCrate { + crateName = "vec_map"; + version = "0.8.0"; + src = fetchzip { + url = "https://crates.io/api/v1/crates/vec_map/0.8.0/download"; + sha256 = "07sgxp3cf1a4cxm9n3r27fcvqmld32bl2576mrcahnvm34j11xay"; + name = "vec_map-0.8.0.tar.gz"; + }; + inherit dependencies buildDependencies features release verbose; + }; + void_1_0_2_ = { dependencies?[], buildDependencies?[], features?[] }: mkRustCrate { + crateName = "void"; + version = "1.0.2"; + src = fetchzip { + url = "https://crates.io/api/v1/crates/void/1.0.2/download"; + sha256 = "0h1dm0dx8dhf56a83k68mijyxigqhizpskwxfdrs1drwv2cdclv3"; + name = "void-1.0.2.tar.gz"; + }; + inherit dependencies buildDependencies features release verbose; + }; + winapi_0_2_8_ = { dependencies?[], buildDependencies?[], features?[] }: mkRustCrate { + crateName = "winapi"; + version = "0.2.8"; + src = fetchzip { + url = "https://crates.io/api/v1/crates/winapi/0.2.8/download"; + sha256 = "0a45b58ywf12vb7gvj6h3j264nydynmzyqz8d8rqxsj6icqv82as"; + name = "winapi-0.2.8.tar.gz"; + }; + inherit dependencies buildDependencies features release verbose; + }; + winapi_build_0_1_1_ = { dependencies?[], buildDependencies?[], features?[] }: mkRustCrate { + crateName = "winapi-build"; + version = "0.1.1"; + src = fetchzip { + url = "https://crates.io/api/v1/crates/winapi-build/0.1.1/download"; + sha256 = "1lxlpi87rkhxcwp2ykf1ldw3p108hwm24nywf3jfrvmff4rjhqga"; + name = "winapi-build-0.1.1.tar.gz"; + }; + libName = "build"; + inherit dependencies buildDependencies features release verbose; + }; + +in +rec { + aho_corasick_0_6_3 = aho_corasick_0_6_3_ { + dependencies = [ memchr_1_0_2 ]; + }; + ansi_term_0_9_0 = ansi_term_0_9_0_ {}; + atty_0_2_3 = atty_0_2_3_ { + dependencies = (if buildPlatform.parsed.kernel.name == "redox" then [ termion_1_5_1 ] else []) + ++ (if (buildPlatform.parsed.kernel.name == "linux" || buildPlatform.parsed.kernel.name == "darwin") then [ libc_0_2_33 ] else []) + ++ (if buildPlatform.parsed.kernel.name == "windows" then [ kernel32_sys_0_2_2 winapi_0_2_8 ] else []); + }; + backtrace_0_3_3 = backtrace_0_3_3_ { + dependencies = [ cfg_if_0_1_2 rustc_demangle_0_1_5 ] + ++ (if (buildPlatform.parsed.kernel.name == "linux" || buildPlatform.parsed.kernel.name == "darwin") && !(buildPlatform.parsed.kernel.name == "emscripten") && !(buildPlatform.parsed.kernel.name == "darwin") && !(buildPlatform.parsed.kernel.name == "ios") then [ backtrace_sys_0_1_16 ] else []) + ++ (if (buildPlatform.parsed.kernel.name == "linux" || buildPlatform.parsed.kernel.name == "darwin") then [ libc_0_2_33 ] else []) + ++ (if buildPlatform.parsed.kernel.name == "windows" then [ dbghelp_sys_0_2_0 kernel32_sys_0_2_2 winapi_0_2_8 ] else []); + features = [ "backtrace-sys" "coresymbolication" "dbghelp" "dbghelp-sys" "dladdr" "kernel32-sys" "libbacktrace" "libunwind" "winapi" ]; + }; + backtrace_sys_0_1_16 = backtrace_sys_0_1_16_ { + dependencies = [ libc_0_2_33 ]; + buildDependencies = [ cc_1_0_3 ]; + }; + bitflags_0_7_0 = bitflags_0_7_0_ {}; + bitflags_0_9_1 = bitflags_0_9_1_ { + features = [ "example_generated" ]; + }; + carnix_0_4_0 = carnix_0_4_0_ { + dependencies = [ clap_2_27_1 env_logger_0_4_3 error_chain_0_11_0 log_0_3_8 nom_3_2_1 regex_0_2_2 rusqlite_0_12_0 serde_1_0_19 serde_derive_1_0_19 serde_json_1_0_5 tempdir_0_3_5 toml_0_4_5 ]; + }; + cc_1_0_3 = cc_1_0_3_ { + dependencies = []; + }; + cfg_if_0_1_2 = cfg_if_0_1_2_ {}; + clap_2_27_1 = clap_2_27_1_ { + dependencies = [ ansi_term_0_9_0 atty_0_2_3 bitflags_0_9_1 strsim_0_6_0 textwrap_0_9_0 unicode_width_0_1_4 vec_map_0_8_0 ]; + features = [ "ansi_term" "atty" "color" "strsim" "suggestions" "vec_map" ]; + }; + dbghelp_sys_0_2_0 = dbghelp_sys_0_2_0_ { + dependencies = [ winapi_0_2_8 ]; + buildDependencies = [ winapi_build_0_1_1 ]; + }; + dtoa_0_4_2 = dtoa_0_4_2_ {}; + env_logger_0_4_3 = env_logger_0_4_3_ { + dependencies = [ log_0_3_8 regex_0_2_2 ]; + features = [ "regex" ]; + }; + error_chain_0_11_0 = error_chain_0_11_0_ { + dependencies = [ backtrace_0_3_3 ]; + features = [ "backtrace" "example_generated" ]; + }; + fuchsia_zircon_0_2_1 = fuchsia_zircon_0_2_1_ { + dependencies = [ fuchsia_zircon_sys_0_2_0 ]; + }; + fuchsia_zircon_sys_0_2_0 = fuchsia_zircon_sys_0_2_0_ { + dependencies = [ bitflags_0_7_0 ]; + }; + itoa_0_3_4 = itoa_0_3_4_ {}; + kernel32_sys_0_2_2 = kernel32_sys_0_2_2_ { + dependencies = [ winapi_0_2_8 ]; + buildDependencies = [ winapi_build_0_1_1 ]; + }; + lazy_static_0_2_9 = lazy_static_0_2_9_ {}; + libc_0_2_33 = libc_0_2_33_ { + features = [ "use_std" ]; + }; + libsqlite3_sys_0_8_1 = libsqlite3_sys_0_8_1_ { + dependencies = (if buildPlatform.parsed.abi.name == "msvc" then [] else []); + buildDependencies = [ pkg_config_0_3_9 ]; + features = [ "min_sqlite_version_3_6_8" "pkg-config" "vcpkg" ]; + }; + linked_hash_map_0_4_2 = linked_hash_map_0_4_2_ {}; + log_0_3_8 = log_0_3_8_ { + features = [ "use_std" ]; + }; + lru_cache_0_1_1 = lru_cache_0_1_1_ { + dependencies = [ linked_hash_map_0_4_2 ]; + }; + memchr_1_0_2 = memchr_1_0_2_ { + dependencies = [ libc_0_2_33 ]; + features = [ "libc" "use_std" ]; + }; + nom_3_2_1 = nom_3_2_1_ { + dependencies = [ memchr_1_0_2 ]; + features = [ "std" "stream" ]; + }; + num_traits_0_1_40 = num_traits_0_1_40_ {}; + pkg_config_0_3_9 = pkg_config_0_3_9_ {}; + quote_0_3_15 = quote_0_3_15_ {}; + rand_0_3_18 = rand_0_3_18_ { + dependencies = [ libc_0_2_33 ] + ++ (if buildPlatform.parsed.kernel.name == "fuchsia" then [ fuchsia_zircon_0_2_1 ] else []); + }; + redox_syscall_0_1_31 = redox_syscall_0_1_31_ {}; + redox_termios_0_1_1 = redox_termios_0_1_1_ { + dependencies = [ redox_syscall_0_1_31 ]; + }; + regex_0_2_2 = regex_0_2_2_ { + dependencies = [ aho_corasick_0_6_3 memchr_1_0_2 regex_syntax_0_4_1 thread_local_0_3_4 utf8_ranges_1_0_0 ]; + }; + regex_syntax_0_4_1 = regex_syntax_0_4_1_ {}; + rusqlite_0_12_0 = rusqlite_0_12_0_ { + dependencies = [ bitflags_0_9_1 libsqlite3_sys_0_8_1 lru_cache_0_1_1 time_0_1_38 ]; + }; + rustc_demangle_0_1_5 = rustc_demangle_0_1_5_ {}; + serde_1_0_19 = serde_1_0_19_ { + features = [ "std" ]; + }; + serde_derive_1_0_19 = serde_derive_1_0_19_ { + dependencies = [ quote_0_3_15 serde_derive_internals_0_17_0 syn_0_11_11 ]; + }; + serde_derive_internals_0_17_0 = serde_derive_internals_0_17_0_ { + dependencies = [ syn_0_11_11 synom_0_11_3 ]; + }; + serde_json_1_0_5 = serde_json_1_0_5_ { + dependencies = [ dtoa_0_4_2 itoa_0_3_4 num_traits_0_1_40 serde_1_0_19 ]; + }; + strsim_0_6_0 = strsim_0_6_0_ {}; + syn_0_11_11 = syn_0_11_11_ { + dependencies = [ quote_0_3_15 synom_0_11_3 unicode_xid_0_0_4 ]; + features = [ "parsing" "printing" "quote" "synom" "unicode-xid" "visit" ]; + }; + synom_0_11_3 = synom_0_11_3_ { + dependencies = [ unicode_xid_0_0_4 ]; + }; + tempdir_0_3_5 = tempdir_0_3_5_ { + dependencies = [ rand_0_3_18 ]; + }; + termion_1_5_1 = termion_1_5_1_ { + dependencies = (if !(buildPlatform.parsed.kernel.name == "redox") then [ libc_0_2_33 ] else []) + ++ (if buildPlatform.parsed.kernel.name == "redox" then [ redox_syscall_0_1_31 redox_termios_0_1_1 ] else []); + }; + textwrap_0_9_0 = textwrap_0_9_0_ { + dependencies = [ unicode_width_0_1_4 ]; + }; + thread_local_0_3_4 = thread_local_0_3_4_ { + dependencies = [ lazy_static_0_2_9 unreachable_1_0_0 ]; + }; + time_0_1_38 = time_0_1_38_ { + dependencies = [ libc_0_2_33 ] + ++ (if buildPlatform.parsed.kernel.name == "redox" then [ redox_syscall_0_1_31 ] else []) + ++ (if buildPlatform.parsed.kernel.name == "windows" then [ kernel32_sys_0_2_2 winapi_0_2_8 ] else []); + }; + toml_0_4_5 = toml_0_4_5_ { + dependencies = [ serde_1_0_19 ]; + }; + unicode_width_0_1_4 = unicode_width_0_1_4_ {}; + unicode_xid_0_0_4 = unicode_xid_0_0_4_ {}; + unreachable_1_0_0 = unreachable_1_0_0_ { + dependencies = [ void_1_0_2 ]; + }; + utf8_ranges_1_0_0 = utf8_ranges_1_0_0_ {}; + vcpkg_0_2_2 = vcpkg_0_2_2_ {}; + vec_map_0_8_0 = vec_map_0_8_0_ {}; + void_1_0_2 = void_1_0_2_ { + features = [ "std" ]; + }; + winapi_0_2_8 = winapi_0_2_8_ {}; + winapi_build_0_1_1 = winapi_build_0_1_1_ {}; +} diff --git a/pkgs/build-support/rust/rust-utils.nix b/pkgs/build-support/rust/rust-utils.nix index 50c145b9986c40..9bf0141594719f 100644 --- a/pkgs/build-support/rust/rust-utils.nix +++ b/pkgs/build-support/rust/rust-utils.nix @@ -8,7 +8,8 @@ let buildCrate = { crateName, crateVersion, buildDependencies, dependencies, completeDeps, completeBuildDeps, crateFeatures, libName, build, release, libPath, - crateType, metadata, crateBin, finalBins, verboseBuild }: + crateType, metadata, crateBin, finalBins, + verboseBuild, colors }: let depsDir = lib.concatStringsSep " " dependencies; completeDepsDir = lib.concatStringsSep " " completeDeps; @@ -27,10 +28,17 @@ let buildCrate = { crateName, crateVersion, buildDependencies, dependencies, rustcOpts = (if release then "-C opt-level=3" else "-C debuginfo=2"); rustcMeta = "-C metadata=${metadata} -C extra-filename=-${metadata}"; in '' - norm="$(printf '\033[0m')" #returns to "normal" - bold="$(printf '\033[0;1m')" #set bold - green="$(printf '\033[0;32m')" #set red - boldgreen="$(printf '\033[0;1;32m')" #set bold, and set red. + norm="" + bold="" + green="" + boldgreen="" + if [[ "${colors}" -eq "always" ]]; then + norm="$(printf '\033[0m')" #returns to "normal" + bold="$(printf '\033[0;1m')" #set bold + green="$(printf '\033[0;32m')" #set green + boldgreen="$(printf '\033[0;1;32m')" #set bold, and set green. + fi + mkdir -p target/deps mkdir -p target/build mkdir -p target/buildDeps @@ -100,7 +108,7 @@ let buildCrate = { crateName, crateVersion, buildDependencies, dependencies, fi rustc --crate-name build_script_build $BUILD --crate-type bin ${rustcOpts} \ ${crateFeatures} --out-dir target/build/${crateName} --emit=dep-info,link \ - -L dependency=target/buildDeps ${buildDeps} --cap-lints allow $EXTRA_BUILD_FLAGS + -L dependency=target/buildDeps ${buildDeps} --cap-lints allow $EXTRA_BUILD_FLAGS --color ${colors} mkdir -p target/build/${crateName}.out export RUST_BACKTRACE=1 @@ -108,10 +116,10 @@ let buildCrate = { crateName, crateVersion, buildDependencies, dependencies, mkdir -p $OUT_DIR target/build/${crateName}/build_script_build > target/build/${crateName}.opt set +e - EXTRA_BUILD=$(sed -n "s/^cargo:rustc-flags=\(.*\)/\1/p" target/build/${crateName}.opt) - EXTRA_FEATURES=$(sed -n "s/^cargo:rustc-cfg=\(.*\)/--cfg \1/p" target/build/${crateName}.opt) - EXTRA_LINK=$(sed -n "s/^cargo:rustc-link-lib=\(.*\)/\1/p" target/build/${crateName}.opt) - EXTRA_LINK_SEARCH=$(sed -n "s/^cargo:rustc-link-search=\(.*\)/\1/p" target/build/${crateName}.opt) + EXTRA_BUILD=$(sed -n "s/^cargo:rustc-flags=\(.*\)/\1/p" target/build/${crateName}.opt | tr '\n' ' ') + EXTRA_FEATURES=$(sed -n "s/^cargo:rustc-cfg=\(.*\)/--cfg \1/p" target/build/${crateName}.opt | tr '\n' ' ') + EXTRA_LINK=$(sed -n "s/^cargo:rustc-link-lib=\(.*\)/\1/p" target/build/${crateName}.opt | tr '\n' ' ') + EXTRA_LINK_SEARCH=$(sed -n "s/^cargo:rustc-link-search=\(.*\)/\1/p" target/build/${crateName}.opt | tr '\n' ' ') CRATENAME=$(echo ${crateName} | sed -e "s/\(.*\)-sys$/\1/" | tr '[:lower:]' '[:upper:]') grep "^cargo:" target/build/${crateName}.opt \ | grep -v "^cargo:rustc-" \ @@ -134,6 +142,10 @@ let buildCrate = { crateName, crateVersion, buildDependencies, dependencies, EXTRA_LIB="" CRATE_NAME=$(echo ${libName} | sed -e "s/-/_/g") + if [ -e target/link_ ]; then + EXTRA_BUILD="$(cat target/link_) $EXTRA_BUILD" + fi + if [ -e "${libPath}" ] ; then if ${verboseBuild}; then @@ -142,7 +154,7 @@ let buildCrate = { crateName, crateVersion, buildDependencies, dependencies, rustc --crate-name $CRATE_NAME ${libPath} --crate-type ${crateType} \ ${rustcOpts} ${rustcMeta} ${crateFeatures} --out-dir target/deps \ --emit=dep-info,link -L dependency=target/deps ${deps} --cap-lints allow \ - $BUILD_OUT_DIR $EXTRA_BUILD $EXTRA_FEATURES + $BUILD_OUT_DIR $EXTRA_BUILD $EXTRA_FEATURES --color ${colors} EXTRA_LIB=" --extern $CRATE_NAME=target/deps/lib$CRATE_NAME-${metadata}.rlib" if [ -e target/deps/lib$CRATE_NAME-${metadata}.so ]; then @@ -158,7 +170,7 @@ let buildCrate = { crateName, crateVersion, buildDependencies, dependencies, rustc --crate-name $CRATE_NAME src/lib.rs --crate-type ${crateType} \ ${rustcOpts} ${rustcMeta} ${crateFeatures} --out-dir target/deps \ --emit=dep-info,link -L dependency=target/deps ${deps} --cap-lints allow \ - $BUILD_OUT_DIR $EXTRA_BUILD $EXTRA_FEATURES + $BUILD_OUT_DIR $EXTRA_BUILD $EXTRA_FEATURES --color ${colors} EXTRA_LIB=" --extern $CRATE_NAME=target/deps/lib$CRATE_NAME-${metadata}.rlib" if [ -e target/deps/lib$CRATE_NAME-${metadata}.so ]; then @@ -174,7 +186,7 @@ let buildCrate = { crateName, crateVersion, buildDependencies, dependencies, rustc --crate-name $CRATE_NAME src/${libName}.rs --crate-type ${crateType} \ ${rustcOpts} ${rustcMeta} ${crateFeatures} --out-dir target/deps \ --emit=dep-info,link -L dependency=target/deps ${deps} --cap-lints allow \ - $BUILD_OUT_DIR $EXTRA_BUILD $EXTRA_FEATURES + $BUILD_OUT_DIR $EXTRA_BUILD $EXTRA_FEATURES --color ${colors} EXTRA_LIB=" --extern $CRATE_NAME=target/deps/lib$CRATE_NAME-${metadata}.rlib" if [ -e target/deps/lib$CRATE_NAME-${metadata}.so ]; then @@ -210,29 +222,25 @@ let buildCrate = { crateName, crateVersion, buildDependencies, dependencies, mkdir -p target/bin echo "${crateBin}" | sed -n 1'p' | tr ',' '\n' | while read BIN; do if [ ! -z "$BIN" ]; then - echo "`tput setaf 2``tput bold`Building $BIN`tput sgr0`" + echo "$boldgreen""Building $BIN$norm" if ${verboseBuild}; then - echo -n "`tput setaf 2``tput bold`Running`tput sgr0`" - set -x + echo "$boldgreen""Running$norm rustc --crate-name $BIN --crate-type bin ${rustcOpts} ${crateFeatures} --out-dir target/bin --emit=dep-info,link -L dependency=target/deps $LINK ${deps}$EXTRA_LIB --cap-lints allow $BUILD_OUT_DIR $EXTRA_BUILD $EXTRA_FEATURES" fi rustc --crate-name $BIN --crate-type bin ${rustcOpts} ${crateFeatures} \ --out-dir target/bin --emit=dep-info,link -L dependency=target/deps \ $LINK ${deps}$EXTRA_LIB --cap-lints allow \ - $BUILD_OUT_DIR $EXTRA_BUILD $EXTRA_FEATURES - set +x + $BUILD_OUT_DIR $EXTRA_BUILD $EXTRA_FEATURES --color ${colors} fi done if [[ (-z "${crateBin}") && (-e src/main.rs) ]]; then - echo "`tput setaf 2``tput bold`Building src/main.rs (${crateName})`tput sgr0`" + echo "$boldgreen""Building src/main.rs (${crateName})$norm" if ${verboseBuild}; then - echo -n "`tput setaf 2``tput bold`Running`tput sgr0`" - set -x + echo "$boldgreen""Running$norm rustc --crate-name $CRATE_NAME src/main.rs --crate-type bin ${rustcOpts} ${crateFeatures} --out-dir target/bin --emit=dep-info,link -L dependency=target/deps $LINK ${deps}$EXTRA_LIB --cap-lints allow $BUILD_OUT_DIR $EXTRA_BUILD $EXTRA_FEATURES" fi rustc --crate-name $CRATE_NAME src/main.rs --crate-type bin ${rustcOpts} \ ${crateFeatures} --out-dir target/bin --emit=dep-info,link \ - -L dependency=target/deps $LINK ${deps}$EXTRA_LIB --cap-lints allow - $BUILD_OUT_DIR $EXTRA_BUILD $EXTRA_FEATURES - set +x + -L dependency=target/deps $LINK ${deps}$EXTRA_LIB --cap-lints allow \ + $BUILD_OUT_DIR $EXTRA_BUILD $EXTRA_FEATURES --color ${colors} fi # Remove object files to avoid "wrong ELF type" rm -f $(find target -name "*.o") @@ -309,10 +317,11 @@ crate: rust: stdenv.mkDerivation rec { if lib.attrByPath ["procMacro"] false crate then "proc-macro" else if lib.attrByPath ["plugin"] false crate then "dylib" else "lib"; verboseBuild = if lib.attrByPath [ "verbose" ] false crate then "true" else "false"; + colors = lib.attrByPath [ "colors" ] "always" crate; buildPhase = buildCrate { inherit crateName dependencies buildDependencies completeDeps completeBuildDeps crateFeatures libName build release libPath crateType crateVersion - metadata crateBin finalBins verboseBuild; + metadata crateBin finalBins verboseBuild colors; }; installPhase = installCrate crateName; } diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 6d1b6f5e318828..49de868456edc6 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -6217,6 +6217,8 @@ with pkgs; mkRustCrate = callPackage ../build-support/rust/rust-utils.nix { }; + carnix = (callPackage ../build-support/rust/carnix.nix { }).carnix_0_4_0 rustc; + rustPlatform = recurseIntoAttrs (makeRustPlatform rust); makeRustPlatform = rust: lib.fix (self: From 6088db3e1c510676178f2f484d1600663dcce4cd Mon Sep 17 00:00:00 2001 From: "pe@pijul.org" Date: Fri, 10 Nov 2017 07:33:52 +0100 Subject: [PATCH 07/47] Replacing fetchzip with fetchcrate This fixes impurity problems and allows one to write shorter expressions in the nix files generated by carnix --- pkgs/build-support/rust/fetchcrate.nix | 35 ++++++++++++++++++++++++++ pkgs/build-support/rust/rust-utils.nix | 21 +++++++++++----- pkgs/top-level/all-packages.nix | 2 ++ 3 files changed, 52 insertions(+), 6 deletions(-) create mode 100644 pkgs/build-support/rust/fetchcrate.nix diff --git a/pkgs/build-support/rust/fetchcrate.nix b/pkgs/build-support/rust/fetchcrate.nix new file mode 100644 index 00000000000000..95dfd38b12ae99 --- /dev/null +++ b/pkgs/build-support/rust/fetchcrate.nix @@ -0,0 +1,35 @@ +{ lib, fetchurl, unzip }: + +{ crateName +, version +, sha256 +, ... } @ args: + +lib.overrideDerivation (fetchurl ({ + + name = "${crateName}-${version}.tar.gz"; + url = "https://crates.io/api/v1/crates/${crateName}/${version}/download"; + recursiveHash = true; + + downloadToTemp = true; + + postFetch = + '' + export PATH=${unzip}/bin:$PATH + + unpackDir="$TMPDIR/unpack" + mkdir "$unpackDir" + cd "$unpackDir" + + renamed="$TMPDIR/${crateName}-${version}.tar.gz" + mv "$downloadedFile" "$renamed" + unpackFile "$renamed" + fn=$(cd "$unpackDir" && echo *) + if [ -f "$unpackDir/$fn" ]; then + mkdir $out + fi + mv "$unpackDir/$fn" "$out" + ''; +} // removeAttrs args [ "crateName" "version" ])) +# Hackety-hack: we actually need unzip hooks, too +(x: {nativeBuildInputs = x.nativeBuildInputs++ [unzip];}) diff --git a/pkgs/build-support/rust/rust-utils.nix b/pkgs/build-support/rust/rust-utils.nix index 9bf0141594719f..61867dba1afb31 100644 --- a/pkgs/build-support/rust/rust-utils.nix +++ b/pkgs/build-support/rust/rust-utils.nix @@ -197,15 +197,19 @@ let buildCrate = { crateName, crateVersion, buildDependencies, dependencies, echo "$EXTRA_LINK_SEARCH" | while read i; do if [ ! -z "$i" ]; then - echo "-L $i" >> target/link - L=$(echo $i | sed -e "s#$(pwd)/target/build#$out#") - echo "-L $L" >> target/link.final + for lib in $i; do + echo "-L $lib" >> target/link + L=$(echo $lib | sed -e "s#$(pwd)/target/build#$out#") + echo "-L $L" >> target/link.final + done fi done echo "$EXTRA_LINK" | while read i; do if [ ! -z "$i" ]; then - echo "-l $i" >> target/link - echo "-l $i" >> target/link.final + for lib in $i; do + echo "-l $lib" >> target/link + echo "-l $lib" >> target/link.final + done fi done @@ -267,7 +271,12 @@ in crate: rust: stdenv.mkDerivation rec { - inherit (crate) crateName src; + inherit (crate) crateName; + + src = if lib.hasAttr "src" crate then + crate.src + else + pkgs.fetchCrate { inherit (crate) crateName version sha256; }; release = if crate ? release then crate.release else false; name = "rust_${crate.crateName}-${crate.version}"; diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 49de868456edc6..c13392b3fb34f8 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -186,6 +186,8 @@ with pkgs; fetchzip = callPackage ../build-support/fetchzip { }; + fetchCrate = callPackage ../build-support/rust/fetchcrate.nix { }; + fetchFromGitHub = { owner, repo, rev, name ? "source", fetchSubmodules ? false, private ? false, From 235a48efc1ff5e13a82fa2d25b2dc1c5cfc395de Mon Sep 17 00:00:00 2001 From: "pe@pijul.org" Date: Fri, 10 Nov 2017 07:51:02 +0100 Subject: [PATCH 08/47] Carnix 0.4.1 --- pkgs/build-support/rust/carnix.nix | 367 +++++------------------------ pkgs/top-level/all-packages.nix | 2 +- 2 files changed, 66 insertions(+), 303 deletions(-) diff --git a/pkgs/build-support/rust/carnix.nix b/pkgs/build-support/rust/carnix.nix index f2b6648d593042..b6b4aecbca532e 100644 --- a/pkgs/build-support/rust/carnix.nix +++ b/pkgs/build-support/rust/carnix.nix @@ -1,15 +1,11 @@ -{ pkgs }: +{ pkgs, ... }: with pkgs; -let release = false; +let release = true; verbose = true; aho_corasick_0_6_3_ = { dependencies?[], buildDependencies?[], features?[] }: mkRustCrate { crateName = "aho-corasick"; version = "0.6.3"; - src = fetchzip { - url = "https://crates.io/api/v1/crates/aho-corasick/0.6.3/download"; - sha256 = "1cpqzf6acj8lm06z3f1cg41wn6c2n9l3v49nh0dvimv4055qib6k"; - name = "aho-corasick-0.6.3.tar.gz"; - }; + sha256 = "1cpqzf6acj8lm06z3f1cg41wn6c2n9l3v49nh0dvimv4055qib6k"; libName = "aho_corasick"; crateBin = [ { name = "aho-corasick-dot"; } ]; inherit dependencies buildDependencies features release verbose; @@ -17,113 +13,69 @@ let release = false; ansi_term_0_9_0_ = { dependencies?[], buildDependencies?[], features?[] }: mkRustCrate { crateName = "ansi_term"; version = "0.9.0"; - src = fetchzip { - url = "https://crates.io/api/v1/crates/ansi_term/0.9.0/download"; - sha256 = "1vcd8m2hglrdi4zmqnkkz5zy3c73ifgii245k7vj6qr5dzpn9hij"; - name = "ansi_term-0.9.0.tar.gz"; - }; + sha256 = "1vcd8m2hglrdi4zmqnkkz5zy3c73ifgii245k7vj6qr5dzpn9hij"; libName = "ansi_term"; inherit dependencies buildDependencies features release verbose; }; atty_0_2_3_ = { dependencies?[], buildDependencies?[], features?[] }: mkRustCrate { crateName = "atty"; version = "0.2.3"; - src = fetchzip { - url = "https://crates.io/api/v1/crates/atty/0.2.3/download"; - sha256 = "0zl0cjfgarp5y78nd755lpki5bbkj4hgmi88v265m543yg29i88f"; - name = "atty-0.2.3.tar.gz"; - }; + sha256 = "0zl0cjfgarp5y78nd755lpki5bbkj4hgmi88v265m543yg29i88f"; inherit dependencies buildDependencies features release verbose; }; backtrace_0_3_3_ = { dependencies?[], buildDependencies?[], features?[] }: mkRustCrate { crateName = "backtrace"; version = "0.3.3"; - src = fetchzip { - url = "https://crates.io/api/v1/crates/backtrace/0.3.3/download"; - sha256 = "0invfdxkj85v8zyrjs3amfxjdk2a36x8irq7wq7kny6q49hh8y0z"; - name = "backtrace-0.3.3.tar.gz"; - }; + sha256 = "0invfdxkj85v8zyrjs3amfxjdk2a36x8irq7wq7kny6q49hh8y0z"; inherit dependencies buildDependencies features release verbose; }; backtrace_sys_0_1_16_ = { dependencies?[], buildDependencies?[], features?[] }: mkRustCrate { crateName = "backtrace-sys"; version = "0.1.16"; - src = fetchzip { - url = "https://crates.io/api/v1/crates/backtrace-sys/0.1.16/download"; - sha256 = "1cn2c8q3dn06crmnk0p62czkngam4l8nf57wy33nz1y5g25pszwy"; - name = "backtrace-sys-0.1.16.tar.gz"; - }; + sha256 = "1cn2c8q3dn06crmnk0p62czkngam4l8nf57wy33nz1y5g25pszwy"; build = "build.rs"; inherit dependencies buildDependencies features release verbose; }; bitflags_0_7_0_ = { dependencies?[], buildDependencies?[], features?[] }: mkRustCrate { crateName = "bitflags"; version = "0.7.0"; - src = fetchzip { - url = "https://crates.io/api/v1/crates/bitflags/0.7.0/download"; - sha256 = "1hr72xg5slm0z4pxs2hiy4wcyx3jva70h58b7mid8l0a4c8f7gn5"; - name = "bitflags-0.7.0.tar.gz"; - }; + sha256 = "1hr72xg5slm0z4pxs2hiy4wcyx3jva70h58b7mid8l0a4c8f7gn5"; inherit dependencies buildDependencies features release verbose; }; bitflags_0_9_1_ = { dependencies?[], buildDependencies?[], features?[] }: mkRustCrate { crateName = "bitflags"; version = "0.9.1"; - src = fetchzip { - url = "https://crates.io/api/v1/crates/bitflags/0.9.1/download"; - sha256 = "18h073l5jd88rx4qdr95fjddr9rk79pb1aqnshzdnw16cfmb9rws"; - name = "bitflags-0.9.1.tar.gz"; - }; + sha256 = "18h073l5jd88rx4qdr95fjddr9rk79pb1aqnshzdnw16cfmb9rws"; inherit dependencies buildDependencies features release verbose; }; - carnix_0_4_0_ = { dependencies?[], buildDependencies?[], features?[] }: mkRustCrate { + carnix_0_4_1_ = { dependencies?[], buildDependencies?[], features?[] }: mkRustCrate { crateName = "carnix"; - version = "0.4.0"; - src = fetchzip { - url = "https://crates.io/api/v1/crates/carnix/0.4.0/download"; - sha256 = "1swlx9fp4s8sx1lybglnc9ap7c3fsrbzh2grfx5x94c050lrwl6j"; - name = "carnix-0.4.0.tar.gz"; - }; + version = "0.4.1"; + sha256 = "1vp7f09njsssn78bhkyffl2fb2vc60hgxsx7pslgavyn7rr4d0ni"; inherit dependencies buildDependencies features release verbose; }; cc_1_0_3_ = { dependencies?[], buildDependencies?[], features?[] }: mkRustCrate { crateName = "cc"; version = "1.0.3"; - src = fetchzip { - url = "https://crates.io/api/v1/crates/cc/1.0.3/download"; - sha256 = "193pwqgh79w6k0k29svyds5nnlrwx44myqyrw605d5jj4yk2zmpr"; - name = "cc-1.0.3.tar.gz"; - }; + sha256 = "193pwqgh79w6k0k29svyds5nnlrwx44myqyrw605d5jj4yk2zmpr"; inherit dependencies buildDependencies features release verbose; }; cfg_if_0_1_2_ = { dependencies?[], buildDependencies?[], features?[] }: mkRustCrate { crateName = "cfg-if"; version = "0.1.2"; - src = fetchzip { - url = "https://crates.io/api/v1/crates/cfg-if/0.1.2/download"; - sha256 = "0x06hvrrqy96m97593823vvxcgvjaxckghwyy2jcyc8qc7c6cyhi"; - name = "cfg-if-0.1.2.tar.gz"; - }; + sha256 = "0x06hvrrqy96m97593823vvxcgvjaxckghwyy2jcyc8qc7c6cyhi"; inherit dependencies buildDependencies features release verbose; }; clap_2_27_1_ = { dependencies?[], buildDependencies?[], features?[] }: mkRustCrate { crateName = "clap"; version = "2.27.1"; - src = fetchzip { - url = "https://crates.io/api/v1/crates/clap/2.27.1/download"; - sha256 = "0zx8rskqfl3iqn3vlyxzyd99hpifa7bm871akhxpz9wvrm688zaj"; - name = "clap-2.27.1.tar.gz"; - }; + sha256 = "0zx8rskqfl3iqn3vlyxzyd99hpifa7bm871akhxpz9wvrm688zaj"; inherit dependencies buildDependencies features release verbose; }; dbghelp_sys_0_2_0_ = { dependencies?[], buildDependencies?[], features?[] }: mkRustCrate { crateName = "dbghelp-sys"; version = "0.2.0"; - src = fetchzip { - url = "https://crates.io/api/v1/crates/dbghelp-sys/0.2.0/download"; - sha256 = "0ylpi3bbiy233m57hnisn1df1v0lbl7nsxn34b0anzsgg440hqpq"; - name = "dbghelp-sys-0.2.0.tar.gz"; - }; + sha256 = "0ylpi3bbiy233m57hnisn1df1v0lbl7nsxn34b0anzsgg440hqpq"; libName = "dbghelp"; build = "build.rs"; inherit dependencies buildDependencies features release verbose; @@ -131,71 +83,43 @@ let release = false; dtoa_0_4_2_ = { dependencies?[], buildDependencies?[], features?[] }: mkRustCrate { crateName = "dtoa"; version = "0.4.2"; - src = fetchzip { - url = "https://crates.io/api/v1/crates/dtoa/0.4.2/download"; - sha256 = "1bxsh6fags7nr36vlz07ik2a1rzyipc8x1y30kjk832hf2pzadmw"; - name = "dtoa-0.4.2.tar.gz"; - }; + sha256 = "1bxsh6fags7nr36vlz07ik2a1rzyipc8x1y30kjk832hf2pzadmw"; inherit dependencies buildDependencies features release verbose; }; env_logger_0_4_3_ = { dependencies?[], buildDependencies?[], features?[] }: mkRustCrate { crateName = "env_logger"; version = "0.4.3"; - src = fetchzip { - url = "https://crates.io/api/v1/crates/env_logger/0.4.3/download"; - sha256 = "0nrx04p4xa86d5kc7aq4fwvipbqji9cmgy449h47nc9f1chafhgg"; - name = "env_logger-0.4.3.tar.gz"; - }; + sha256 = "0nrx04p4xa86d5kc7aq4fwvipbqji9cmgy449h47nc9f1chafhgg"; inherit dependencies buildDependencies features release verbose; }; error_chain_0_11_0_ = { dependencies?[], buildDependencies?[], features?[] }: mkRustCrate { crateName = "error-chain"; version = "0.11.0"; - src = fetchzip { - url = "https://crates.io/api/v1/crates/error-chain/0.11.0/download"; - sha256 = "19nz17q6dzp0mx2jhh9qbj45gkvvgcl7zq9z2ai5a8ihbisfj6d7"; - name = "error-chain-0.11.0.tar.gz"; - }; + sha256 = "19nz17q6dzp0mx2jhh9qbj45gkvvgcl7zq9z2ai5a8ihbisfj6d7"; inherit dependencies buildDependencies features release verbose; }; fuchsia_zircon_0_2_1_ = { dependencies?[], buildDependencies?[], features?[] }: mkRustCrate { crateName = "fuchsia-zircon"; version = "0.2.1"; - src = fetchzip { - url = "https://crates.io/api/v1/crates/fuchsia-zircon/0.2.1/download"; - sha256 = "0yd4rd7ql1vdr349p6vgq2dnwmpylky1kjp8g1zgvp250jxrhddb"; - name = "fuchsia-zircon-0.2.1.tar.gz"; - }; + sha256 = "0yd4rd7ql1vdr349p6vgq2dnwmpylky1kjp8g1zgvp250jxrhddb"; inherit dependencies buildDependencies features release verbose; }; fuchsia_zircon_sys_0_2_0_ = { dependencies?[], buildDependencies?[], features?[] }: mkRustCrate { crateName = "fuchsia-zircon-sys"; version = "0.2.0"; - src = fetchzip { - url = "https://crates.io/api/v1/crates/fuchsia-zircon-sys/0.2.0/download"; - sha256 = "1yrqsrjwlhl3di6prxf5xmyd82gyjaysldbka5wwk83z11mpqh4w"; - name = "fuchsia-zircon-sys-0.2.0.tar.gz"; - }; + sha256 = "1yrqsrjwlhl3di6prxf5xmyd82gyjaysldbka5wwk83z11mpqh4w"; inherit dependencies buildDependencies features release verbose; }; itoa_0_3_4_ = { dependencies?[], buildDependencies?[], features?[] }: mkRustCrate { crateName = "itoa"; version = "0.3.4"; - src = fetchzip { - url = "https://crates.io/api/v1/crates/itoa/0.3.4/download"; - sha256 = "1nfkzz6vrgj0d9l3yzjkkkqzdgs68y294fjdbl7jq118qi8xc9d9"; - name = "itoa-0.3.4.tar.gz"; - }; + sha256 = "1nfkzz6vrgj0d9l3yzjkkkqzdgs68y294fjdbl7jq118qi8xc9d9"; inherit dependencies buildDependencies features release verbose; }; kernel32_sys_0_2_2_ = { dependencies?[], buildDependencies?[], features?[] }: mkRustCrate { crateName = "kernel32-sys"; version = "0.2.2"; - src = fetchzip { - url = "https://crates.io/api/v1/crates/kernel32-sys/0.2.2/download"; - sha256 = "1lrw1hbinyvr6cp28g60z97w32w8vsk6pahk64pmrv2fmby8srfj"; - name = "kernel32-sys-0.2.2.tar.gz"; - }; + sha256 = "1lrw1hbinyvr6cp28g60z97w32w8vsk6pahk64pmrv2fmby8srfj"; libName = "kernel32"; build = "build.rs"; inherit dependencies buildDependencies features release verbose; @@ -203,145 +127,89 @@ let release = false; lazy_static_0_2_9_ = { dependencies?[], buildDependencies?[], features?[] }: mkRustCrate { crateName = "lazy_static"; version = "0.2.9"; - src = fetchzip { - url = "https://crates.io/api/v1/crates/lazy_static/0.2.9/download"; - sha256 = "08ldzr5292y3hvi6l6v8l4i6v95lm1aysmnfln65h10sqrfh6iw7"; - name = "lazy_static-0.2.9.tar.gz"; - }; + sha256 = "08ldzr5292y3hvi6l6v8l4i6v95lm1aysmnfln65h10sqrfh6iw7"; inherit dependencies buildDependencies features release verbose; }; libc_0_2_33_ = { dependencies?[], buildDependencies?[], features?[] }: mkRustCrate { crateName = "libc"; version = "0.2.33"; - src = fetchzip { - url = "https://crates.io/api/v1/crates/libc/0.2.33/download"; - sha256 = "1l7synziccnvarsq2kk22vps720ih6chmn016bhr2bq54hblbnl1"; - name = "libc-0.2.33.tar.gz"; - }; + sha256 = "1l7synziccnvarsq2kk22vps720ih6chmn016bhr2bq54hblbnl1"; inherit dependencies buildDependencies features release verbose; }; libsqlite3_sys_0_8_1_ = { dependencies?[], buildDependencies?[], features?[] }: mkRustCrate { crateName = "libsqlite3-sys"; version = "0.8.1"; - src = fetchzip { - url = "https://crates.io/api/v1/crates/libsqlite3-sys/0.8.1/download"; - sha256 = "131bjlxzni2aw3048p7sj8cs3v0jpkb3fxdpc5i7ndyhvpz3gdza"; - name = "libsqlite3-sys-0.8.1.tar.gz"; - }; + sha256 = "131bjlxzni2aw3048p7sj8cs3v0jpkb3fxdpc5i7ndyhvpz3gdza"; + buildInputs = [ pkgs.sqlite pkgs.pkgconfig ]; build = "build.rs"; - buildInputs = [ pkgs.pkgconfig pkgs.sqlite ]; inherit dependencies buildDependencies features release verbose; }; linked_hash_map_0_4_2_ = { dependencies?[], buildDependencies?[], features?[] }: mkRustCrate { crateName = "linked-hash-map"; version = "0.4.2"; - src = fetchzip { - url = "https://crates.io/api/v1/crates/linked-hash-map/0.4.2/download"; - sha256 = "04da208h6jb69f46j37jnvsw2i1wqplglp4d61csqcrhh83avbgl"; - name = "linked-hash-map-0.4.2.tar.gz"; - }; + sha256 = "04da208h6jb69f46j37jnvsw2i1wqplglp4d61csqcrhh83avbgl"; inherit dependencies buildDependencies features release verbose; }; log_0_3_8_ = { dependencies?[], buildDependencies?[], features?[] }: mkRustCrate { crateName = "log"; version = "0.3.8"; - src = fetchzip { - url = "https://crates.io/api/v1/crates/log/0.3.8/download"; - sha256 = "1c43z4z85sxrsgir4s1hi84558ab5ic7jrn5qgmsiqcv90vvn006"; - name = "log-0.3.8.tar.gz"; - }; + sha256 = "1c43z4z85sxrsgir4s1hi84558ab5ic7jrn5qgmsiqcv90vvn006"; inherit dependencies buildDependencies features release verbose; }; lru_cache_0_1_1_ = { dependencies?[], buildDependencies?[], features?[] }: mkRustCrate { crateName = "lru-cache"; version = "0.1.1"; - src = fetchzip { - url = "https://crates.io/api/v1/crates/lru-cache/0.1.1/download"; - sha256 = "1hl6kii1g54sq649gnscv858mmw7a02xj081l4vcgvrswdi2z8fw"; - name = "lru-cache-0.1.1.tar.gz"; - }; + sha256 = "1hl6kii1g54sq649gnscv858mmw7a02xj081l4vcgvrswdi2z8fw"; inherit dependencies buildDependencies features release verbose; }; memchr_1_0_2_ = { dependencies?[], buildDependencies?[], features?[] }: mkRustCrate { crateName = "memchr"; version = "1.0.2"; - src = fetchzip { - url = "https://crates.io/api/v1/crates/memchr/1.0.2/download"; - sha256 = "0dfb8ifl9nrc9kzgd5z91q6qg87sh285q1ih7xgrsglmqfav9lg7"; - name = "memchr-1.0.2.tar.gz"; - }; + sha256 = "0dfb8ifl9nrc9kzgd5z91q6qg87sh285q1ih7xgrsglmqfav9lg7"; libName = "memchr"; inherit dependencies buildDependencies features release verbose; }; nom_3_2_1_ = { dependencies?[], buildDependencies?[], features?[] }: mkRustCrate { crateName = "nom"; version = "3.2.1"; - src = fetchzip { - url = "https://crates.io/api/v1/crates/nom/3.2.1/download"; - sha256 = "1vcllxrz9hdw6j25kn020ka3psz1vkaqh1hm3yfak2240zrxgi07"; - name = "nom-3.2.1.tar.gz"; - }; + sha256 = "1vcllxrz9hdw6j25kn020ka3psz1vkaqh1hm3yfak2240zrxgi07"; inherit dependencies buildDependencies features release verbose; }; num_traits_0_1_40_ = { dependencies?[], buildDependencies?[], features?[] }: mkRustCrate { crateName = "num-traits"; version = "0.1.40"; - src = fetchzip { - url = "https://crates.io/api/v1/crates/num-traits/0.1.40/download"; - sha256 = "1fr8ghp4i97q3agki54i0hpmqxv3s65i2mqd1pinc7w7arc3fplw"; - name = "num-traits-0.1.40.tar.gz"; - }; + sha256 = "1fr8ghp4i97q3agki54i0hpmqxv3s65i2mqd1pinc7w7arc3fplw"; inherit dependencies buildDependencies features release verbose; }; pkg_config_0_3_9_ = { dependencies?[], buildDependencies?[], features?[] }: mkRustCrate { crateName = "pkg-config"; version = "0.3.9"; - src = fetchzip { - url = "https://crates.io/api/v1/crates/pkg-config/0.3.9/download"; - sha256 = "06k8fxgrsrxj8mjpjcq1n7mn2p1shpxif4zg9y5h09c7vy20s146"; - name = "pkg-config-0.3.9.tar.gz"; - }; + sha256 = "06k8fxgrsrxj8mjpjcq1n7mn2p1shpxif4zg9y5h09c7vy20s146"; inherit dependencies buildDependencies features release verbose; }; quote_0_3_15_ = { dependencies?[], buildDependencies?[], features?[] }: mkRustCrate { crateName = "quote"; version = "0.3.15"; - src = fetchzip { - url = "https://crates.io/api/v1/crates/quote/0.3.15/download"; - sha256 = "09il61jv4kd1360spaj46qwyl21fv1qz18fsv2jra8wdnlgl5jsg"; - name = "quote-0.3.15.tar.gz"; - }; + sha256 = "09il61jv4kd1360spaj46qwyl21fv1qz18fsv2jra8wdnlgl5jsg"; inherit dependencies buildDependencies features release verbose; }; rand_0_3_18_ = { dependencies?[], buildDependencies?[], features?[] }: mkRustCrate { crateName = "rand"; version = "0.3.18"; - src = fetchzip { - url = "https://crates.io/api/v1/crates/rand/0.3.18/download"; - sha256 = "15d7c3myn968dzjs0a2pgv58hzdavxnq6swgj032lw2v966ir4xv"; - name = "rand-0.3.18.tar.gz"; - }; + sha256 = "15d7c3myn968dzjs0a2pgv58hzdavxnq6swgj032lw2v966ir4xv"; inherit dependencies buildDependencies features release verbose; }; redox_syscall_0_1_31_ = { dependencies?[], buildDependencies?[], features?[] }: mkRustCrate { crateName = "redox_syscall"; version = "0.1.31"; - src = fetchzip { - url = "https://crates.io/api/v1/crates/redox_syscall/0.1.31/download"; - sha256 = "0kipd9qslzin4fgj4jrxv6yz5l3l71gnbd7fq1jhk2j7f2sq33j4"; - name = "redox_syscall-0.1.31.tar.gz"; - }; + sha256 = "0kipd9qslzin4fgj4jrxv6yz5l3l71gnbd7fq1jhk2j7f2sq33j4"; libName = "syscall"; inherit dependencies buildDependencies features release verbose; }; redox_termios_0_1_1_ = { dependencies?[], buildDependencies?[], features?[] }: mkRustCrate { crateName = "redox_termios"; version = "0.1.1"; - src = fetchzip { - url = "https://crates.io/api/v1/crates/redox_termios/0.1.1/download"; - sha256 = "04s6yyzjca552hdaqlvqhp3vw0zqbc304md5czyd3axh56iry8wh"; - name = "redox_termios-0.1.1.tar.gz"; - }; + sha256 = "04s6yyzjca552hdaqlvqhp3vw0zqbc304md5czyd3axh56iry8wh"; libPath = "src/lib.rs"; libName = "redox_termios"; inherit dependencies buildDependencies features release verbose; @@ -349,63 +217,38 @@ let release = false; regex_0_2_2_ = { dependencies?[], buildDependencies?[], features?[] }: mkRustCrate { crateName = "regex"; version = "0.2.2"; - src = fetchzip { - url = "https://crates.io/api/v1/crates/regex/0.2.2/download"; - sha256 = "1f1zrrynfylg0vcfyfp60bybq4rp5g1yk2k7lc7fyz7mmc7k2qr7"; - name = "regex-0.2.2.tar.gz"; - }; + sha256 = "1f1zrrynfylg0vcfyfp60bybq4rp5g1yk2k7lc7fyz7mmc7k2qr7"; inherit dependencies buildDependencies features release verbose; }; regex_syntax_0_4_1_ = { dependencies?[], buildDependencies?[], features?[] }: mkRustCrate { crateName = "regex-syntax"; version = "0.4.1"; - src = fetchzip { - url = "https://crates.io/api/v1/crates/regex-syntax/0.4.1/download"; - sha256 = "01yrsm68lj86ad1whgg1z95c2pfsvv58fz8qjcgw7mlszc0c08ls"; - name = "regex-syntax-0.4.1.tar.gz"; - }; + sha256 = "01yrsm68lj86ad1whgg1z95c2pfsvv58fz8qjcgw7mlszc0c08ls"; inherit dependencies buildDependencies features release verbose; }; rusqlite_0_12_0_ = { dependencies?[], buildDependencies?[], features?[] }: mkRustCrate { crateName = "rusqlite"; version = "0.12.0"; - src = fetchzip { - url = "https://crates.io/api/v1/crates/rusqlite/0.12.0/download"; - sha256 = "18fybr7bd012j7axf4gzpphx0iil2amksdlab4dhhipjl6hyam6j"; - name = "rusqlite-0.12.0.tar.gz"; - }; + sha256 = "18fybr7bd012j7axf4gzpphx0iil2amksdlab4dhhipjl6hyam6j"; libName = "rusqlite"; - buildInputs = [ pkgs.pkgconfig pkgs.sqlite ]; inherit dependencies buildDependencies features release verbose; }; rustc_demangle_0_1_5_ = { dependencies?[], buildDependencies?[], features?[] }: mkRustCrate { crateName = "rustc-demangle"; version = "0.1.5"; - src = fetchzip { - url = "https://crates.io/api/v1/crates/rustc-demangle/0.1.5/download"; - sha256 = "096kkcx9j747700fhxj1s4rlwkj21pqjmvj64psdj6bakb2q13nc"; - name = "rustc-demangle-0.1.5.tar.gz"; - }; + sha256 = "096kkcx9j747700fhxj1s4rlwkj21pqjmvj64psdj6bakb2q13nc"; inherit dependencies buildDependencies features release verbose; }; serde_1_0_19_ = { dependencies?[], buildDependencies?[], features?[] }: mkRustCrate { crateName = "serde"; version = "1.0.19"; - src = fetchzip { - url = "https://crates.io/api/v1/crates/serde/1.0.19/download"; - sha256 = "0dfhkkbrpr0vr1b2hhbddizb8bq4phi5ck0jhy3yx31bc2byb1l1"; - name = "serde-1.0.19.tar.gz"; - }; + sha256 = "0dfhkkbrpr0vr1b2hhbddizb8bq4phi5ck0jhy3yx31bc2byb1l1"; inherit dependencies buildDependencies features release verbose; }; serde_derive_1_0_19_ = { dependencies?[], buildDependencies?[], features?[] }: mkRustCrate { crateName = "serde_derive"; version = "1.0.19"; - src = fetchzip { - url = "https://crates.io/api/v1/crates/serde_derive/1.0.19/download"; - sha256 = "1fbr1zi25fgwy49mvpjq8g611mnv3vcd4n0mgca2lfdsp5n2nw5v"; - name = "serde_derive-1.0.19.tar.gz"; - }; + sha256 = "1fbr1zi25fgwy49mvpjq8g611mnv3vcd4n0mgca2lfdsp5n2nw5v"; libName = "serde_derive"; procMacro = true; inherit dependencies buildDependencies features release verbose; @@ -413,201 +256,121 @@ let release = false; serde_derive_internals_0_17_0_ = { dependencies?[], buildDependencies?[], features?[] }: mkRustCrate { crateName = "serde_derive_internals"; version = "0.17.0"; - src = fetchzip { - url = "https://crates.io/api/v1/crates/serde_derive_internals/0.17.0/download"; - sha256 = "1g1j3v6pj9wbcz3v3w4smjpwrcdwjicmf6yd5cbai04as9iwhw74"; - name = "serde_derive_internals-0.17.0.tar.gz"; - }; + sha256 = "1g1j3v6pj9wbcz3v3w4smjpwrcdwjicmf6yd5cbai04as9iwhw74"; inherit dependencies buildDependencies features release verbose; }; serde_json_1_0_5_ = { dependencies?[], buildDependencies?[], features?[] }: mkRustCrate { crateName = "serde_json"; version = "1.0.5"; - src = fetchzip { - url = "https://crates.io/api/v1/crates/serde_json/1.0.5/download"; - sha256 = "1yka3aa2gfi30415jpf0935k54r08jhyw6r7rjz2nv1kqgbw2brs"; - name = "serde_json-1.0.5.tar.gz"; - }; + sha256 = "1yka3aa2gfi30415jpf0935k54r08jhyw6r7rjz2nv1kqgbw2brs"; inherit dependencies buildDependencies features release verbose; }; strsim_0_6_0_ = { dependencies?[], buildDependencies?[], features?[] }: mkRustCrate { crateName = "strsim"; version = "0.6.0"; - src = fetchzip { - url = "https://crates.io/api/v1/crates/strsim/0.6.0/download"; - sha256 = "1lz85l6y68hr62lv4baww29yy7g8pg20dlr0lbaswxmmcb0wl7gd"; - name = "strsim-0.6.0.tar.gz"; - }; + sha256 = "1lz85l6y68hr62lv4baww29yy7g8pg20dlr0lbaswxmmcb0wl7gd"; inherit dependencies buildDependencies features release verbose; }; syn_0_11_11_ = { dependencies?[], buildDependencies?[], features?[] }: mkRustCrate { crateName = "syn"; version = "0.11.11"; - src = fetchzip { - url = "https://crates.io/api/v1/crates/syn/0.11.11/download"; - sha256 = "0yw8ng7x1dn5a6ykg0ib49y7r9nhzgpiq2989rqdp7rdz3n85502"; - name = "syn-0.11.11.tar.gz"; - }; + sha256 = "0yw8ng7x1dn5a6ykg0ib49y7r9nhzgpiq2989rqdp7rdz3n85502"; inherit dependencies buildDependencies features release verbose; }; synom_0_11_3_ = { dependencies?[], buildDependencies?[], features?[] }: mkRustCrate { crateName = "synom"; version = "0.11.3"; - src = fetchzip { - url = "https://crates.io/api/v1/crates/synom/0.11.3/download"; - sha256 = "1l6d1s9qjfp6ng2s2z8219igvlv7gyk8gby97sdykqc1r93d8rhc"; - name = "synom-0.11.3.tar.gz"; - }; + sha256 = "1l6d1s9qjfp6ng2s2z8219igvlv7gyk8gby97sdykqc1r93d8rhc"; inherit dependencies buildDependencies features release verbose; }; tempdir_0_3_5_ = { dependencies?[], buildDependencies?[], features?[] }: mkRustCrate { crateName = "tempdir"; version = "0.3.5"; - src = fetchzip { - url = "https://crates.io/api/v1/crates/tempdir/0.3.5/download"; - sha256 = "0rirc5prqppzgd15fm8ayan349lgk2k5iqdkrbwrwrv5pm4znsnz"; - name = "tempdir-0.3.5.tar.gz"; - }; + sha256 = "0rirc5prqppzgd15fm8ayan349lgk2k5iqdkrbwrwrv5pm4znsnz"; inherit dependencies buildDependencies features release verbose; }; termion_1_5_1_ = { dependencies?[], buildDependencies?[], features?[] }: mkRustCrate { crateName = "termion"; version = "1.5.1"; - src = fetchzip { - url = "https://crates.io/api/v1/crates/termion/1.5.1/download"; - sha256 = "02gq4vd8iws1f3gjrgrgpajsk2bk43nds5acbbb4s8dvrdvr8nf1"; - name = "termion-1.5.1.tar.gz"; - }; + sha256 = "02gq4vd8iws1f3gjrgrgpajsk2bk43nds5acbbb4s8dvrdvr8nf1"; inherit dependencies buildDependencies features release verbose; }; textwrap_0_9_0_ = { dependencies?[], buildDependencies?[], features?[] }: mkRustCrate { crateName = "textwrap"; version = "0.9.0"; - src = fetchzip { - url = "https://crates.io/api/v1/crates/textwrap/0.9.0/download"; - sha256 = "18jg79ndjlwndz01mlbh82kkr2arqm658yn5kwp65l5n1hz8w4yb"; - name = "textwrap-0.9.0.tar.gz"; - }; + sha256 = "18jg79ndjlwndz01mlbh82kkr2arqm658yn5kwp65l5n1hz8w4yb"; inherit dependencies buildDependencies features release verbose; }; thread_local_0_3_4_ = { dependencies?[], buildDependencies?[], features?[] }: mkRustCrate { crateName = "thread_local"; version = "0.3.4"; - src = fetchzip { - url = "https://crates.io/api/v1/crates/thread_local/0.3.4/download"; - sha256 = "1y6cwyhhx2nkz4b3dziwhqdvgq830z8wjp32b40pjd8r0hxqv2jr"; - name = "thread_local-0.3.4.tar.gz"; - }; + sha256 = "1y6cwyhhx2nkz4b3dziwhqdvgq830z8wjp32b40pjd8r0hxqv2jr"; inherit dependencies buildDependencies features release verbose; }; time_0_1_38_ = { dependencies?[], buildDependencies?[], features?[] }: mkRustCrate { crateName = "time"; version = "0.1.38"; - src = fetchzip { - url = "https://crates.io/api/v1/crates/time/0.1.38/download"; - sha256 = "1ws283vvz7c6jfiwn53rmc6kybapr4pjaahfxxrz232b0qzw7gcp"; - name = "time-0.1.38.tar.gz"; - }; + sha256 = "1ws283vvz7c6jfiwn53rmc6kybapr4pjaahfxxrz232b0qzw7gcp"; inherit dependencies buildDependencies features release verbose; }; toml_0_4_5_ = { dependencies?[], buildDependencies?[], features?[] }: mkRustCrate { crateName = "toml"; version = "0.4.5"; - src = fetchzip { - url = "https://crates.io/api/v1/crates/toml/0.4.5/download"; - sha256 = "06zxqhn3y58yzjfaykhcrvlf7p2dnn54kn3g4apmja3cn5b18lkk"; - name = "toml-0.4.5.tar.gz"; - }; + sha256 = "06zxqhn3y58yzjfaykhcrvlf7p2dnn54kn3g4apmja3cn5b18lkk"; inherit dependencies buildDependencies features release verbose; }; unicode_width_0_1_4_ = { dependencies?[], buildDependencies?[], features?[] }: mkRustCrate { crateName = "unicode-width"; version = "0.1.4"; - src = fetchzip { - url = "https://crates.io/api/v1/crates/unicode-width/0.1.4/download"; - sha256 = "1rp7a04icn9y5c0lm74nrd4py0rdl0af8bhdwq7g478n1xifpifl"; - name = "unicode-width-0.1.4.tar.gz"; - }; + sha256 = "1rp7a04icn9y5c0lm74nrd4py0rdl0af8bhdwq7g478n1xifpifl"; inherit dependencies buildDependencies features release verbose; }; unicode_xid_0_0_4_ = { dependencies?[], buildDependencies?[], features?[] }: mkRustCrate { crateName = "unicode-xid"; version = "0.0.4"; - src = fetchzip { - url = "https://crates.io/api/v1/crates/unicode-xid/0.0.4/download"; - sha256 = "1dc8wkkcd3s6534s5aw4lbjn8m67flkkbnajp5bl8408wdg8rh9v"; - name = "unicode-xid-0.0.4.tar.gz"; - }; + sha256 = "1dc8wkkcd3s6534s5aw4lbjn8m67flkkbnajp5bl8408wdg8rh9v"; inherit dependencies buildDependencies features release verbose; }; unreachable_1_0_0_ = { dependencies?[], buildDependencies?[], features?[] }: mkRustCrate { crateName = "unreachable"; version = "1.0.0"; - src = fetchzip { - url = "https://crates.io/api/v1/crates/unreachable/1.0.0/download"; - sha256 = "1am8czbk5wwr25gbp2zr007744fxjshhdqjz9liz7wl4pnv3whcf"; - name = "unreachable-1.0.0.tar.gz"; - }; + sha256 = "1am8czbk5wwr25gbp2zr007744fxjshhdqjz9liz7wl4pnv3whcf"; inherit dependencies buildDependencies features release verbose; }; utf8_ranges_1_0_0_ = { dependencies?[], buildDependencies?[], features?[] }: mkRustCrate { crateName = "utf8-ranges"; version = "1.0.0"; - src = fetchzip { - url = "https://crates.io/api/v1/crates/utf8-ranges/1.0.0/download"; - sha256 = "0rzmqprwjv9yp1n0qqgahgm24872x6c0xddfym5pfndy7a36vkn0"; - name = "utf8-ranges-1.0.0.tar.gz"; - }; + sha256 = "0rzmqprwjv9yp1n0qqgahgm24872x6c0xddfym5pfndy7a36vkn0"; inherit dependencies buildDependencies features release verbose; }; vcpkg_0_2_2_ = { dependencies?[], buildDependencies?[], features?[] }: mkRustCrate { crateName = "vcpkg"; version = "0.2.2"; - src = fetchzip { - url = "https://crates.io/api/v1/crates/vcpkg/0.2.2/download"; - sha256 = "1fl5j0ksnwrnsrf1b1a9lqbjgnajdipq0030vsbhx81mb7d9478a"; - name = "vcpkg-0.2.2.tar.gz"; - }; + sha256 = "1fl5j0ksnwrnsrf1b1a9lqbjgnajdipq0030vsbhx81mb7d9478a"; inherit dependencies buildDependencies features release verbose; }; vec_map_0_8_0_ = { dependencies?[], buildDependencies?[], features?[] }: mkRustCrate { crateName = "vec_map"; version = "0.8.0"; - src = fetchzip { - url = "https://crates.io/api/v1/crates/vec_map/0.8.0/download"; - sha256 = "07sgxp3cf1a4cxm9n3r27fcvqmld32bl2576mrcahnvm34j11xay"; - name = "vec_map-0.8.0.tar.gz"; - }; + sha256 = "07sgxp3cf1a4cxm9n3r27fcvqmld32bl2576mrcahnvm34j11xay"; inherit dependencies buildDependencies features release verbose; }; void_1_0_2_ = { dependencies?[], buildDependencies?[], features?[] }: mkRustCrate { crateName = "void"; version = "1.0.2"; - src = fetchzip { - url = "https://crates.io/api/v1/crates/void/1.0.2/download"; - sha256 = "0h1dm0dx8dhf56a83k68mijyxigqhizpskwxfdrs1drwv2cdclv3"; - name = "void-1.0.2.tar.gz"; - }; + sha256 = "0h1dm0dx8dhf56a83k68mijyxigqhizpskwxfdrs1drwv2cdclv3"; inherit dependencies buildDependencies features release verbose; }; winapi_0_2_8_ = { dependencies?[], buildDependencies?[], features?[] }: mkRustCrate { crateName = "winapi"; version = "0.2.8"; - src = fetchzip { - url = "https://crates.io/api/v1/crates/winapi/0.2.8/download"; - sha256 = "0a45b58ywf12vb7gvj6h3j264nydynmzyqz8d8rqxsj6icqv82as"; - name = "winapi-0.2.8.tar.gz"; - }; + sha256 = "0a45b58ywf12vb7gvj6h3j264nydynmzyqz8d8rqxsj6icqv82as"; inherit dependencies buildDependencies features release verbose; }; winapi_build_0_1_1_ = { dependencies?[], buildDependencies?[], features?[] }: mkRustCrate { crateName = "winapi-build"; version = "0.1.1"; - src = fetchzip { - url = "https://crates.io/api/v1/crates/winapi-build/0.1.1/download"; - sha256 = "1lxlpi87rkhxcwp2ykf1ldw3p108hwm24nywf3jfrvmff4rjhqga"; - name = "winapi-build-0.1.1.tar.gz"; - }; + sha256 = "1lxlpi87rkhxcwp2ykf1ldw3p108hwm24nywf3jfrvmff4rjhqga"; libName = "build"; inherit dependencies buildDependencies features release verbose; }; @@ -638,7 +401,7 @@ rec { bitflags_0_9_1 = bitflags_0_9_1_ { features = [ "example_generated" ]; }; - carnix_0_4_0 = carnix_0_4_0_ { + carnix_0_4_1 = carnix_0_4_1_ { dependencies = [ clap_2_27_1 env_logger_0_4_3 error_chain_0_11_0 log_0_3_8 nom_3_2_1 regex_0_2_2 rusqlite_0_12_0 serde_1_0_19 serde_derive_1_0_19 serde_json_1_0_5 tempdir_0_3_5 toml_0_4_5 ]; }; cc_1_0_3 = cc_1_0_3_ { diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index c13392b3fb34f8..2e43be21aa750a 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -6219,7 +6219,7 @@ with pkgs; mkRustCrate = callPackage ../build-support/rust/rust-utils.nix { }; - carnix = (callPackage ../build-support/rust/carnix.nix { }).carnix_0_4_0 rustc; + carnix = (callPackage ../build-support/rust/carnix.nix { }).carnix_0_4_1 rustc; rustPlatform = recurseIntoAttrs (makeRustPlatform rust); From 684612691c2c1f2361b3241e69605f417573d59f Mon Sep 17 00:00:00 2001 From: "pe@pijul.org" Date: Fri, 10 Nov 2017 11:39:45 +0100 Subject: [PATCH 09/47] Factorise regular expression --- pkgs/build-support/rust/rust-utils.nix | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/pkgs/build-support/rust/rust-utils.nix b/pkgs/build-support/rust/rust-utils.nix index 61867dba1afb31..af605d122898f4 100644 --- a/pkgs/build-support/rust/rust-utils.nix +++ b/pkgs/build-support/rust/rust-utils.nix @@ -121,12 +121,8 @@ let buildCrate = { crateName, crateVersion, buildDependencies, dependencies, EXTRA_LINK=$(sed -n "s/^cargo:rustc-link-lib=\(.*\)/\1/p" target/build/${crateName}.opt | tr '\n' ' ') EXTRA_LINK_SEARCH=$(sed -n "s/^cargo:rustc-link-search=\(.*\)/\1/p" target/build/${crateName}.opt | tr '\n' ' ') CRATENAME=$(echo ${crateName} | sed -e "s/\(.*\)-sys$/\1/" | tr '[:lower:]' '[:upper:]') - grep "^cargo:" target/build/${crateName}.opt \ - | grep -v "^cargo:rustc-" \ - | grep -v "^cargo:warning=" \ - | grep -v "^cargo:rerun-if-changed=" \ - | grep -v "^cargo:rerun-if-env-changed" \ - | sed -e "s/cargo:\([^=]*\)=\(.*\)/export DEP_$(echo $CRATENAME)_\U\1\E=\2/" > target/env + grep -P "^cargo:(?!(rustc-|warning=|rerun-if-changed=|rerun-if-env-changed))" target/build/${crateName}.opt \ + | sed -e "s/cargo:\([^=]*\)=\(.*\)/export DEP_$(echo $CRATENAME)_\U\1\E=\2/" > target/env set -e if [ -n "$(ls target/build/${crateName}.out)" ]; then From 1917e32cc57c19dcadaf8769082e1cf770f93a80 Mon Sep 17 00:00:00 2001 From: "pe@pijul.org" Date: Sat, 11 Nov 2017 08:37:18 +0100 Subject: [PATCH 10/47] Correction after reviews --- pkgs/build-support/rust/carnix.nix | 19 ++++++++++--------- pkgs/build-support/rust/rust-utils.nix | 22 +++++++++++++++------- pkgs/top-level/all-packages.nix | 4 ++-- 3 files changed, 27 insertions(+), 18 deletions(-) diff --git a/pkgs/build-support/rust/carnix.nix b/pkgs/build-support/rust/carnix.nix index b6b4aecbca532e..3fae079353a5cf 100644 --- a/pkgs/build-support/rust/carnix.nix +++ b/pkgs/build-support/rust/carnix.nix @@ -1,3 +1,9 @@ +# This file contains the nix expression necessary to compile carnix, a +# tool to generate nix expression from Rust Cargo.lock files. +# +# Starts with functions that output crates, and then calls them with +# the proper dependencies computed from the carnix's own Cargo.lock. + { pkgs, ... }: with pkgs; let release = true; @@ -14,7 +20,6 @@ let release = true; crateName = "ansi_term"; version = "0.9.0"; sha256 = "1vcd8m2hglrdi4zmqnkkz5zy3c73ifgii245k7vj6qr5dzpn9hij"; - libName = "ansi_term"; inherit dependencies buildDependencies features release verbose; }; atty_0_2_3_ = { dependencies?[], buildDependencies?[], features?[] }: mkRustCrate { @@ -48,10 +53,10 @@ let release = true; sha256 = "18h073l5jd88rx4qdr95fjddr9rk79pb1aqnshzdnw16cfmb9rws"; inherit dependencies buildDependencies features release verbose; }; - carnix_0_4_1_ = { dependencies?[], buildDependencies?[], features?[] }: mkRustCrate { + carnix_0_4_2_ = { dependencies?[], buildDependencies?[], features?[] }: mkRustCrate { crateName = "carnix"; - version = "0.4.1"; - sha256 = "1vp7f09njsssn78bhkyffl2fb2vc60hgxsx7pslgavyn7rr4d0ni"; + version = "0.4.2"; + sha256 = "1p13ba4wh19zkrrpba0vpgv47k2lx05pxh7nwcwc9yi710qs3mf3"; inherit dependencies buildDependencies features release verbose; }; cc_1_0_3_ = { dependencies?[], buildDependencies?[], features?[] }: mkRustCrate { @@ -166,7 +171,6 @@ let release = true; crateName = "memchr"; version = "1.0.2"; sha256 = "0dfb8ifl9nrc9kzgd5z91q6qg87sh285q1ih7xgrsglmqfav9lg7"; - libName = "memchr"; inherit dependencies buildDependencies features release verbose; }; nom_3_2_1_ = { dependencies?[], buildDependencies?[], features?[] }: mkRustCrate { @@ -211,7 +215,6 @@ let release = true; version = "0.1.1"; sha256 = "04s6yyzjca552hdaqlvqhp3vw0zqbc304md5czyd3axh56iry8wh"; libPath = "src/lib.rs"; - libName = "redox_termios"; inherit dependencies buildDependencies features release verbose; }; regex_0_2_2_ = { dependencies?[], buildDependencies?[], features?[] }: mkRustCrate { @@ -230,7 +233,6 @@ let release = true; crateName = "rusqlite"; version = "0.12.0"; sha256 = "18fybr7bd012j7axf4gzpphx0iil2amksdlab4dhhipjl6hyam6j"; - libName = "rusqlite"; inherit dependencies buildDependencies features release verbose; }; rustc_demangle_0_1_5_ = { dependencies?[], buildDependencies?[], features?[] }: mkRustCrate { @@ -249,7 +251,6 @@ let release = true; crateName = "serde_derive"; version = "1.0.19"; sha256 = "1fbr1zi25fgwy49mvpjq8g611mnv3vcd4n0mgca2lfdsp5n2nw5v"; - libName = "serde_derive"; procMacro = true; inherit dependencies buildDependencies features release verbose; }; @@ -401,7 +402,7 @@ rec { bitflags_0_9_1 = bitflags_0_9_1_ { features = [ "example_generated" ]; }; - carnix_0_4_1 = carnix_0_4_1_ { + carnix_0_4_2 = carnix_0_4_2_ { dependencies = [ clap_2_27_1 env_logger_0_4_3 error_chain_0_11_0 log_0_3_8 nom_3_2_1 regex_0_2_2 rusqlite_0_12_0 serde_1_0_19 serde_derive_1_0_19 serde_json_1_0_5 tempdir_0_3_5 toml_0_4_5 ]; }; cc_1_0_3 = cc_1_0_3_ { diff --git a/pkgs/build-support/rust/rust-utils.nix b/pkgs/build-support/rust/rust-utils.nix index af605d122898f4..9b1fc5ca4cb1c1 100644 --- a/pkgs/build-support/rust/rust-utils.nix +++ b/pkgs/build-support/rust/rust-utils.nix @@ -1,7 +1,8 @@ -# Copyright 2017 Pierre-Étienne Meunier +# Code for buildRustCrate, a Nix function that builds Rust code, just +# like Cargo, but using Nix instead. # -# This file is licensed under the Apache-2.0 license, and under the -# MIT license, at your convenience. +# This can be useful for deploying packages with NixOps, and to share +# binary dependencies between projects. { lib, buildPlatform, stdenv, pkgs }: @@ -265,7 +266,7 @@ let buildCrate = { crateName, crateVersion, buildDependencies, dependencies, ''; in -crate: rust: stdenv.mkDerivation rec { +crate: stdenv.mkDerivation rec { inherit (crate) crateName; @@ -273,12 +274,19 @@ crate: rust: stdenv.mkDerivation rec { crate.src else pkgs.fetchCrate { inherit (crate) crateName version sha256; }; - + rust = pkgs.rustc; release = if crate ? release then crate.release else false; name = "rust_${crate.crateName}-${crate.version}"; buildInputs = [ rust pkgs.ncurses ] ++ (lib.attrByPath ["buildInputs"] [] crate); - dependencies = builtins.map (dep: dep rust) (lib.attrByPath ["dependencies"] [] crate); - buildDependencies = builtins.map (dep: dep rust) (lib.attrByPath ["buildDependencies"] [] crate); + dependencies = + builtins.map + (dep: dep.overrideAttrs (attrs: { rust = rust; })) + (lib.attrByPath ["dependencies"] [] crate); + + buildDependencies = + builtins.map + (dep: dep.overrideAttrs (attrs: { rust = rust; })) + (lib.attrByPath ["buildDependencies"] [] crate); completeDeps = builtins.foldl' (comp: dep: if lib.lists.any (x: x == comp) dep.completeDeps then comp ++ dep.complete else comp) dependencies dependencies; completeBuildDeps = builtins.foldl' (comp: dep: if lib.lists.any (x: x == comp) dep.completeBuildDeps then comp ++ dep.complete else comp) buildDependencies buildDependencies; diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 2e43be21aa750a..ece553d6aac649 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -6217,9 +6217,9 @@ with pkgs; rust = callPackage ../development/compilers/rust { }; inherit (rust) cargo rustc; - mkRustCrate = callPackage ../build-support/rust/rust-utils.nix { }; + buildRustCrate = callPackage ../build-support/rust/rust-utils.nix { }; - carnix = (callPackage ../build-support/rust/carnix.nix { }).carnix_0_4_1 rustc; + carnix = (callPackage ../build-support/rust/carnix.nix { }).carnix_0_4_2 rustc; rustPlatform = recurseIntoAttrs (makeRustPlatform rust); From 655f44a6d7483f9bde41c03cd5e0fd83ae291dc1 Mon Sep 17 00:00:00 2001 From: "pe@pijul.org" Date: Sat, 11 Nov 2017 09:20:11 +0100 Subject: [PATCH 11/47] Carnix 0.4.3 (including calls to buildRustCrate instead of mkRustCrate) --- pkgs/build-support/rust/carnix.nix | 124 ++++++++++++++--------------- pkgs/top-level/all-packages.nix | 2 +- 2 files changed, 63 insertions(+), 63 deletions(-) diff --git a/pkgs/build-support/rust/carnix.nix b/pkgs/build-support/rust/carnix.nix index 3fae079353a5cf..adcf2184bed2f7 100644 --- a/pkgs/build-support/rust/carnix.nix +++ b/pkgs/build-support/rust/carnix.nix @@ -8,7 +8,7 @@ with pkgs; let release = true; verbose = true; - aho_corasick_0_6_3_ = { dependencies?[], buildDependencies?[], features?[] }: mkRustCrate { + aho_corasick_0_6_3_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate { crateName = "aho-corasick"; version = "0.6.3"; sha256 = "1cpqzf6acj8lm06z3f1cg41wn6c2n9l3v49nh0dvimv4055qib6k"; @@ -16,68 +16,68 @@ let release = true; crateBin = [ { name = "aho-corasick-dot"; } ]; inherit dependencies buildDependencies features release verbose; }; - ansi_term_0_9_0_ = { dependencies?[], buildDependencies?[], features?[] }: mkRustCrate { + ansi_term_0_9_0_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate { crateName = "ansi_term"; version = "0.9.0"; sha256 = "1vcd8m2hglrdi4zmqnkkz5zy3c73ifgii245k7vj6qr5dzpn9hij"; inherit dependencies buildDependencies features release verbose; }; - atty_0_2_3_ = { dependencies?[], buildDependencies?[], features?[] }: mkRustCrate { + atty_0_2_3_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate { crateName = "atty"; version = "0.2.3"; sha256 = "0zl0cjfgarp5y78nd755lpki5bbkj4hgmi88v265m543yg29i88f"; inherit dependencies buildDependencies features release verbose; }; - backtrace_0_3_3_ = { dependencies?[], buildDependencies?[], features?[] }: mkRustCrate { + backtrace_0_3_3_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate { crateName = "backtrace"; version = "0.3.3"; sha256 = "0invfdxkj85v8zyrjs3amfxjdk2a36x8irq7wq7kny6q49hh8y0z"; inherit dependencies buildDependencies features release verbose; }; - backtrace_sys_0_1_16_ = { dependencies?[], buildDependencies?[], features?[] }: mkRustCrate { + backtrace_sys_0_1_16_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate { crateName = "backtrace-sys"; version = "0.1.16"; sha256 = "1cn2c8q3dn06crmnk0p62czkngam4l8nf57wy33nz1y5g25pszwy"; build = "build.rs"; inherit dependencies buildDependencies features release verbose; }; - bitflags_0_7_0_ = { dependencies?[], buildDependencies?[], features?[] }: mkRustCrate { + bitflags_0_7_0_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate { crateName = "bitflags"; version = "0.7.0"; sha256 = "1hr72xg5slm0z4pxs2hiy4wcyx3jva70h58b7mid8l0a4c8f7gn5"; inherit dependencies buildDependencies features release verbose; }; - bitflags_0_9_1_ = { dependencies?[], buildDependencies?[], features?[] }: mkRustCrate { + bitflags_0_9_1_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate { crateName = "bitflags"; version = "0.9.1"; sha256 = "18h073l5jd88rx4qdr95fjddr9rk79pb1aqnshzdnw16cfmb9rws"; inherit dependencies buildDependencies features release verbose; }; - carnix_0_4_2_ = { dependencies?[], buildDependencies?[], features?[] }: mkRustCrate { + carnix_0_4_3_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate { crateName = "carnix"; - version = "0.4.2"; - sha256 = "1p13ba4wh19zkrrpba0vpgv47k2lx05pxh7nwcwc9yi710qs3mf3"; + version = "0.4.3"; + sha256 = "1q7gzkvw942crrfych8l8ygkl9fslz7k0jnkhs9xjzglbd166y4p"; inherit dependencies buildDependencies features release verbose; }; - cc_1_0_3_ = { dependencies?[], buildDependencies?[], features?[] }: mkRustCrate { + cc_1_0_3_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate { crateName = "cc"; version = "1.0.3"; sha256 = "193pwqgh79w6k0k29svyds5nnlrwx44myqyrw605d5jj4yk2zmpr"; inherit dependencies buildDependencies features release verbose; }; - cfg_if_0_1_2_ = { dependencies?[], buildDependencies?[], features?[] }: mkRustCrate { + cfg_if_0_1_2_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate { crateName = "cfg-if"; version = "0.1.2"; sha256 = "0x06hvrrqy96m97593823vvxcgvjaxckghwyy2jcyc8qc7c6cyhi"; inherit dependencies buildDependencies features release verbose; }; - clap_2_27_1_ = { dependencies?[], buildDependencies?[], features?[] }: mkRustCrate { + clap_2_27_1_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate { crateName = "clap"; version = "2.27.1"; sha256 = "0zx8rskqfl3iqn3vlyxzyd99hpifa7bm871akhxpz9wvrm688zaj"; inherit dependencies buildDependencies features release verbose; }; - dbghelp_sys_0_2_0_ = { dependencies?[], buildDependencies?[], features?[] }: mkRustCrate { + dbghelp_sys_0_2_0_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate { crateName = "dbghelp-sys"; version = "0.2.0"; sha256 = "0ylpi3bbiy233m57hnisn1df1v0lbl7nsxn34b0anzsgg440hqpq"; @@ -85,43 +85,43 @@ let release = true; build = "build.rs"; inherit dependencies buildDependencies features release verbose; }; - dtoa_0_4_2_ = { dependencies?[], buildDependencies?[], features?[] }: mkRustCrate { + dtoa_0_4_2_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate { crateName = "dtoa"; version = "0.4.2"; sha256 = "1bxsh6fags7nr36vlz07ik2a1rzyipc8x1y30kjk832hf2pzadmw"; inherit dependencies buildDependencies features release verbose; }; - env_logger_0_4_3_ = { dependencies?[], buildDependencies?[], features?[] }: mkRustCrate { + env_logger_0_4_3_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate { crateName = "env_logger"; version = "0.4.3"; sha256 = "0nrx04p4xa86d5kc7aq4fwvipbqji9cmgy449h47nc9f1chafhgg"; inherit dependencies buildDependencies features release verbose; }; - error_chain_0_11_0_ = { dependencies?[], buildDependencies?[], features?[] }: mkRustCrate { + error_chain_0_11_0_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate { crateName = "error-chain"; version = "0.11.0"; sha256 = "19nz17q6dzp0mx2jhh9qbj45gkvvgcl7zq9z2ai5a8ihbisfj6d7"; inherit dependencies buildDependencies features release verbose; }; - fuchsia_zircon_0_2_1_ = { dependencies?[], buildDependencies?[], features?[] }: mkRustCrate { + fuchsia_zircon_0_2_1_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate { crateName = "fuchsia-zircon"; version = "0.2.1"; sha256 = "0yd4rd7ql1vdr349p6vgq2dnwmpylky1kjp8g1zgvp250jxrhddb"; inherit dependencies buildDependencies features release verbose; }; - fuchsia_zircon_sys_0_2_0_ = { dependencies?[], buildDependencies?[], features?[] }: mkRustCrate { + fuchsia_zircon_sys_0_2_0_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate { crateName = "fuchsia-zircon-sys"; version = "0.2.0"; sha256 = "1yrqsrjwlhl3di6prxf5xmyd82gyjaysldbka5wwk83z11mpqh4w"; inherit dependencies buildDependencies features release verbose; }; - itoa_0_3_4_ = { dependencies?[], buildDependencies?[], features?[] }: mkRustCrate { + itoa_0_3_4_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate { crateName = "itoa"; version = "0.3.4"; sha256 = "1nfkzz6vrgj0d9l3yzjkkkqzdgs68y294fjdbl7jq118qi8xc9d9"; inherit dependencies buildDependencies features release verbose; }; - kernel32_sys_0_2_2_ = { dependencies?[], buildDependencies?[], features?[] }: mkRustCrate { + kernel32_sys_0_2_2_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate { crateName = "kernel32-sys"; version = "0.2.2"; sha256 = "1lrw1hbinyvr6cp28g60z97w32w8vsk6pahk64pmrv2fmby8srfj"; @@ -129,19 +129,19 @@ let release = true; build = "build.rs"; inherit dependencies buildDependencies features release verbose; }; - lazy_static_0_2_9_ = { dependencies?[], buildDependencies?[], features?[] }: mkRustCrate { + lazy_static_0_2_9_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate { crateName = "lazy_static"; version = "0.2.9"; sha256 = "08ldzr5292y3hvi6l6v8l4i6v95lm1aysmnfln65h10sqrfh6iw7"; inherit dependencies buildDependencies features release verbose; }; - libc_0_2_33_ = { dependencies?[], buildDependencies?[], features?[] }: mkRustCrate { + libc_0_2_33_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate { crateName = "libc"; version = "0.2.33"; sha256 = "1l7synziccnvarsq2kk22vps720ih6chmn016bhr2bq54hblbnl1"; inherit dependencies buildDependencies features release verbose; }; - libsqlite3_sys_0_8_1_ = { dependencies?[], buildDependencies?[], features?[] }: mkRustCrate { + libsqlite3_sys_0_8_1_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate { crateName = "libsqlite3-sys"; version = "0.8.1"; sha256 = "131bjlxzni2aw3048p7sj8cs3v0jpkb3fxdpc5i7ndyhvpz3gdza"; @@ -149,226 +149,226 @@ let release = true; build = "build.rs"; inherit dependencies buildDependencies features release verbose; }; - linked_hash_map_0_4_2_ = { dependencies?[], buildDependencies?[], features?[] }: mkRustCrate { + linked_hash_map_0_4_2_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate { crateName = "linked-hash-map"; version = "0.4.2"; sha256 = "04da208h6jb69f46j37jnvsw2i1wqplglp4d61csqcrhh83avbgl"; inherit dependencies buildDependencies features release verbose; }; - log_0_3_8_ = { dependencies?[], buildDependencies?[], features?[] }: mkRustCrate { + log_0_3_8_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate { crateName = "log"; version = "0.3.8"; sha256 = "1c43z4z85sxrsgir4s1hi84558ab5ic7jrn5qgmsiqcv90vvn006"; inherit dependencies buildDependencies features release verbose; }; - lru_cache_0_1_1_ = { dependencies?[], buildDependencies?[], features?[] }: mkRustCrate { + lru_cache_0_1_1_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate { crateName = "lru-cache"; version = "0.1.1"; sha256 = "1hl6kii1g54sq649gnscv858mmw7a02xj081l4vcgvrswdi2z8fw"; inherit dependencies buildDependencies features release verbose; }; - memchr_1_0_2_ = { dependencies?[], buildDependencies?[], features?[] }: mkRustCrate { + memchr_1_0_2_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate { crateName = "memchr"; version = "1.0.2"; sha256 = "0dfb8ifl9nrc9kzgd5z91q6qg87sh285q1ih7xgrsglmqfav9lg7"; inherit dependencies buildDependencies features release verbose; }; - nom_3_2_1_ = { dependencies?[], buildDependencies?[], features?[] }: mkRustCrate { + nom_3_2_1_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate { crateName = "nom"; version = "3.2.1"; sha256 = "1vcllxrz9hdw6j25kn020ka3psz1vkaqh1hm3yfak2240zrxgi07"; inherit dependencies buildDependencies features release verbose; }; - num_traits_0_1_40_ = { dependencies?[], buildDependencies?[], features?[] }: mkRustCrate { + num_traits_0_1_40_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate { crateName = "num-traits"; version = "0.1.40"; sha256 = "1fr8ghp4i97q3agki54i0hpmqxv3s65i2mqd1pinc7w7arc3fplw"; inherit dependencies buildDependencies features release verbose; }; - pkg_config_0_3_9_ = { dependencies?[], buildDependencies?[], features?[] }: mkRustCrate { + pkg_config_0_3_9_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate { crateName = "pkg-config"; version = "0.3.9"; sha256 = "06k8fxgrsrxj8mjpjcq1n7mn2p1shpxif4zg9y5h09c7vy20s146"; inherit dependencies buildDependencies features release verbose; }; - quote_0_3_15_ = { dependencies?[], buildDependencies?[], features?[] }: mkRustCrate { + quote_0_3_15_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate { crateName = "quote"; version = "0.3.15"; sha256 = "09il61jv4kd1360spaj46qwyl21fv1qz18fsv2jra8wdnlgl5jsg"; inherit dependencies buildDependencies features release verbose; }; - rand_0_3_18_ = { dependencies?[], buildDependencies?[], features?[] }: mkRustCrate { + rand_0_3_18_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate { crateName = "rand"; version = "0.3.18"; sha256 = "15d7c3myn968dzjs0a2pgv58hzdavxnq6swgj032lw2v966ir4xv"; inherit dependencies buildDependencies features release verbose; }; - redox_syscall_0_1_31_ = { dependencies?[], buildDependencies?[], features?[] }: mkRustCrate { + redox_syscall_0_1_31_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate { crateName = "redox_syscall"; version = "0.1.31"; sha256 = "0kipd9qslzin4fgj4jrxv6yz5l3l71gnbd7fq1jhk2j7f2sq33j4"; libName = "syscall"; inherit dependencies buildDependencies features release verbose; }; - redox_termios_0_1_1_ = { dependencies?[], buildDependencies?[], features?[] }: mkRustCrate { + redox_termios_0_1_1_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate { crateName = "redox_termios"; version = "0.1.1"; sha256 = "04s6yyzjca552hdaqlvqhp3vw0zqbc304md5czyd3axh56iry8wh"; libPath = "src/lib.rs"; inherit dependencies buildDependencies features release verbose; }; - regex_0_2_2_ = { dependencies?[], buildDependencies?[], features?[] }: mkRustCrate { + regex_0_2_2_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate { crateName = "regex"; version = "0.2.2"; sha256 = "1f1zrrynfylg0vcfyfp60bybq4rp5g1yk2k7lc7fyz7mmc7k2qr7"; inherit dependencies buildDependencies features release verbose; }; - regex_syntax_0_4_1_ = { dependencies?[], buildDependencies?[], features?[] }: mkRustCrate { + regex_syntax_0_4_1_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate { crateName = "regex-syntax"; version = "0.4.1"; sha256 = "01yrsm68lj86ad1whgg1z95c2pfsvv58fz8qjcgw7mlszc0c08ls"; inherit dependencies buildDependencies features release verbose; }; - rusqlite_0_12_0_ = { dependencies?[], buildDependencies?[], features?[] }: mkRustCrate { + rusqlite_0_12_0_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate { crateName = "rusqlite"; version = "0.12.0"; sha256 = "18fybr7bd012j7axf4gzpphx0iil2amksdlab4dhhipjl6hyam6j"; inherit dependencies buildDependencies features release verbose; }; - rustc_demangle_0_1_5_ = { dependencies?[], buildDependencies?[], features?[] }: mkRustCrate { + rustc_demangle_0_1_5_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate { crateName = "rustc-demangle"; version = "0.1.5"; sha256 = "096kkcx9j747700fhxj1s4rlwkj21pqjmvj64psdj6bakb2q13nc"; inherit dependencies buildDependencies features release verbose; }; - serde_1_0_19_ = { dependencies?[], buildDependencies?[], features?[] }: mkRustCrate { + serde_1_0_19_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate { crateName = "serde"; version = "1.0.19"; sha256 = "0dfhkkbrpr0vr1b2hhbddizb8bq4phi5ck0jhy3yx31bc2byb1l1"; inherit dependencies buildDependencies features release verbose; }; - serde_derive_1_0_19_ = { dependencies?[], buildDependencies?[], features?[] }: mkRustCrate { + serde_derive_1_0_19_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate { crateName = "serde_derive"; version = "1.0.19"; sha256 = "1fbr1zi25fgwy49mvpjq8g611mnv3vcd4n0mgca2lfdsp5n2nw5v"; procMacro = true; inherit dependencies buildDependencies features release verbose; }; - serde_derive_internals_0_17_0_ = { dependencies?[], buildDependencies?[], features?[] }: mkRustCrate { + serde_derive_internals_0_17_0_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate { crateName = "serde_derive_internals"; version = "0.17.0"; sha256 = "1g1j3v6pj9wbcz3v3w4smjpwrcdwjicmf6yd5cbai04as9iwhw74"; inherit dependencies buildDependencies features release verbose; }; - serde_json_1_0_5_ = { dependencies?[], buildDependencies?[], features?[] }: mkRustCrate { + serde_json_1_0_5_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate { crateName = "serde_json"; version = "1.0.5"; sha256 = "1yka3aa2gfi30415jpf0935k54r08jhyw6r7rjz2nv1kqgbw2brs"; inherit dependencies buildDependencies features release verbose; }; - strsim_0_6_0_ = { dependencies?[], buildDependencies?[], features?[] }: mkRustCrate { + strsim_0_6_0_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate { crateName = "strsim"; version = "0.6.0"; sha256 = "1lz85l6y68hr62lv4baww29yy7g8pg20dlr0lbaswxmmcb0wl7gd"; inherit dependencies buildDependencies features release verbose; }; - syn_0_11_11_ = { dependencies?[], buildDependencies?[], features?[] }: mkRustCrate { + syn_0_11_11_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate { crateName = "syn"; version = "0.11.11"; sha256 = "0yw8ng7x1dn5a6ykg0ib49y7r9nhzgpiq2989rqdp7rdz3n85502"; inherit dependencies buildDependencies features release verbose; }; - synom_0_11_3_ = { dependencies?[], buildDependencies?[], features?[] }: mkRustCrate { + synom_0_11_3_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate { crateName = "synom"; version = "0.11.3"; sha256 = "1l6d1s9qjfp6ng2s2z8219igvlv7gyk8gby97sdykqc1r93d8rhc"; inherit dependencies buildDependencies features release verbose; }; - tempdir_0_3_5_ = { dependencies?[], buildDependencies?[], features?[] }: mkRustCrate { + tempdir_0_3_5_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate { crateName = "tempdir"; version = "0.3.5"; sha256 = "0rirc5prqppzgd15fm8ayan349lgk2k5iqdkrbwrwrv5pm4znsnz"; inherit dependencies buildDependencies features release verbose; }; - termion_1_5_1_ = { dependencies?[], buildDependencies?[], features?[] }: mkRustCrate { + termion_1_5_1_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate { crateName = "termion"; version = "1.5.1"; sha256 = "02gq4vd8iws1f3gjrgrgpajsk2bk43nds5acbbb4s8dvrdvr8nf1"; inherit dependencies buildDependencies features release verbose; }; - textwrap_0_9_0_ = { dependencies?[], buildDependencies?[], features?[] }: mkRustCrate { + textwrap_0_9_0_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate { crateName = "textwrap"; version = "0.9.0"; sha256 = "18jg79ndjlwndz01mlbh82kkr2arqm658yn5kwp65l5n1hz8w4yb"; inherit dependencies buildDependencies features release verbose; }; - thread_local_0_3_4_ = { dependencies?[], buildDependencies?[], features?[] }: mkRustCrate { + thread_local_0_3_4_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate { crateName = "thread_local"; version = "0.3.4"; sha256 = "1y6cwyhhx2nkz4b3dziwhqdvgq830z8wjp32b40pjd8r0hxqv2jr"; inherit dependencies buildDependencies features release verbose; }; - time_0_1_38_ = { dependencies?[], buildDependencies?[], features?[] }: mkRustCrate { + time_0_1_38_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate { crateName = "time"; version = "0.1.38"; sha256 = "1ws283vvz7c6jfiwn53rmc6kybapr4pjaahfxxrz232b0qzw7gcp"; inherit dependencies buildDependencies features release verbose; }; - toml_0_4_5_ = { dependencies?[], buildDependencies?[], features?[] }: mkRustCrate { + toml_0_4_5_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate { crateName = "toml"; version = "0.4.5"; sha256 = "06zxqhn3y58yzjfaykhcrvlf7p2dnn54kn3g4apmja3cn5b18lkk"; inherit dependencies buildDependencies features release verbose; }; - unicode_width_0_1_4_ = { dependencies?[], buildDependencies?[], features?[] }: mkRustCrate { + unicode_width_0_1_4_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate { crateName = "unicode-width"; version = "0.1.4"; sha256 = "1rp7a04icn9y5c0lm74nrd4py0rdl0af8bhdwq7g478n1xifpifl"; inherit dependencies buildDependencies features release verbose; }; - unicode_xid_0_0_4_ = { dependencies?[], buildDependencies?[], features?[] }: mkRustCrate { + unicode_xid_0_0_4_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate { crateName = "unicode-xid"; version = "0.0.4"; sha256 = "1dc8wkkcd3s6534s5aw4lbjn8m67flkkbnajp5bl8408wdg8rh9v"; inherit dependencies buildDependencies features release verbose; }; - unreachable_1_0_0_ = { dependencies?[], buildDependencies?[], features?[] }: mkRustCrate { + unreachable_1_0_0_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate { crateName = "unreachable"; version = "1.0.0"; sha256 = "1am8czbk5wwr25gbp2zr007744fxjshhdqjz9liz7wl4pnv3whcf"; inherit dependencies buildDependencies features release verbose; }; - utf8_ranges_1_0_0_ = { dependencies?[], buildDependencies?[], features?[] }: mkRustCrate { + utf8_ranges_1_0_0_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate { crateName = "utf8-ranges"; version = "1.0.0"; sha256 = "0rzmqprwjv9yp1n0qqgahgm24872x6c0xddfym5pfndy7a36vkn0"; inherit dependencies buildDependencies features release verbose; }; - vcpkg_0_2_2_ = { dependencies?[], buildDependencies?[], features?[] }: mkRustCrate { + vcpkg_0_2_2_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate { crateName = "vcpkg"; version = "0.2.2"; sha256 = "1fl5j0ksnwrnsrf1b1a9lqbjgnajdipq0030vsbhx81mb7d9478a"; inherit dependencies buildDependencies features release verbose; }; - vec_map_0_8_0_ = { dependencies?[], buildDependencies?[], features?[] }: mkRustCrate { + vec_map_0_8_0_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate { crateName = "vec_map"; version = "0.8.0"; sha256 = "07sgxp3cf1a4cxm9n3r27fcvqmld32bl2576mrcahnvm34j11xay"; inherit dependencies buildDependencies features release verbose; }; - void_1_0_2_ = { dependencies?[], buildDependencies?[], features?[] }: mkRustCrate { + void_1_0_2_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate { crateName = "void"; version = "1.0.2"; sha256 = "0h1dm0dx8dhf56a83k68mijyxigqhizpskwxfdrs1drwv2cdclv3"; inherit dependencies buildDependencies features release verbose; }; - winapi_0_2_8_ = { dependencies?[], buildDependencies?[], features?[] }: mkRustCrate { + winapi_0_2_8_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate { crateName = "winapi"; version = "0.2.8"; sha256 = "0a45b58ywf12vb7gvj6h3j264nydynmzyqz8d8rqxsj6icqv82as"; inherit dependencies buildDependencies features release verbose; }; - winapi_build_0_1_1_ = { dependencies?[], buildDependencies?[], features?[] }: mkRustCrate { + winapi_build_0_1_1_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate { crateName = "winapi-build"; version = "0.1.1"; sha256 = "1lxlpi87rkhxcwp2ykf1ldw3p108hwm24nywf3jfrvmff4rjhqga"; @@ -402,7 +402,7 @@ rec { bitflags_0_9_1 = bitflags_0_9_1_ { features = [ "example_generated" ]; }; - carnix_0_4_2 = carnix_0_4_2_ { + carnix_0_4_3 = carnix_0_4_3_ { dependencies = [ clap_2_27_1 env_logger_0_4_3 error_chain_0_11_0 log_0_3_8 nom_3_2_1 regex_0_2_2 rusqlite_0_12_0 serde_1_0_19 serde_derive_1_0_19 serde_json_1_0_5 tempdir_0_3_5 toml_0_4_5 ]; }; cc_1_0_3 = cc_1_0_3_ { diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index ece553d6aac649..8e6e3a355594ef 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -6219,7 +6219,7 @@ with pkgs; buildRustCrate = callPackage ../build-support/rust/rust-utils.nix { }; - carnix = (callPackage ../build-support/rust/carnix.nix { }).carnix_0_4_2 rustc; + carnix = (callPackage ../build-support/rust/carnix.nix { }).carnix_0_4_3; rustPlatform = recurseIntoAttrs (makeRustPlatform rust); From cf4ec94a161ec4b600d014726cab45faf8ee1935 Mon Sep 17 00:00:00 2001 From: "pe@pijul.org" Date: Sat, 11 Nov 2017 09:20:36 +0100 Subject: [PATCH 12/47] Documenting buildRustCrate --- doc/languages-frameworks/rust.md | 79 +++++++++++++++++++++++++++++++- 1 file changed, 78 insertions(+), 1 deletion(-) diff --git a/doc/languages-frameworks/rust.md b/doc/languages-frameworks/rust.md index 276b5496fbb8ae..7571377e089e76 100644 --- a/doc/languages-frameworks/rust.md +++ b/doc/languages-frameworks/rust.md @@ -19,7 +19,7 @@ For daily builds (beta and nightly) use either rustup from nixpkgs or use the [Rust nightlies overlay](#using-the-rust-nightlies-overlay). -## Packaging Rust applications +## Compiling Rust applications with Cargo Rust applications are packaged by using the `buildRustPackage` helper from `rustPlatform`: @@ -57,6 +57,83 @@ checksum can be then take from the failed build. To install crates with nix there is also an experimental project called [nixcrates](https://github.com/fractalide/nixcrates). +## Compiling Rust crates using Nix instead of Cargo + +When run, `cargo build` produces a file called `Cargo.lock`, +containing pinned versions of all dependencies. Nixpkgs contains a +tool called `carnix` (`nix-env -iA nixos.carnix`), which can be used +to turn a `Cargo.lock` into a Nix expression. + +That Nix expression calls `rustc` directly (hence bypassing Cargo), +and can be used to compile a crate and all its dependencies. Here is +an example for a minimal `hello` crate: + + + $ cargo new hello + $ cd hello + $ cargo build + Compiling hello v0.1.0 (file:///tmp/hello) + Finished dev [unoptimized + debuginfo] target(s) in 0.20 secs + $ carnix -o hello.nix --src ./. Cargo.lock + $ nix-build hello.nix + +Now, the file produced by the call to `carnix`, called `hello.nix`, looks like: + +``` +with import {}; +let release = true; + verbose = true; + hello_0_1_0_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate { + crateName = "hello"; + version = "0.1.0"; + src = ./.; + inherit dependencies buildDependencies features release verbose; + }; + +in +rec { + hello_0_1_0 = hello_0_1_0_ {}; +} +``` + +In particular, note that the argument given as `--src` is copied +verbatim to the source. If we look at a more complicated +dependencies, for instance by adding a single line `libc="*"` to our +`Cargo.toml`, we get the following `hello.nix`: + +``` +with import {}; +let release = true; + verbose = true; + hello_0_1_0_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate { + crateName = "hello"; + version = "0.1.0"; + src = ./.; + inherit dependencies buildDependencies features release verbose; + }; + libc_0_2_33_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate { + crateName = "libc"; + version = "0.2.33"; + sha256 = "1l7synziccnvarsq2kk22vps720ih6chmn016bhr2bq54hblbnl1"; + inherit dependencies buildDependencies features release verbose; + }; + +in +rec { + hello_0_1_0 = hello_0_1_0_ { + dependencies = [ libc_0_2_33 ]; + }; + libc_0_2_33 = libc_0_2_33_ { + features = [ "use_std" ]; + }; +} +``` + +Here, the `libc` crate has no `src` attribute, so `buildRustCrate` +will fetch it from [crates.io](https://crates.io). A `sha256` +attribute is still needed for Nix purity. + + ## Using the Rust nightlies overlay Mozilla provides an overlay for nixpkgs to bring a nightly version of Rust into scope. From a694f61883ed8e85fa135d6e9250c3d480c4c8ae Mon Sep 17 00:00:00 2001 From: "pe@pijul.org" Date: Sat, 11 Nov 2017 10:14:32 +0100 Subject: [PATCH 13/47] Adding myself in maintainers --- lib/maintainers.nix | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/maintainers.nix b/lib/maintainers.nix index 797adae97b15cb..7713fe4169fede 100644 --- a/lib/maintainers.nix +++ b/lib/maintainers.nix @@ -493,6 +493,7 @@ plcplc = "Philip Lykke Carlsen "; plumps = "Maksim Bronsky Date: Sun, 12 Nov 2017 07:13:39 +0100 Subject: [PATCH 14/47] Run `cargo build` again after adding dependencies --- doc/languages-frameworks/rust.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/doc/languages-frameworks/rust.md b/doc/languages-frameworks/rust.md index 7571377e089e76..3f9e79829b8d4d 100644 --- a/doc/languages-frameworks/rust.md +++ b/doc/languages-frameworks/rust.md @@ -99,7 +99,9 @@ rec { In particular, note that the argument given as `--src` is copied verbatim to the source. If we look at a more complicated dependencies, for instance by adding a single line `libc="*"` to our -`Cargo.toml`, we get the following `hello.nix`: +`Cargo.toml`, we first need to run `cargo build` to update the +`Cargo.lock`. Then, `carnix` needs to be run again, and produces the +following nix file: ``` with import {}; From ca81cadd173b133da5d7edec96648254f3f33c85 Mon Sep 17 00:00:00 2001 From: "pe@pijul.org" Date: Sun, 12 Nov 2017 10:31:00 +0100 Subject: [PATCH 15/47] Carnix 0.4.4 --- pkgs/build-support/rust/carnix.nix | 9 ++++----- pkgs/top-level/all-packages.nix | 2 +- 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/pkgs/build-support/rust/carnix.nix b/pkgs/build-support/rust/carnix.nix index adcf2184bed2f7..41e0c14b2062ab 100644 --- a/pkgs/build-support/rust/carnix.nix +++ b/pkgs/build-support/rust/carnix.nix @@ -53,10 +53,10 @@ let release = true; sha256 = "18h073l5jd88rx4qdr95fjddr9rk79pb1aqnshzdnw16cfmb9rws"; inherit dependencies buildDependencies features release verbose; }; - carnix_0_4_3_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate { + carnix_0_4_4_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate { crateName = "carnix"; - version = "0.4.3"; - sha256 = "1q7gzkvw942crrfych8l8ygkl9fslz7k0jnkhs9xjzglbd166y4p"; + version = "0.4.4"; + sha256 = "0p68sgslqqrk6lwzl9c5s89i1mcsm6m8489r1li39a3iqm77mvmx"; inherit dependencies buildDependencies features release verbose; }; cc_1_0_3_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate { @@ -145,7 +145,6 @@ let release = true; crateName = "libsqlite3-sys"; version = "0.8.1"; sha256 = "131bjlxzni2aw3048p7sj8cs3v0jpkb3fxdpc5i7ndyhvpz3gdza"; - buildInputs = [ pkgs.sqlite pkgs.pkgconfig ]; build = "build.rs"; inherit dependencies buildDependencies features release verbose; }; @@ -402,7 +401,7 @@ rec { bitflags_0_9_1 = bitflags_0_9_1_ { features = [ "example_generated" ]; }; - carnix_0_4_3 = carnix_0_4_3_ { + carnix_0_4_4 = carnix_0_4_4_ { dependencies = [ clap_2_27_1 env_logger_0_4_3 error_chain_0_11_0 log_0_3_8 nom_3_2_1 regex_0_2_2 rusqlite_0_12_0 serde_1_0_19 serde_derive_1_0_19 serde_json_1_0_5 tempdir_0_3_5 toml_0_4_5 ]; }; cc_1_0_3 = cc_1_0_3_ { diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 8e6e3a355594ef..8616687510c989 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -6219,7 +6219,7 @@ with pkgs; buildRustCrate = callPackage ../build-support/rust/rust-utils.nix { }; - carnix = (callPackage ../build-support/rust/carnix.nix { }).carnix_0_4_3; + carnix = (callPackage ../build-support/rust/carnix.nix { }).carnix_0_4_4; rustPlatform = recurseIntoAttrs (makeRustPlatform rust); From b4c5585d92dce9fc2aabf728e9758709cf2e8909 Mon Sep 17 00:00:00 2001 From: "pe@pijul.org" Date: Sun, 12 Nov 2017 11:09:08 +0100 Subject: [PATCH 16/47] Carnix 0.4.5 + dependencies on sqlite and pkgconfig --- pkgs/build-support/rust/carnix.nix | 9 +++++---- pkgs/top-level/all-packages.nix | 2 +- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/pkgs/build-support/rust/carnix.nix b/pkgs/build-support/rust/carnix.nix index 41e0c14b2062ab..2055145b6b2470 100644 --- a/pkgs/build-support/rust/carnix.nix +++ b/pkgs/build-support/rust/carnix.nix @@ -53,10 +53,10 @@ let release = true; sha256 = "18h073l5jd88rx4qdr95fjddr9rk79pb1aqnshzdnw16cfmb9rws"; inherit dependencies buildDependencies features release verbose; }; - carnix_0_4_4_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate { + carnix_0_4_5_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate { crateName = "carnix"; - version = "0.4.4"; - sha256 = "0p68sgslqqrk6lwzl9c5s89i1mcsm6m8489r1li39a3iqm77mvmx"; + version = "0.4.5"; + sha256 = "1j1d9rhgiajb92myg7asbdpz7w6hkjs6zwbphiv40x47g8ff9akn"; inherit dependencies buildDependencies features release verbose; }; cc_1_0_3_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate { @@ -145,6 +145,7 @@ let release = true; crateName = "libsqlite3-sys"; version = "0.8.1"; sha256 = "131bjlxzni2aw3048p7sj8cs3v0jpkb3fxdpc5i7ndyhvpz3gdza"; + buildInputs = [ pkgs.sqlite pkgs.pkgconfig ]; build = "build.rs"; inherit dependencies buildDependencies features release verbose; }; @@ -401,7 +402,7 @@ rec { bitflags_0_9_1 = bitflags_0_9_1_ { features = [ "example_generated" ]; }; - carnix_0_4_4 = carnix_0_4_4_ { + carnix_0_4_5 = carnix_0_4_5_ { dependencies = [ clap_2_27_1 env_logger_0_4_3 error_chain_0_11_0 log_0_3_8 nom_3_2_1 regex_0_2_2 rusqlite_0_12_0 serde_1_0_19 serde_derive_1_0_19 serde_json_1_0_5 tempdir_0_3_5 toml_0_4_5 ]; }; cc_1_0_3 = cc_1_0_3_ { diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 8616687510c989..9ea9c5a276bacb 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -6219,7 +6219,7 @@ with pkgs; buildRustCrate = callPackage ../build-support/rust/rust-utils.nix { }; - carnix = (callPackage ../build-support/rust/carnix.nix { }).carnix_0_4_4; + carnix = (callPackage ../build-support/rust/carnix.nix { }).carnix_0_4_5; rustPlatform = recurseIntoAttrs (makeRustPlatform rust); From 4ce91eeff61d6ef67127cd0d2bbfae10115884e6 Mon Sep 17 00:00:00 2001 From: "pe@pijul.org" Date: Sun, 12 Nov 2017 11:20:54 +0100 Subject: [PATCH 17/47] Replacing a rm $(find) with find | xargs rm --- pkgs/build-support/rust/rust-utils.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkgs/build-support/rust/rust-utils.nix b/pkgs/build-support/rust/rust-utils.nix index 9b1fc5ca4cb1c1..5afcd7edf67790 100644 --- a/pkgs/build-support/rust/rust-utils.nix +++ b/pkgs/build-support/rust/rust-utils.nix @@ -244,7 +244,7 @@ let buildCrate = { crateName, crateVersion, buildDependencies, dependencies, $BUILD_OUT_DIR $EXTRA_BUILD $EXTRA_FEATURES --color ${colors} fi # Remove object files to avoid "wrong ELF type" - rm -f $(find target -name "*.o") + find target -type f -name "*.o" -print0 | xargs -0 rm -f '' + finalBins; installCrate = crateName: '' From 1f338c18b9d698ad6f43b0e7410f511cb4d9c3dd Mon Sep 17 00:00:00 2001 From: "pe@pijul.org" Date: Tue, 14 Nov 2017 18:15:05 +0100 Subject: [PATCH 18/47] Carnix 0.4.6, which can now compile workspaces --- pkgs/build-support/rust/carnix.nix | 8 ++++---- pkgs/top-level/all-packages.nix | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/pkgs/build-support/rust/carnix.nix b/pkgs/build-support/rust/carnix.nix index 2055145b6b2470..5c274d0db0d4d5 100644 --- a/pkgs/build-support/rust/carnix.nix +++ b/pkgs/build-support/rust/carnix.nix @@ -53,10 +53,10 @@ let release = true; sha256 = "18h073l5jd88rx4qdr95fjddr9rk79pb1aqnshzdnw16cfmb9rws"; inherit dependencies buildDependencies features release verbose; }; - carnix_0_4_5_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate { + carnix_0_4_6_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate { crateName = "carnix"; - version = "0.4.5"; - sha256 = "1j1d9rhgiajb92myg7asbdpz7w6hkjs6zwbphiv40x47g8ff9akn"; + version = "0.4.6"; + sha256 = "1payn3fj7rjjzi49aa0avz9zq6sm92r15w7c86ivxavab3ynis01"; inherit dependencies buildDependencies features release verbose; }; cc_1_0_3_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate { @@ -402,7 +402,7 @@ rec { bitflags_0_9_1 = bitflags_0_9_1_ { features = [ "example_generated" ]; }; - carnix_0_4_5 = carnix_0_4_5_ { + carnix_0_4_6 = carnix_0_4_6_ { dependencies = [ clap_2_27_1 env_logger_0_4_3 error_chain_0_11_0 log_0_3_8 nom_3_2_1 regex_0_2_2 rusqlite_0_12_0 serde_1_0_19 serde_derive_1_0_19 serde_json_1_0_5 tempdir_0_3_5 toml_0_4_5 ]; }; cc_1_0_3 = cc_1_0_3_ { diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 9ea9c5a276bacb..402d3baf38f543 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -6219,7 +6219,7 @@ with pkgs; buildRustCrate = callPackage ../build-support/rust/rust-utils.nix { }; - carnix = (callPackage ../build-support/rust/carnix.nix { }).carnix_0_4_5; + carnix = (callPackage ../build-support/rust/carnix.nix { }).carnix_0_4_6; rustPlatform = recurseIntoAttrs (makeRustPlatform rust); From 4121d59f849c02cbd0a0436bda849befd66f7054 Mon Sep 17 00:00:00 2001 From: "pe@pijul.org" Date: Wed, 15 Nov 2017 13:08:22 +0100 Subject: [PATCH 19/47] Overriding the Rust compiler now works. --- pkgs/build-support/rust/rust-utils.nix | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/pkgs/build-support/rust/rust-utils.nix b/pkgs/build-support/rust/rust-utils.nix index 5afcd7edf67790..490353f989340e 100644 --- a/pkgs/build-support/rust/rust-utils.nix +++ b/pkgs/build-support/rust/rust-utils.nix @@ -39,7 +39,7 @@ let buildCrate = { crateName, crateVersion, buildDependencies, dependencies, green="$(printf '\033[0;32m')" #set green boldgreen="$(printf '\033[0;1;32m')" #set bold, and set green. fi - + rustc --version mkdir -p target/deps mkdir -p target/build mkdir -p target/buildDeps @@ -264,9 +264,10 @@ let buildCrate = { crateName, crateVersion, buildDependencies, dependencies, cp -P target/bin/* $out/bin # */ fi ''; + in -crate: stdenv.mkDerivation rec { +crate: lib.makeOverridable ({ rust }: stdenv.mkDerivation rec { inherit (crate) crateName; @@ -274,18 +275,17 @@ crate: stdenv.mkDerivation rec { crate.src else pkgs.fetchCrate { inherit (crate) crateName version sha256; }; - rust = pkgs.rustc; release = if crate ? release then crate.release else false; name = "rust_${crate.crateName}-${crate.version}"; buildInputs = [ rust pkgs.ncurses ] ++ (lib.attrByPath ["buildInputs"] [] crate); dependencies = builtins.map - (dep: dep.overrideAttrs (attrs: { rust = rust; })) + (dep: dep.override { rust = rust; }) (lib.attrByPath ["dependencies"] [] crate); buildDependencies = builtins.map - (dep: dep.overrideAttrs (attrs: { rust = rust; })) + (dep: dep.override { rust = rust; }) (lib.attrByPath ["buildDependencies"] [] crate); completeDeps = builtins.foldl' (comp: dep: if lib.lists.any (x: x == comp) dep.completeDeps then comp ++ dep.complete else comp) dependencies dependencies; @@ -337,4 +337,4 @@ crate: stdenv.mkDerivation rec { metadata crateBin finalBins verboseBuild colors; }; installPhase = installCrate crateName; -} +}) { rust = pkgs.rustc; } From 428f66af60274b6b7fe8282e60601c1248b74055 Mon Sep 17 00:00:00 2001 From: "pe@pijul.org" Date: Wed, 15 Nov 2017 21:30:14 +0100 Subject: [PATCH 20/47] Carnix 0.4.7, updated for the latest Rust nightly --- pkgs/build-support/rust/carnix.nix | 8 ++++---- pkgs/top-level/all-packages.nix | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/pkgs/build-support/rust/carnix.nix b/pkgs/build-support/rust/carnix.nix index 5c274d0db0d4d5..39886ba5b46576 100644 --- a/pkgs/build-support/rust/carnix.nix +++ b/pkgs/build-support/rust/carnix.nix @@ -53,10 +53,10 @@ let release = true; sha256 = "18h073l5jd88rx4qdr95fjddr9rk79pb1aqnshzdnw16cfmb9rws"; inherit dependencies buildDependencies features release verbose; }; - carnix_0_4_6_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate { + carnix_0_4_7_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate { crateName = "carnix"; - version = "0.4.6"; - sha256 = "1payn3fj7rjjzi49aa0avz9zq6sm92r15w7c86ivxavab3ynis01"; + version = "0.4.7"; + sha256 = "1pwczwghcqv05691fn013hqxw75k94b3ay3g0c4lr4s45kgffb89"; inherit dependencies buildDependencies features release verbose; }; cc_1_0_3_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate { @@ -402,7 +402,7 @@ rec { bitflags_0_9_1 = bitflags_0_9_1_ { features = [ "example_generated" ]; }; - carnix_0_4_6 = carnix_0_4_6_ { + carnix_0_4_7 = carnix_0_4_7_ { dependencies = [ clap_2_27_1 env_logger_0_4_3 error_chain_0_11_0 log_0_3_8 nom_3_2_1 regex_0_2_2 rusqlite_0_12_0 serde_1_0_19 serde_derive_1_0_19 serde_json_1_0_5 tempdir_0_3_5 toml_0_4_5 ]; }; cc_1_0_3 = cc_1_0_3_ { diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 402d3baf38f543..6243b5d0a1a3e1 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -6219,7 +6219,7 @@ with pkgs; buildRustCrate = callPackage ../build-support/rust/rust-utils.nix { }; - carnix = (callPackage ../build-support/rust/carnix.nix { }).carnix_0_4_6; + carnix = (callPackage ../build-support/rust/carnix.nix { }).carnix_0_4_7; rustPlatform = recurseIntoAttrs (makeRustPlatform rust); From 01645cf33f9c2db1a5ff1d7b8c73ddca3af35997 Mon Sep 17 00:00:00 2001 From: "pe@pijul.org" Date: Wed, 15 Nov 2017 21:30:34 +0100 Subject: [PATCH 21/47] rust-utils.nix: using the generic extension for shared objects (darwin compatibility) --- pkgs/build-support/rust/rust-utils.nix | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/pkgs/build-support/rust/rust-utils.nix b/pkgs/build-support/rust/rust-utils.nix index 490353f989340e..590dddd04f3117 100644 --- a/pkgs/build-support/rust/rust-utils.nix +++ b/pkgs/build-support/rust/rust-utils.nix @@ -21,7 +21,7 @@ let buildCrate = { crateName, crateVersion, buildDependencies, dependencies, (if dep.crateType == "lib" then " --extern ${extern}=${dep.out}/lib${extern}-${dep.metadata}.rlib" else - " --extern ${extern}=${dep.out}/lib${extern}-${dep.metadata}.so") + " --extern ${extern}=${dep.out}/lib${extern}-${dep.metadata}${buildPlatform.extensions.sharedLibrary}") ) dependencies); deps = makeDeps dependencies; buildDeps = makeDeps buildDependencies; @@ -39,14 +39,13 @@ let buildCrate = { crateName, crateVersion, buildDependencies, dependencies, green="$(printf '\033[0;32m')" #set green boldgreen="$(printf '\033[0;1;32m')" #set bold, and set green. fi - rustc --version mkdir -p target/deps mkdir -p target/build mkdir -p target/buildDeps chmod uga+w target -R for i in ${completeDepsDir}; do ln -s -f $i/*.rlib target/deps #*/ - ln -s -f $i/*.so target/deps #*/ + ln -s -f $i/*.so $i/*.dylib target/deps #*/ if [ -e "$i/link" ]; then cat $i/link >> target/link cat $i/link >> target/link.final @@ -57,7 +56,7 @@ let buildCrate = { crateName, crateVersion, buildDependencies, dependencies, done for i in ${completeBuildDepsDir}; do ln -s -f $i/*.rlib target/buildDeps #*/ - ln -s -f $i/*.so target/buildDeps #*/ + ln -s -f $i/*.so $i/*.dylib target/buildDeps #*/ if [ -e "$i/link" ]; then cat $i/link >> target/link.build fi @@ -154,8 +153,8 @@ let buildCrate = { crateName, crateVersion, buildDependencies, dependencies, $BUILD_OUT_DIR $EXTRA_BUILD $EXTRA_FEATURES --color ${colors} EXTRA_LIB=" --extern $CRATE_NAME=target/deps/lib$CRATE_NAME-${metadata}.rlib" - if [ -e target/deps/lib$CRATE_NAME-${metadata}.so ]; then - EXTRA_LIB="$EXTRA_LIB --extern $CRATE_NAME=target/deps/lib$CRATE_NAME-${metadata}.so" + if [ -e target/deps/lib$CRATE_NAME-${metadata}${buildPlatform.extensions.sharedLibrary} ]; then + EXTRA_LIB="$EXTRA_LIB --extern $CRATE_NAME=target/deps/lib$CRATE_NAME-${metadata}${buildPlatform.extensions.sharedLibrary}" fi elif [ -e src/lib.rs ] ; then @@ -170,8 +169,8 @@ let buildCrate = { crateName, crateVersion, buildDependencies, dependencies, $BUILD_OUT_DIR $EXTRA_BUILD $EXTRA_FEATURES --color ${colors} EXTRA_LIB=" --extern $CRATE_NAME=target/deps/lib$CRATE_NAME-${metadata}.rlib" - if [ -e target/deps/lib$CRATE_NAME-${metadata}.so ]; then - EXTRA_LIB="$EXTRA_LIB --extern $CRATE_NAME=target/deps/lib$CRATE_NAME-${metadata}.so" + if [ -e target/deps/lib$CRATE_NAME-${metadata}${buildPlatform.extensions.sharedLibrary} ]; then + EXTRA_LIB="$EXTRA_LIB --extern $CRATE_NAME=target/deps/lib$CRATE_NAME-${metadata}${buildPlatform.extensions.sharedLibrary}" fi elif [ -e src/${libName}.rs ] ; then @@ -186,8 +185,8 @@ let buildCrate = { crateName, crateVersion, buildDependencies, dependencies, $BUILD_OUT_DIR $EXTRA_BUILD $EXTRA_FEATURES --color ${colors} EXTRA_LIB=" --extern $CRATE_NAME=target/deps/lib$CRATE_NAME-${metadata}.rlib" - if [ -e target/deps/lib$CRATE_NAME-${metadata}.so ]; then - EXTRA_LIB="$EXTRA_LIB --extern $CRATE_NAME=target/deps/lib$CRATE_NAME-${metadata}.so" + if [ -e target/deps/lib$CRATE_NAME-${metadata}${buildPlatform.extensions.sharedLibrary} ]; then + EXTRA_LIB="$EXTRA_LIB --extern $CRATE_NAME=target/deps/lib$CRATE_NAME-${metadata}${buildPlatform.extensions.sharedLibrary}" fi fi @@ -337,4 +336,5 @@ crate: lib.makeOverridable ({ rust }: stdenv.mkDerivation rec { metadata crateBin finalBins verboseBuild colors; }; installPhase = installCrate crateName; + }) { rust = pkgs.rustc; } From 2d2490a10a763adc2afe3325ccc29380fc6cd892 Mon Sep 17 00:00:00 2001 From: "pe@pijul.org" Date: Thu, 16 Nov 2017 07:44:41 +0100 Subject: [PATCH 22/47] Carnix 0.4.8, removing constants verbose and release (now overridable arguments) --- pkgs/build-support/rust/carnix.nix | 131 ++++++++++++------------- pkgs/build-support/rust/rust-utils.nix | 26 +++-- pkgs/top-level/all-packages.nix | 2 +- 3 files changed, 77 insertions(+), 82 deletions(-) diff --git a/pkgs/build-support/rust/carnix.nix b/pkgs/build-support/rust/carnix.nix index 39886ba5b46576..ce936c9a3f4958 100644 --- a/pkgs/build-support/rust/carnix.nix +++ b/pkgs/build-support/rust/carnix.nix @@ -3,79 +3,76 @@ # # Starts with functions that output crates, and then calls them with # the proper dependencies computed from the carnix's own Cargo.lock. - { pkgs, ... }: with pkgs; -let release = true; - verbose = true; - aho_corasick_0_6_3_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate { +let aho_corasick_0_6_3_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate { crateName = "aho-corasick"; version = "0.6.3"; sha256 = "1cpqzf6acj8lm06z3f1cg41wn6c2n9l3v49nh0dvimv4055qib6k"; libName = "aho_corasick"; crateBin = [ { name = "aho-corasick-dot"; } ]; - inherit dependencies buildDependencies features release verbose; + inherit dependencies buildDependencies features; }; ansi_term_0_9_0_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate { crateName = "ansi_term"; version = "0.9.0"; sha256 = "1vcd8m2hglrdi4zmqnkkz5zy3c73ifgii245k7vj6qr5dzpn9hij"; - inherit dependencies buildDependencies features release verbose; + inherit dependencies buildDependencies features; }; atty_0_2_3_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate { crateName = "atty"; version = "0.2.3"; sha256 = "0zl0cjfgarp5y78nd755lpki5bbkj4hgmi88v265m543yg29i88f"; - inherit dependencies buildDependencies features release verbose; + inherit dependencies buildDependencies features; }; backtrace_0_3_3_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate { crateName = "backtrace"; version = "0.3.3"; sha256 = "0invfdxkj85v8zyrjs3amfxjdk2a36x8irq7wq7kny6q49hh8y0z"; - inherit dependencies buildDependencies features release verbose; + inherit dependencies buildDependencies features; }; backtrace_sys_0_1_16_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate { crateName = "backtrace-sys"; version = "0.1.16"; sha256 = "1cn2c8q3dn06crmnk0p62czkngam4l8nf57wy33nz1y5g25pszwy"; build = "build.rs"; - inherit dependencies buildDependencies features release verbose; + inherit dependencies buildDependencies features; }; bitflags_0_7_0_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate { crateName = "bitflags"; version = "0.7.0"; sha256 = "1hr72xg5slm0z4pxs2hiy4wcyx3jva70h58b7mid8l0a4c8f7gn5"; - inherit dependencies buildDependencies features release verbose; + inherit dependencies buildDependencies features; }; bitflags_0_9_1_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate { crateName = "bitflags"; version = "0.9.1"; sha256 = "18h073l5jd88rx4qdr95fjddr9rk79pb1aqnshzdnw16cfmb9rws"; - inherit dependencies buildDependencies features release verbose; + inherit dependencies buildDependencies features; }; - carnix_0_4_7_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate { + carnix_0_4_8_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate { crateName = "carnix"; - version = "0.4.7"; - sha256 = "1pwczwghcqv05691fn013hqxw75k94b3ay3g0c4lr4s45kgffb89"; - inherit dependencies buildDependencies features release verbose; + version = "0.4.8"; + sha256 = "0n56wbbivmz0r0nyvpsnnqksmlpqc7f7m8jidj1pywm026jhh5yg"; + inherit dependencies buildDependencies features; }; cc_1_0_3_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate { crateName = "cc"; version = "1.0.3"; sha256 = "193pwqgh79w6k0k29svyds5nnlrwx44myqyrw605d5jj4yk2zmpr"; - inherit dependencies buildDependencies features release verbose; + inherit dependencies buildDependencies features; }; cfg_if_0_1_2_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate { crateName = "cfg-if"; version = "0.1.2"; sha256 = "0x06hvrrqy96m97593823vvxcgvjaxckghwyy2jcyc8qc7c6cyhi"; - inherit dependencies buildDependencies features release verbose; + inherit dependencies buildDependencies features; }; clap_2_27_1_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate { crateName = "clap"; version = "2.27.1"; sha256 = "0zx8rskqfl3iqn3vlyxzyd99hpifa7bm871akhxpz9wvrm688zaj"; - inherit dependencies buildDependencies features release verbose; + inherit dependencies buildDependencies features; }; dbghelp_sys_0_2_0_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate { crateName = "dbghelp-sys"; @@ -83,43 +80,43 @@ let release = true; sha256 = "0ylpi3bbiy233m57hnisn1df1v0lbl7nsxn34b0anzsgg440hqpq"; libName = "dbghelp"; build = "build.rs"; - inherit dependencies buildDependencies features release verbose; + inherit dependencies buildDependencies features; }; dtoa_0_4_2_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate { crateName = "dtoa"; version = "0.4.2"; sha256 = "1bxsh6fags7nr36vlz07ik2a1rzyipc8x1y30kjk832hf2pzadmw"; - inherit dependencies buildDependencies features release verbose; + inherit dependencies buildDependencies features; }; env_logger_0_4_3_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate { crateName = "env_logger"; version = "0.4.3"; sha256 = "0nrx04p4xa86d5kc7aq4fwvipbqji9cmgy449h47nc9f1chafhgg"; - inherit dependencies buildDependencies features release verbose; + inherit dependencies buildDependencies features; }; error_chain_0_11_0_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate { crateName = "error-chain"; version = "0.11.0"; sha256 = "19nz17q6dzp0mx2jhh9qbj45gkvvgcl7zq9z2ai5a8ihbisfj6d7"; - inherit dependencies buildDependencies features release verbose; + inherit dependencies buildDependencies features; }; fuchsia_zircon_0_2_1_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate { crateName = "fuchsia-zircon"; version = "0.2.1"; sha256 = "0yd4rd7ql1vdr349p6vgq2dnwmpylky1kjp8g1zgvp250jxrhddb"; - inherit dependencies buildDependencies features release verbose; + inherit dependencies buildDependencies features; }; fuchsia_zircon_sys_0_2_0_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate { crateName = "fuchsia-zircon-sys"; version = "0.2.0"; sha256 = "1yrqsrjwlhl3di6prxf5xmyd82gyjaysldbka5wwk83z11mpqh4w"; - inherit dependencies buildDependencies features release verbose; + inherit dependencies buildDependencies features; }; itoa_0_3_4_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate { crateName = "itoa"; version = "0.3.4"; sha256 = "1nfkzz6vrgj0d9l3yzjkkkqzdgs68y294fjdbl7jq118qi8xc9d9"; - inherit dependencies buildDependencies features release verbose; + inherit dependencies buildDependencies features; }; kernel32_sys_0_2_2_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate { crateName = "kernel32-sys"; @@ -127,19 +124,19 @@ let release = true; sha256 = "1lrw1hbinyvr6cp28g60z97w32w8vsk6pahk64pmrv2fmby8srfj"; libName = "kernel32"; build = "build.rs"; - inherit dependencies buildDependencies features release verbose; + inherit dependencies buildDependencies features; }; lazy_static_0_2_9_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate { crateName = "lazy_static"; version = "0.2.9"; sha256 = "08ldzr5292y3hvi6l6v8l4i6v95lm1aysmnfln65h10sqrfh6iw7"; - inherit dependencies buildDependencies features release verbose; + inherit dependencies buildDependencies features; }; libc_0_2_33_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate { crateName = "libc"; version = "0.2.33"; sha256 = "1l7synziccnvarsq2kk22vps720ih6chmn016bhr2bq54hblbnl1"; - inherit dependencies buildDependencies features release verbose; + inherit dependencies buildDependencies features; }; libsqlite3_sys_0_8_1_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate { crateName = "libsqlite3-sys"; @@ -147,233 +144,233 @@ let release = true; sha256 = "131bjlxzni2aw3048p7sj8cs3v0jpkb3fxdpc5i7ndyhvpz3gdza"; buildInputs = [ pkgs.sqlite pkgs.pkgconfig ]; build = "build.rs"; - inherit dependencies buildDependencies features release verbose; + inherit dependencies buildDependencies features; }; linked_hash_map_0_4_2_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate { crateName = "linked-hash-map"; version = "0.4.2"; sha256 = "04da208h6jb69f46j37jnvsw2i1wqplglp4d61csqcrhh83avbgl"; - inherit dependencies buildDependencies features release verbose; + inherit dependencies buildDependencies features; }; log_0_3_8_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate { crateName = "log"; version = "0.3.8"; sha256 = "1c43z4z85sxrsgir4s1hi84558ab5ic7jrn5qgmsiqcv90vvn006"; - inherit dependencies buildDependencies features release verbose; + inherit dependencies buildDependencies features; }; lru_cache_0_1_1_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate { crateName = "lru-cache"; version = "0.1.1"; sha256 = "1hl6kii1g54sq649gnscv858mmw7a02xj081l4vcgvrswdi2z8fw"; - inherit dependencies buildDependencies features release verbose; + inherit dependencies buildDependencies features; }; memchr_1_0_2_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate { crateName = "memchr"; version = "1.0.2"; sha256 = "0dfb8ifl9nrc9kzgd5z91q6qg87sh285q1ih7xgrsglmqfav9lg7"; - inherit dependencies buildDependencies features release verbose; + inherit dependencies buildDependencies features; }; nom_3_2_1_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate { crateName = "nom"; version = "3.2.1"; sha256 = "1vcllxrz9hdw6j25kn020ka3psz1vkaqh1hm3yfak2240zrxgi07"; - inherit dependencies buildDependencies features release verbose; + inherit dependencies buildDependencies features; }; num_traits_0_1_40_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate { crateName = "num-traits"; version = "0.1.40"; sha256 = "1fr8ghp4i97q3agki54i0hpmqxv3s65i2mqd1pinc7w7arc3fplw"; - inherit dependencies buildDependencies features release verbose; + inherit dependencies buildDependencies features; }; pkg_config_0_3_9_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate { crateName = "pkg-config"; version = "0.3.9"; sha256 = "06k8fxgrsrxj8mjpjcq1n7mn2p1shpxif4zg9y5h09c7vy20s146"; - inherit dependencies buildDependencies features release verbose; + inherit dependencies buildDependencies features; }; quote_0_3_15_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate { crateName = "quote"; version = "0.3.15"; sha256 = "09il61jv4kd1360spaj46qwyl21fv1qz18fsv2jra8wdnlgl5jsg"; - inherit dependencies buildDependencies features release verbose; + inherit dependencies buildDependencies features; }; rand_0_3_18_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate { crateName = "rand"; version = "0.3.18"; sha256 = "15d7c3myn968dzjs0a2pgv58hzdavxnq6swgj032lw2v966ir4xv"; - inherit dependencies buildDependencies features release verbose; + inherit dependencies buildDependencies features; }; redox_syscall_0_1_31_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate { crateName = "redox_syscall"; version = "0.1.31"; sha256 = "0kipd9qslzin4fgj4jrxv6yz5l3l71gnbd7fq1jhk2j7f2sq33j4"; libName = "syscall"; - inherit dependencies buildDependencies features release verbose; + inherit dependencies buildDependencies features; }; redox_termios_0_1_1_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate { crateName = "redox_termios"; version = "0.1.1"; sha256 = "04s6yyzjca552hdaqlvqhp3vw0zqbc304md5czyd3axh56iry8wh"; libPath = "src/lib.rs"; - inherit dependencies buildDependencies features release verbose; + inherit dependencies buildDependencies features; }; regex_0_2_2_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate { crateName = "regex"; version = "0.2.2"; sha256 = "1f1zrrynfylg0vcfyfp60bybq4rp5g1yk2k7lc7fyz7mmc7k2qr7"; - inherit dependencies buildDependencies features release verbose; + inherit dependencies buildDependencies features; }; regex_syntax_0_4_1_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate { crateName = "regex-syntax"; version = "0.4.1"; sha256 = "01yrsm68lj86ad1whgg1z95c2pfsvv58fz8qjcgw7mlszc0c08ls"; - inherit dependencies buildDependencies features release verbose; + inherit dependencies buildDependencies features; }; rusqlite_0_12_0_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate { crateName = "rusqlite"; version = "0.12.0"; sha256 = "18fybr7bd012j7axf4gzpphx0iil2amksdlab4dhhipjl6hyam6j"; - inherit dependencies buildDependencies features release verbose; + inherit dependencies buildDependencies features; }; rustc_demangle_0_1_5_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate { crateName = "rustc-demangle"; version = "0.1.5"; sha256 = "096kkcx9j747700fhxj1s4rlwkj21pqjmvj64psdj6bakb2q13nc"; - inherit dependencies buildDependencies features release verbose; + inherit dependencies buildDependencies features; }; serde_1_0_19_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate { crateName = "serde"; version = "1.0.19"; sha256 = "0dfhkkbrpr0vr1b2hhbddizb8bq4phi5ck0jhy3yx31bc2byb1l1"; - inherit dependencies buildDependencies features release verbose; + inherit dependencies buildDependencies features; }; serde_derive_1_0_19_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate { crateName = "serde_derive"; version = "1.0.19"; sha256 = "1fbr1zi25fgwy49mvpjq8g611mnv3vcd4n0mgca2lfdsp5n2nw5v"; procMacro = true; - inherit dependencies buildDependencies features release verbose; + inherit dependencies buildDependencies features; }; serde_derive_internals_0_17_0_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate { crateName = "serde_derive_internals"; version = "0.17.0"; sha256 = "1g1j3v6pj9wbcz3v3w4smjpwrcdwjicmf6yd5cbai04as9iwhw74"; - inherit dependencies buildDependencies features release verbose; + inherit dependencies buildDependencies features; }; serde_json_1_0_5_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate { crateName = "serde_json"; version = "1.0.5"; sha256 = "1yka3aa2gfi30415jpf0935k54r08jhyw6r7rjz2nv1kqgbw2brs"; - inherit dependencies buildDependencies features release verbose; + inherit dependencies buildDependencies features; }; strsim_0_6_0_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate { crateName = "strsim"; version = "0.6.0"; sha256 = "1lz85l6y68hr62lv4baww29yy7g8pg20dlr0lbaswxmmcb0wl7gd"; - inherit dependencies buildDependencies features release verbose; + inherit dependencies buildDependencies features; }; syn_0_11_11_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate { crateName = "syn"; version = "0.11.11"; sha256 = "0yw8ng7x1dn5a6ykg0ib49y7r9nhzgpiq2989rqdp7rdz3n85502"; - inherit dependencies buildDependencies features release verbose; + inherit dependencies buildDependencies features; }; synom_0_11_3_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate { crateName = "synom"; version = "0.11.3"; sha256 = "1l6d1s9qjfp6ng2s2z8219igvlv7gyk8gby97sdykqc1r93d8rhc"; - inherit dependencies buildDependencies features release verbose; + inherit dependencies buildDependencies features; }; tempdir_0_3_5_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate { crateName = "tempdir"; version = "0.3.5"; sha256 = "0rirc5prqppzgd15fm8ayan349lgk2k5iqdkrbwrwrv5pm4znsnz"; - inherit dependencies buildDependencies features release verbose; + inherit dependencies buildDependencies features; }; termion_1_5_1_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate { crateName = "termion"; version = "1.5.1"; sha256 = "02gq4vd8iws1f3gjrgrgpajsk2bk43nds5acbbb4s8dvrdvr8nf1"; - inherit dependencies buildDependencies features release verbose; + inherit dependencies buildDependencies features; }; textwrap_0_9_0_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate { crateName = "textwrap"; version = "0.9.0"; sha256 = "18jg79ndjlwndz01mlbh82kkr2arqm658yn5kwp65l5n1hz8w4yb"; - inherit dependencies buildDependencies features release verbose; + inherit dependencies buildDependencies features; }; thread_local_0_3_4_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate { crateName = "thread_local"; version = "0.3.4"; sha256 = "1y6cwyhhx2nkz4b3dziwhqdvgq830z8wjp32b40pjd8r0hxqv2jr"; - inherit dependencies buildDependencies features release verbose; + inherit dependencies buildDependencies features; }; time_0_1_38_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate { crateName = "time"; version = "0.1.38"; sha256 = "1ws283vvz7c6jfiwn53rmc6kybapr4pjaahfxxrz232b0qzw7gcp"; - inherit dependencies buildDependencies features release verbose; + inherit dependencies buildDependencies features; }; toml_0_4_5_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate { crateName = "toml"; version = "0.4.5"; sha256 = "06zxqhn3y58yzjfaykhcrvlf7p2dnn54kn3g4apmja3cn5b18lkk"; - inherit dependencies buildDependencies features release verbose; + inherit dependencies buildDependencies features; }; unicode_width_0_1_4_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate { crateName = "unicode-width"; version = "0.1.4"; sha256 = "1rp7a04icn9y5c0lm74nrd4py0rdl0af8bhdwq7g478n1xifpifl"; - inherit dependencies buildDependencies features release verbose; + inherit dependencies buildDependencies features; }; unicode_xid_0_0_4_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate { crateName = "unicode-xid"; version = "0.0.4"; sha256 = "1dc8wkkcd3s6534s5aw4lbjn8m67flkkbnajp5bl8408wdg8rh9v"; - inherit dependencies buildDependencies features release verbose; + inherit dependencies buildDependencies features; }; unreachable_1_0_0_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate { crateName = "unreachable"; version = "1.0.0"; sha256 = "1am8czbk5wwr25gbp2zr007744fxjshhdqjz9liz7wl4pnv3whcf"; - inherit dependencies buildDependencies features release verbose; + inherit dependencies buildDependencies features; }; utf8_ranges_1_0_0_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate { crateName = "utf8-ranges"; version = "1.0.0"; sha256 = "0rzmqprwjv9yp1n0qqgahgm24872x6c0xddfym5pfndy7a36vkn0"; - inherit dependencies buildDependencies features release verbose; + inherit dependencies buildDependencies features; }; vcpkg_0_2_2_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate { crateName = "vcpkg"; version = "0.2.2"; sha256 = "1fl5j0ksnwrnsrf1b1a9lqbjgnajdipq0030vsbhx81mb7d9478a"; - inherit dependencies buildDependencies features release verbose; + inherit dependencies buildDependencies features; }; vec_map_0_8_0_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate { crateName = "vec_map"; version = "0.8.0"; sha256 = "07sgxp3cf1a4cxm9n3r27fcvqmld32bl2576mrcahnvm34j11xay"; - inherit dependencies buildDependencies features release verbose; + inherit dependencies buildDependencies features; }; void_1_0_2_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate { crateName = "void"; version = "1.0.2"; sha256 = "0h1dm0dx8dhf56a83k68mijyxigqhizpskwxfdrs1drwv2cdclv3"; - inherit dependencies buildDependencies features release verbose; + inherit dependencies buildDependencies features; }; winapi_0_2_8_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate { crateName = "winapi"; version = "0.2.8"; sha256 = "0a45b58ywf12vb7gvj6h3j264nydynmzyqz8d8rqxsj6icqv82as"; - inherit dependencies buildDependencies features release verbose; + inherit dependencies buildDependencies features; }; winapi_build_0_1_1_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate { crateName = "winapi-build"; version = "0.1.1"; sha256 = "1lxlpi87rkhxcwp2ykf1ldw3p108hwm24nywf3jfrvmff4rjhqga"; libName = "build"; - inherit dependencies buildDependencies features release verbose; + inherit dependencies buildDependencies features; }; in @@ -402,7 +399,7 @@ rec { bitflags_0_9_1 = bitflags_0_9_1_ { features = [ "example_generated" ]; }; - carnix_0_4_7 = carnix_0_4_7_ { + carnix_0_4_8 = carnix_0_4_8_ { dependencies = [ clap_2_27_1 env_logger_0_4_3 error_chain_0_11_0 log_0_3_8 nom_3_2_1 regex_0_2_2 rusqlite_0_12_0 serde_1_0_19 serde_derive_1_0_19 serde_json_1_0_5 tempdir_0_3_5 toml_0_4_5 ]; }; cc_1_0_3 = cc_1_0_3_ { diff --git a/pkgs/build-support/rust/rust-utils.nix b/pkgs/build-support/rust/rust-utils.nix index 590dddd04f3117..860e195608197a 100644 --- a/pkgs/build-support/rust/rust-utils.nix +++ b/pkgs/build-support/rust/rust-utils.nix @@ -10,7 +10,7 @@ let buildCrate = { crateName, crateVersion, buildDependencies, dependencies, completeDeps, completeBuildDeps, crateFeatures, libName, build, release, libPath, crateType, metadata, crateBin, finalBins, - verboseBuild, colors }: + verbose, colors }: let depsDir = lib.concatStringsSep " " dependencies; completeDepsDir = lib.concatStringsSep " " completeDeps; @@ -103,7 +103,7 @@ let buildCrate = { crateName, crateVersion, buildDependencies, dependencies, if [ -e target/link.build ]; then EXTRA_BUILD_FLAGS="$EXTRA_BUILD_FLAGS $(cat target/link.build)" fi - if ${verboseBuild}; then + if ${toString verbose}; then echo $boldgreen""Running$norm rustc --crate-name build_script_build $BUILD --crate-type bin ${rustcOpts} ${crateFeatures} --out-dir target/build/${crateName} --emit=dep-info,link -L dependency=target/buildDeps ${buildDeps} --cap-lints allow $EXTRA_BUILD_FLAGS fi rustc --crate-name build_script_build $BUILD --crate-type bin ${rustcOpts} \ @@ -144,7 +144,7 @@ let buildCrate = { crateName, crateVersion, buildDependencies, dependencies, if [ -e "${libPath}" ] ; then - if ${verboseBuild}; then + if ${toString verbose}; then echo $boldgreen""Building ${libPath}$norm rustc --crate-name $CRATE_NAME ${libPath} --crate-type ${crateType} ${rustcOpts} ${rustcMeta} ${crateFeatures} --out-dir target/deps --emit=dep-info,link -L dependency=target/deps ${deps} --cap-lints allow $BUILD_OUT_DIR $EXTRA_BUILD $EXTRA_FEATURES fi rustc --crate-name $CRATE_NAME ${libPath} --crate-type ${crateType} \ @@ -160,7 +160,7 @@ let buildCrate = { crateName, crateVersion, buildDependencies, dependencies, echo "$boldgreen""Building src/lib.rs (${libName})""$norm" - if ${verboseBuild}; then + if ${toString verbose}; then echo $boldgreen""Running$norm rustc --crate-name $CRATE_NAME src/lib.rs --crate-type ${crateType} ${rustcOpts} ${rustcMeta} ${crateFeatures} --out-dir target/deps --emit=dep-info,link -L dependency=target/deps ${deps} --cap-lints allow $BUILD_OUT_DIR $EXTRA_BUILD $EXTRA_FEATURES fi rustc --crate-name $CRATE_NAME src/lib.rs --crate-type ${crateType} \ @@ -176,7 +176,7 @@ let buildCrate = { crateName, crateVersion, buildDependencies, dependencies, elif [ -e src/${libName}.rs ] ; then echo "$boldgreen""Building src/${libName}.rs""$norm" - if ${verboseBuild}; then + if ${toString verbose}; then echo $boldgreen""Running$norm rustc --crate-name $CRATE_NAME src/${libName}.rs --crate-type ${crateType} ${rustcOpts} ${rustcMeta} ${crateFeatures} --out-dir target/deps --emit=dep-info,link -L dependency=target/deps ${deps} --cap-lints allow $BUILD_OUT_DIR $EXTRA_BUILD $EXTRA_FEATURES fi rustc --crate-name $CRATE_NAME src/${libName}.rs --crate-type ${crateType} \ @@ -223,7 +223,7 @@ let buildCrate = { crateName, crateVersion, buildDependencies, dependencies, echo "${crateBin}" | sed -n 1'p' | tr ',' '\n' | while read BIN; do if [ ! -z "$BIN" ]; then echo "$boldgreen""Building $BIN$norm" - if ${verboseBuild}; then + if ${toString verbose}; then echo "$boldgreen""Running$norm rustc --crate-name $BIN --crate-type bin ${rustcOpts} ${crateFeatures} --out-dir target/bin --emit=dep-info,link -L dependency=target/deps $LINK ${deps}$EXTRA_LIB --cap-lints allow $BUILD_OUT_DIR $EXTRA_BUILD $EXTRA_FEATURES" fi rustc --crate-name $BIN --crate-type bin ${rustcOpts} ${crateFeatures} \ @@ -234,7 +234,7 @@ let buildCrate = { crateName, crateVersion, buildDependencies, dependencies, done if [[ (-z "${crateBin}") && (-e src/main.rs) ]]; then echo "$boldgreen""Building src/main.rs (${crateName})$norm" - if ${verboseBuild}; then + if ${toString verbose}; then echo "$boldgreen""Running$norm rustc --crate-name $CRATE_NAME src/main.rs --crate-type bin ${rustcOpts} ${crateFeatures} --out-dir target/bin --emit=dep-info,link -L dependency=target/deps $LINK ${deps}$EXTRA_LIB --cap-lints allow $BUILD_OUT_DIR $EXTRA_BUILD $EXTRA_FEATURES" fi rustc --crate-name $CRATE_NAME src/main.rs --crate-type bin ${rustcOpts} \ @@ -266,7 +266,7 @@ let buildCrate = { crateName, crateVersion, buildDependencies, dependencies, in -crate: lib.makeOverridable ({ rust }: stdenv.mkDerivation rec { +crate: lib.makeOverridable ({ rust, release, verbose }: stdenv.mkDerivation rec { inherit (crate) crateName; @@ -274,17 +274,16 @@ crate: lib.makeOverridable ({ rust }: stdenv.mkDerivation rec { crate.src else pkgs.fetchCrate { inherit (crate) crateName version sha256; }; - release = if crate ? release then crate.release else false; name = "rust_${crate.crateName}-${crate.version}"; buildInputs = [ rust pkgs.ncurses ] ++ (lib.attrByPath ["buildInputs"] [] crate); dependencies = builtins.map - (dep: dep.override { rust = rust; }) + (dep: dep.override { rust = rust; release = release; verbose = verbose; }) (lib.attrByPath ["dependencies"] [] crate); buildDependencies = builtins.map - (dep: dep.override { rust = rust; }) + (dep: dep.override { rust = rust; release = release; verbose = verbose; }) (lib.attrByPath ["buildDependencies"] [] crate); completeDeps = builtins.foldl' (comp: dep: if lib.lists.any (x: x == comp) dep.completeDeps then comp ++ dep.complete else comp) dependencies dependencies; @@ -328,13 +327,12 @@ crate: lib.makeOverridable ({ rust }: stdenv.mkDerivation rec { crateType = if lib.attrByPath ["procMacro"] false crate then "proc-macro" else if lib.attrByPath ["plugin"] false crate then "dylib" else "lib"; - verboseBuild = if lib.attrByPath [ "verbose" ] false crate then "true" else "false"; colors = lib.attrByPath [ "colors" ] "always" crate; buildPhase = buildCrate { inherit crateName dependencies buildDependencies completeDeps completeBuildDeps crateFeatures libName build release libPath crateType crateVersion - metadata crateBin finalBins verboseBuild colors; + metadata crateBin finalBins verbose colors; }; installPhase = installCrate crateName; -}) { rust = pkgs.rustc; } +}) { rust = pkgs.rustc; release = true; verbose = true; } diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 6243b5d0a1a3e1..a8cc009644ff3d 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -6219,7 +6219,7 @@ with pkgs; buildRustCrate = callPackage ../build-support/rust/rust-utils.nix { }; - carnix = (callPackage ../build-support/rust/carnix.nix { }).carnix_0_4_7; + carnix = (callPackage ../build-support/rust/carnix.nix { }).carnix_0_4_8; rustPlatform = recurseIntoAttrs (makeRustPlatform rust); From 03877862095d1fcea733f851973e673ee05a4196 Mon Sep 17 00:00:00 2001 From: Florent Becker Date: Fri, 17 Nov 2017 14:43:04 +0100 Subject: [PATCH 23/47] mkRustCrate Move rust libraries into a /rlibs dir --- pkgs/build-support/rust/rust-utils.nix | 31 +++++++++++++------------- 1 file changed, 16 insertions(+), 15 deletions(-) diff --git a/pkgs/build-support/rust/rust-utils.nix b/pkgs/build-support/rust/rust-utils.nix index 860e195608197a..de7407988d2070 100644 --- a/pkgs/build-support/rust/rust-utils.nix +++ b/pkgs/build-support/rust/rust-utils.nix @@ -19,9 +19,9 @@ let buildCrate = { crateName, crateVersion, buildDependencies, dependencies, (lib.concatMapStringsSep " " (dep: let extern = lib.strings.replaceStrings ["-"] ["_"] dep.libName; in (if dep.crateType == "lib" then - " --extern ${extern}=${dep.out}/lib${extern}-${dep.metadata}.rlib" + " --extern ${extern}=${dep.out}/rlibs/lib${extern}-${dep.metadata}.rlib" else - " --extern ${extern}=${dep.out}/lib${extern}-${dep.metadata}${buildPlatform.extensions.sharedLibrary}") + " --extern ${extern}=${dep.out}/rlibs/lib${extern}-${dep.metadata}${buildPlatform.extensions.sharedLibrary}") ) dependencies); deps = makeDeps dependencies; buildDeps = makeDeps buildDependencies; @@ -44,21 +44,21 @@ let buildCrate = { crateName, crateVersion, buildDependencies, dependencies, mkdir -p target/buildDeps chmod uga+w target -R for i in ${completeDepsDir}; do - ln -s -f $i/*.rlib target/deps #*/ - ln -s -f $i/*.so $i/*.dylib target/deps #*/ - if [ -e "$i/link" ]; then - cat $i/link >> target/link - cat $i/link >> target/link.final + ln -s -f $i/rlibs/*.rlib target/deps #*/ + ln -s -f $i/rlibs/*.so $i/rlibs/*.dylib target/deps #*/ + if [ -e "$i/rlibs/link" ]; then + cat $i/rlibs/link >> target/link + cat $i/rlibs/link >> target/link.final fi if [ -e $i/env ]; then source $i/env fi done for i in ${completeBuildDepsDir}; do - ln -s -f $i/*.rlib target/buildDeps #*/ - ln -s -f $i/*.so $i/*.dylib target/buildDeps #*/ - if [ -e "$i/link" ]; then - cat $i/link >> target/link.build + ln -s -f $i/rlibs/*.rlib target/buildDeps #*/ + ln -s -f $i/rlibs/*.so $i/rlibs/*.dylib target/buildDeps #*/ + if [ -e "$i/rlibs/link" ]; then + cat $i/rlibs/link >> target/link.build fi if [ -e $i/env ]; then source $i/env @@ -195,7 +195,7 @@ let buildCrate = { crateName, crateVersion, buildDependencies, dependencies, if [ ! -z "$i" ]; then for lib in $i; do echo "-L $lib" >> target/link - L=$(echo $lib | sed -e "s#$(pwd)/target/build#$out#") + L=$(echo $lib | sed -e "s#$(pwd)/target/build#$out/rlibs#") echo "-L $L" >> target/link.final done fi @@ -248,15 +248,16 @@ let buildCrate = { crateName, crateVersion, buildDependencies, dependencies, installCrate = crateName: '' mkdir -p $out + mkdir $out/rlibs if [ -s target/env ]; then cp target/env $out/env fi if [ -s target/link.final ]; then - cp target/link.final $out/link + cp target/link.final $out/rlibs/link fi - cp target/deps/* $out # */ +# cp target/deps/* $out/rlibs # */ if [ "$(ls -A target/build)" ]; then # */ - cp -r target/build/* $out # */ + cp -r target/build/* $out/rlibs # */ fi if [ "$(ls -A target/bin)" ]; then # */ mkdir -p $out/bin From 6ffd5b4568ff0c01b1edd45cef9f24d072a3bf48 Mon Sep 17 00:00:00 2001 From: Florent Becker Date: Sat, 18 Nov 2017 08:17:54 +0100 Subject: [PATCH 24/47] mkRustCrate: correct transitive dependencies --- pkgs/build-support/rust/rust-utils.nix | 34 ++++++++++++++------------ 1 file changed, 19 insertions(+), 15 deletions(-) diff --git a/pkgs/build-support/rust/rust-utils.nix b/pkgs/build-support/rust/rust-utils.nix index de7407988d2070..667c218d2e4fb0 100644 --- a/pkgs/build-support/rust/rust-utils.nix +++ b/pkgs/build-support/rust/rust-utils.nix @@ -40,6 +40,7 @@ let buildCrate = { crateName, crateVersion, buildDependencies, dependencies, boldgreen="$(printf '\033[0;1;32m')" #set bold, and set green. fi mkdir -p target/deps + mkdir -p target/lib mkdir -p target/build mkdir -p target/buildDeps chmod uga+w target -R @@ -103,7 +104,7 @@ let buildCrate = { crateName, crateVersion, buildDependencies, dependencies, if [ -e target/link.build ]; then EXTRA_BUILD_FLAGS="$EXTRA_BUILD_FLAGS $(cat target/link.build)" fi - if ${toString verbose}; then + if [ x"${toString verbose}" = x"1" ]; then echo $boldgreen""Running$norm rustc --crate-name build_script_build $BUILD --crate-type bin ${rustcOpts} ${crateFeatures} --out-dir target/build/${crateName} --emit=dep-info,link -L dependency=target/buildDeps ${buildDeps} --cap-lints allow $EXTRA_BUILD_FLAGS fi rustc --crate-name build_script_build $BUILD --crate-type bin ${rustcOpts} \ @@ -144,11 +145,11 @@ let buildCrate = { crateName, crateVersion, buildDependencies, dependencies, if [ -e "${libPath}" ] ; then - if ${toString verbose}; then - echo $boldgreen""Building ${libPath}$norm rustc --crate-name $CRATE_NAME ${libPath} --crate-type ${crateType} ${rustcOpts} ${rustcMeta} ${crateFeatures} --out-dir target/deps --emit=dep-info,link -L dependency=target/deps ${deps} --cap-lints allow $BUILD_OUT_DIR $EXTRA_BUILD $EXTRA_FEATURES + if [ x"${toString verbose}" = x"1" ]; then + echo $boldgreen""Building ${libPath}$norm rustc --crate-name $CRATE_NAME ${libPath} --crate-type ${crateType} ${rustcOpts} ${rustcMeta} ${crateFeatures} --out-dir target/lib --emit=dep-info,link -L dependency=target/deps ${deps} --cap-lints allow $BUILD_OUT_DIR $EXTRA_BUILD $EXTRA_FEATURES fi rustc --crate-name $CRATE_NAME ${libPath} --crate-type ${crateType} \ - ${rustcOpts} ${rustcMeta} ${crateFeatures} --out-dir target/deps \ + ${rustcOpts} ${rustcMeta} ${crateFeatures} --out-dir target/lib \ --emit=dep-info,link -L dependency=target/deps ${deps} --cap-lints allow \ $BUILD_OUT_DIR $EXTRA_BUILD $EXTRA_FEATURES --color ${colors} @@ -160,11 +161,11 @@ let buildCrate = { crateName, crateVersion, buildDependencies, dependencies, echo "$boldgreen""Building src/lib.rs (${libName})""$norm" - if ${toString verbose}; then - echo $boldgreen""Running$norm rustc --crate-name $CRATE_NAME src/lib.rs --crate-type ${crateType} ${rustcOpts} ${rustcMeta} ${crateFeatures} --out-dir target/deps --emit=dep-info,link -L dependency=target/deps ${deps} --cap-lints allow $BUILD_OUT_DIR $EXTRA_BUILD $EXTRA_FEATURES + if [ x"${toString verbose}" = x"1" ]; then + echo $boldgreen""Running$norm rustc --crate-name $CRATE_NAME src/lib.rs --crate-type ${crateType} ${rustcOpts} ${rustcMeta} ${crateFeatures} --out-dir target/lib --emit=dep-info,link -L dependency=target/deps ${deps} --cap-lints allow $BUILD_OUT_DIR $EXTRA_BUILD $EXTRA_FEATURES fi rustc --crate-name $CRATE_NAME src/lib.rs --crate-type ${crateType} \ - ${rustcOpts} ${rustcMeta} ${crateFeatures} --out-dir target/deps \ + ${rustcOpts} ${rustcMeta} ${crateFeatures} --out-dir target/lib \ --emit=dep-info,link -L dependency=target/deps ${deps} --cap-lints allow \ $BUILD_OUT_DIR $EXTRA_BUILD $EXTRA_FEATURES --color ${colors} @@ -176,11 +177,11 @@ let buildCrate = { crateName, crateVersion, buildDependencies, dependencies, elif [ -e src/${libName}.rs ] ; then echo "$boldgreen""Building src/${libName}.rs""$norm" - if ${toString verbose}; then - echo $boldgreen""Running$norm rustc --crate-name $CRATE_NAME src/${libName}.rs --crate-type ${crateType} ${rustcOpts} ${rustcMeta} ${crateFeatures} --out-dir target/deps --emit=dep-info,link -L dependency=target/deps ${deps} --cap-lints allow $BUILD_OUT_DIR $EXTRA_BUILD $EXTRA_FEATURES + if [ x"${toString verbose}" = x"1" ]; then + echo $boldgreen""Running$norm rustc --crate-name $CRATE_NAME src/${libName}.rs --crate-type ${crateType} ${rustcOpts} ${rustcMeta} ${crateFeatures} --out-dir target/lib --emit=dep-info,link -L dependency=target/deps ${deps} --cap-lints allow $BUILD_OUT_DIR $EXTRA_BUILD $EXTRA_FEATURES fi rustc --crate-name $CRATE_NAME src/${libName}.rs --crate-type ${crateType} \ - ${rustcOpts} ${rustcMeta} ${crateFeatures} --out-dir target/deps \ + ${rustcOpts} ${rustcMeta} ${crateFeatures} --out-dir target/lib \ --emit=dep-info,link -L dependency=target/deps ${deps} --cap-lints allow \ $BUILD_OUT_DIR $EXTRA_BUILD $EXTRA_FEATURES --color ${colors} @@ -223,7 +224,7 @@ let buildCrate = { crateName, crateVersion, buildDependencies, dependencies, echo "${crateBin}" | sed -n 1'p' | tr ',' '\n' | while read BIN; do if [ ! -z "$BIN" ]; then echo "$boldgreen""Building $BIN$norm" - if ${toString verbose}; then + if [ x"${toString verbose}" = x"1" ]; then echo "$boldgreen""Running$norm rustc --crate-name $BIN --crate-type bin ${rustcOpts} ${crateFeatures} --out-dir target/bin --emit=dep-info,link -L dependency=target/deps $LINK ${deps}$EXTRA_LIB --cap-lints allow $BUILD_OUT_DIR $EXTRA_BUILD $EXTRA_FEATURES" fi rustc --crate-name $BIN --crate-type bin ${rustcOpts} ${crateFeatures} \ @@ -234,7 +235,7 @@ let buildCrate = { crateName, crateVersion, buildDependencies, dependencies, done if [[ (-z "${crateBin}") && (-e src/main.rs) ]]; then echo "$boldgreen""Building src/main.rs (${crateName})$norm" - if ${toString verbose}; then + if [ x"${toString verbose}" = x"1" ]; then echo "$boldgreen""Running$norm rustc --crate-name $CRATE_NAME src/main.rs --crate-type bin ${rustcOpts} ${crateFeatures} --out-dir target/bin --emit=dep-info,link -L dependency=target/deps $LINK ${deps}$EXTRA_LIB --cap-lints allow $BUILD_OUT_DIR $EXTRA_BUILD $EXTRA_FEATURES" fi rustc --crate-name $CRATE_NAME src/main.rs --crate-type bin ${rustcOpts} \ @@ -255,7 +256,9 @@ let buildCrate = { crateName, crateVersion, buildDependencies, dependencies, if [ -s target/link.final ]; then cp target/link.final $out/rlibs/link fi -# cp target/deps/* $out/rlibs # */ + if [ "$(ls -A target/lib)" ]; then + cp target/lib/* $out/rlibs # */ + fi if [ "$(ls -A target/build)" ]; then # */ cp -r target/build/* $out/rlibs # */ fi @@ -287,8 +290,9 @@ crate: lib.makeOverridable ({ rust, release, verbose }: stdenv.mkDerivation rec (dep: dep.override { rust = rust; release = release; verbose = verbose; }) (lib.attrByPath ["buildDependencies"] [] crate); - completeDeps = builtins.foldl' (comp: dep: if lib.lists.any (x: x == comp) dep.completeDeps then comp ++ dep.complete else comp) dependencies dependencies; - completeBuildDeps = builtins.foldl' (comp: dep: if lib.lists.any (x: x == comp) dep.completeBuildDeps then comp ++ dep.complete else comp) buildDependencies buildDependencies; + completeDeps = lib.lists.unique (dependencies ++ lib.lists.concatMap (dep: dep.completeDeps) dependencies); + completeBuildDeps = lib.lists.unique (buildDependencies ++ lib.lists.concatMap (dep: dep.completeBuildDeps) buildDependencies); + #builtins.foldl' (comp: dep: if lib.lists.any (x: x == comp) dep.completeBuildDeps then comp ++ dep.complete else comp) buildDependencies buildDependencies; crateFeatures = if crate ? features then lib.concatMapStringsSep " " (f: "--cfg feature=\\\"${f}\\\"") crate.features From 7b212b87a68cea3c97869875e7e71ff65830f5cb Mon Sep 17 00:00:00 2001 From: "pe@pijul.org" Date: Sat, 18 Nov 2017 16:39:23 +0100 Subject: [PATCH 25/47] Replacing bash ifs with optionalString --- pkgs/build-support/rust/rust-utils.nix | 75 ++++++++++++++------------ 1 file changed, 40 insertions(+), 35 deletions(-) diff --git a/pkgs/build-support/rust/rust-utils.nix b/pkgs/build-support/rust/rust-utils.nix index 860e195608197a..fa40043324716b 100644 --- a/pkgs/build-support/rust/rust-utils.nix +++ b/pkgs/build-support/rust/rust-utils.nix @@ -19,9 +19,9 @@ let buildCrate = { crateName, crateVersion, buildDependencies, dependencies, (lib.concatMapStringsSep " " (dep: let extern = lib.strings.replaceStrings ["-"] ["_"] dep.libName; in (if dep.crateType == "lib" then - " --extern ${extern}=${dep.out}/lib${extern}-${dep.metadata}.rlib" + " --extern ${extern}=${dep.out}/rlibs/lib${extern}-${dep.metadata}.rlib" else - " --extern ${extern}=${dep.out}/lib${extern}-${dep.metadata}${buildPlatform.extensions.sharedLibrary}") + " --extern ${extern}=${dep.out}/rlibs/lib${extern}-${dep.metadata}${buildPlatform.extensions.sharedLibrary}") ) dependencies); deps = makeDeps dependencies; buildDeps = makeDeps buildDependencies; @@ -40,25 +40,26 @@ let buildCrate = { crateName, crateVersion, buildDependencies, dependencies, boldgreen="$(printf '\033[0;1;32m')" #set bold, and set green. fi mkdir -p target/deps + mkdir -p target/lib mkdir -p target/build mkdir -p target/buildDeps chmod uga+w target -R for i in ${completeDepsDir}; do - ln -s -f $i/*.rlib target/deps #*/ - ln -s -f $i/*.so $i/*.dylib target/deps #*/ - if [ -e "$i/link" ]; then - cat $i/link >> target/link - cat $i/link >> target/link.final + ln -s -f $i/rlibs/*.rlib target/deps #*/ + ln -s -f $i/rlibs/*.so $i/rlibs/*.dylib target/deps #*/ + if [ -e "$i/rlibs/link" ]; then + cat $i/rlibs/link >> target/link + cat $i/rlibs/link >> target/link.final fi if [ -e $i/env ]; then source $i/env fi done for i in ${completeBuildDepsDir}; do - ln -s -f $i/*.rlib target/buildDeps #*/ - ln -s -f $i/*.so $i/*.dylib target/buildDeps #*/ - if [ -e "$i/link" ]; then - cat $i/link >> target/link.build + ln -s -f $i/rlibs/*.rlib target/buildDeps #*/ + ln -s -f $i/rlibs/*.so $i/rlibs/*.dylib target/buildDeps #*/ + if [ -e "$i/rlibs/link" ]; then + cat $i/rlibs/link >> target/link.build fi if [ -e $i/env ]; then source $i/env @@ -103,9 +104,9 @@ let buildCrate = { crateName, crateVersion, buildDependencies, dependencies, if [ -e target/link.build ]; then EXTRA_BUILD_FLAGS="$EXTRA_BUILD_FLAGS $(cat target/link.build)" fi - if ${toString verbose}; then + ${optionalString verbose '' echo $boldgreen""Running$norm rustc --crate-name build_script_build $BUILD --crate-type bin ${rustcOpts} ${crateFeatures} --out-dir target/build/${crateName} --emit=dep-info,link -L dependency=target/buildDeps ${buildDeps} --cap-lints allow $EXTRA_BUILD_FLAGS - fi + ''} rustc --crate-name build_script_build $BUILD --crate-type bin ${rustcOpts} \ ${crateFeatures} --out-dir target/build/${crateName} --emit=dep-info,link \ -L dependency=target/buildDeps ${buildDeps} --cap-lints allow $EXTRA_BUILD_FLAGS --color ${colors} @@ -144,11 +145,11 @@ let buildCrate = { crateName, crateVersion, buildDependencies, dependencies, if [ -e "${libPath}" ] ; then - if ${toString verbose}; then - echo $boldgreen""Building ${libPath}$norm rustc --crate-name $CRATE_NAME ${libPath} --crate-type ${crateType} ${rustcOpts} ${rustcMeta} ${crateFeatures} --out-dir target/deps --emit=dep-info,link -L dependency=target/deps ${deps} --cap-lints allow $BUILD_OUT_DIR $EXTRA_BUILD $EXTRA_FEATURES - fi + ${optionalString verbose '' + echo $boldgreen""Building ${libPath}$norm rustc --crate-name $CRATE_NAME ${libPath} --crate-type ${crateType} ${rustcOpts} ${rustcMeta} ${crateFeatures} --out-dir target/lib --emit=dep-info,link -L dependency=target/deps ${deps} --cap-lints allow $BUILD_OUT_DIR $EXTRA_BUILD $EXTRA_FEATURES + ''} rustc --crate-name $CRATE_NAME ${libPath} --crate-type ${crateType} \ - ${rustcOpts} ${rustcMeta} ${crateFeatures} --out-dir target/deps \ + ${rustcOpts} ${rustcMeta} ${crateFeatures} --out-dir target/lib \ --emit=dep-info,link -L dependency=target/deps ${deps} --cap-lints allow \ $BUILD_OUT_DIR $EXTRA_BUILD $EXTRA_FEATURES --color ${colors} @@ -160,11 +161,11 @@ let buildCrate = { crateName, crateVersion, buildDependencies, dependencies, echo "$boldgreen""Building src/lib.rs (${libName})""$norm" - if ${toString verbose}; then - echo $boldgreen""Running$norm rustc --crate-name $CRATE_NAME src/lib.rs --crate-type ${crateType} ${rustcOpts} ${rustcMeta} ${crateFeatures} --out-dir target/deps --emit=dep-info,link -L dependency=target/deps ${deps} --cap-lints allow $BUILD_OUT_DIR $EXTRA_BUILD $EXTRA_FEATURES - fi + ${optionalString verbose '' + echo $boldgreen""Running$norm rustc --crate-name $CRATE_NAME src/lib.rs --crate-type ${crateType} ${rustcOpts} ${rustcMeta} ${crateFeatures} --out-dir target/lib --emit=dep-info,link -L dependency=target/deps ${deps} --cap-lints allow $BUILD_OUT_DIR $EXTRA_BUILD $EXTRA_FEATURES + ''} rustc --crate-name $CRATE_NAME src/lib.rs --crate-type ${crateType} \ - ${rustcOpts} ${rustcMeta} ${crateFeatures} --out-dir target/deps \ + ${rustcOpts} ${rustcMeta} ${crateFeatures} --out-dir target/lib \ --emit=dep-info,link -L dependency=target/deps ${deps} --cap-lints allow \ $BUILD_OUT_DIR $EXTRA_BUILD $EXTRA_FEATURES --color ${colors} @@ -176,11 +177,11 @@ let buildCrate = { crateName, crateVersion, buildDependencies, dependencies, elif [ -e src/${libName}.rs ] ; then echo "$boldgreen""Building src/${libName}.rs""$norm" - if ${toString verbose}; then - echo $boldgreen""Running$norm rustc --crate-name $CRATE_NAME src/${libName}.rs --crate-type ${crateType} ${rustcOpts} ${rustcMeta} ${crateFeatures} --out-dir target/deps --emit=dep-info,link -L dependency=target/deps ${deps} --cap-lints allow $BUILD_OUT_DIR $EXTRA_BUILD $EXTRA_FEATURES - fi + ${optionalString verbose '' + echo $boldgreen""Running$norm rustc --crate-name $CRATE_NAME src/${libName}.rs --crate-type ${crateType} ${rustcOpts} ${rustcMeta} ${crateFeatures} --out-dir target/lib --emit=dep-info,link -L dependency=target/deps ${deps} --cap-lints allow $BUILD_OUT_DIR $EXTRA_BUILD $EXTRA_FEATURES + ''} rustc --crate-name $CRATE_NAME src/${libName}.rs --crate-type ${crateType} \ - ${rustcOpts} ${rustcMeta} ${crateFeatures} --out-dir target/deps \ + ${rustcOpts} ${rustcMeta} ${crateFeatures} --out-dir target/lib \ --emit=dep-info,link -L dependency=target/deps ${deps} --cap-lints allow \ $BUILD_OUT_DIR $EXTRA_BUILD $EXTRA_FEATURES --color ${colors} @@ -195,7 +196,7 @@ let buildCrate = { crateName, crateVersion, buildDependencies, dependencies, if [ ! -z "$i" ]; then for lib in $i; do echo "-L $lib" >> target/link - L=$(echo $lib | sed -e "s#$(pwd)/target/build#$out#") + L=$(echo $lib | sed -e "s#$(pwd)/target/build#$out/rlibs#") echo "-L $L" >> target/link.final done fi @@ -223,9 +224,9 @@ let buildCrate = { crateName, crateVersion, buildDependencies, dependencies, echo "${crateBin}" | sed -n 1'p' | tr ',' '\n' | while read BIN; do if [ ! -z "$BIN" ]; then echo "$boldgreen""Building $BIN$norm" - if ${toString verbose}; then + ${optionalString verbose '' echo "$boldgreen""Running$norm rustc --crate-name $BIN --crate-type bin ${rustcOpts} ${crateFeatures} --out-dir target/bin --emit=dep-info,link -L dependency=target/deps $LINK ${deps}$EXTRA_LIB --cap-lints allow $BUILD_OUT_DIR $EXTRA_BUILD $EXTRA_FEATURES" - fi + ''} rustc --crate-name $BIN --crate-type bin ${rustcOpts} ${crateFeatures} \ --out-dir target/bin --emit=dep-info,link -L dependency=target/deps \ $LINK ${deps}$EXTRA_LIB --cap-lints allow \ @@ -234,9 +235,9 @@ let buildCrate = { crateName, crateVersion, buildDependencies, dependencies, done if [[ (-z "${crateBin}") && (-e src/main.rs) ]]; then echo "$boldgreen""Building src/main.rs (${crateName})$norm" - if ${toString verbose}; then + ${optionalString verbose '' echo "$boldgreen""Running$norm rustc --crate-name $CRATE_NAME src/main.rs --crate-type bin ${rustcOpts} ${crateFeatures} --out-dir target/bin --emit=dep-info,link -L dependency=target/deps $LINK ${deps}$EXTRA_LIB --cap-lints allow $BUILD_OUT_DIR $EXTRA_BUILD $EXTRA_FEATURES" - fi + ''} rustc --crate-name $CRATE_NAME src/main.rs --crate-type bin ${rustcOpts} \ ${crateFeatures} --out-dir target/bin --emit=dep-info,link \ -L dependency=target/deps $LINK ${deps}$EXTRA_LIB --cap-lints allow \ @@ -248,15 +249,18 @@ let buildCrate = { crateName, crateVersion, buildDependencies, dependencies, installCrate = crateName: '' mkdir -p $out + mkdir $out/rlibs if [ -s target/env ]; then cp target/env $out/env fi if [ -s target/link.final ]; then - cp target/link.final $out/link + cp target/link.final $out/rlibs/link + fi + if [ "$(ls -A target/lib)" ]; then + cp target/lib/* $out/rlibs # */ fi - cp target/deps/* $out # */ if [ "$(ls -A target/build)" ]; then # */ - cp -r target/build/* $out # */ + cp -r target/build/* $out/rlibs # */ fi if [ "$(ls -A target/bin)" ]; then # */ mkdir -p $out/bin @@ -286,8 +290,9 @@ crate: lib.makeOverridable ({ rust, release, verbose }: stdenv.mkDerivation rec (dep: dep.override { rust = rust; release = release; verbose = verbose; }) (lib.attrByPath ["buildDependencies"] [] crate); - completeDeps = builtins.foldl' (comp: dep: if lib.lists.any (x: x == comp) dep.completeDeps then comp ++ dep.complete else comp) dependencies dependencies; - completeBuildDeps = builtins.foldl' (comp: dep: if lib.lists.any (x: x == comp) dep.completeBuildDeps then comp ++ dep.complete else comp) buildDependencies buildDependencies; + completeDeps = lib.lists.unique (dependencies ++ lib.lists.concatMap (dep: dep.completeDeps) dependencies); + completeBuildDeps = lib.lists.unique (buildDependencies ++ lib.lists.concatMap (dep: dep.completeBuildDeps) buildDependencies); + #builtins.foldl' (comp: dep: if lib.lists.any (x: x == comp) dep.completeBuildDeps then comp ++ dep.complete else comp) buildDependencies buildDependencies; crateFeatures = if crate ? features then lib.concatMapStringsSep " " (f: "--cfg feature=\\\"${f}\\\"") crate.features From f7bed046bf8357edd1ce8714c63fb42c85407eb6 Mon Sep 17 00:00:00 2001 From: "pe@pijul.org" Date: Sat, 18 Nov 2017 16:47:44 +0100 Subject: [PATCH 26/47] runHook --- pkgs/build-support/rust/rust-utils.nix | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/pkgs/build-support/rust/rust-utils.nix b/pkgs/build-support/rust/rust-utils.nix index fa40043324716b..7a8a8e2736f461 100644 --- a/pkgs/build-support/rust/rust-utils.nix +++ b/pkgs/build-support/rust/rust-utils.nix @@ -39,10 +39,8 @@ let buildCrate = { crateName, crateVersion, buildDependencies, dependencies, green="$(printf '\033[0;32m')" #set green boldgreen="$(printf '\033[0;1;32m')" #set bold, and set green. fi - mkdir -p target/deps - mkdir -p target/lib - mkdir -p target/build - mkdir -p target/buildDeps + runHook preBuild + mkdir -p target/{deps,build,buildDeps} chmod uga+w target -R for i in ${completeDepsDir}; do ln -s -f $i/rlibs/*.rlib target/deps #*/ @@ -96,7 +94,7 @@ let buildCrate = { crateName, crateVersion, buildDependencies, dependencies, fi if [[ ! -z "$BUILD" ]] ; then echo "$boldgreen""Building $BUILD (${libName})""$norm" - mkdir -p target/build/${crateName} + mkdir -p target/build/{${crateName},${crateName}.out} EXTRA_BUILD_FLAGS="" if [ -e target/link_ ]; then EXTRA_BUILD_FLAGS=$(cat target/link_) @@ -111,10 +109,8 @@ let buildCrate = { crateName, crateVersion, buildDependencies, dependencies, ${crateFeatures} --out-dir target/build/${crateName} --emit=dep-info,link \ -L dependency=target/buildDeps ${buildDeps} --cap-lints allow $EXTRA_BUILD_FLAGS --color ${colors} - mkdir -p target/build/${crateName}.out export RUST_BACKTRACE=1 BUILD_OUT_DIR="-L $OUT_DIR" - mkdir -p $OUT_DIR target/build/${crateName}/build_script_build > target/build/${crateName}.opt set +e EXTRA_BUILD=$(sed -n "s/^cargo:rustc-flags=\(.*\)/\1/p" target/build/${crateName}.opt | tr '\n' ' ') @@ -245,9 +241,12 @@ let buildCrate = { crateName, crateVersion, buildDependencies, dependencies, fi # Remove object files to avoid "wrong ELF type" find target -type f -name "*.o" -print0 | xargs -0 rm -f + + runHook postBuild '' + finalBins; installCrate = crateName: '' + runHook preInstall mkdir -p $out mkdir $out/rlibs if [ -s target/env ]; then @@ -266,6 +265,7 @@ let buildCrate = { crateName, crateVersion, buildDependencies, dependencies, mkdir -p $out/bin cp -P target/bin/* $out/bin # */ fi + runHook postInstall ''; in From 099e7137647e084c01dbf50b0f24766875c4834d Mon Sep 17 00:00:00 2001 From: "pe@pijul.org" Date: Sat, 18 Nov 2017 18:05:57 +0100 Subject: [PATCH 27/47] BuildInputs overrides --- pkgs/build-support/rust/carnix.nix | 1 - .../rust/defaultCrateOverrides.nix | 7 ++ pkgs/build-support/rust/rust-utils.nix | 67 ++++++++++--------- 3 files changed, 41 insertions(+), 34 deletions(-) create mode 100644 pkgs/build-support/rust/defaultCrateOverrides.nix diff --git a/pkgs/build-support/rust/carnix.nix b/pkgs/build-support/rust/carnix.nix index ce936c9a3f4958..5ace06bb398f58 100644 --- a/pkgs/build-support/rust/carnix.nix +++ b/pkgs/build-support/rust/carnix.nix @@ -142,7 +142,6 @@ let aho_corasick_0_6_3_ = { dependencies?[], buildDependencies?[], features?[] } crateName = "libsqlite3-sys"; version = "0.8.1"; sha256 = "131bjlxzni2aw3048p7sj8cs3v0jpkb3fxdpc5i7ndyhvpz3gdza"; - buildInputs = [ pkgs.sqlite pkgs.pkgconfig ]; build = "build.rs"; inherit dependencies buildDependencies features; }; diff --git a/pkgs/build-support/rust/defaultCrateOverrides.nix b/pkgs/build-support/rust/defaultCrateOverrides.nix new file mode 100644 index 00000000000000..587dd1799ffdef --- /dev/null +++ b/pkgs/build-support/rust/defaultCrateOverrides.nix @@ -0,0 +1,7 @@ +{ pkgs, ... }: + +with pkgs; +{ + libsqlite3-sys = attrs: { buildInputs = [ pkgconfig sqlite ] ++ (attrs.buildInputs or []); }; + openssl-sys = attrs: { buildInputs = [ pkgconfig openssl ] ++ (attrs.buildInputs or []); }; +} diff --git a/pkgs/build-support/rust/rust-utils.nix b/pkgs/build-support/rust/rust-utils.nix index 920ba813d08e66..ad60acfbd8cd31 100644 --- a/pkgs/build-support/rust/rust-utils.nix +++ b/pkgs/build-support/rust/rust-utils.nix @@ -102,7 +102,7 @@ let buildCrate = { crateName, crateVersion, buildDependencies, dependencies, if [ -e target/link.build ]; then EXTRA_BUILD_FLAGS="$EXTRA_BUILD_FLAGS $(cat target/link.build)" fi - ${optionalString verbose '' + ${lib.optionalString verbose '' echo $boldgreen""Running$norm rustc --crate-name build_script_build $BUILD --crate-type bin ${rustcOpts} ${crateFeatures} --out-dir target/build/${crateName} --emit=dep-info,link -L dependency=target/buildDeps ${buildDeps} --cap-lints allow $EXTRA_BUILD_FLAGS ''} rustc --crate-name build_script_build $BUILD --crate-type bin ${rustcOpts} \ @@ -141,7 +141,7 @@ let buildCrate = { crateName, crateVersion, buildDependencies, dependencies, if [ -e "${libPath}" ] ; then - ${optionalString verbose '' + ${lib.optionalString verbose '' echo $boldgreen""Building ${libPath}$norm rustc --crate-name $CRATE_NAME ${libPath} --crate-type ${crateType} ${rustcOpts} ${rustcMeta} ${crateFeatures} --out-dir target/lib --emit=dep-info,link -L dependency=target/deps ${deps} --cap-lints allow $BUILD_OUT_DIR $EXTRA_BUILD $EXTRA_FEATURES ''} rustc --crate-name $CRATE_NAME ${libPath} --crate-type ${crateType} \ @@ -157,7 +157,7 @@ let buildCrate = { crateName, crateVersion, buildDependencies, dependencies, echo "$boldgreen""Building src/lib.rs (${libName})""$norm" - ${optionalString verbose '' + ${lib.optionalString verbose '' echo $boldgreen""Running$norm rustc --crate-name $CRATE_NAME src/lib.rs --crate-type ${crateType} ${rustcOpts} ${rustcMeta} ${crateFeatures} --out-dir target/lib --emit=dep-info,link -L dependency=target/deps ${deps} --cap-lints allow $BUILD_OUT_DIR $EXTRA_BUILD $EXTRA_FEATURES ''} rustc --crate-name $CRATE_NAME src/lib.rs --crate-type ${crateType} \ @@ -173,7 +173,7 @@ let buildCrate = { crateName, crateVersion, buildDependencies, dependencies, elif [ -e src/${libName}.rs ] ; then echo "$boldgreen""Building src/${libName}.rs""$norm" - ${optionalString verbose '' + ${lib.optionalString verbose '' echo $boldgreen""Running$norm rustc --crate-name $CRATE_NAME src/${libName}.rs --crate-type ${crateType} ${rustcOpts} ${rustcMeta} ${crateFeatures} --out-dir target/lib --emit=dep-info,link -L dependency=target/deps ${deps} --cap-lints allow $BUILD_OUT_DIR $EXTRA_BUILD $EXTRA_FEATURES ''} rustc --crate-name $CRATE_NAME src/${libName}.rs --crate-type ${crateType} \ @@ -220,7 +220,7 @@ let buildCrate = { crateName, crateVersion, buildDependencies, dependencies, echo "${crateBin}" | sed -n 1'p' | tr ',' '\n' | while read BIN; do if [ ! -z "$BIN" ]; then echo "$boldgreen""Building $BIN$norm" - ${optionalString verbose '' + ${lib.optionalString verbose '' echo "$boldgreen""Running$norm rustc --crate-name $BIN --crate-type bin ${rustcOpts} ${crateFeatures} --out-dir target/bin --emit=dep-info,link -L dependency=target/deps $LINK ${deps}$EXTRA_LIB --cap-lints allow $BUILD_OUT_DIR $EXTRA_BUILD $EXTRA_FEATURES" ''} rustc --crate-name $BIN --crate-type bin ${rustcOpts} ${crateFeatures} \ @@ -231,7 +231,7 @@ let buildCrate = { crateName, crateVersion, buildDependencies, dependencies, done if [[ (-z "${crateBin}") && (-e src/main.rs) ]]; then echo "$boldgreen""Building src/main.rs (${crateName})$norm" - ${optionalString verbose '' + ${lib.optionalString verbose '' echo "$boldgreen""Running$norm rustc --crate-name $CRATE_NAME src/main.rs --crate-type bin ${rustcOpts} ${crateFeatures} --out-dir target/bin --emit=dep-info,link -L dependency=target/deps $LINK ${deps}$EXTRA_LIB --cap-lints allow $BUILD_OUT_DIR $EXTRA_BUILD $EXTRA_FEATURES" ''} rustc --crate-name $CRATE_NAME src/main.rs --crate-type bin ${rustcOpts} \ @@ -270,7 +270,10 @@ let buildCrate = { crateName, crateVersion, buildDependencies, dependencies, in -crate: lib.makeOverridable ({ rust, release, verbose }: stdenv.mkDerivation rec { +crate_: lib.makeOverridable ({ rust, release, verbose, crateOverrides }: + +let crate = crate_ // (lib.attrByPath [ crate_.crateName ] (attr: {}) crateOverrides crate_); in +stdenv.mkDerivation rec { inherit (crate) crateName; @@ -279,60 +282,53 @@ crate: lib.makeOverridable ({ rust, release, verbose }: stdenv.mkDerivation rec else pkgs.fetchCrate { inherit (crate) crateName version sha256; }; name = "rust_${crate.crateName}-${crate.version}"; - buildInputs = [ rust pkgs.ncurses ] ++ (lib.attrByPath ["buildInputs"] [] crate); + buildInputs = [ rust pkgs.ncurses ] ++ (crate.buildInputs or []); dependencies = builtins.map (dep: dep.override { rust = rust; release = release; verbose = verbose; }) - (lib.attrByPath ["dependencies"] [] crate); + (crate.dependencies or []); buildDependencies = builtins.map (dep: dep.override { rust = rust; release = release; verbose = verbose; }) - (lib.attrByPath ["buildDependencies"] [] crate); + (crate.buildDependencies or []); completeDeps = lib.lists.unique (dependencies ++ lib.lists.concatMap (dep: dep.completeDeps) dependencies); completeBuildDeps = lib.lists.unique (buildDependencies ++ lib.lists.concatMap (dep: dep.completeBuildDeps) buildDependencies); - #builtins.foldl' (comp: dep: if lib.lists.any (x: x == comp) dep.completeBuildDeps then comp ++ dep.complete else comp) buildDependencies buildDependencies; - crateFeatures = if crate ? features then - lib.concatMapStringsSep " " (f: "--cfg feature=\\\"${f}\\\"") crate.features - else ""; + crateFeatures = lib.concatMapStringsSep " " (f: "--cfg feature=\\\"${f}\\\"") (crate.features or []); - libName = if crate ? libName then crate.libName else crate.crateName; - libPath = if crate ? libPath then crate.libPath else ""; + libName = crate.libName or crate.crateName; + libPath = crate.libPath or ""; metadata = builtins.substring 0 10 (builtins.hashString "sha256" (crateName + "-" + crateVersion)); - crateBin = if crate ? crateBin then + crateBin = builtins.foldl' (bins: bin: let name = - lib.strings.replaceStrings ["-"] ["_"] - (if bin ? name then bin.name else crateName); - path = if bin ? path then bin.path else "src/main.rs"; + lib.strings.replaceStrings ["-"] ["_"] (bin.name or crateName); + path = bin.path or "src/main.rs"; in bins + (if bin == "" then "" else ",") + "${name} ${path}" - ) "" crate.crateBin - else ""; + ) "" (crate.crateBin or []); - finalBins = if crate ? crateBin then + finalBins = builtins.foldl' (bins: bin: - let name = lib.strings.replaceStrings ["-"] ["_"] - (if bin ? name then bin.name else crateName); - new_name = if bin ? name then bin.name else crateName; + let name = lib.strings.replaceStrings ["-"] ["_"] (bin.name or crateName); + new_name = bin.name or crateName; in if name == new_name then bins else (bins + "mv target/bin/${name} target/bin/${new_name};") - ) "" crate.crateBin - else ""; + ) "" (crate.crateBin or []); - build = if crate ? build then crate.build else ""; + build = crate.build or ""; crateVersion = crate.version; crateType = - if lib.attrByPath ["procMacro"] false crate then "proc-macro" else - if lib.attrByPath ["plugin"] false crate then "dylib" else "lib"; - colors = lib.attrByPath [ "colors" ] "always" crate; + if crate ? procMacro then "proc-macro" else + if crate ? plugin then "dylib" else "lib"; + colors = crate.colors or "always"; buildPhase = buildCrate { inherit crateName dependencies buildDependencies completeDeps completeBuildDeps crateFeatures libName build release libPath crateType crateVersion @@ -340,4 +336,9 @@ crate: lib.makeOverridable ({ rust, release, verbose }: stdenv.mkDerivation rec }; installPhase = installCrate crateName; -}) { rust = pkgs.rustc; release = true; verbose = true; } +}) { + rust = pkgs.rustc; + release = true; + verbose = true; + crateOverrides = import ./defaultCrateOverrides.nix { pkgs = pkgs; }; +} From 68b786733401b95f15a7647f5d1cee360119d4a3 Mon Sep 17 00:00:00 2001 From: "pe@pijul.org" Date: Mon, 20 Nov 2017 15:01:16 +0100 Subject: [PATCH 28/47] Add CARGO_PKG_VERSION_* variables --- pkgs/build-support/rust/rust-utils.nix | 148 +++++++++++++------------ 1 file changed, 75 insertions(+), 73 deletions(-) diff --git a/pkgs/build-support/rust/rust-utils.nix b/pkgs/build-support/rust/rust-utils.nix index ad60acfbd8cd31..108382f1844244 100644 --- a/pkgs/build-support/rust/rust-utils.nix +++ b/pkgs/build-support/rust/rust-utils.nix @@ -19,9 +19,9 @@ let buildCrate = { crateName, crateVersion, buildDependencies, dependencies, (lib.concatMapStringsSep " " (dep: let extern = lib.strings.replaceStrings ["-"] ["_"] dep.libName; in (if dep.crateType == "lib" then - " --extern ${extern}=${dep.out}/rlibs/lib${extern}-${dep.metadata}.rlib" + " --extern ${extern}=${dep.out}/lib${extern}-${dep.metadata}.rlib" else - " --extern ${extern}=${dep.out}/rlibs/lib${extern}-${dep.metadata}${buildPlatform.extensions.sharedLibrary}") + " --extern ${extern}=${dep.out}/lib${extern}-${dep.metadata}${buildPlatform.extensions.sharedLibrary}") ) dependencies); deps = makeDeps dependencies; buildDeps = makeDeps buildDependencies; @@ -39,25 +39,26 @@ let buildCrate = { crateName, crateVersion, buildDependencies, dependencies, green="$(printf '\033[0;32m')" #set green boldgreen="$(printf '\033[0;1;32m')" #set bold, and set green. fi - runHook preBuild - mkdir -p target/{deps,lib,build,buildDeps} + mkdir -p target/deps + mkdir -p target/build + mkdir -p target/buildDeps chmod uga+w target -R for i in ${completeDepsDir}; do - ln -s -f $i/rlibs/*.rlib target/deps #*/ - ln -s -f $i/rlibs/*.so $i/rlibs/*.dylib target/deps #*/ - if [ -e "$i/rlibs/link" ]; then - cat $i/rlibs/link >> target/link - cat $i/rlibs/link >> target/link.final + ln -s -f $i/*.rlib target/deps #*/ + ln -s -f $i/*.so $i/*.dylib target/deps #*/ + if [ -e "$i/link" ]; then + cat $i/link >> target/link + cat $i/link >> target/link.final fi if [ -e $i/env ]; then source $i/env fi done for i in ${completeBuildDepsDir}; do - ln -s -f $i/rlibs/*.rlib target/buildDeps #*/ - ln -s -f $i/rlibs/*.so $i/rlibs/*.dylib target/buildDeps #*/ - if [ -e "$i/rlibs/link" ]; then - cat $i/rlibs/link >> target/link.build + ln -s -f $i/*.rlib target/buildDeps #*/ + ln -s -f $i/*.so $i/*.dylib target/buildDeps #*/ + if [ -e "$i/link" ]; then + cat $i/link >> target/link.build fi if [ -e $i/env ]; then source $i/env @@ -85,6 +86,14 @@ let buildCrate = { crateName, crateVersion, buildDependencies, dependencies, export HOST="${buildPlatform.config}" export PROFILE=${if release then "release" else "debug"} export OUT_DIR=$(pwd)/target/build/${crateName}.out + export CARGO_PKG_VERSION_MAJOR=$(echo ${crateVersion} | sed -e "s/\([^\.]*\)\..*/\1/") + export CARGO_PKG_VERSION_MINOR=$(echo ${crateVersion} | sed -e "s/[^\.]*\.\([^\.]*\)\..*\..*/\1/") + export CARGO_PKG_VERSION_PATCH=$(echo ${crateVersion} | sed -e "s/[^\.]*\.[^\.]*\.\([^\.]*\)\..*\..*/\1/") + export CARGO_PKG_VERSION_PRE=$(echo ${crateVersion} | sed -e "s/[^-]*-\(.*\)/\1/") + if [ -n "$CARGO_PKG_VERSION_PRE" ]; then + unset CARGO_PKG_VERSION_PRE + fi + BUILD="" if [[ ! -z "${build}" ]] ; then @@ -94,7 +103,7 @@ let buildCrate = { crateName, crateVersion, buildDependencies, dependencies, fi if [[ ! -z "$BUILD" ]] ; then echo "$boldgreen""Building $BUILD (${libName})""$norm" - mkdir -p target/build/{${crateName},${crateName}.out} + mkdir -p target/build/${crateName} EXTRA_BUILD_FLAGS="" if [ -e target/link_ ]; then EXTRA_BUILD_FLAGS=$(cat target/link_) @@ -102,15 +111,17 @@ let buildCrate = { crateName, crateVersion, buildDependencies, dependencies, if [ -e target/link.build ]; then EXTRA_BUILD_FLAGS="$EXTRA_BUILD_FLAGS $(cat target/link.build)" fi - ${lib.optionalString verbose '' + if ${toString verbose}; then echo $boldgreen""Running$norm rustc --crate-name build_script_build $BUILD --crate-type bin ${rustcOpts} ${crateFeatures} --out-dir target/build/${crateName} --emit=dep-info,link -L dependency=target/buildDeps ${buildDeps} --cap-lints allow $EXTRA_BUILD_FLAGS - ''} + fi rustc --crate-name build_script_build $BUILD --crate-type bin ${rustcOpts} \ ${crateFeatures} --out-dir target/build/${crateName} --emit=dep-info,link \ -L dependency=target/buildDeps ${buildDeps} --cap-lints allow $EXTRA_BUILD_FLAGS --color ${colors} + mkdir -p target/build/${crateName}.out export RUST_BACKTRACE=1 BUILD_OUT_DIR="-L $OUT_DIR" + mkdir -p $OUT_DIR target/build/${crateName}/build_script_build > target/build/${crateName}.opt set +e EXTRA_BUILD=$(sed -n "s/^cargo:rustc-flags=\(.*\)/\1/p" target/build/${crateName}.opt | tr '\n' ' ') @@ -141,11 +152,11 @@ let buildCrate = { crateName, crateVersion, buildDependencies, dependencies, if [ -e "${libPath}" ] ; then - ${lib.optionalString verbose '' - echo $boldgreen""Building ${libPath}$norm rustc --crate-name $CRATE_NAME ${libPath} --crate-type ${crateType} ${rustcOpts} ${rustcMeta} ${crateFeatures} --out-dir target/lib --emit=dep-info,link -L dependency=target/deps ${deps} --cap-lints allow $BUILD_OUT_DIR $EXTRA_BUILD $EXTRA_FEATURES - ''} + if ${toString verbose}; then + echo $boldgreen""Building ${libPath}$norm rustc --crate-name $CRATE_NAME ${libPath} --crate-type ${crateType} ${rustcOpts} ${rustcMeta} ${crateFeatures} --out-dir target/deps --emit=dep-info,link -L dependency=target/deps ${deps} --cap-lints allow $BUILD_OUT_DIR $EXTRA_BUILD $EXTRA_FEATURES + fi rustc --crate-name $CRATE_NAME ${libPath} --crate-type ${crateType} \ - ${rustcOpts} ${rustcMeta} ${crateFeatures} --out-dir target/lib \ + ${rustcOpts} ${rustcMeta} ${crateFeatures} --out-dir target/deps \ --emit=dep-info,link -L dependency=target/deps ${deps} --cap-lints allow \ $BUILD_OUT_DIR $EXTRA_BUILD $EXTRA_FEATURES --color ${colors} @@ -157,11 +168,11 @@ let buildCrate = { crateName, crateVersion, buildDependencies, dependencies, echo "$boldgreen""Building src/lib.rs (${libName})""$norm" - ${lib.optionalString verbose '' - echo $boldgreen""Running$norm rustc --crate-name $CRATE_NAME src/lib.rs --crate-type ${crateType} ${rustcOpts} ${rustcMeta} ${crateFeatures} --out-dir target/lib --emit=dep-info,link -L dependency=target/deps ${deps} --cap-lints allow $BUILD_OUT_DIR $EXTRA_BUILD $EXTRA_FEATURES - ''} + if ${toString verbose}; then + echo $boldgreen""Running$norm rustc --crate-name $CRATE_NAME src/lib.rs --crate-type ${crateType} ${rustcOpts} ${rustcMeta} ${crateFeatures} --out-dir target/deps --emit=dep-info,link -L dependency=target/deps ${deps} --cap-lints allow $BUILD_OUT_DIR $EXTRA_BUILD $EXTRA_FEATURES + fi rustc --crate-name $CRATE_NAME src/lib.rs --crate-type ${crateType} \ - ${rustcOpts} ${rustcMeta} ${crateFeatures} --out-dir target/lib \ + ${rustcOpts} ${rustcMeta} ${crateFeatures} --out-dir target/deps \ --emit=dep-info,link -L dependency=target/deps ${deps} --cap-lints allow \ $BUILD_OUT_DIR $EXTRA_BUILD $EXTRA_FEATURES --color ${colors} @@ -173,11 +184,11 @@ let buildCrate = { crateName, crateVersion, buildDependencies, dependencies, elif [ -e src/${libName}.rs ] ; then echo "$boldgreen""Building src/${libName}.rs""$norm" - ${lib.optionalString verbose '' - echo $boldgreen""Running$norm rustc --crate-name $CRATE_NAME src/${libName}.rs --crate-type ${crateType} ${rustcOpts} ${rustcMeta} ${crateFeatures} --out-dir target/lib --emit=dep-info,link -L dependency=target/deps ${deps} --cap-lints allow $BUILD_OUT_DIR $EXTRA_BUILD $EXTRA_FEATURES - ''} + if ${toString verbose}; then + echo $boldgreen""Running$norm rustc --crate-name $CRATE_NAME src/${libName}.rs --crate-type ${crateType} ${rustcOpts} ${rustcMeta} ${crateFeatures} --out-dir target/deps --emit=dep-info,link -L dependency=target/deps ${deps} --cap-lints allow $BUILD_OUT_DIR $EXTRA_BUILD $EXTRA_FEATURES + fi rustc --crate-name $CRATE_NAME src/${libName}.rs --crate-type ${crateType} \ - ${rustcOpts} ${rustcMeta} ${crateFeatures} --out-dir target/lib \ + ${rustcOpts} ${rustcMeta} ${crateFeatures} --out-dir target/deps \ --emit=dep-info,link -L dependency=target/deps ${deps} --cap-lints allow \ $BUILD_OUT_DIR $EXTRA_BUILD $EXTRA_FEATURES --color ${colors} @@ -192,7 +203,7 @@ let buildCrate = { crateName, crateVersion, buildDependencies, dependencies, if [ ! -z "$i" ]; then for lib in $i; do echo "-L $lib" >> target/link - L=$(echo $lib | sed -e "s#$(pwd)/target/build#$out/rlibs#") + L=$(echo $lib | sed -e "s#$(pwd)/target/build#$out#") echo "-L $L" >> target/link.final done fi @@ -220,9 +231,9 @@ let buildCrate = { crateName, crateVersion, buildDependencies, dependencies, echo "${crateBin}" | sed -n 1'p' | tr ',' '\n' | while read BIN; do if [ ! -z "$BIN" ]; then echo "$boldgreen""Building $BIN$norm" - ${lib.optionalString verbose '' + if ${toString verbose}; then echo "$boldgreen""Running$norm rustc --crate-name $BIN --crate-type bin ${rustcOpts} ${crateFeatures} --out-dir target/bin --emit=dep-info,link -L dependency=target/deps $LINK ${deps}$EXTRA_LIB --cap-lints allow $BUILD_OUT_DIR $EXTRA_BUILD $EXTRA_FEATURES" - ''} + fi rustc --crate-name $BIN --crate-type bin ${rustcOpts} ${crateFeatures} \ --out-dir target/bin --emit=dep-info,link -L dependency=target/deps \ $LINK ${deps}$EXTRA_LIB --cap-lints allow \ @@ -231,9 +242,9 @@ let buildCrate = { crateName, crateVersion, buildDependencies, dependencies, done if [[ (-z "${crateBin}") && (-e src/main.rs) ]]; then echo "$boldgreen""Building src/main.rs (${crateName})$norm" - ${lib.optionalString verbose '' + if ${toString verbose}; then echo "$boldgreen""Running$norm rustc --crate-name $CRATE_NAME src/main.rs --crate-type bin ${rustcOpts} ${crateFeatures} --out-dir target/bin --emit=dep-info,link -L dependency=target/deps $LINK ${deps}$EXTRA_LIB --cap-lints allow $BUILD_OUT_DIR $EXTRA_BUILD $EXTRA_FEATURES" - ''} + fi rustc --crate-name $CRATE_NAME src/main.rs --crate-type bin ${rustcOpts} \ ${crateFeatures} --out-dir target/bin --emit=dep-info,link \ -L dependency=target/deps $LINK ${deps}$EXTRA_LIB --cap-lints allow \ @@ -241,39 +252,29 @@ let buildCrate = { crateName, crateVersion, buildDependencies, dependencies, fi # Remove object files to avoid "wrong ELF type" find target -type f -name "*.o" -print0 | xargs -0 rm -f - - runHook postBuild '' + finalBins; installCrate = crateName: '' - runHook preInstall mkdir -p $out - mkdir $out/rlibs if [ -s target/env ]; then cp target/env $out/env fi if [ -s target/link.final ]; then - cp target/link.final $out/rlibs/link - fi - if [ "$(ls -A target/lib)" ]; then - cp target/lib/* $out/rlibs # */ + cp target/link.final $out/link fi + cp target/deps/* $out # */ if [ "$(ls -A target/build)" ]; then # */ - cp -r target/build/* $out/rlibs # */ + cp -r target/build/* $out # */ fi if [ "$(ls -A target/bin)" ]; then # */ mkdir -p $out/bin cp -P target/bin/* $out/bin # */ fi - runHook postInstall ''; in -crate_: lib.makeOverridable ({ rust, release, verbose, crateOverrides }: - -let crate = crate_ // (lib.attrByPath [ crate_.crateName ] (attr: {}) crateOverrides crate_); in -stdenv.mkDerivation rec { +crate: lib.makeOverridable ({ rust, release, verbose }: stdenv.mkDerivation rec { inherit (crate) crateName; @@ -282,53 +283,59 @@ stdenv.mkDerivation rec { else pkgs.fetchCrate { inherit (crate) crateName version sha256; }; name = "rust_${crate.crateName}-${crate.version}"; - buildInputs = [ rust pkgs.ncurses ] ++ (crate.buildInputs or []); + buildInputs = [ rust pkgs.ncurses ] ++ (lib.attrByPath ["buildInputs"] [] crate); dependencies = builtins.map (dep: dep.override { rust = rust; release = release; verbose = verbose; }) - (crate.dependencies or []); + (lib.attrByPath ["dependencies"] [] crate); buildDependencies = builtins.map (dep: dep.override { rust = rust; release = release; verbose = verbose; }) - (crate.buildDependencies or []); + (lib.attrByPath ["buildDependencies"] [] crate); - completeDeps = lib.lists.unique (dependencies ++ lib.lists.concatMap (dep: dep.completeDeps) dependencies); - completeBuildDeps = lib.lists.unique (buildDependencies ++ lib.lists.concatMap (dep: dep.completeBuildDeps) buildDependencies); + completeDeps = builtins.foldl' (comp: dep: if lib.lists.any (x: x == comp) dep.completeDeps then comp ++ dep.complete else comp) dependencies dependencies; + completeBuildDeps = builtins.foldl' (comp: dep: if lib.lists.any (x: x == comp) dep.completeBuildDeps then comp ++ dep.complete else comp) buildDependencies buildDependencies; - crateFeatures = lib.concatMapStringsSep " " (f: "--cfg feature=\\\"${f}\\\"") (crate.features or []); + crateFeatures = if crate ? features then + lib.concatMapStringsSep " " (f: "--cfg feature=\\\"${f}\\\"") crate.features + else ""; - libName = crate.libName or crate.crateName; - libPath = crate.libPath or ""; + libName = if crate ? libName then crate.libName else crate.crateName; + libPath = if crate ? libPath then crate.libPath else ""; metadata = builtins.substring 0 10 (builtins.hashString "sha256" (crateName + "-" + crateVersion)); - crateBin = + crateBin = if crate ? crateBin then builtins.foldl' (bins: bin: let name = - lib.strings.replaceStrings ["-"] ["_"] (bin.name or crateName); - path = bin.path or "src/main.rs"; + lib.strings.replaceStrings ["-"] ["_"] + (if bin ? name then bin.name else crateName); + path = if bin ? path then bin.path else "src/main.rs"; in bins + (if bin == "" then "" else ",") + "${name} ${path}" - ) "" (crate.crateBin or []); + ) "" crate.crateBin + else ""; - finalBins = + finalBins = if crate ? crateBin then builtins.foldl' (bins: bin: - let name = lib.strings.replaceStrings ["-"] ["_"] (bin.name or crateName); - new_name = bin.name or crateName; + let name = lib.strings.replaceStrings ["-"] ["_"] + (if bin ? name then bin.name else crateName); + new_name = if bin ? name then bin.name else crateName; in if name == new_name then bins else (bins + "mv target/bin/${name} target/bin/${new_name};") - ) "" (crate.crateBin or []); + ) "" crate.crateBin + else ""; - build = crate.build or ""; + build = if crate ? build then crate.build else ""; crateVersion = crate.version; crateType = - if crate ? procMacro then "proc-macro" else - if crate ? plugin then "dylib" else "lib"; - colors = crate.colors or "always"; + if lib.attrByPath ["procMacro"] false crate then "proc-macro" else + if lib.attrByPath ["plugin"] false crate then "dylib" else "lib"; + colors = lib.attrByPath [ "colors" ] "always" crate; buildPhase = buildCrate { inherit crateName dependencies buildDependencies completeDeps completeBuildDeps crateFeatures libName build release libPath crateType crateVersion @@ -336,9 +343,4 @@ stdenv.mkDerivation rec { }; installPhase = installCrate crateName; -}) { - rust = pkgs.rustc; - release = true; - verbose = true; - crateOverrides = import ./defaultCrateOverrides.nix { pkgs = pkgs; }; -} +}) { rust = pkgs.rustc; release = true; verbose = true; } From 50b984fe47eb4e080499421ca46b4de7c786984a Mon Sep 17 00:00:00 2001 From: "pe@pijul.org" Date: Fri, 24 Nov 2017 16:09:56 +0100 Subject: [PATCH 29/47] Merging FlorentBecker's recent refactoring --- pkgs/build-support/rust/rust-utils.nix | 245 ++++++++++++++----------- 1 file changed, 136 insertions(+), 109 deletions(-) diff --git a/pkgs/build-support/rust/rust-utils.nix b/pkgs/build-support/rust/rust-utils.nix index 108382f1844244..30576c4549646a 100644 --- a/pkgs/build-support/rust/rust-utils.nix +++ b/pkgs/build-support/rust/rust-utils.nix @@ -4,7 +4,7 @@ # This can be useful for deploying packages with NixOps, and to share # binary dependencies between projects. -{ lib, buildPlatform, stdenv, pkgs }: +{ lib, buildPlatform, stdenv, defaultCrateOverrides, fetchCrate, ncurses, rustc }: let buildCrate = { crateName, crateVersion, buildDependencies, dependencies, completeDeps, completeBuildDeps, @@ -19,15 +19,18 @@ let buildCrate = { crateName, crateVersion, buildDependencies, dependencies, (lib.concatMapStringsSep " " (dep: let extern = lib.strings.replaceStrings ["-"] ["_"] dep.libName; in (if dep.crateType == "lib" then - " --extern ${extern}=${dep.out}/lib${extern}-${dep.metadata}.rlib" + " --extern ${extern}=${dep.out}/lib/lib${extern}-${dep.metadata}.rlib" else - " --extern ${extern}=${dep.out}/lib${extern}-${dep.metadata}${buildPlatform.extensions.sharedLibrary}") + " --extern ${extern}=${dep.out}/lib/lib${extern}-${dep.metadata}${buildPlatform.extensions.sharedLibrary}") ) dependencies); deps = makeDeps dependencies; buildDeps = makeDeps buildDependencies; optLevel = if release then 3 else 0; rustcOpts = (if release then "-C opt-level=3" else "-C debuginfo=2"); rustcMeta = "-C metadata=${metadata} -C extra-filename=-${metadata}"; + version_ = lib.splitString "-" crateVersion; + versionPre = if lib.tail version_ == [] then "" else builtins.elemAt version_ 1; + version = lib.splitString "." (lib.head version_); in '' norm="" bold="" @@ -39,30 +42,91 @@ let buildCrate = { crateName, crateVersion, buildDependencies, dependencies, green="$(printf '\033[0;32m')" #set green boldgreen="$(printf '\033[0;1;32m')" #set bold, and set green. fi - mkdir -p target/deps - mkdir -p target/build - mkdir -p target/buildDeps - chmod uga+w target -R - for i in ${completeDepsDir}; do - ln -s -f $i/*.rlib target/deps #*/ - ln -s -f $i/*.so $i/*.dylib target/deps #*/ - if [ -e "$i/link" ]; then - cat $i/link >> target/link - cat $i/link >> target/link.final - fi - if [ -e $i/env ]; then + + echo_build_heading() { + start="" + end="" + if [[ x"${colors}" -eq x"always" ]]; then + start="$(printf '\033[0;1;32m')" #set bold, and set green. + end="$(printf '\033[0m')" #returns to "normal" + fi + if (( $# == 1 )); then + echo "$start""Building $1""$end" + else + echo "$start""Building $1 ($2)""$end" + fi + } + + noisily() { + start="" + end="" + if [[ x"${colors}" -eq x"always" ]]; then + start="$(printf '\033[0;1;32m')" #set bold, and set green. + end="$(printf '\033[0m')" #returns to "normal" + fi + ${lib.optionalString verbose '' + echo -n "$start"Running "$end" + echo $@ + ''} + $@ + } + + symlink_dependency() { + # $1 is the nix-store path of a dependency + i=$1 + dest=target/deps + if [ ! -z $2 ]; then + if [ "$2" = "--buildDep" ]; then + dest=target/buildDeps + fi + fi + ln -s -f $i/lib/*.rlib $dest #*/ + ln -s -f $i/lib/*.so $i/lib/*.dylib $dest #*/ + if [ -e "$i/lib/link" ]; then + cat $i/lib/link >> target/link + cat $i/lib/link >> target/link.final + fi + if [ -e $i/env ]; then source $i/env + fi + } + + build_lib() { + lib_src=$1 + echo_build_heading $lib_src ${libName} + + noisily rustc --crate-name $CRATE_NAME $lib_src --crate-type ${crateType} \ + ${rustcOpts} ${rustcMeta} ${crateFeatures} --out-dir target/lib \ + --emit=dep-info,link -L dependency=target/deps ${deps} --cap-lints allow \ + $BUILD_OUT_DIR $EXTRA_BUILD $EXTRA_FEATURES --color ${colors} + + EXTRA_LIB=" --extern $CRATE_NAME=target/lib/lib$CRATE_NAME-${metadata}.rlib" + if [ -e target/deps/lib$CRATE_NAME-${metadata}${buildPlatform.extensions.sharedLibrary} ]; then + EXTRA_LIB="$EXTRA_LIB --extern $CRATE_NAME=target/lib/lib$CRATE_NAME-${metadata}${buildPlatform.extensions.sharedLibrary}" fi + } + + build_bin() { + crate_name=$1 + main_file="" + if [ ! -z $2 ]; then + main_file=$2 + fi + echo_build_heading $@ + noisily rustc --crate-name $crate_name $main_file --crate-type bin ${rustcOpts}\ + ${crateFeatures} --out-dir target/bin --emit=dep-info,link -L dependency=target/deps \ + $LINK ${deps}$EXTRA_LIB --cap-lints allow \ + $BUILD_OUT_DIR $EXTRA_BUILD $EXTRA_FEATURES --color ${colors} + } + + runHook preBuild + mkdir -p target/{deps,lib,build,buildDeps} + chmod uga+w target -R + for i in ${completeDepsDir}; do + symlink_dependency $i done for i in ${completeBuildDepsDir}; do - ln -s -f $i/*.rlib target/buildDeps #*/ - ln -s -f $i/*.so $i/*.dylib target/buildDeps #*/ - if [ -e "$i/link" ]; then - cat $i/link >> target/link.build - fi - if [ -e $i/env ]; then - source $i/env - fi + symlink_dependency $i --buildDep done if [ -e target/link ]; then sort -u target/link > target/link.sorted @@ -86,10 +150,12 @@ let buildCrate = { crateName, crateVersion, buildDependencies, dependencies, export HOST="${buildPlatform.config}" export PROFILE=${if release then "release" else "debug"} export OUT_DIR=$(pwd)/target/build/${crateName}.out - export CARGO_PKG_VERSION_MAJOR=$(echo ${crateVersion} | sed -e "s/\([^\.]*\)\..*/\1/") - export CARGO_PKG_VERSION_MINOR=$(echo ${crateVersion} | sed -e "s/[^\.]*\.\([^\.]*\)\..*\..*/\1/") - export CARGO_PKG_VERSION_PATCH=$(echo ${crateVersion} | sed -e "s/[^\.]*\.[^\.]*\.\([^\.]*\)\..*\..*/\1/") - export CARGO_PKG_VERSION_PRE=$(echo ${crateVersion} | sed -e "s/[^-]*-\(.*\)/\1/") + export CARGO_PKG_VERSION_MAJOR=${builtins.elemAt version 0} + export CARGO_PKG_VERSION_MINOR=${builtins.elemAt version 1} + export CARGO_PKG_VERSION_PATCH=${builtins.elemAt version 2} + if [ -n "${versionPre}" ]; then + export CARGO_PKG_VERSION_PRE="${versionPre}" + fi if [ -n "$CARGO_PKG_VERSION_PRE" ]; then unset CARGO_PKG_VERSION_PRE fi @@ -102,7 +168,7 @@ let buildCrate = { crateName, crateVersion, buildDependencies, dependencies, BUILD="build.rs" fi if [[ ! -z "$BUILD" ]] ; then - echo "$boldgreen""Building $BUILD (${libName})""$norm" + echo_build_heading "$BUILD" ${libName} mkdir -p target/build/${crateName} EXTRA_BUILD_FLAGS="" if [ -e target/link_ ]; then @@ -111,12 +177,9 @@ let buildCrate = { crateName, crateVersion, buildDependencies, dependencies, if [ -e target/link.build ]; then EXTRA_BUILD_FLAGS="$EXTRA_BUILD_FLAGS $(cat target/link.build)" fi - if ${toString verbose}; then - echo $boldgreen""Running$norm rustc --crate-name build_script_build $BUILD --crate-type bin ${rustcOpts} ${crateFeatures} --out-dir target/build/${crateName} --emit=dep-info,link -L dependency=target/buildDeps ${buildDeps} --cap-lints allow $EXTRA_BUILD_FLAGS - fi - rustc --crate-name build_script_build $BUILD --crate-type bin ${rustcOpts} \ - ${crateFeatures} --out-dir target/build/${crateName} --emit=dep-info,link \ - -L dependency=target/buildDeps ${buildDeps} --cap-lints allow $EXTRA_BUILD_FLAGS --color ${colors} + noisily rustc --crate-name build_script_build $BUILD --crate-type bin ${rustcOpts} \ + ${crateFeatures} --out-dir target/build/${crateName} --emit=dep-info,link \ + -L dependency=target/buildDeps ${buildDeps} --cap-lints allow $EXTRA_BUILD_FLAGS --color ${colors} mkdir -p target/build/${crateName}.out export RUST_BACKTRACE=1 @@ -151,52 +214,11 @@ let buildCrate = { crateName, crateVersion, buildDependencies, dependencies, fi if [ -e "${libPath}" ] ; then - - if ${toString verbose}; then - echo $boldgreen""Building ${libPath}$norm rustc --crate-name $CRATE_NAME ${libPath} --crate-type ${crateType} ${rustcOpts} ${rustcMeta} ${crateFeatures} --out-dir target/deps --emit=dep-info,link -L dependency=target/deps ${deps} --cap-lints allow $BUILD_OUT_DIR $EXTRA_BUILD $EXTRA_FEATURES - fi - rustc --crate-name $CRATE_NAME ${libPath} --crate-type ${crateType} \ - ${rustcOpts} ${rustcMeta} ${crateFeatures} --out-dir target/deps \ - --emit=dep-info,link -L dependency=target/deps ${deps} --cap-lints allow \ - $BUILD_OUT_DIR $EXTRA_BUILD $EXTRA_FEATURES --color ${colors} - - EXTRA_LIB=" --extern $CRATE_NAME=target/deps/lib$CRATE_NAME-${metadata}.rlib" - if [ -e target/deps/lib$CRATE_NAME-${metadata}${buildPlatform.extensions.sharedLibrary} ]; then - EXTRA_LIB="$EXTRA_LIB --extern $CRATE_NAME=target/deps/lib$CRATE_NAME-${metadata}${buildPlatform.extensions.sharedLibrary}" - fi + build_lib ${libPath} elif [ -e src/lib.rs ] ; then - - echo "$boldgreen""Building src/lib.rs (${libName})""$norm" - - if ${toString verbose}; then - echo $boldgreen""Running$norm rustc --crate-name $CRATE_NAME src/lib.rs --crate-type ${crateType} ${rustcOpts} ${rustcMeta} ${crateFeatures} --out-dir target/deps --emit=dep-info,link -L dependency=target/deps ${deps} --cap-lints allow $BUILD_OUT_DIR $EXTRA_BUILD $EXTRA_FEATURES - fi - rustc --crate-name $CRATE_NAME src/lib.rs --crate-type ${crateType} \ - ${rustcOpts} ${rustcMeta} ${crateFeatures} --out-dir target/deps \ - --emit=dep-info,link -L dependency=target/deps ${deps} --cap-lints allow \ - $BUILD_OUT_DIR $EXTRA_BUILD $EXTRA_FEATURES --color ${colors} - - EXTRA_LIB=" --extern $CRATE_NAME=target/deps/lib$CRATE_NAME-${metadata}.rlib" - if [ -e target/deps/lib$CRATE_NAME-${metadata}${buildPlatform.extensions.sharedLibrary} ]; then - EXTRA_LIB="$EXTRA_LIB --extern $CRATE_NAME=target/deps/lib$CRATE_NAME-${metadata}${buildPlatform.extensions.sharedLibrary}" - fi - + build_lib src/lib.rs elif [ -e src/${libName}.rs ] ; then - - echo "$boldgreen""Building src/${libName}.rs""$norm" - if ${toString verbose}; then - echo $boldgreen""Running$norm rustc --crate-name $CRATE_NAME src/${libName}.rs --crate-type ${crateType} ${rustcOpts} ${rustcMeta} ${crateFeatures} --out-dir target/deps --emit=dep-info,link -L dependency=target/deps ${deps} --cap-lints allow $BUILD_OUT_DIR $EXTRA_BUILD $EXTRA_FEATURES - fi - rustc --crate-name $CRATE_NAME src/${libName}.rs --crate-type ${crateType} \ - ${rustcOpts} ${rustcMeta} ${crateFeatures} --out-dir target/deps \ - --emit=dep-info,link -L dependency=target/deps ${deps} --cap-lints allow \ - $BUILD_OUT_DIR $EXTRA_BUILD $EXTRA_FEATURES --color ${colors} - - EXTRA_LIB=" --extern $CRATE_NAME=target/deps/lib$CRATE_NAME-${metadata}.rlib" - if [ -e target/deps/lib$CRATE_NAME-${metadata}${buildPlatform.extensions.sharedLibrary} ]; then - EXTRA_LIB="$EXTRA_LIB --extern $CRATE_NAME=target/deps/lib$CRATE_NAME-${metadata}${buildPlatform.extensions.sharedLibrary}" - fi - + build_lib src/${libName}.rs fi echo "$EXTRA_LINK_SEARCH" | while read i; do @@ -230,28 +252,15 @@ let buildCrate = { crateName, crateVersion, buildDependencies, dependencies, mkdir -p target/bin echo "${crateBin}" | sed -n 1'p' | tr ',' '\n' | while read BIN; do if [ ! -z "$BIN" ]; then - echo "$boldgreen""Building $BIN$norm" - if ${toString verbose}; then - echo "$boldgreen""Running$norm rustc --crate-name $BIN --crate-type bin ${rustcOpts} ${crateFeatures} --out-dir target/bin --emit=dep-info,link -L dependency=target/deps $LINK ${deps}$EXTRA_LIB --cap-lints allow $BUILD_OUT_DIR $EXTRA_BUILD $EXTRA_FEATURES" - fi - rustc --crate-name $BIN --crate-type bin ${rustcOpts} ${crateFeatures} \ - --out-dir target/bin --emit=dep-info,link -L dependency=target/deps \ - $LINK ${deps}$EXTRA_LIB --cap-lints allow \ - $BUILD_OUT_DIR $EXTRA_BUILD $EXTRA_FEATURES --color ${colors} + build_bin $BIN fi done if [[ (-z "${crateBin}") && (-e src/main.rs) ]]; then - echo "$boldgreen""Building src/main.rs (${crateName})$norm" - if ${toString verbose}; then - echo "$boldgreen""Running$norm rustc --crate-name $CRATE_NAME src/main.rs --crate-type bin ${rustcOpts} ${crateFeatures} --out-dir target/bin --emit=dep-info,link -L dependency=target/deps $LINK ${deps}$EXTRA_LIB --cap-lints allow $BUILD_OUT_DIR $EXTRA_BUILD $EXTRA_FEATURES" - fi - rustc --crate-name $CRATE_NAME src/main.rs --crate-type bin ${rustcOpts} \ - ${crateFeatures} --out-dir target/bin --emit=dep-info,link \ - -L dependency=target/deps $LINK ${deps}$EXTRA_LIB --cap-lints allow \ - $BUILD_OUT_DIR $EXTRA_BUILD $EXTRA_FEATURES --color ${colors} + build_bin ${crateName} src/main.rs fi # Remove object files to avoid "wrong ELF type" find target -type f -name "*.o" -print0 | xargs -0 rm -f + runHook postBuild '' + finalBins; installCrate = crateName: '' @@ -260,42 +269,55 @@ let buildCrate = { crateName, crateVersion, buildDependencies, dependencies, cp target/env $out/env fi if [ -s target/link.final ]; then - cp target/link.final $out/link + mkdir -p $out/lib + cp target/link.final $out/lib/link + fi + # if [ "$(ls -A target/deps)" ]; then + # cp target/deps/* $out # */ + # fi + if [ "$(ls -A target/lib)" ]; then + mkdir -p $out/lib + cp target/lib/* $out/lib #*/ fi - cp target/deps/* $out # */ if [ "$(ls -A target/build)" ]; then # */ - cp -r target/build/* $out # */ + mkdir -p $out/lib + cp -r target/build/* $out/lib # */ fi - if [ "$(ls -A target/bin)" ]; then # */ + if [ "$(ls -A target/bin)" ]; then mkdir -p $out/bin cp -P target/bin/* $out/bin # */ fi ''; - in -crate: lib.makeOverridable ({ rust, release, verbose }: stdenv.mkDerivation rec { +crate_: lib.makeOverridable ({ rust, release, verbose, crateOverrides }: + +let crate = crate_ // (lib.attrByPath [ crate_.crateName ] (attr: {}) crateOverrides crate_); in +stdenv.mkDerivation rec { inherit (crate) crateName; src = if lib.hasAttr "src" crate then crate.src else - pkgs.fetchCrate { inherit (crate) crateName version sha256; }; + fetchCrate { inherit (crate) crateName version sha256; }; name = "rust_${crate.crateName}-${crate.version}"; - buildInputs = [ rust pkgs.ncurses ] ++ (lib.attrByPath ["buildInputs"] [] crate); + buildInputs = [ rust ncurses ] ++ (crate.buildInputs or []); dependencies = builtins.map - (dep: dep.override { rust = rust; release = release; verbose = verbose; }) - (lib.attrByPath ["dependencies"] [] crate); + (dep: dep.override { rust = rust; release = release; verbose = verbose; crateOverrides = crateOverrides; }) + (crate.dependencies or []); buildDependencies = builtins.map - (dep: dep.override { rust = rust; release = release; verbose = verbose; }) - (lib.attrByPath ["buildDependencies"] [] crate); + (dep: dep.override { rust = rust; release = release; verbose = verbose; crateOverrides = crateOverrides; }) + (crate.buildDependencies or []); - completeDeps = builtins.foldl' (comp: dep: if lib.lists.any (x: x == comp) dep.completeDeps then comp ++ dep.complete else comp) dependencies dependencies; - completeBuildDeps = builtins.foldl' (comp: dep: if lib.lists.any (x: x == comp) dep.completeBuildDeps then comp ++ dep.complete else comp) buildDependencies buildDependencies; + completeDeps = lib.lists.unique (dependencies ++ lib.lists.concatMap (dep: dep.completeDeps) dependencies); + completeBuildDeps = lib.lists.unique ( + buildDependencies + ++ lib.lists.concatMap (dep: dep.completeBuildDeps ++ dep.completeDeps) buildDependencies + ); crateFeatures = if crate ? features then lib.concatMapStringsSep " " (f: "--cfg feature=\\\"${f}\\\"") crate.features @@ -343,4 +365,9 @@ crate: lib.makeOverridable ({ rust, release, verbose }: stdenv.mkDerivation rec }; installPhase = installCrate crateName; -}) { rust = pkgs.rustc; release = true; verbose = true; } +}) { + rust = rustc; + release = true; + verbose = true; + crateOverrides = defaultCrateOverrides; +} From 993d3760592754bd9bdbbcac3e618d58d33c898b Mon Sep 17 00:00:00 2001 From: "pe@pijul.org" Date: Fri, 24 Nov 2017 21:02:29 +0100 Subject: [PATCH 30/47] defaultCrateOverrides without { pkgs } argument --- pkgs/build-support/rust/defaultCrateOverrides.nix | 3 +-- pkgs/top-level/all-packages.nix | 2 ++ 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/pkgs/build-support/rust/defaultCrateOverrides.nix b/pkgs/build-support/rust/defaultCrateOverrides.nix index 587dd1799ffdef..0c6b4d9f983481 100644 --- a/pkgs/build-support/rust/defaultCrateOverrides.nix +++ b/pkgs/build-support/rust/defaultCrateOverrides.nix @@ -1,6 +1,5 @@ -{ pkgs, ... }: +{ pkgconfig, sqlite, openssl, ... }: -with pkgs; { libsqlite3-sys = attrs: { buildInputs = [ pkgconfig sqlite ] ++ (attrs.buildInputs or []); }; openssl-sys = attrs: { buildInputs = [ pkgconfig openssl ] ++ (attrs.buildInputs or []); }; diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index a8cc009644ff3d..230abd6d455500 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -6221,6 +6221,8 @@ with pkgs; carnix = (callPackage ../build-support/rust/carnix.nix { }).carnix_0_4_8; + defaultCrateOverrides = callPackage ../build-support/rust/defaultCrateOverrides.nix { }; + rustPlatform = recurseIntoAttrs (makeRustPlatform rust); makeRustPlatform = rust: lib.fix (self: From a99ef129d0c9e2e275f8adbe71bb2efe40537e64 Mon Sep 17 00:00:00 2001 From: "pe@pijul.org" Date: Mon, 27 Nov 2017 07:29:03 +0100 Subject: [PATCH 31/47] Crate name cannot contain '-' --- pkgs/build-support/rust/rust-utils.nix | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/pkgs/build-support/rust/rust-utils.nix b/pkgs/build-support/rust/rust-utils.nix index 30576c4549646a..ceb10b80675aa1 100644 --- a/pkgs/build-support/rust/rust-utils.nix +++ b/pkgs/build-support/rust/rust-utils.nix @@ -28,6 +28,7 @@ let buildCrate = { crateName, crateVersion, buildDependencies, dependencies, optLevel = if release then 3 else 0; rustcOpts = (if release then "-C opt-level=3" else "-C debuginfo=2"); rustcMeta = "-C metadata=${metadata} -C extra-filename=-${metadata}"; + crateName_ = lib.strings.replaceStrings ["-"] ["_"] crateName; version_ = lib.splitString "-" crateVersion; versionPre = if lib.tail version_ == [] then "" else builtins.elemAt version_ 1; version = lib.splitString "." (lib.head version_); @@ -225,7 +226,7 @@ let buildCrate = { crateName, crateVersion, buildDependencies, dependencies, if [ ! -z "$i" ]; then for lib in $i; do echo "-L $lib" >> target/link - L=$(echo $lib | sed -e "s#$(pwd)/target/build#$out#") + L=$(echo $lib | sed -e "s#$(pwd)/target/build#$out/lib#") echo "-L $L" >> target/link.final done fi @@ -256,7 +257,7 @@ let buildCrate = { crateName, crateVersion, buildDependencies, dependencies, fi done if [[ (-z "${crateBin}") && (-e src/main.rs) ]]; then - build_bin ${crateName} src/main.rs + build_bin ${crateName_} src/main.rs fi # Remove object files to avoid "wrong ELF type" find target -type f -name "*.o" -print0 | xargs -0 rm -f @@ -272,9 +273,6 @@ let buildCrate = { crateName, crateVersion, buildDependencies, dependencies, mkdir -p $out/lib cp target/link.final $out/lib/link fi - # if [ "$(ls -A target/deps)" ]; then - # cp target/deps/* $out # */ - # fi if [ "$(ls -A target/lib)" ]; then mkdir -p $out/lib cp target/lib/* $out/lib #*/ From 7e6e3b5cb94663a37a3999f9e8d920207b51ae79 Mon Sep 17 00:00:00 2001 From: "pe@pijul.org" Date: Mon, 27 Nov 2017 15:01:12 +0100 Subject: [PATCH 32/47] Fixing the names of binaries containing a - --- pkgs/build-support/rust/rust-utils.nix | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/pkgs/build-support/rust/rust-utils.nix b/pkgs/build-support/rust/rust-utils.nix index ceb10b80675aa1..73f026fd68faae 100644 --- a/pkgs/build-support/rust/rust-utils.nix +++ b/pkgs/build-support/rust/rust-utils.nix @@ -28,7 +28,6 @@ let buildCrate = { crateName, crateVersion, buildDependencies, dependencies, optLevel = if release then 3 else 0; rustcOpts = (if release then "-C opt-level=3" else "-C debuginfo=2"); rustcMeta = "-C metadata=${metadata} -C extra-filename=-${metadata}"; - crateName_ = lib.strings.replaceStrings ["-"] ["_"] crateName; version_ = lib.splitString "-" crateVersion; versionPre = if lib.tail version_ == [] then "" else builtins.elemAt version_ 1; version = lib.splitString "." (lib.head version_); @@ -109,15 +108,19 @@ let buildCrate = { crateName, crateVersion, buildDependencies, dependencies, build_bin() { crate_name=$1 + crate_name_=$(echo $crate_name | sed -e "s/-/_/g") main_file="" if [ ! -z $2 ]; then main_file=$2 fi echo_build_heading $@ - noisily rustc --crate-name $crate_name $main_file --crate-type bin ${rustcOpts}\ + noisily rustc --crate-name $crate_name_ $main_file --crate-type bin ${rustcOpts}\ ${crateFeatures} --out-dir target/bin --emit=dep-info,link -L dependency=target/deps \ $LINK ${deps}$EXTRA_LIB --cap-lints allow \ $BUILD_OUT_DIR $EXTRA_BUILD $EXTRA_FEATURES --color ${colors} + if [ "$crate_name_" -ne "$crate_name"]; then + mv target/bin/$crate_name_ target/bin/$crate_name + fi } runHook preBuild @@ -257,7 +260,7 @@ let buildCrate = { crateName, crateVersion, buildDependencies, dependencies, fi done if [[ (-z "${crateBin}") && (-e src/main.rs) ]]; then - build_bin ${crateName_} src/main.rs + build_bin ${crateName} src/main.rs fi # Remove object files to avoid "wrong ELF type" find target -type f -name "*.o" -print0 | xargs -0 rm -f From c82be14741cc23907595ea3f843a8208871daa42 Mon Sep 17 00:00:00 2001 From: "pe@pijul.org" Date: Wed, 29 Nov 2017 13:14:24 +0100 Subject: [PATCH 33/47] Carnix 0.4.9 --- doc/languages-frameworks/rust.md | 2 +- pkgs/build-support/rust/carnix.nix | 16 +++++----------- pkgs/build-support/rust/rust-utils.nix | 4 ++-- pkgs/top-level/all-packages.nix | 2 +- 4 files changed, 9 insertions(+), 15 deletions(-) diff --git a/doc/languages-frameworks/rust.md b/doc/languages-frameworks/rust.md index 3f9e79829b8d4d..b75303a1bbd9a4 100644 --- a/doc/languages-frameworks/rust.md +++ b/doc/languages-frameworks/rust.md @@ -74,7 +74,7 @@ an example for a minimal `hello` crate: $ cargo build Compiling hello v0.1.0 (file:///tmp/hello) Finished dev [unoptimized + debuginfo] target(s) in 0.20 secs - $ carnix -o hello.nix --src ./. Cargo.lock + $ carnix -o hello.nix --src ./. Cargo.lock --standalone $ nix-build hello.nix Now, the file produced by the call to `carnix`, called `hello.nix`, looks like: diff --git a/pkgs/build-support/rust/carnix.nix b/pkgs/build-support/rust/carnix.nix index 5ace06bb398f58..80480e25ce6f38 100644 --- a/pkgs/build-support/rust/carnix.nix +++ b/pkgs/build-support/rust/carnix.nix @@ -1,10 +1,4 @@ -# This file contains the nix expression necessary to compile carnix, a -# tool to generate nix expression from Rust Cargo.lock files. -# -# Starts with functions that output crates, and then calls them with -# the proper dependencies computed from the carnix's own Cargo.lock. -{ pkgs, ... }: -with pkgs; +{ buildPlatform, buildRustCrate, ... }: let aho_corasick_0_6_3_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate { crateName = "aho-corasick"; version = "0.6.3"; @@ -50,10 +44,10 @@ let aho_corasick_0_6_3_ = { dependencies?[], buildDependencies?[], features?[] } sha256 = "18h073l5jd88rx4qdr95fjddr9rk79pb1aqnshzdnw16cfmb9rws"; inherit dependencies buildDependencies features; }; - carnix_0_4_8_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate { + carnix_0_4_9_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate { crateName = "carnix"; - version = "0.4.8"; - sha256 = "0n56wbbivmz0r0nyvpsnnqksmlpqc7f7m8jidj1pywm026jhh5yg"; + version = "0.4.9"; + sha256 = "18h073l5jd88rx4qdr95fjddr9rk79pb1aqnshzdnw16cfmb9rws"; inherit dependencies buildDependencies features; }; cc_1_0_3_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate { @@ -398,7 +392,7 @@ rec { bitflags_0_9_1 = bitflags_0_9_1_ { features = [ "example_generated" ]; }; - carnix_0_4_8 = carnix_0_4_8_ { + carnix_0_4_9 = carnix_0_4_9_ { dependencies = [ clap_2_27_1 env_logger_0_4_3 error_chain_0_11_0 log_0_3_8 nom_3_2_1 regex_0_2_2 rusqlite_0_12_0 serde_1_0_19 serde_derive_1_0_19 serde_json_1_0_5 tempdir_0_3_5 toml_0_4_5 ]; }; cc_1_0_3 = cc_1_0_3_ { diff --git a/pkgs/build-support/rust/rust-utils.nix b/pkgs/build-support/rust/rust-utils.nix index 73f026fd68faae..5baf0e0ff90bb8 100644 --- a/pkgs/build-support/rust/rust-utils.nix +++ b/pkgs/build-support/rust/rust-utils.nix @@ -118,7 +118,7 @@ let buildCrate = { crateName, crateVersion, buildDependencies, dependencies, ${crateFeatures} --out-dir target/bin --emit=dep-info,link -L dependency=target/deps \ $LINK ${deps}$EXTRA_LIB --cap-lints allow \ $BUILD_OUT_DIR $EXTRA_BUILD $EXTRA_FEATURES --color ${colors} - if [ "$crate_name_" -ne "$crate_name"]; then + if [ "$crate_name_" -ne "$crate_name" ]; then mv target/bin/$crate_name_ target/bin/$crate_name fi } @@ -195,7 +195,7 @@ let buildCrate = { crateName, crateVersion, buildDependencies, dependencies, EXTRA_FEATURES=$(sed -n "s/^cargo:rustc-cfg=\(.*\)/--cfg \1/p" target/build/${crateName}.opt | tr '\n' ' ') EXTRA_LINK=$(sed -n "s/^cargo:rustc-link-lib=\(.*\)/\1/p" target/build/${crateName}.opt | tr '\n' ' ') EXTRA_LINK_SEARCH=$(sed -n "s/^cargo:rustc-link-search=\(.*\)/\1/p" target/build/${crateName}.opt | tr '\n' ' ') - CRATENAME=$(echo ${crateName} | sed -e "s/\(.*\)-sys$/\1/" | tr '[:lower:]' '[:upper:]') + CRATENAME=$(echo ${crateName} | sed -e "s/\(.*\)-sys$/\U\1/") grep -P "^cargo:(?!(rustc-|warning=|rerun-if-changed=|rerun-if-env-changed))" target/build/${crateName}.opt \ | sed -e "s/cargo:\([^=]*\)=\(.*\)/export DEP_$(echo $CRATENAME)_\U\1\E=\2/" > target/env diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 230abd6d455500..a13a8f74142a5e 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -6219,7 +6219,7 @@ with pkgs; buildRustCrate = callPackage ../build-support/rust/rust-utils.nix { }; - carnix = (callPackage ../build-support/rust/carnix.nix { }).carnix_0_4_8; + carnix = (callPackage ../build-support/rust/carnix.nix { }).carnix_0_4_9; defaultCrateOverrides = callPackage ../build-support/rust/defaultCrateOverrides.nix { }; From ea0cf4b4df9b32022dafd5efd0f1187bd91da5e6 Mon Sep 17 00:00:00 2001 From: "pe@pijul.org" Date: Wed, 29 Nov 2017 13:15:36 +0100 Subject: [PATCH 34/47] Correct SHA256 for carnix --- pkgs/build-support/rust/carnix.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkgs/build-support/rust/carnix.nix b/pkgs/build-support/rust/carnix.nix index 80480e25ce6f38..9e62fc434f8051 100644 --- a/pkgs/build-support/rust/carnix.nix +++ b/pkgs/build-support/rust/carnix.nix @@ -47,7 +47,7 @@ let aho_corasick_0_6_3_ = { dependencies?[], buildDependencies?[], features?[] } carnix_0_4_9_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate { crateName = "carnix"; version = "0.4.9"; - sha256 = "18h073l5jd88rx4qdr95fjddr9rk79pb1aqnshzdnw16cfmb9rws"; + sha256 = "0qvfgxrzdx30wzl424cp68hm27f3b66g0wq5mkqq8pn57pwglpfs"; inherit dependencies buildDependencies features; }; cc_1_0_3_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate { From 4c788cca48743050e83adde16f234902fa32353b Mon Sep 17 00:00:00 2001 From: "pe@pijul.org" Date: Wed, 29 Nov 2017 22:20:54 +0100 Subject: [PATCH 35/47] Carnix 0.4.10 --- doc/languages-frameworks/rust.md | 40 +++++ pkgs/build-support/rust/carnix.nix | 222 +++++++++++++++++-------- pkgs/build-support/rust/rust-utils.nix | 13 +- pkgs/top-level/all-packages.nix | 2 +- 4 files changed, 199 insertions(+), 78 deletions(-) diff --git a/doc/languages-frameworks/rust.md b/doc/languages-frameworks/rust.md index b75303a1bbd9a4..62bac9f30933cd 100644 --- a/doc/languages-frameworks/rust.md +++ b/doc/languages-frameworks/rust.md @@ -135,6 +135,46 @@ Here, the `libc` crate has no `src` attribute, so `buildRustCrate` will fetch it from [crates.io](https://crates.io). A `sha256` attribute is still needed for Nix purity. +Some crates require external libraries. For crates from +[crates.io](https://crates.io), such libraries can be specified in +``. + +Starting from that file, one can add more overrides, to add features +or build inputs, as follows: + +``` +let + defaultOverrides = callPackage {}; + overrides = defaultOverrides // { + hello = attrs: { + buildInputs = [ myPackage ]; + }; + }; +in + +hello_0_1_0.override { crateOverrides = overrides; }; +``` + +Three more parameters can be overridden: + +- The version of rustc used to compile the crate: + + ``` + hello_0_1_0.override { rust = pkgs.rust; }; + ``` + +- Whether to build in release mode or debug mode (release mode by default): + + ``` + hello_0_1_0.override { release = false; }; + ``` + +- Whether to print the commands sent to rustc when building (equivalent to `--verbose` in cargo: + + ``` + hello_0_1_0.override { verbose = false; }; + ``` + ## Using the Rust nightlies overlay diff --git a/pkgs/build-support/rust/carnix.nix b/pkgs/build-support/rust/carnix.nix index 9e62fc434f8051..e7a707a884789f 100644 --- a/pkgs/build-support/rust/carnix.nix +++ b/pkgs/build-support/rust/carnix.nix @@ -1,33 +1,40 @@ -{ buildPlatform, buildRustCrate, ... }: -let aho_corasick_0_6_3_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate { +{ buildPlatform, buildRustCrate, fetchgit, ... }: +let kernel = buildPlatform.parsed.kernel.name; + abi = buildPlatform.parsed.abi.name; + aho_corasick_0_6_3_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate { crateName = "aho-corasick"; version = "0.6.3"; + authors = [ "Andrew Gallant " ]; sha256 = "1cpqzf6acj8lm06z3f1cg41wn6c2n9l3v49nh0dvimv4055qib6k"; libName = "aho_corasick"; crateBin = [ { name = "aho-corasick-dot"; } ]; inherit dependencies buildDependencies features; }; - ansi_term_0_9_0_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate { + ansi_term_0_10_2_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate { crateName = "ansi_term"; - version = "0.9.0"; - sha256 = "1vcd8m2hglrdi4zmqnkkz5zy3c73ifgii245k7vj6qr5dzpn9hij"; + version = "0.10.2"; + authors = [ "ogham@bsago.me" "Ryan Scheel (Havvy) " "Josh Triplett " ]; + sha256 = "07k0hfmlhv43lihyxb9d81l5mq5zlpqvv30dkfd3knmv2ginasn9"; inherit dependencies buildDependencies features; }; atty_0_2_3_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate { crateName = "atty"; version = "0.2.3"; + authors = [ "softprops " ]; sha256 = "0zl0cjfgarp5y78nd755lpki5bbkj4hgmi88v265m543yg29i88f"; inherit dependencies buildDependencies features; }; - backtrace_0_3_3_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate { + backtrace_0_3_4_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate { crateName = "backtrace"; - version = "0.3.3"; - sha256 = "0invfdxkj85v8zyrjs3amfxjdk2a36x8irq7wq7kny6q49hh8y0z"; + version = "0.3.4"; + authors = [ "Alex Crichton " "The Rust Project Developers" ]; + sha256 = "1caba8w3rqd5ghr88ghyz5wgkf81dgx18bj1llkax6qmianc6gk7"; inherit dependencies buildDependencies features; }; backtrace_sys_0_1_16_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate { crateName = "backtrace-sys"; version = "0.1.16"; + authors = [ "Alex Crichton " ]; sha256 = "1cn2c8q3dn06crmnk0p62czkngam4l8nf57wy33nz1y5g25pszwy"; build = "build.rs"; inherit dependencies buildDependencies features; @@ -35,42 +42,49 @@ let aho_corasick_0_6_3_ = { dependencies?[], buildDependencies?[], features?[] } bitflags_0_7_0_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate { crateName = "bitflags"; version = "0.7.0"; + authors = [ "The Rust Project Developers" ]; sha256 = "1hr72xg5slm0z4pxs2hiy4wcyx3jva70h58b7mid8l0a4c8f7gn5"; inherit dependencies buildDependencies features; }; - bitflags_0_9_1_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate { + bitflags_1_0_1_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate { crateName = "bitflags"; - version = "0.9.1"; - sha256 = "18h073l5jd88rx4qdr95fjddr9rk79pb1aqnshzdnw16cfmb9rws"; + version = "1.0.1"; + authors = [ "The Rust Project Developers" ]; + sha256 = "0p4b3nr0s5nda2qmm7xdhnvh4lkqk3xd8l9ffmwbvqw137vx7mj1"; inherit dependencies buildDependencies features; }; - carnix_0_4_9_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate { + carnix_0_4_10_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate { crateName = "carnix"; - version = "0.4.9"; - sha256 = "0qvfgxrzdx30wzl424cp68hm27f3b66g0wq5mkqq8pn57pwglpfs"; + version = "0.4.10"; + authors = [ "pe@pijul.org " ]; + sha256 = "06zsvylwc21vrwgrr9lbg39kp5p71nil4vcwkk292j0wrm28s32z"; inherit dependencies buildDependencies features; }; cc_1_0_3_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate { crateName = "cc"; version = "1.0.3"; + authors = [ "Alex Crichton " ]; sha256 = "193pwqgh79w6k0k29svyds5nnlrwx44myqyrw605d5jj4yk2zmpr"; inherit dependencies buildDependencies features; }; cfg_if_0_1_2_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate { crateName = "cfg-if"; version = "0.1.2"; + authors = [ "Alex Crichton " ]; sha256 = "0x06hvrrqy96m97593823vvxcgvjaxckghwyy2jcyc8qc7c6cyhi"; inherit dependencies buildDependencies features; }; - clap_2_27_1_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate { + clap_2_28_0_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate { crateName = "clap"; - version = "2.27.1"; - sha256 = "0zx8rskqfl3iqn3vlyxzyd99hpifa7bm871akhxpz9wvrm688zaj"; + version = "2.28.0"; + authors = [ "Kevin K. " ]; + sha256 = "0m0rj9xw6mja4gdhqmaldv0q5y5jfsfzbyzfd70mm3857aynq03k"; inherit dependencies buildDependencies features; }; dbghelp_sys_0_2_0_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate { crateName = "dbghelp-sys"; version = "0.2.0"; + authors = [ "Peter Atashian " ]; sha256 = "0ylpi3bbiy233m57hnisn1df1v0lbl7nsxn34b0anzsgg440hqpq"; libName = "dbghelp"; build = "build.rs"; @@ -79,130 +93,165 @@ let aho_corasick_0_6_3_ = { dependencies?[], buildDependencies?[], features?[] } dtoa_0_4_2_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate { crateName = "dtoa"; version = "0.4.2"; + authors = [ "David Tolnay " ]; sha256 = "1bxsh6fags7nr36vlz07ik2a1rzyipc8x1y30kjk832hf2pzadmw"; inherit dependencies buildDependencies features; }; + either_1_4_0_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate { + crateName = "either"; + version = "1.4.0"; + authors = [ "bluss" ]; + sha256 = "04kpfd84lvyrkb2z4sljlz2d3d5qczd0sb1yy37fgijq2yx3vb37"; + inherit dependencies buildDependencies features; + }; env_logger_0_4_3_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate { crateName = "env_logger"; version = "0.4.3"; + authors = [ "The Rust Project Developers" ]; sha256 = "0nrx04p4xa86d5kc7aq4fwvipbqji9cmgy449h47nc9f1chafhgg"; inherit dependencies buildDependencies features; }; error_chain_0_11_0_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate { crateName = "error-chain"; version = "0.11.0"; + authors = [ "Brian Anderson " "Paul Colomiets " "Colin Kiegel " "Yamakaky " ]; sha256 = "19nz17q6dzp0mx2jhh9qbj45gkvvgcl7zq9z2ai5a8ihbisfj6d7"; inherit dependencies buildDependencies features; }; fuchsia_zircon_0_2_1_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate { crateName = "fuchsia-zircon"; version = "0.2.1"; + authors = [ "Raph Levien " ]; sha256 = "0yd4rd7ql1vdr349p6vgq2dnwmpylky1kjp8g1zgvp250jxrhddb"; inherit dependencies buildDependencies features; }; fuchsia_zircon_sys_0_2_0_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate { crateName = "fuchsia-zircon-sys"; version = "0.2.0"; + authors = [ "Raph Levien " ]; sha256 = "1yrqsrjwlhl3di6prxf5xmyd82gyjaysldbka5wwk83z11mpqh4w"; inherit dependencies buildDependencies features; }; + itertools_0_7_3_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate { + crateName = "itertools"; + version = "0.7.3"; + authors = [ "bluss" ]; + sha256 = "128a69cnmgpj38rs6lcwzya773d2vx7f9y7012iycjf9yi2pyckj"; + inherit dependencies buildDependencies features; + }; itoa_0_3_4_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate { crateName = "itoa"; version = "0.3.4"; + authors = [ "David Tolnay " ]; sha256 = "1nfkzz6vrgj0d9l3yzjkkkqzdgs68y294fjdbl7jq118qi8xc9d9"; inherit dependencies buildDependencies features; }; kernel32_sys_0_2_2_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate { crateName = "kernel32-sys"; version = "0.2.2"; + authors = [ "Peter Atashian " ]; sha256 = "1lrw1hbinyvr6cp28g60z97w32w8vsk6pahk64pmrv2fmby8srfj"; libName = "kernel32"; build = "build.rs"; inherit dependencies buildDependencies features; }; - lazy_static_0_2_9_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate { + lazy_static_0_2_11_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate { crateName = "lazy_static"; - version = "0.2.9"; - sha256 = "08ldzr5292y3hvi6l6v8l4i6v95lm1aysmnfln65h10sqrfh6iw7"; + version = "0.2.11"; + authors = [ "Marvin Löbel " ]; + sha256 = "1x6871cvpy5b96yv4c7jvpq316fp5d4609s9py7qk6cd6x9k34vm"; inherit dependencies buildDependencies features; }; libc_0_2_33_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate { crateName = "libc"; version = "0.2.33"; + authors = [ "The Rust Project Developers" ]; sha256 = "1l7synziccnvarsq2kk22vps720ih6chmn016bhr2bq54hblbnl1"; inherit dependencies buildDependencies features; }; - libsqlite3_sys_0_8_1_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate { + libsqlite3_sys_0_9_0_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate { crateName = "libsqlite3-sys"; - version = "0.8.1"; - sha256 = "131bjlxzni2aw3048p7sj8cs3v0jpkb3fxdpc5i7ndyhvpz3gdza"; + version = "0.9.0"; + authors = [ "John Gallagher " ]; + sha256 = "1pnx3i9h85si6cs4nhazfb28hsvk7dn0arnfvpdzpjdnj9z38q57"; build = "build.rs"; inherit dependencies buildDependencies features; }; linked_hash_map_0_4_2_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate { crateName = "linked-hash-map"; version = "0.4.2"; + authors = [ "Stepan Koltsov " "Andrew Paseltiner " ]; sha256 = "04da208h6jb69f46j37jnvsw2i1wqplglp4d61csqcrhh83avbgl"; inherit dependencies buildDependencies features; }; log_0_3_8_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate { crateName = "log"; version = "0.3.8"; + authors = [ "The Rust Project Developers" ]; sha256 = "1c43z4z85sxrsgir4s1hi84558ab5ic7jrn5qgmsiqcv90vvn006"; inherit dependencies buildDependencies features; }; lru_cache_0_1_1_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate { crateName = "lru-cache"; version = "0.1.1"; + authors = [ "Stepan Koltsov " ]; sha256 = "1hl6kii1g54sq649gnscv858mmw7a02xj081l4vcgvrswdi2z8fw"; inherit dependencies buildDependencies features; }; memchr_1_0_2_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate { crateName = "memchr"; version = "1.0.2"; + authors = [ "Andrew Gallant " "bluss" ]; sha256 = "0dfb8ifl9nrc9kzgd5z91q6qg87sh285q1ih7xgrsglmqfav9lg7"; inherit dependencies buildDependencies features; }; nom_3_2_1_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate { crateName = "nom"; version = "3.2.1"; + authors = [ "contact@geoffroycouprie.com" ]; sha256 = "1vcllxrz9hdw6j25kn020ka3psz1vkaqh1hm3yfak2240zrxgi07"; inherit dependencies buildDependencies features; }; num_traits_0_1_40_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate { crateName = "num-traits"; version = "0.1.40"; + authors = [ "The Rust Project Developers" ]; sha256 = "1fr8ghp4i97q3agki54i0hpmqxv3s65i2mqd1pinc7w7arc3fplw"; inherit dependencies buildDependencies features; }; pkg_config_0_3_9_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate { crateName = "pkg-config"; version = "0.3.9"; + authors = [ "Alex Crichton " ]; sha256 = "06k8fxgrsrxj8mjpjcq1n7mn2p1shpxif4zg9y5h09c7vy20s146"; inherit dependencies buildDependencies features; }; quote_0_3_15_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate { crateName = "quote"; version = "0.3.15"; + authors = [ "David Tolnay " ]; sha256 = "09il61jv4kd1360spaj46qwyl21fv1qz18fsv2jra8wdnlgl5jsg"; inherit dependencies buildDependencies features; }; rand_0_3_18_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate { crateName = "rand"; version = "0.3.18"; + authors = [ "The Rust Project Developers" ]; sha256 = "15d7c3myn968dzjs0a2pgv58hzdavxnq6swgj032lw2v966ir4xv"; inherit dependencies buildDependencies features; }; - redox_syscall_0_1_31_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate { + redox_syscall_0_1_32_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate { crateName = "redox_syscall"; - version = "0.1.31"; - sha256 = "0kipd9qslzin4fgj4jrxv6yz5l3l71gnbd7fq1jhk2j7f2sq33j4"; + version = "0.1.32"; + authors = [ "Jeremy Soller " ]; + sha256 = "1axxj8x6ngh6npkzqc5h216fajkcyrdxdgb7m2f0n5xfclbk47fv"; libName = "syscall"; inherit dependencies buildDependencies features; }; redox_termios_0_1_1_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate { crateName = "redox_termios"; version = "0.1.1"; + authors = [ "Jeremy Soller " ]; sha256 = "04s6yyzjca552hdaqlvqhp3vw0zqbc304md5czyd3axh56iry8wh"; libPath = "src/lib.rs"; inherit dependencies buildDependencies features; @@ -210,157 +259,183 @@ let aho_corasick_0_6_3_ = { dependencies?[], buildDependencies?[], features?[] } regex_0_2_2_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate { crateName = "regex"; version = "0.2.2"; + authors = [ "The Rust Project Developers" ]; sha256 = "1f1zrrynfylg0vcfyfp60bybq4rp5g1yk2k7lc7fyz7mmc7k2qr7"; inherit dependencies buildDependencies features; }; regex_syntax_0_4_1_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate { crateName = "regex-syntax"; version = "0.4.1"; + authors = [ "The Rust Project Developers" ]; sha256 = "01yrsm68lj86ad1whgg1z95c2pfsvv58fz8qjcgw7mlszc0c08ls"; inherit dependencies buildDependencies features; }; - rusqlite_0_12_0_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate { + rusqlite_0_13_0_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate { crateName = "rusqlite"; - version = "0.12.0"; - sha256 = "18fybr7bd012j7axf4gzpphx0iil2amksdlab4dhhipjl6hyam6j"; + version = "0.13.0"; + authors = [ "John Gallagher " ]; + sha256 = "1hj2464ar2y4324sk3jx7m9byhkcp60krrrs1v1i8dlhhlnkb9hc"; inherit dependencies buildDependencies features; }; rustc_demangle_0_1_5_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate { crateName = "rustc-demangle"; version = "0.1.5"; + authors = [ "Alex Crichton " ]; sha256 = "096kkcx9j747700fhxj1s4rlwkj21pqjmvj64psdj6bakb2q13nc"; inherit dependencies buildDependencies features; }; - serde_1_0_19_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate { + serde_1_0_21_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate { crateName = "serde"; - version = "1.0.19"; - sha256 = "0dfhkkbrpr0vr1b2hhbddizb8bq4phi5ck0jhy3yx31bc2byb1l1"; + version = "1.0.21"; + authors = [ "Erick Tryzelaar " "David Tolnay " ]; + sha256 = "10almq7pvx8s4ryiqk8gf7fj5igl0yq6dcjknwc67rkmxd8q50w3"; inherit dependencies buildDependencies features; }; - serde_derive_1_0_19_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate { + serde_derive_1_0_21_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate { crateName = "serde_derive"; - version = "1.0.19"; - sha256 = "1fbr1zi25fgwy49mvpjq8g611mnv3vcd4n0mgca2lfdsp5n2nw5v"; + version = "1.0.21"; + authors = [ "Erick Tryzelaar " "David Tolnay " ]; + sha256 = "0r20qyimm9scfaz7lc0swnhik9d045zklmbidd0zzpd4b2f3jsqm"; procMacro = true; inherit dependencies buildDependencies features; }; serde_derive_internals_0_17_0_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate { crateName = "serde_derive_internals"; version = "0.17.0"; + authors = [ "Erick Tryzelaar " "David Tolnay " ]; sha256 = "1g1j3v6pj9wbcz3v3w4smjpwrcdwjicmf6yd5cbai04as9iwhw74"; inherit dependencies buildDependencies features; }; - serde_json_1_0_5_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate { + serde_json_1_0_6_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate { crateName = "serde_json"; - version = "1.0.5"; - sha256 = "1yka3aa2gfi30415jpf0935k54r08jhyw6r7rjz2nv1kqgbw2brs"; + version = "1.0.6"; + authors = [ "Erick Tryzelaar " "David Tolnay " ]; + sha256 = "1kacyc59splwbg8gr7qs32pp9smgy1khq0ggnv07yxhs7h355vjz"; inherit dependencies buildDependencies features; }; strsim_0_6_0_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate { crateName = "strsim"; version = "0.6.0"; + authors = [ "Danny Guo " ]; sha256 = "1lz85l6y68hr62lv4baww29yy7g8pg20dlr0lbaswxmmcb0wl7gd"; inherit dependencies buildDependencies features; }; syn_0_11_11_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate { crateName = "syn"; version = "0.11.11"; + authors = [ "David Tolnay " ]; sha256 = "0yw8ng7x1dn5a6ykg0ib49y7r9nhzgpiq2989rqdp7rdz3n85502"; inherit dependencies buildDependencies features; }; synom_0_11_3_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate { crateName = "synom"; version = "0.11.3"; + authors = [ "David Tolnay " ]; sha256 = "1l6d1s9qjfp6ng2s2z8219igvlv7gyk8gby97sdykqc1r93d8rhc"; inherit dependencies buildDependencies features; }; tempdir_0_3_5_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate { crateName = "tempdir"; version = "0.3.5"; + authors = [ "The Rust Project Developers" ]; sha256 = "0rirc5prqppzgd15fm8ayan349lgk2k5iqdkrbwrwrv5pm4znsnz"; inherit dependencies buildDependencies features; }; termion_1_5_1_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate { crateName = "termion"; version = "1.5.1"; + authors = [ "ticki " "gycos " "IGI-111 " ]; sha256 = "02gq4vd8iws1f3gjrgrgpajsk2bk43nds5acbbb4s8dvrdvr8nf1"; inherit dependencies buildDependencies features; }; textwrap_0_9_0_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate { crateName = "textwrap"; version = "0.9.0"; + authors = [ "Martin Geisler " ]; sha256 = "18jg79ndjlwndz01mlbh82kkr2arqm658yn5kwp65l5n1hz8w4yb"; inherit dependencies buildDependencies features; }; thread_local_0_3_4_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate { crateName = "thread_local"; version = "0.3.4"; + authors = [ "Amanieu d'Antras " ]; sha256 = "1y6cwyhhx2nkz4b3dziwhqdvgq830z8wjp32b40pjd8r0hxqv2jr"; inherit dependencies buildDependencies features; }; time_0_1_38_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate { crateName = "time"; version = "0.1.38"; + authors = [ "The Rust Project Developers" ]; sha256 = "1ws283vvz7c6jfiwn53rmc6kybapr4pjaahfxxrz232b0qzw7gcp"; inherit dependencies buildDependencies features; }; toml_0_4_5_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate { crateName = "toml"; version = "0.4.5"; + authors = [ "Alex Crichton " ]; sha256 = "06zxqhn3y58yzjfaykhcrvlf7p2dnn54kn3g4apmja3cn5b18lkk"; inherit dependencies buildDependencies features; }; unicode_width_0_1_4_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate { crateName = "unicode-width"; version = "0.1.4"; + authors = [ "kwantam " ]; sha256 = "1rp7a04icn9y5c0lm74nrd4py0rdl0af8bhdwq7g478n1xifpifl"; inherit dependencies buildDependencies features; }; unicode_xid_0_0_4_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate { crateName = "unicode-xid"; version = "0.0.4"; + authors = [ "erick.tryzelaar " "kwantam " ]; sha256 = "1dc8wkkcd3s6534s5aw4lbjn8m67flkkbnajp5bl8408wdg8rh9v"; inherit dependencies buildDependencies features; }; unreachable_1_0_0_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate { crateName = "unreachable"; version = "1.0.0"; + authors = [ "Jonathan Reem " ]; sha256 = "1am8czbk5wwr25gbp2zr007744fxjshhdqjz9liz7wl4pnv3whcf"; inherit dependencies buildDependencies features; }; utf8_ranges_1_0_0_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate { crateName = "utf8-ranges"; version = "1.0.0"; + authors = [ "Andrew Gallant " ]; sha256 = "0rzmqprwjv9yp1n0qqgahgm24872x6c0xddfym5pfndy7a36vkn0"; inherit dependencies buildDependencies features; }; vcpkg_0_2_2_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate { crateName = "vcpkg"; version = "0.2.2"; + authors = [ "Jim McGrath " ]; sha256 = "1fl5j0ksnwrnsrf1b1a9lqbjgnajdipq0030vsbhx81mb7d9478a"; inherit dependencies buildDependencies features; }; vec_map_0_8_0_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate { crateName = "vec_map"; version = "0.8.0"; + authors = [ "Alex Crichton " "Jorge Aparicio " "Alexis Beingessner " "Brian Anderson <>" "tbu- <>" "Manish Goregaokar <>" "Aaron Turon " "Adolfo Ochagavía <>" "Niko Matsakis <>" "Steven Fackler <>" "Chase Southwood " "Eduard Burtescu <>" "Florian Wilkens <>" "Félix Raimundo <>" "Tibor Benke <>" "Markus Siemens " "Josh Branchaud " "Huon Wilson " "Corey Farwell " "Aaron Liblong <>" "Nick Cameron " "Patrick Walton " "Felix S Klock II <>" "Andrew Paseltiner " "Sean McArthur " "Vadim Petrochenkov <>" ]; sha256 = "07sgxp3cf1a4cxm9n3r27fcvqmld32bl2576mrcahnvm34j11xay"; inherit dependencies buildDependencies features; }; void_1_0_2_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate { crateName = "void"; version = "1.0.2"; + authors = [ "Jonathan Reem " ]; sha256 = "0h1dm0dx8dhf56a83k68mijyxigqhizpskwxfdrs1drwv2cdclv3"; inherit dependencies buildDependencies features; }; winapi_0_2_8_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate { crateName = "winapi"; version = "0.2.8"; + authors = [ "Peter Atashian " ]; sha256 = "0a45b58ywf12vb7gvj6h3j264nydynmzyqz8d8rqxsj6icqv82as"; inherit dependencies buildDependencies features; }; winapi_build_0_1_1_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate { crateName = "winapi-build"; version = "0.1.1"; + authors = [ "Peter Atashian " ]; sha256 = "1lxlpi87rkhxcwp2ykf1ldw3p108hwm24nywf3jfrvmff4rjhqga"; libName = "build"; inherit dependencies buildDependencies features; @@ -371,17 +446,17 @@ rec { aho_corasick_0_6_3 = aho_corasick_0_6_3_ { dependencies = [ memchr_1_0_2 ]; }; - ansi_term_0_9_0 = ansi_term_0_9_0_ {}; + ansi_term_0_10_2 = ansi_term_0_10_2_ {}; atty_0_2_3 = atty_0_2_3_ { - dependencies = (if buildPlatform.parsed.kernel.name == "redox" then [ termion_1_5_1 ] else []) - ++ (if (buildPlatform.parsed.kernel.name == "linux" || buildPlatform.parsed.kernel.name == "darwin") then [ libc_0_2_33 ] else []) - ++ (if buildPlatform.parsed.kernel.name == "windows" then [ kernel32_sys_0_2_2 winapi_0_2_8 ] else []); + dependencies = (if kernel == "redox" then [ termion_1_5_1 ] else []) + ++ (if (kernel == "linux" || kernel == "darwin") then [ libc_0_2_33 ] else []) + ++ (if kernel == "windows" then [ kernel32_sys_0_2_2 winapi_0_2_8 ] else []); }; - backtrace_0_3_3 = backtrace_0_3_3_ { + backtrace_0_3_4 = backtrace_0_3_4_ { dependencies = [ cfg_if_0_1_2 rustc_demangle_0_1_5 ] - ++ (if (buildPlatform.parsed.kernel.name == "linux" || buildPlatform.parsed.kernel.name == "darwin") && !(buildPlatform.parsed.kernel.name == "emscripten") && !(buildPlatform.parsed.kernel.name == "darwin") && !(buildPlatform.parsed.kernel.name == "ios") then [ backtrace_sys_0_1_16 ] else []) - ++ (if (buildPlatform.parsed.kernel.name == "linux" || buildPlatform.parsed.kernel.name == "darwin") then [ libc_0_2_33 ] else []) - ++ (if buildPlatform.parsed.kernel.name == "windows" then [ dbghelp_sys_0_2_0 kernel32_sys_0_2_2 winapi_0_2_8 ] else []); + ++ (if (kernel == "linux" || kernel == "darwin") && !(kernel == "fuchsia") && !(kernel == "emscripten") && !(kernel == "darwin") && !(kernel == "ios") then [ backtrace_sys_0_1_16 ] else []) + ++ (if (kernel == "linux" || kernel == "darwin") then [ libc_0_2_33 ] else []) + ++ (if kernel == "windows" then [ dbghelp_sys_0_2_0 kernel32_sys_0_2_2 winapi_0_2_8 ] else []); features = [ "backtrace-sys" "coresymbolication" "dbghelp" "dbghelp-sys" "dladdr" "kernel32-sys" "libbacktrace" "libunwind" "winapi" ]; }; backtrace_sys_0_1_16 = backtrace_sys_0_1_16_ { @@ -389,18 +464,18 @@ rec { buildDependencies = [ cc_1_0_3 ]; }; bitflags_0_7_0 = bitflags_0_7_0_ {}; - bitflags_0_9_1 = bitflags_0_9_1_ { + bitflags_1_0_1 = bitflags_1_0_1_ { features = [ "example_generated" ]; }; - carnix_0_4_9 = carnix_0_4_9_ { - dependencies = [ clap_2_27_1 env_logger_0_4_3 error_chain_0_11_0 log_0_3_8 nom_3_2_1 regex_0_2_2 rusqlite_0_12_0 serde_1_0_19 serde_derive_1_0_19 serde_json_1_0_5 tempdir_0_3_5 toml_0_4_5 ]; + carnix_0_4_10 = carnix_0_4_10_ { + dependencies = [ clap_2_28_0 env_logger_0_4_3 error_chain_0_11_0 itertools_0_7_3 log_0_3_8 nom_3_2_1 regex_0_2_2 rusqlite_0_13_0 serde_1_0_21 serde_derive_1_0_21 serde_json_1_0_6 tempdir_0_3_5 toml_0_4_5 ]; }; cc_1_0_3 = cc_1_0_3_ { dependencies = []; }; cfg_if_0_1_2 = cfg_if_0_1_2_ {}; - clap_2_27_1 = clap_2_27_1_ { - dependencies = [ ansi_term_0_9_0 atty_0_2_3 bitflags_0_9_1 strsim_0_6_0 textwrap_0_9_0 unicode_width_0_1_4 vec_map_0_8_0 ]; + clap_2_28_0 = clap_2_28_0_ { + dependencies = [ ansi_term_0_10_2 atty_0_2_3 bitflags_1_0_1 strsim_0_6_0 textwrap_0_9_0 unicode_width_0_1_4 vec_map_0_8_0 ]; features = [ "ansi_term" "atty" "color" "strsim" "suggestions" "vec_map" ]; }; dbghelp_sys_0_2_0 = dbghelp_sys_0_2_0_ { @@ -408,12 +483,15 @@ rec { buildDependencies = [ winapi_build_0_1_1 ]; }; dtoa_0_4_2 = dtoa_0_4_2_ {}; + either_1_4_0 = either_1_4_0_ { + features = [ "use_std" ]; + }; env_logger_0_4_3 = env_logger_0_4_3_ { dependencies = [ log_0_3_8 regex_0_2_2 ]; features = [ "regex" ]; }; error_chain_0_11_0 = error_chain_0_11_0_ { - dependencies = [ backtrace_0_3_3 ]; + dependencies = [ backtrace_0_3_4 ]; features = [ "backtrace" "example_generated" ]; }; fuchsia_zircon_0_2_1 = fuchsia_zircon_0_2_1_ { @@ -422,17 +500,21 @@ rec { fuchsia_zircon_sys_0_2_0 = fuchsia_zircon_sys_0_2_0_ { dependencies = [ bitflags_0_7_0 ]; }; + itertools_0_7_3 = itertools_0_7_3_ { + dependencies = [ either_1_4_0 ]; + features = [ "use_std" ]; + }; itoa_0_3_4 = itoa_0_3_4_ {}; kernel32_sys_0_2_2 = kernel32_sys_0_2_2_ { dependencies = [ winapi_0_2_8 ]; buildDependencies = [ winapi_build_0_1_1 ]; }; - lazy_static_0_2_9 = lazy_static_0_2_9_ {}; + lazy_static_0_2_11 = lazy_static_0_2_11_ {}; libc_0_2_33 = libc_0_2_33_ { features = [ "use_std" ]; }; - libsqlite3_sys_0_8_1 = libsqlite3_sys_0_8_1_ { - dependencies = (if buildPlatform.parsed.abi.name == "msvc" then [] else []); + libsqlite3_sys_0_9_0 = libsqlite3_sys_0_9_0_ { + dependencies = (if abi == "msvc" then [] else []); buildDependencies = [ pkg_config_0_3_9 ]; features = [ "min_sqlite_version_3_6_8" "pkg-config" "vcpkg" ]; }; @@ -456,31 +538,31 @@ rec { quote_0_3_15 = quote_0_3_15_ {}; rand_0_3_18 = rand_0_3_18_ { dependencies = [ libc_0_2_33 ] - ++ (if buildPlatform.parsed.kernel.name == "fuchsia" then [ fuchsia_zircon_0_2_1 ] else []); + ++ (if kernel == "fuchsia" then [ fuchsia_zircon_0_2_1 ] else []); }; - redox_syscall_0_1_31 = redox_syscall_0_1_31_ {}; + redox_syscall_0_1_32 = redox_syscall_0_1_32_ {}; redox_termios_0_1_1 = redox_termios_0_1_1_ { - dependencies = [ redox_syscall_0_1_31 ]; + dependencies = [ redox_syscall_0_1_32 ]; }; regex_0_2_2 = regex_0_2_2_ { dependencies = [ aho_corasick_0_6_3 memchr_1_0_2 regex_syntax_0_4_1 thread_local_0_3_4 utf8_ranges_1_0_0 ]; }; regex_syntax_0_4_1 = regex_syntax_0_4_1_ {}; - rusqlite_0_12_0 = rusqlite_0_12_0_ { - dependencies = [ bitflags_0_9_1 libsqlite3_sys_0_8_1 lru_cache_0_1_1 time_0_1_38 ]; + rusqlite_0_13_0 = rusqlite_0_13_0_ { + dependencies = [ bitflags_1_0_1 libsqlite3_sys_0_9_0 lru_cache_0_1_1 time_0_1_38 ]; }; rustc_demangle_0_1_5 = rustc_demangle_0_1_5_ {}; - serde_1_0_19 = serde_1_0_19_ { + serde_1_0_21 = serde_1_0_21_ { features = [ "std" ]; }; - serde_derive_1_0_19 = serde_derive_1_0_19_ { + serde_derive_1_0_21 = serde_derive_1_0_21_ { dependencies = [ quote_0_3_15 serde_derive_internals_0_17_0 syn_0_11_11 ]; }; serde_derive_internals_0_17_0 = serde_derive_internals_0_17_0_ { dependencies = [ syn_0_11_11 synom_0_11_3 ]; }; - serde_json_1_0_5 = serde_json_1_0_5_ { - dependencies = [ dtoa_0_4_2 itoa_0_3_4 num_traits_0_1_40 serde_1_0_19 ]; + serde_json_1_0_6 = serde_json_1_0_6_ { + dependencies = [ dtoa_0_4_2 itoa_0_3_4 num_traits_0_1_40 serde_1_0_21 ]; }; strsim_0_6_0 = strsim_0_6_0_ {}; syn_0_11_11 = syn_0_11_11_ { @@ -494,22 +576,22 @@ rec { dependencies = [ rand_0_3_18 ]; }; termion_1_5_1 = termion_1_5_1_ { - dependencies = (if !(buildPlatform.parsed.kernel.name == "redox") then [ libc_0_2_33 ] else []) - ++ (if buildPlatform.parsed.kernel.name == "redox" then [ redox_syscall_0_1_31 redox_termios_0_1_1 ] else []); + dependencies = (if !(kernel == "redox") then [ libc_0_2_33 ] else []) + ++ (if kernel == "redox" then [ redox_syscall_0_1_32 redox_termios_0_1_1 ] else []); }; textwrap_0_9_0 = textwrap_0_9_0_ { dependencies = [ unicode_width_0_1_4 ]; }; thread_local_0_3_4 = thread_local_0_3_4_ { - dependencies = [ lazy_static_0_2_9 unreachable_1_0_0 ]; + dependencies = [ lazy_static_0_2_11 unreachable_1_0_0 ]; }; time_0_1_38 = time_0_1_38_ { dependencies = [ libc_0_2_33 ] - ++ (if buildPlatform.parsed.kernel.name == "redox" then [ redox_syscall_0_1_31 ] else []) - ++ (if buildPlatform.parsed.kernel.name == "windows" then [ kernel32_sys_0_2_2 winapi_0_2_8 ] else []); + ++ (if kernel == "redox" then [ redox_syscall_0_1_32 ] else []) + ++ (if kernel == "windows" then [ kernel32_sys_0_2_2 winapi_0_2_8 ] else []); }; toml_0_4_5 = toml_0_4_5_ { - dependencies = [ serde_1_0_19 ]; + dependencies = [ serde_1_0_21 ]; }; unicode_width_0_1_4 = unicode_width_0_1_4_ {}; unicode_xid_0_0_4 = unicode_xid_0_0_4_ {}; diff --git a/pkgs/build-support/rust/rust-utils.nix b/pkgs/build-support/rust/rust-utils.nix index 5baf0e0ff90bb8..0e9458bab11c68 100644 --- a/pkgs/build-support/rust/rust-utils.nix +++ b/pkgs/build-support/rust/rust-utils.nix @@ -6,8 +6,8 @@ { lib, buildPlatform, stdenv, defaultCrateOverrides, fetchCrate, ncurses, rustc }: -let buildCrate = { crateName, crateVersion, buildDependencies, dependencies, - completeDeps, completeBuildDeps, +let buildCrate = { crateName, crateVersion, crateAuthors, buildDependencies, + dependencies, completeDeps, completeBuildDeps, crateFeatures, libName, build, release, libPath, crateType, metadata, crateBin, finalBins, verbose, colors }: @@ -31,6 +31,7 @@ let buildCrate = { crateName, crateVersion, buildDependencies, dependencies, version_ = lib.splitString "-" crateVersion; versionPre = if lib.tail version_ == [] then "" else builtins.elemAt version_ 1; version = lib.splitString "." (lib.head version_); + authors = lib.concatStringsSep ":" crateAuthors; in '' norm="" bold="" @@ -143,6 +144,7 @@ let buildCrate = { crateName, crateVersion, buildDependencies, dependencies, BUILD_OUT_DIR="" export CARGO_PKG_NAME=${crateName} export CARGO_PKG_VERSION=${crateVersion} + export CARGO_PKG_AUTHORS="${authors}" export CARGO_CFG_TARGET_ARCH=${buildPlatform.parsed.cpu.name} export CARGO_CFG_TARGET_OS=${buildPlatform.parsed.kernel.name} @@ -160,10 +162,6 @@ let buildCrate = { crateName, crateVersion, buildDependencies, dependencies, if [ -n "${versionPre}" ]; then export CARGO_PKG_VERSION_PRE="${versionPre}" fi - if [ -n "$CARGO_PKG_VERSION_PRE" ]; then - unset CARGO_PKG_VERSION_PRE - fi - BUILD="" if [[ ! -z "${build}" ]] ; then @@ -355,6 +353,7 @@ stdenv.mkDerivation rec { build = if crate ? build then crate.build else ""; crateVersion = crate.version; + crateAuthors = if crate ? authors && lib.isList crate.authors then crate.authors else []; crateType = if lib.attrByPath ["procMacro"] false crate then "proc-macro" else if lib.attrByPath ["plugin"] false crate then "dylib" else "lib"; @@ -362,7 +361,7 @@ stdenv.mkDerivation rec { buildPhase = buildCrate { inherit crateName dependencies buildDependencies completeDeps completeBuildDeps crateFeatures libName build release libPath crateType crateVersion - metadata crateBin finalBins verbose colors; + crateAuthors metadata crateBin finalBins verbose colors; }; installPhase = installCrate crateName; diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index a13a8f74142a5e..004710e4234f0d 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -6219,7 +6219,7 @@ with pkgs; buildRustCrate = callPackage ../build-support/rust/rust-utils.nix { }; - carnix = (callPackage ../build-support/rust/carnix.nix { }).carnix_0_4_9; + carnix = (callPackage ../build-support/rust/carnix.nix { }).carnix_0_4_10; defaultCrateOverrides = callPackage ../build-support/rust/defaultCrateOverrides.nix { }; From 240fc52cc9dddfade45682e3f4312a2affd5e558 Mon Sep 17 00:00:00 2001 From: "pe@pijul.org" Date: Thu, 30 Nov 2017 06:28:40 +0100 Subject: [PATCH 36/47] Updates after the latest review --- doc/languages-frameworks/rust.md | 35 +++++++++++++++++++++++--- pkgs/build-support/rust/carnix.nix | 2 +- pkgs/build-support/rust/rust-utils.nix | 13 +++++++--- 3 files changed, 42 insertions(+), 8 deletions(-) diff --git a/doc/languages-frameworks/rust.md b/doc/languages-frameworks/rust.md index 62bac9f30933cd..2d231656cc9d37 100644 --- a/doc/languages-frameworks/rust.md +++ b/doc/languages-frameworks/rust.md @@ -152,9 +152,36 @@ let }; in -hello_0_1_0.override { crateOverrides = overrides; }; +hello_0_1_0.override { crateOverrides = overrides; } ``` +Here, `crateOverrides` is expected to be a attribute set, where the +key is the crate name without version number and the value a function. +The function gets all attributes passed to `buildRustCrate` as first +argument and returns a set that contains all attribute that should be +overwritten. + +For more complicated cases, such as when parts of the crate's +derivation depend on the the crate's version, the `attrs` argument of +the override above can be read, as in the following example, which +patches the derivation: + +``` +let + defaultOverrides = callPackage {}; + overrides = defaultOverrides // { + imaginary-timezone-crate = attrs: lib.optionalAttrs (lib.versionAtLeast attrs.version "1.0") { + postPatch = '' + substituteInPlace lib/zoneinfo.rs \ + --replace "/usr/share/zoneinfo" "${tzdata}/share/zoneinfo" + ''; + }; + }; +in +hello_0_1_0.override { crateOverrides = overrides; } +``` + + Three more parameters can be overridden: - The version of rustc used to compile the crate: @@ -163,13 +190,15 @@ Three more parameters can be overridden: hello_0_1_0.override { rust = pkgs.rust; }; ``` -- Whether to build in release mode or debug mode (release mode by default): +- Whether to build in release mode or debug mode (release mode by + default): ``` hello_0_1_0.override { release = false; }; ``` -- Whether to print the commands sent to rustc when building (equivalent to `--verbose` in cargo: +- Whether to print the commands sent to rustc when building + (equivalent to `--verbose` in cargo: ``` hello_0_1_0.override { verbose = false; }; diff --git a/pkgs/build-support/rust/carnix.nix b/pkgs/build-support/rust/carnix.nix index e7a707a884789f..0c825ce2470769 100644 --- a/pkgs/build-support/rust/carnix.nix +++ b/pkgs/build-support/rust/carnix.nix @@ -1,4 +1,4 @@ -{ buildPlatform, buildRustCrate, fetchgit, ... }: +{ buildPlatform, buildRustCrate, fetchgit }: let kernel = buildPlatform.parsed.kernel.name; abi = buildPlatform.parsed.abi.name; aho_corasick_0_6_3_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate { diff --git a/pkgs/build-support/rust/rust-utils.nix b/pkgs/build-support/rust/rust-utils.nix index 0e9458bab11c68..b95662e26c0da8 100644 --- a/pkgs/build-support/rust/rust-utils.nix +++ b/pkgs/build-support/rust/rust-utils.nix @@ -252,14 +252,19 @@ let buildCrate = { crateName, crateVersion, crateAuthors, buildDependencies, fi mkdir -p target/bin - echo "${crateBin}" | sed -n 1'p' | tr ',' '\n' | while read BIN; do + echo "${crateBin}" | sed -n 1'p' 1 | tr ',' '\n' | while read BIN; do if [ ! -z "$BIN" ]; then build_bin $BIN fi done - if [[ (-z "${crateBin}") && (-e src/main.rs) ]]; then - build_bin ${crateName} src/main.rs - fi + ${lib.optionalString (crateBin == "") '' + if [[ -e src/main.rs ]]; then + build_bin ${crateName} src/main.rs + fi + for i in src/bin/*.rs; do #*/ + build_bin "$(basename $i .rs)" "$i" + done + ''} # Remove object files to avoid "wrong ELF type" find target -type f -name "*.o" -print0 | xargs -0 rm -f runHook postBuild From 0e8ef4b666b1af80c3d9490e30f8fa2c4ecf1413 Mon Sep 17 00:00:00 2001 From: "pe@pijul.org" Date: Thu, 30 Nov 2017 12:40:38 +0100 Subject: [PATCH 37/47] Fixing a typo --- pkgs/build-support/rust/rust-utils.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkgs/build-support/rust/rust-utils.nix b/pkgs/build-support/rust/rust-utils.nix index b95662e26c0da8..02f0ef6b2ed673 100644 --- a/pkgs/build-support/rust/rust-utils.nix +++ b/pkgs/build-support/rust/rust-utils.nix @@ -252,7 +252,7 @@ let buildCrate = { crateName, crateVersion, crateAuthors, buildDependencies, fi mkdir -p target/bin - echo "${crateBin}" | sed -n 1'p' 1 | tr ',' '\n' | while read BIN; do + echo "${crateBin}" | sed -n 1'p' | tr ',' '\n' | while read BIN; do if [ ! -z "$BIN" ]; then build_bin $BIN fi From 5555123381f6148fed8c95e6f934b1cfdac30f61 Mon Sep 17 00:00:00 2001 From: "pe@pijul.org" Date: Thu, 30 Nov 2017 14:00:05 +0100 Subject: [PATCH 38/47] Carnix 0.4.13 --- pkgs/build-support/rust/carnix.nix | 8 ++++---- pkgs/top-level/all-packages.nix | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/pkgs/build-support/rust/carnix.nix b/pkgs/build-support/rust/carnix.nix index 0c825ce2470769..e81cd821126edc 100644 --- a/pkgs/build-support/rust/carnix.nix +++ b/pkgs/build-support/rust/carnix.nix @@ -53,11 +53,11 @@ let kernel = buildPlatform.parsed.kernel.name; sha256 = "0p4b3nr0s5nda2qmm7xdhnvh4lkqk3xd8l9ffmwbvqw137vx7mj1"; inherit dependencies buildDependencies features; }; - carnix_0_4_10_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate { + carnix_0_4_13_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate { crateName = "carnix"; - version = "0.4.10"; + version = "0.4.13"; authors = [ "pe@pijul.org " ]; - sha256 = "06zsvylwc21vrwgrr9lbg39kp5p71nil4vcwkk292j0wrm28s32z"; + sha256 = "0zdlk1hyhhkmq80kkinn8h28nyrs16b3b15gdrbd63c560hpz3kl"; inherit dependencies buildDependencies features; }; cc_1_0_3_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate { @@ -467,7 +467,7 @@ rec { bitflags_1_0_1 = bitflags_1_0_1_ { features = [ "example_generated" ]; }; - carnix_0_4_10 = carnix_0_4_10_ { + carnix_0_4_13 = carnix_0_4_13_ { dependencies = [ clap_2_28_0 env_logger_0_4_3 error_chain_0_11_0 itertools_0_7_3 log_0_3_8 nom_3_2_1 regex_0_2_2 rusqlite_0_13_0 serde_1_0_21 serde_derive_1_0_21 serde_json_1_0_6 tempdir_0_3_5 toml_0_4_5 ]; }; cc_1_0_3 = cc_1_0_3_ { diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 004710e4234f0d..ba8f3b5daea84f 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -6219,7 +6219,7 @@ with pkgs; buildRustCrate = callPackage ../build-support/rust/rust-utils.nix { }; - carnix = (callPackage ../build-support/rust/carnix.nix { }).carnix_0_4_10; + carnix = (callPackage ../build-support/rust/carnix.nix { }).carnix_0_4_13; defaultCrateOverrides = callPackage ../build-support/rust/defaultCrateOverrides.nix { }; From 457f9f580a50371d4b1337a1fc56925e4aba78b0 Mon Sep 17 00:00:00 2001 From: "pe@pijul.org" Date: Thu, 30 Nov 2017 14:15:30 +0100 Subject: [PATCH 39/47] Fixing the "[ integer" error when building binaries --- pkgs/build-support/rust/rust-utils.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkgs/build-support/rust/rust-utils.nix b/pkgs/build-support/rust/rust-utils.nix index 02f0ef6b2ed673..49b2c891589ee9 100644 --- a/pkgs/build-support/rust/rust-utils.nix +++ b/pkgs/build-support/rust/rust-utils.nix @@ -111,7 +111,7 @@ let buildCrate = { crateName, crateVersion, crateAuthors, buildDependencies, crate_name=$1 crate_name_=$(echo $crate_name | sed -e "s/-/_/g") main_file="" - if [ ! -z $2 ]; then + if [[ ! -z $2 ]]; then main_file=$2 fi echo_build_heading $@ From c21a2416f5c6aa60ea375e84145c2a34e1d4fb8d Mon Sep 17 00:00:00 2001 From: "pe@pijul.org" Date: Thu, 30 Nov 2017 14:21:14 +0100 Subject: [PATCH 40/47] Documentation with examples that compile --- doc/languages-frameworks/rust.md | 55 +++++++++++++++++++++----------- 1 file changed, 37 insertions(+), 18 deletions(-) diff --git a/doc/languages-frameworks/rust.md b/doc/languages-frameworks/rust.md index 2d231656cc9d37..fed279a6544afa 100644 --- a/doc/languages-frameworks/rust.md +++ b/doc/languages-frameworks/rust.md @@ -143,16 +143,24 @@ Starting from that file, one can add more overrides, to add features or build inputs, as follows: ``` -let - defaultOverrides = callPackage {}; - overrides = defaultOverrides // { - hello = attrs: { - buildInputs = [ myPackage ]; +with import {}; +let kernel = buildPlatform.parsed.kernel.name; + abi = buildPlatform.parsed.abi.name; + helo_0_1_0_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate { + crateName = "helo"; + version = "0.1.0"; + authors = [ "pe@pijul.org " ]; + src = ./.; + inherit dependencies buildDependencies features; }; - }; in - -hello_0_1_0.override { crateOverrides = overrides; } +rec { + helo_0_1_0 = (helo_0_1_0_ {}).override { + crateOverrides = defaultCrateOverrides // { + helo = attrs: { buildInputs = [ openssl ]; }; + }; + }; +} ``` Here, `crateOverrides` is expected to be a attribute set, where the @@ -167,18 +175,29 @@ the override above can be read, as in the following example, which patches the derivation: ``` -let - defaultOverrides = callPackage {}; - overrides = defaultOverrides // { - imaginary-timezone-crate = attrs: lib.optionalAttrs (lib.versionAtLeast attrs.version "1.0") { - postPatch = '' - substituteInPlace lib/zoneinfo.rs \ - --replace "/usr/share/zoneinfo" "${tzdata}/share/zoneinfo" - ''; +with import {}; +let kernel = buildPlatform.parsed.kernel.name; + abi = buildPlatform.parsed.abi.name; + helo_0_1_0_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate { + crateName = "helo"; + version = "0.1.0"; + authors = [ "pe@pijul.org " ]; + src = ./.; + inherit dependencies buildDependencies features; }; - }; in -hello_0_1_0.override { crateOverrides = overrides; } +rec { + helo_0_1_0 = (helo_0_1_0_ {}).override { + crateOverrides = defaultCrateOverrides // { + helo = attrs: lib.optionalAttrs (lib.versionAtLeast attrs.version "1.0") { + postPatch = '' + substituteInPlace lib/zoneinfo.rs \ + --replace "/usr/share/zoneinfo" "${tzdata}/share/zoneinfo" + ''; + }; + }; + }; +} ``` From 59d16ef9406524a01a9026b46f2dba068f996bbc Mon Sep 17 00:00:00 2001 From: "pe@pijul.org" Date: Thu, 30 Nov 2017 15:10:51 +0100 Subject: [PATCH 41/47] Carnix 0.4.14 --- pkgs/build-support/rust/carnix.nix | 13 +++++++------ pkgs/build-support/rust/rust-utils.nix | 14 +++++++++----- pkgs/top-level/all-packages.nix | 2 +- 3 files changed, 17 insertions(+), 12 deletions(-) diff --git a/pkgs/build-support/rust/carnix.nix b/pkgs/build-support/rust/carnix.nix index e81cd821126edc..4b7aa22af77c78 100644 --- a/pkgs/build-support/rust/carnix.nix +++ b/pkgs/build-support/rust/carnix.nix @@ -1,3 +1,4 @@ +# Generated by carnix 0.4.14: carnix -o carnix.nix Cargo.lock { buildPlatform, buildRustCrate, fetchgit }: let kernel = buildPlatform.parsed.kernel.name; abi = buildPlatform.parsed.abi.name; @@ -53,11 +54,11 @@ let kernel = buildPlatform.parsed.kernel.name; sha256 = "0p4b3nr0s5nda2qmm7xdhnvh4lkqk3xd8l9ffmwbvqw137vx7mj1"; inherit dependencies buildDependencies features; }; - carnix_0_4_13_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate { + carnix_0_4_14_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate { crateName = "carnix"; - version = "0.4.13"; + version = "0.4.14"; authors = [ "pe@pijul.org " ]; - sha256 = "0zdlk1hyhhkmq80kkinn8h28nyrs16b3b15gdrbd63c560hpz3kl"; + src = ./.; inherit dependencies buildDependencies features; }; cc_1_0_3_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate { @@ -467,7 +468,7 @@ rec { bitflags_1_0_1 = bitflags_1_0_1_ { features = [ "example_generated" ]; }; - carnix_0_4_13 = carnix_0_4_13_ { + carnix_0_4_14 = carnix_0_4_14_ { dependencies = [ clap_2_28_0 env_logger_0_4_3 error_chain_0_11_0 itertools_0_7_3 log_0_3_8 nom_3_2_1 regex_0_2_2 rusqlite_0_13_0 serde_1_0_21 serde_derive_1_0_21 serde_json_1_0_6 tempdir_0_3_5 toml_0_4_5 ]; }; cc_1_0_3 = cc_1_0_3_ { @@ -556,10 +557,10 @@ rec { features = [ "std" ]; }; serde_derive_1_0_21 = serde_derive_1_0_21_ { - dependencies = [ quote_0_3_15 serde_derive_internals_0_17_0 syn_0_11_11 ]; + dependencies = [ quote_0_3_15 serde_derive_internals_0_17_0 (syn_0_11_11.override { features = [ "visit" ]; }) ]; }; serde_derive_internals_0_17_0 = serde_derive_internals_0_17_0_ { - dependencies = [ syn_0_11_11 synom_0_11_3 ]; + dependencies = [ (syn_0_11_11.override { features = [ "parsing" ]; }) synom_0_11_3 ]; }; serde_json_1_0_6 = serde_json_1_0_6_ { dependencies = [ dtoa_0_4_2 itoa_0_3_4 num_traits_0_1_40 serde_1_0_21 ]; diff --git a/pkgs/build-support/rust/rust-utils.nix b/pkgs/build-support/rust/rust-utils.nix index 49b2c891589ee9..72bb3b80492a2a 100644 --- a/pkgs/build-support/rust/rust-utils.nix +++ b/pkgs/build-support/rust/rust-utils.nix @@ -294,9 +294,11 @@ let buildCrate = { crateName, crateVersion, crateAuthors, buildDependencies, ''; in -crate_: lib.makeOverridable ({ rust, release, verbose, crateOverrides }: +crate_: lib.makeOverridable ({ rust, release, verbose, features, buildInputs, crateOverrides }: -let crate = crate_ // (lib.attrByPath [ crate_.crateName ] (attr: {}) crateOverrides crate_); in +let crate = crate_ // (lib.attrByPath [ crate_.crateName ] (attr: {}) crateOverrides crate_); + buildInputs_ = buildInputs; +in stdenv.mkDerivation rec { inherit (crate) crateName; @@ -306,7 +308,7 @@ stdenv.mkDerivation rec { else fetchCrate { inherit (crate) crateName version sha256; }; name = "rust_${crate.crateName}-${crate.version}"; - buildInputs = [ rust ncurses ] ++ (crate.buildInputs or []); + buildInputs = [ rust ncurses ] ++ (crate.buildInputs or []) ++ buildInputs_; dependencies = builtins.map (dep: dep.override { rust = rust; release = release; verbose = verbose; crateOverrides = crateOverrides; }) @@ -324,8 +326,8 @@ stdenv.mkDerivation rec { ); crateFeatures = if crate ? features then - lib.concatMapStringsSep " " (f: "--cfg feature=\\\"${f}\\\"") crate.features - else ""; + lib.concatMapStringsSep " " (f: "--cfg feature=\\\"${f}\\\"") (crate.features ++ features) + else ""; libName = if crate ? libName then crate.libName else crate.crateName; libPath = if crate ? libPath then crate.libPath else ""; @@ -374,5 +376,7 @@ stdenv.mkDerivation rec { rust = rustc; release = true; verbose = true; + features = []; + buildInputs = []; crateOverrides = defaultCrateOverrides; } diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index ba8f3b5daea84f..7cc76fc4b25695 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -6219,7 +6219,7 @@ with pkgs; buildRustCrate = callPackage ../build-support/rust/rust-utils.nix { }; - carnix = (callPackage ../build-support/rust/carnix.nix { }).carnix_0_4_13; + carnix = (callPackage ../build-support/rust/carnix.nix { }).carnix_0_4_14; defaultCrateOverrides = callPackage ../build-support/rust/defaultCrateOverrides.nix { }; From 7d7fe217747c9ecee456f867aebf2e711b96b26b Mon Sep 17 00:00:00 2001 From: "pe@pijul.org" Date: Fri, 1 Dec 2017 15:59:52 +0100 Subject: [PATCH 42/47] Carnix src was wrong --- pkgs/build-support/rust/carnix.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkgs/build-support/rust/carnix.nix b/pkgs/build-support/rust/carnix.nix index 4b7aa22af77c78..5a3a2a2dd456ca 100644 --- a/pkgs/build-support/rust/carnix.nix +++ b/pkgs/build-support/rust/carnix.nix @@ -58,7 +58,7 @@ let kernel = buildPlatform.parsed.kernel.name; crateName = "carnix"; version = "0.4.14"; authors = [ "pe@pijul.org " ]; - src = ./.; + sha256 = "1wdmpm3l6nyxxlw9h8h4jrxx63v7xc752mgqlmp5qmlbpnjvcla1"; inherit dependencies buildDependencies features; }; cc_1_0_3_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate { From fc84be39c6b1da135b7dd3285176699177897802 Mon Sep 17 00:00:00 2001 From: "pe@pijul.org" Date: Tue, 5 Dec 2017 11:13:50 +0100 Subject: [PATCH 43/47] Carnix 0.5, including a new way to resolve features --- pkgs/build-support/rust/carnix.nix | 485 ++++++++++++++++++++++------- pkgs/top-level/all-packages.nix | 2 +- 2 files changed, 376 insertions(+), 111 deletions(-) diff --git a/pkgs/build-support/rust/carnix.nix b/pkgs/build-support/rust/carnix.nix index 5a3a2a2dd456ca..80c0903369afb3 100644 --- a/pkgs/build-support/rust/carnix.nix +++ b/pkgs/build-support/rust/carnix.nix @@ -1,7 +1,23 @@ -# Generated by carnix 0.4.14: carnix -o carnix.nix Cargo.lock -{ buildPlatform, buildRustCrate, fetchgit }: +# Generated by carnix 0.5.0: carnix -o carnix.nix --src ./. Cargo.lock +{ lib, buildPlatform, buildRustCrate, fetchgit }: let kernel = buildPlatform.parsed.kernel.name; abi = buildPlatform.parsed.abi.name; + hasFeature = feature: + lib.lists.any + (originName: feature.${originName}) + (builtins.attrNames feature); + + hasDefault = feature: + let defaultFeatures = builtins.attrNames (feature."default" or {}); in + (defaultFeatures == []) + || (lib.lists.any (originName: feature."default".${originName}) defaultFeatures); + + mkFeatures = feat: lib.lists.foldl (features: featureName: + if featureName != "" && hasFeature feat.${featureName} then + [ featureName ] ++ features + else + features + ) (if hasDefault feat then [ "default" ] else []) (builtins.attrNames feat); aho_corasick_0_6_3_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate { crateName = "aho-corasick"; version = "0.6.3"; @@ -54,11 +70,11 @@ let kernel = buildPlatform.parsed.kernel.name; sha256 = "0p4b3nr0s5nda2qmm7xdhnvh4lkqk3xd8l9ffmwbvqw137vx7mj1"; inherit dependencies buildDependencies features; }; - carnix_0_4_14_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate { + carnix_0_5_0_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate { crateName = "carnix"; - version = "0.4.14"; + version = "0.5.0"; authors = [ "pe@pijul.org " ]; - sha256 = "1wdmpm3l6nyxxlw9h8h4jrxx63v7xc752mgqlmp5qmlbpnjvcla1"; + sha256 = "0mrprfa9l6q351ci77zr305jk5wdii8gamaphd2iars4xwn26lj4"; inherit dependencies buildDependencies features; }; cc_1_0_3_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate { @@ -444,167 +460,416 @@ let kernel = buildPlatform.parsed.kernel.name; in rec { - aho_corasick_0_6_3 = aho_corasick_0_6_3_ { + aho_corasick_0_6_3 = aho_corasick_0_6_3_ rec { dependencies = [ memchr_1_0_2 ]; }; - ansi_term_0_10_2 = ansi_term_0_10_2_ {}; - atty_0_2_3 = atty_0_2_3_ { + memchr_1_0_2_features."default".from_aho_corasick_0_6_3__default = true; + ansi_term_0_10_2 = ansi_term_0_10_2_ rec {}; + atty_0_2_3 = atty_0_2_3_ rec { dependencies = (if kernel == "redox" then [ termion_1_5_1 ] else []) ++ (if (kernel == "linux" || kernel == "darwin") then [ libc_0_2_33 ] else []) ++ (if kernel == "windows" then [ kernel32_sys_0_2_2 winapi_0_2_8 ] else []); }; - backtrace_0_3_4 = backtrace_0_3_4_ { + termion_1_5_1_features."default".from_atty_0_2_3__default = true; + libc_0_2_33_features."default".from_atty_0_2_3__default = false; + kernel32_sys_0_2_2_features."default".from_atty_0_2_3__default = true; + winapi_0_2_8_features."default".from_atty_0_2_3__default = true; + backtrace_0_3_4 = backtrace_0_3_4_ rec { dependencies = [ cfg_if_0_1_2 rustc_demangle_0_1_5 ] - ++ (if (kernel == "linux" || kernel == "darwin") && !(kernel == "fuchsia") && !(kernel == "emscripten") && !(kernel == "darwin") && !(kernel == "ios") then [ backtrace_sys_0_1_16 ] else []) + ++ (if (kernel == "linux" || kernel == "darwin") && !(kernel == "fuchsia") && !(kernel == "emscripten") && !(kernel == "darwin") && !(kernel == "ios") then [ backtrace_sys_0_1_16 ] + ++ (if lib.lists.any (x: x == "backtrace-sys") features then [backtrace_sys_0_1_16] else []) else []) ++ (if (kernel == "linux" || kernel == "darwin") then [ libc_0_2_33 ] else []) - ++ (if kernel == "windows" then [ dbghelp_sys_0_2_0 kernel32_sys_0_2_2 winapi_0_2_8 ] else []); - features = [ "backtrace-sys" "coresymbolication" "dbghelp" "dbghelp-sys" "dladdr" "kernel32-sys" "libbacktrace" "libunwind" "winapi" ]; - }; - backtrace_sys_0_1_16 = backtrace_sys_0_1_16_ { + ++ (if kernel == "windows" then [ dbghelp_sys_0_2_0 kernel32_sys_0_2_2 winapi_0_2_8 ] + ++ (if lib.lists.any (x: x == "dbghelp-sys") features then [dbghelp_sys_0_2_0] else []) ++ (if lib.lists.any (x: x == "kernel32-sys") features then [kernel32_sys_0_2_2] else []) ++ (if lib.lists.any (x: x == "winapi") features then [winapi_0_2_8] else []) else []); + features = mkFeatures backtrace_0_3_4_features; + }; + backtrace_0_3_4_features."".self = true; + backtrace_0_3_4_features."kernel32-sys".self_dbghelp = hasFeature (backtrace_0_3_4_features."dbghelp" or {}); + backtrace_0_3_4_features."winapi".self_dbghelp = hasFeature (backtrace_0_3_4_features."dbghelp" or {}); + backtrace_0_3_4_features."dbghelp-sys".self_dbghelp = hasFeature (backtrace_0_3_4_features."dbghelp" or {}); + backtrace_0_3_4_features."libunwind".self_default = hasDefault backtrace_0_3_4_features; + backtrace_0_3_4_features."libbacktrace".self_default = hasDefault backtrace_0_3_4_features; + backtrace_0_3_4_features."coresymbolication".self_default = hasDefault backtrace_0_3_4_features; + backtrace_0_3_4_features."dladdr".self_default = hasDefault backtrace_0_3_4_features; + backtrace_0_3_4_features."dbghelp".self_default = hasDefault backtrace_0_3_4_features; + backtrace_0_3_4_features."addr2line".self_gimli-symbolize = hasFeature (backtrace_0_3_4_features."gimli-symbolize" or {}); + backtrace_0_3_4_features."findshlibs".self_gimli-symbolize = hasFeature (backtrace_0_3_4_features."gimli-symbolize" or {}); + backtrace_0_3_4_features."backtrace-sys".self_libbacktrace = hasFeature (backtrace_0_3_4_features."libbacktrace" or {}); + backtrace_0_3_4_features."rustc-serialize".self_serialize-rustc = hasFeature (backtrace_0_3_4_features."serialize-rustc" or {}); + backtrace_0_3_4_features."serde".self_serialize-serde = hasFeature (backtrace_0_3_4_features."serialize-serde" or {}); + backtrace_0_3_4_features."serde_derive".self_serialize-serde = hasFeature (backtrace_0_3_4_features."serialize-serde" or {}); + addr2line_0_0_0_features."default".from_backtrace_0_3_4__default = true; + cfg_if_0_1_2_features."default".from_backtrace_0_3_4__default = true; + cpp_demangle_0_0_0_features."default".from_backtrace_0_3_4__default = false; + findshlibs_0_0_0_features."default".from_backtrace_0_3_4__default = true; + rustc_demangle_0_1_5_features."default".from_backtrace_0_3_4__default = true; + rustc_serialize_0_0_0_features."default".from_backtrace_0_3_4__default = true; + serde_0_0_0_features."default".from_backtrace_0_3_4__default = true; + serde_derive_0_0_0_features."default".from_backtrace_0_3_4__default = true; + backtrace_sys_0_1_16_features."default".from_backtrace_0_3_4__default = true; + libc_0_2_33_features."default".from_backtrace_0_3_4__default = true; + dbghelp_sys_0_2_0_features."default".from_backtrace_0_3_4__default = true; + kernel32_sys_0_2_2_features."default".from_backtrace_0_3_4__default = true; + winapi_0_2_8_features."default".from_backtrace_0_3_4__default = true; + backtrace_sys_0_1_16 = backtrace_sys_0_1_16_ rec { dependencies = [ libc_0_2_33 ]; buildDependencies = [ cc_1_0_3 ]; }; - bitflags_0_7_0 = bitflags_0_7_0_ {}; - bitflags_1_0_1 = bitflags_1_0_1_ { - features = [ "example_generated" ]; + libc_0_2_33_features."default".from_backtrace_sys_0_1_16__default = true; + bitflags_0_7_0 = bitflags_0_7_0_ rec {}; + bitflags_1_0_1 = bitflags_1_0_1_ rec { + features = mkFeatures bitflags_1_0_1_features; }; - carnix_0_4_14 = carnix_0_4_14_ { + bitflags_1_0_1_features."example_generated".self_default = hasDefault bitflags_1_0_1_features; + carnix_0_5_0 = carnix_0_5_0_ rec { dependencies = [ clap_2_28_0 env_logger_0_4_3 error_chain_0_11_0 itertools_0_7_3 log_0_3_8 nom_3_2_1 regex_0_2_2 rusqlite_0_13_0 serde_1_0_21 serde_derive_1_0_21 serde_json_1_0_6 tempdir_0_3_5 toml_0_4_5 ]; }; - cc_1_0_3 = cc_1_0_3_ { + clap_2_28_0_features."default".from_carnix_0_5_0__default = true; + env_logger_0_4_3_features."default".from_carnix_0_5_0__default = true; + error_chain_0_11_0_features."default".from_carnix_0_5_0__default = true; + itertools_0_7_3_features."default".from_carnix_0_5_0__default = true; + log_0_3_8_features."default".from_carnix_0_5_0__default = true; + nom_3_2_1_features."default".from_carnix_0_5_0__default = true; + regex_0_2_2_features."default".from_carnix_0_5_0__default = true; + rusqlite_0_13_0_features."default".from_carnix_0_5_0__default = true; + serde_1_0_21_features."default".from_carnix_0_5_0__default = true; + serde_derive_1_0_21_features."default".from_carnix_0_5_0__default = true; + serde_json_1_0_6_features."default".from_carnix_0_5_0__default = true; + tempdir_0_3_5_features."default".from_carnix_0_5_0__default = true; + toml_0_4_5_features."default".from_carnix_0_5_0__default = true; + cc_1_0_3 = cc_1_0_3_ rec { dependencies = []; - }; - cfg_if_0_1_2 = cfg_if_0_1_2_ {}; - clap_2_28_0 = clap_2_28_0_ { - dependencies = [ ansi_term_0_10_2 atty_0_2_3 bitflags_1_0_1 strsim_0_6_0 textwrap_0_9_0 unicode_width_0_1_4 vec_map_0_8_0 ]; - features = [ "ansi_term" "atty" "color" "strsim" "suggestions" "vec_map" ]; - }; - dbghelp_sys_0_2_0 = dbghelp_sys_0_2_0_ { + features = mkFeatures cc_1_0_3_features; + }; + cc_1_0_3_features."rayon".self_parallel = hasFeature (cc_1_0_3_features."parallel" or {}); + rayon_0_0_0_features."default".from_cc_1_0_3__default = true; + cfg_if_0_1_2 = cfg_if_0_1_2_ rec {}; + clap_2_28_0 = clap_2_28_0_ rec { + dependencies = [ ansi_term_0_10_2 atty_0_2_3 bitflags_1_0_1 strsim_0_6_0 textwrap_0_9_0 unicode_width_0_1_4 vec_map_0_8_0 ] + ++ (if lib.lists.any (x: x == "ansi_term") features then [ansi_term_0_10_2] else []) ++ (if lib.lists.any (x: x == "atty") features then [atty_0_2_3] else []) ++ (if lib.lists.any (x: x == "strsim") features then [strsim_0_6_0] else []) ++ (if lib.lists.any (x: x == "vec_map") features then [vec_map_0_8_0] else []); + features = mkFeatures clap_2_28_0_features; + }; + clap_2_28_0_features."".self = true; + clap_2_28_0_features."ansi_term".self_color = hasFeature (clap_2_28_0_features."color" or {}); + clap_2_28_0_features."atty".self_color = hasFeature (clap_2_28_0_features."color" or {}); + clap_2_28_0_features."suggestions".self_default = hasDefault clap_2_28_0_features; + clap_2_28_0_features."color".self_default = hasDefault clap_2_28_0_features; + clap_2_28_0_features."vec_map".self_default = hasDefault clap_2_28_0_features; + clap_2_28_0_features."yaml".self_doc = hasFeature (clap_2_28_0_features."doc" or {}); + clap_2_28_0_features."clippy".self_lints = hasFeature (clap_2_28_0_features."lints" or {}); + clap_2_28_0_features."strsim".self_suggestions = hasFeature (clap_2_28_0_features."suggestions" or {}); + clap_2_28_0_features."term_size".self_wrap_help = hasFeature (clap_2_28_0_features."wrap_help" or {}); + clap_2_28_0_features."yaml-rust".self_yaml = hasFeature (clap_2_28_0_features."yaml" or {}); + ansi_term_0_10_2_features."default".from_clap_2_28_0__default = true; + atty_0_2_3_features."default".from_clap_2_28_0__default = true; + bitflags_1_0_1_features."default".from_clap_2_28_0__default = true; + clippy_0_0_0_features."default".from_clap_2_28_0__default = true; + strsim_0_6_0_features."default".from_clap_2_28_0__default = true; + term_size_0_0_0_features."default".from_clap_2_28_0__default = true; + textwrap_0_9_0_features."term_size".from_clap_2_28_0__wrap_help = hasFeature (clap_2_28_0_features."wrap_help" or {}); + textwrap_0_9_0_features."default".from_clap_2_28_0__default = true; + unicode_width_0_1_4_features."default".from_clap_2_28_0__default = true; + vec_map_0_8_0_features."default".from_clap_2_28_0__default = true; + yaml_rust_0_0_0_features."default".from_clap_2_28_0__default = true; + dbghelp_sys_0_2_0 = dbghelp_sys_0_2_0_ rec { dependencies = [ winapi_0_2_8 ]; buildDependencies = [ winapi_build_0_1_1 ]; }; - dtoa_0_4_2 = dtoa_0_4_2_ {}; - either_1_4_0 = either_1_4_0_ { - features = [ "use_std" ]; - }; - env_logger_0_4_3 = env_logger_0_4_3_ { - dependencies = [ log_0_3_8 regex_0_2_2 ]; - features = [ "regex" ]; - }; - error_chain_0_11_0 = error_chain_0_11_0_ { - dependencies = [ backtrace_0_3_4 ]; - features = [ "backtrace" "example_generated" ]; - }; - fuchsia_zircon_0_2_1 = fuchsia_zircon_0_2_1_ { + winapi_0_2_8_features."default".from_dbghelp_sys_0_2_0__default = true; + dtoa_0_4_2 = dtoa_0_4_2_ rec {}; + either_1_4_0 = either_1_4_0_ rec { + dependencies = []; + features = mkFeatures either_1_4_0_features; + }; + either_1_4_0_features."use_std".self_default = hasDefault either_1_4_0_features; + serde_0_0_0_features."derive".from_either_1_4_0 = true; + serde_0_0_0_features."default".from_either_1_4_0__default = true; + env_logger_0_4_3 = env_logger_0_4_3_ rec { + dependencies = [ log_0_3_8 regex_0_2_2 ] + ++ (if lib.lists.any (x: x == "regex") features then [regex_0_2_2] else []); + features = mkFeatures env_logger_0_4_3_features; + }; + env_logger_0_4_3_features."".self = true; + env_logger_0_4_3_features."regex".self_default = hasDefault env_logger_0_4_3_features; + log_0_3_8_features."default".from_env_logger_0_4_3__default = true; + regex_0_2_2_features."default".from_env_logger_0_4_3__default = true; + error_chain_0_11_0 = error_chain_0_11_0_ rec { + dependencies = [ backtrace_0_3_4 ] + ++ (if lib.lists.any (x: x == "backtrace") features then [backtrace_0_3_4] else []); + features = mkFeatures error_chain_0_11_0_features; + }; + error_chain_0_11_0_features."".self = true; + error_chain_0_11_0_features."backtrace".self_default = hasDefault error_chain_0_11_0_features; + error_chain_0_11_0_features."example_generated".self_default = hasDefault error_chain_0_11_0_features; + backtrace_0_3_4_features."default".from_error_chain_0_11_0__default = true; + fuchsia_zircon_0_2_1 = fuchsia_zircon_0_2_1_ rec { dependencies = [ fuchsia_zircon_sys_0_2_0 ]; }; - fuchsia_zircon_sys_0_2_0 = fuchsia_zircon_sys_0_2_0_ { + fuchsia_zircon_sys_0_2_0_features."default".from_fuchsia_zircon_0_2_1__default = true; + fuchsia_zircon_sys_0_2_0 = fuchsia_zircon_sys_0_2_0_ rec { dependencies = [ bitflags_0_7_0 ]; }; - itertools_0_7_3 = itertools_0_7_3_ { + bitflags_0_7_0_features."default".from_fuchsia_zircon_sys_0_2_0__default = true; + itertools_0_7_3 = itertools_0_7_3_ rec { dependencies = [ either_1_4_0 ]; - features = [ "use_std" ]; + features = mkFeatures itertools_0_7_3_features; + }; + itertools_0_7_3_features."use_std".self_default = hasDefault itertools_0_7_3_features; + either_1_4_0_features."default".from_itertools_0_7_3__default = false; + itoa_0_3_4 = itoa_0_3_4_ rec { + features = mkFeatures itoa_0_3_4_features; }; - itoa_0_3_4 = itoa_0_3_4_ {}; - kernel32_sys_0_2_2 = kernel32_sys_0_2_2_ { + itoa_0_3_4_features."".self = true; + kernel32_sys_0_2_2 = kernel32_sys_0_2_2_ rec { dependencies = [ winapi_0_2_8 ]; buildDependencies = [ winapi_build_0_1_1 ]; }; - lazy_static_0_2_11 = lazy_static_0_2_11_ {}; - libc_0_2_33 = libc_0_2_33_ { - features = [ "use_std" ]; - }; - libsqlite3_sys_0_9_0 = libsqlite3_sys_0_9_0_ { + winapi_0_2_8_features."default".from_kernel32_sys_0_2_2__default = true; + lazy_static_0_2_11 = lazy_static_0_2_11_ rec { + dependencies = []; + features = mkFeatures lazy_static_0_2_11_features; + }; + lazy_static_0_2_11_features."compiletest_rs".self_compiletest = hasFeature (lazy_static_0_2_11_features."compiletest" or {}); + lazy_static_0_2_11_features."nightly".self_spin_no_std = hasFeature (lazy_static_0_2_11_features."spin_no_std" or {}); + lazy_static_0_2_11_features."spin".self_spin_no_std = hasFeature (lazy_static_0_2_11_features."spin_no_std" or {}); + compiletest_rs_0_0_0_features."default".from_lazy_static_0_2_11__default = true; + spin_0_0_0_features."default".from_lazy_static_0_2_11__default = true; + libc_0_2_33 = libc_0_2_33_ rec { + features = mkFeatures libc_0_2_33_features; + }; + libc_0_2_33_features."use_std".self_default = hasDefault libc_0_2_33_features; + libsqlite3_sys_0_9_0 = libsqlite3_sys_0_9_0_ rec { dependencies = (if abi == "msvc" then [] else []); - buildDependencies = [ pkg_config_0_3_9 ]; - features = [ "min_sqlite_version_3_6_8" "pkg-config" "vcpkg" ]; - }; - linked_hash_map_0_4_2 = linked_hash_map_0_4_2_ {}; - log_0_3_8 = log_0_3_8_ { - features = [ "use_std" ]; - }; - lru_cache_0_1_1 = lru_cache_0_1_1_ { + buildDependencies = [ pkg_config_0_3_9 ] + ++ (if lib.lists.any (x: x == "pkg-config") features then [pkg_config_0_3_9] else []); + features = mkFeatures libsqlite3_sys_0_9_0_features; + }; + libsqlite3_sys_0_9_0_features."bindgen".self_buildtime_bindgen = hasFeature (libsqlite3_sys_0_9_0_features."buildtime_bindgen" or {}); + libsqlite3_sys_0_9_0_features."pkg-config".self_buildtime_bindgen = hasFeature (libsqlite3_sys_0_9_0_features."buildtime_bindgen" or {}); + libsqlite3_sys_0_9_0_features."vcpkg".self_buildtime_bindgen = hasFeature (libsqlite3_sys_0_9_0_features."buildtime_bindgen" or {}); + libsqlite3_sys_0_9_0_features."cc".self_bundled = hasFeature (libsqlite3_sys_0_9_0_features."bundled" or {}); + libsqlite3_sys_0_9_0_features."min_sqlite_version_3_6_8".self_default = hasDefault libsqlite3_sys_0_9_0_features; + libsqlite3_sys_0_9_0_features."pkg-config".self_min_sqlite_version_3_6_11 = hasFeature (libsqlite3_sys_0_9_0_features."min_sqlite_version_3_6_11" or {}); + libsqlite3_sys_0_9_0_features."vcpkg".self_min_sqlite_version_3_6_11 = hasFeature (libsqlite3_sys_0_9_0_features."min_sqlite_version_3_6_11" or {}); + libsqlite3_sys_0_9_0_features."pkg-config".self_min_sqlite_version_3_6_23 = hasFeature (libsqlite3_sys_0_9_0_features."min_sqlite_version_3_6_23" or {}); + libsqlite3_sys_0_9_0_features."vcpkg".self_min_sqlite_version_3_6_23 = hasFeature (libsqlite3_sys_0_9_0_features."min_sqlite_version_3_6_23" or {}); + libsqlite3_sys_0_9_0_features."pkg-config".self_min_sqlite_version_3_6_8 = hasFeature (libsqlite3_sys_0_9_0_features."min_sqlite_version_3_6_8" or {}); + libsqlite3_sys_0_9_0_features."vcpkg".self_min_sqlite_version_3_6_8 = hasFeature (libsqlite3_sys_0_9_0_features."min_sqlite_version_3_6_8" or {}); + libsqlite3_sys_0_9_0_features."pkg-config".self_min_sqlite_version_3_7_16 = hasFeature (libsqlite3_sys_0_9_0_features."min_sqlite_version_3_7_16" or {}); + libsqlite3_sys_0_9_0_features."vcpkg".self_min_sqlite_version_3_7_16 = hasFeature (libsqlite3_sys_0_9_0_features."min_sqlite_version_3_7_16" or {}); + libsqlite3_sys_0_9_0_features."pkg-config".self_min_sqlite_version_3_7_3 = hasFeature (libsqlite3_sys_0_9_0_features."min_sqlite_version_3_7_3" or {}); + libsqlite3_sys_0_9_0_features."vcpkg".self_min_sqlite_version_3_7_3 = hasFeature (libsqlite3_sys_0_9_0_features."min_sqlite_version_3_7_3" or {}); + libsqlite3_sys_0_9_0_features."pkg-config".self_min_sqlite_version_3_7_4 = hasFeature (libsqlite3_sys_0_9_0_features."min_sqlite_version_3_7_4" or {}); + libsqlite3_sys_0_9_0_features."vcpkg".self_min_sqlite_version_3_7_4 = hasFeature (libsqlite3_sys_0_9_0_features."min_sqlite_version_3_7_4" or {}); + linked_hash_map_0_4_2 = linked_hash_map_0_4_2_ rec { + dependencies = []; + features = mkFeatures linked_hash_map_0_4_2_features; + }; + linked_hash_map_0_4_2_features."heapsize".self_heapsize_impl = hasFeature (linked_hash_map_0_4_2_features."heapsize_impl" or {}); + linked_hash_map_0_4_2_features."serde".self_serde_impl = hasFeature (linked_hash_map_0_4_2_features."serde_impl" or {}); + linked_hash_map_0_4_2_features."serde_test".self_serde_impl = hasFeature (linked_hash_map_0_4_2_features."serde_impl" or {}); + clippy_0_0_0_features."default".from_linked_hash_map_0_4_2__default = true; + heapsize_0_0_0_features."default".from_linked_hash_map_0_4_2__default = true; + serde_0_0_0_features."default".from_linked_hash_map_0_4_2__default = true; + serde_test_0_0_0_features."default".from_linked_hash_map_0_4_2__default = true; + log_0_3_8 = log_0_3_8_ rec { + features = mkFeatures log_0_3_8_features; + }; + log_0_3_8_features."use_std".self_default = hasDefault log_0_3_8_features; + lru_cache_0_1_1 = lru_cache_0_1_1_ rec { dependencies = [ linked_hash_map_0_4_2 ]; + features = mkFeatures lru_cache_0_1_1_features; }; - memchr_1_0_2 = memchr_1_0_2_ { - dependencies = [ libc_0_2_33 ]; - features = [ "libc" "use_std" ]; - }; - nom_3_2_1 = nom_3_2_1_ { + lru_cache_0_1_1_features."heapsize".self_heapsize_impl = hasFeature (lru_cache_0_1_1_features."heapsize_impl" or {}); + heapsize_0_0_0_features."default".from_lru_cache_0_1_1__default = true; + linked_hash_map_0_4_2_features."heapsize_impl".from_lru_cache_0_1_1__heapsize_impl = hasFeature (lru_cache_0_1_1_features."heapsize_impl" or {}); + linked_hash_map_0_4_2_features."default".from_lru_cache_0_1_1__default = true; + memchr_1_0_2 = memchr_1_0_2_ rec { + dependencies = [ libc_0_2_33 ] + ++ (if lib.lists.any (x: x == "libc") features then [libc_0_2_33] else []); + features = mkFeatures memchr_1_0_2_features; + }; + memchr_1_0_2_features."".self = true; + memchr_1_0_2_features."use_std".self_default = hasDefault memchr_1_0_2_features; + memchr_1_0_2_features."libc".self_default = hasDefault memchr_1_0_2_features; + memchr_1_0_2_features."libc".self_use_std = hasFeature (memchr_1_0_2_features."use_std" or {}); + libc_0_2_33_features."use_std".from_memchr_1_0_2__use_std = hasFeature (memchr_1_0_2_features."use_std" or {}); + libc_0_2_33_features."default".from_memchr_1_0_2__default = false; + nom_3_2_1 = nom_3_2_1_ rec { dependencies = [ memchr_1_0_2 ]; - features = [ "std" "stream" ]; - }; - num_traits_0_1_40 = num_traits_0_1_40_ {}; - pkg_config_0_3_9 = pkg_config_0_3_9_ {}; - quote_0_3_15 = quote_0_3_15_ {}; - rand_0_3_18 = rand_0_3_18_ { + features = mkFeatures nom_3_2_1_features; + }; + nom_3_2_1_features."std".self_default = hasDefault nom_3_2_1_features; + nom_3_2_1_features."stream".self_default = hasDefault nom_3_2_1_features; + nom_3_2_1_features."compiler_error".self_nightly = hasFeature (nom_3_2_1_features."nightly" or {}); + nom_3_2_1_features."regex".self_regexp = hasFeature (nom_3_2_1_features."regexp" or {}); + nom_3_2_1_features."regexp".self_regexp_macros = hasFeature (nom_3_2_1_features."regexp_macros" or {}); + nom_3_2_1_features."lazy_static".self_regexp_macros = hasFeature (nom_3_2_1_features."regexp_macros" or {}); + compiler_error_0_0_0_features."default".from_nom_3_2_1__default = true; + lazy_static_0_0_0_features."default".from_nom_3_2_1__default = true; + memchr_1_0_2_features."use_std".from_nom_3_2_1__std = hasFeature (nom_3_2_1_features."std" or {}); + memchr_1_0_2_features."default".from_nom_3_2_1__default = false; + regex_0_0_0_features."default".from_nom_3_2_1__default = true; + num_traits_0_1_40 = num_traits_0_1_40_ rec {}; + pkg_config_0_3_9 = pkg_config_0_3_9_ rec {}; + quote_0_3_15 = quote_0_3_15_ rec {}; + rand_0_3_18 = rand_0_3_18_ rec { dependencies = [ libc_0_2_33 ] ++ (if kernel == "fuchsia" then [ fuchsia_zircon_0_2_1 ] else []); + features = mkFeatures rand_0_3_18_features; }; - redox_syscall_0_1_32 = redox_syscall_0_1_32_ {}; - redox_termios_0_1_1 = redox_termios_0_1_1_ { + rand_0_3_18_features."i128_support".self_nightly = hasFeature (rand_0_3_18_features."nightly" or {}); + libc_0_2_33_features."default".from_rand_0_3_18__default = true; + fuchsia_zircon_0_2_1_features."default".from_rand_0_3_18__default = true; + redox_syscall_0_1_32 = redox_syscall_0_1_32_ rec {}; + redox_termios_0_1_1 = redox_termios_0_1_1_ rec { dependencies = [ redox_syscall_0_1_32 ]; }; - regex_0_2_2 = regex_0_2_2_ { + redox_syscall_0_1_32_features."default".from_redox_termios_0_1_1__default = true; + regex_0_2_2 = regex_0_2_2_ rec { dependencies = [ aho_corasick_0_6_3 memchr_1_0_2 regex_syntax_0_4_1 thread_local_0_3_4 utf8_ranges_1_0_0 ]; - }; - regex_syntax_0_4_1 = regex_syntax_0_4_1_ {}; - rusqlite_0_13_0 = rusqlite_0_13_0_ { + features = mkFeatures regex_0_2_2_features; + }; + regex_0_2_2_features."simd".self_simd-accel = hasFeature (regex_0_2_2_features."simd-accel" or {}); + aho_corasick_0_6_3_features."default".from_regex_0_2_2__default = true; + memchr_1_0_2_features."default".from_regex_0_2_2__default = true; + regex_syntax_0_4_1_features."default".from_regex_0_2_2__default = true; + simd_0_0_0_features."default".from_regex_0_2_2__default = true; + thread_local_0_3_4_features."default".from_regex_0_2_2__default = true; + utf8_ranges_1_0_0_features."default".from_regex_0_2_2__default = true; + regex_syntax_0_4_1 = regex_syntax_0_4_1_ rec {}; + rusqlite_0_13_0 = rusqlite_0_13_0_ rec { dependencies = [ bitflags_1_0_1 libsqlite3_sys_0_9_0 lru_cache_0_1_1 time_0_1_38 ]; - }; - rustc_demangle_0_1_5 = rustc_demangle_0_1_5_ {}; - serde_1_0_21 = serde_1_0_21_ { - features = [ "std" ]; - }; - serde_derive_1_0_21 = serde_derive_1_0_21_ { - dependencies = [ quote_0_3_15 serde_derive_internals_0_17_0 (syn_0_11_11.override { features = [ "visit" ]; }) ]; - }; - serde_derive_internals_0_17_0 = serde_derive_internals_0_17_0_ { - dependencies = [ (syn_0_11_11.override { features = [ "parsing" ]; }) synom_0_11_3 ]; - }; - serde_json_1_0_6 = serde_json_1_0_6_ { + features = mkFeatures rusqlite_0_13_0_features; + }; + rusqlite_0_13_0_features."".self = true; + bitflags_1_0_1_features."default".from_rusqlite_0_13_0__default = true; + chrono_0_0_0_features."default".from_rusqlite_0_13_0__default = true; + libsqlite3_sys_0_9_0_features."min_sqlite_version_3_6_11".from_rusqlite_0_13_0__backup = hasFeature (rusqlite_0_13_0_features."backup" or {}); + libsqlite3_sys_0_9_0_features."min_sqlite_version_3_7_4".from_rusqlite_0_13_0__blob = hasFeature (rusqlite_0_13_0_features."blob" or {}); + libsqlite3_sys_0_9_0_features."buildtime_bindgen".from_rusqlite_0_13_0__buildtime_bindgen = hasFeature (rusqlite_0_13_0_features."buildtime_bindgen" or {}); + libsqlite3_sys_0_9_0_features."bundled".from_rusqlite_0_13_0__bundled = hasFeature (rusqlite_0_13_0_features."bundled" or {}); + libsqlite3_sys_0_9_0_features."min_sqlite_version_3_7_3".from_rusqlite_0_13_0__functions = hasFeature (rusqlite_0_13_0_features."functions" or {}); + libsqlite3_sys_0_9_0_features."sqlcipher".from_rusqlite_0_13_0__sqlcipher = hasFeature (rusqlite_0_13_0_features."sqlcipher" or {}); + libsqlite3_sys_0_9_0_features."min_sqlite_version_3_6_23".from_rusqlite_0_13_0__trace = hasFeature (rusqlite_0_13_0_features."trace" or {}); + libsqlite3_sys_0_9_0_features."default".from_rusqlite_0_13_0__default = true; + lru_cache_0_1_1_features."default".from_rusqlite_0_13_0__default = true; + serde_json_0_0_0_features."default".from_rusqlite_0_13_0__default = true; + time_0_1_38_features."default".from_rusqlite_0_13_0__default = true; + rustc_demangle_0_1_5 = rustc_demangle_0_1_5_ rec {}; + serde_1_0_21 = serde_1_0_21_ rec { + dependencies = []; + features = mkFeatures serde_1_0_21_features; + }; + serde_1_0_21_features."unstable".self_alloc = hasFeature (serde_1_0_21_features."alloc" or {}); + serde_1_0_21_features."std".self_default = hasDefault serde_1_0_21_features; + serde_1_0_21_features."serde_derive".self_derive = hasFeature (serde_1_0_21_features."derive" or {}); + serde_1_0_21_features."serde_derive".self_playground = hasFeature (serde_1_0_21_features."playground" or {}); + serde_derive_0_0_0_features."default".from_serde_1_0_21__default = true; + serde_derive_1_0_21 = serde_derive_1_0_21_ rec { + dependencies = [ quote_0_3_15 serde_derive_internals_0_17_0 syn_0_11_11 ]; + }; + quote_0_3_15_features."default".from_serde_derive_1_0_21__default = true; + serde_derive_internals_0_17_0_features."default".from_serde_derive_1_0_21__default = false; + syn_0_11_11_features."visit".from_serde_derive_1_0_21 = true; + syn_0_11_11_features."default".from_serde_derive_1_0_21__default = true; + serde_derive_internals_0_17_0 = serde_derive_internals_0_17_0_ rec { + dependencies = [ syn_0_11_11 synom_0_11_3 ]; + }; + syn_0_11_11_features."parsing".from_serde_derive_internals_0_17_0 = true; + syn_0_11_11_features."default".from_serde_derive_internals_0_17_0__default = false; + synom_0_11_3_features."default".from_serde_derive_internals_0_17_0__default = true; + serde_json_1_0_6 = serde_json_1_0_6_ rec { dependencies = [ dtoa_0_4_2 itoa_0_3_4 num_traits_0_1_40 serde_1_0_21 ]; - }; - strsim_0_6_0 = strsim_0_6_0_ {}; - syn_0_11_11 = syn_0_11_11_ { - dependencies = [ quote_0_3_15 synom_0_11_3 unicode_xid_0_0_4 ]; - features = [ "parsing" "printing" "quote" "synom" "unicode-xid" "visit" ]; - }; - synom_0_11_3 = synom_0_11_3_ { + features = mkFeatures serde_json_1_0_6_features; + }; + serde_json_1_0_6_features."linked-hash-map".self_preserve_order = hasFeature (serde_json_1_0_6_features."preserve_order" or {}); + dtoa_0_4_2_features."default".from_serde_json_1_0_6__default = true; + itoa_0_3_4_features."default".from_serde_json_1_0_6__default = true; + linked_hash_map_0_0_0_features."default".from_serde_json_1_0_6__default = true; + num_traits_0_1_40_features."default".from_serde_json_1_0_6__default = true; + serde_1_0_21_features."default".from_serde_json_1_0_6__default = true; + strsim_0_6_0 = strsim_0_6_0_ rec {}; + syn_0_11_11 = syn_0_11_11_ rec { + dependencies = [ quote_0_3_15 synom_0_11_3 unicode_xid_0_0_4 ] + ++ (if lib.lists.any (x: x == "quote") features then [quote_0_3_15] else []) ++ (if lib.lists.any (x: x == "synom") features then [synom_0_11_3] else []) ++ (if lib.lists.any (x: x == "unicode-xid") features then [unicode_xid_0_0_4] else []); + features = mkFeatures syn_0_11_11_features; + }; + syn_0_11_11_features."".self = true; + syn_0_11_11_features."parsing".self_default = hasDefault syn_0_11_11_features; + syn_0_11_11_features."printing".self_default = hasDefault syn_0_11_11_features; + syn_0_11_11_features."unicode-xid".self_parsing = hasFeature (syn_0_11_11_features."parsing" or {}); + syn_0_11_11_features."synom".self_parsing = hasFeature (syn_0_11_11_features."parsing" or {}); + syn_0_11_11_features."quote".self_printing = hasFeature (syn_0_11_11_features."printing" or {}); + quote_0_3_15_features."default".from_syn_0_11_11__default = true; + synom_0_11_3_features."default".from_syn_0_11_11__default = true; + unicode_xid_0_0_4_features."default".from_syn_0_11_11__default = true; + synom_0_11_3 = synom_0_11_3_ rec { dependencies = [ unicode_xid_0_0_4 ]; }; - tempdir_0_3_5 = tempdir_0_3_5_ { + unicode_xid_0_0_4_features."default".from_synom_0_11_3__default = true; + tempdir_0_3_5 = tempdir_0_3_5_ rec { dependencies = [ rand_0_3_18 ]; }; - termion_1_5_1 = termion_1_5_1_ { + rand_0_3_18_features."default".from_tempdir_0_3_5__default = true; + termion_1_5_1 = termion_1_5_1_ rec { dependencies = (if !(kernel == "redox") then [ libc_0_2_33 ] else []) ++ (if kernel == "redox" then [ redox_syscall_0_1_32 redox_termios_0_1_1 ] else []); }; - textwrap_0_9_0 = textwrap_0_9_0_ { + libc_0_2_33_features."default".from_termion_1_5_1__default = true; + redox_syscall_0_1_32_features."default".from_termion_1_5_1__default = true; + redox_termios_0_1_1_features."default".from_termion_1_5_1__default = true; + textwrap_0_9_0 = textwrap_0_9_0_ rec { dependencies = [ unicode_width_0_1_4 ]; }; - thread_local_0_3_4 = thread_local_0_3_4_ { + hyphenation_0_0_0_features."default".from_textwrap_0_9_0__default = true; + term_size_0_0_0_features."default".from_textwrap_0_9_0__default = true; + unicode_width_0_1_4_features."default".from_textwrap_0_9_0__default = true; + thread_local_0_3_4 = thread_local_0_3_4_ rec { dependencies = [ lazy_static_0_2_11 unreachable_1_0_0 ]; }; - time_0_1_38 = time_0_1_38_ { + lazy_static_0_2_11_features."default".from_thread_local_0_3_4__default = true; + unreachable_1_0_0_features."default".from_thread_local_0_3_4__default = true; + time_0_1_38 = time_0_1_38_ rec { dependencies = [ libc_0_2_33 ] ++ (if kernel == "redox" then [ redox_syscall_0_1_32 ] else []) ++ (if kernel == "windows" then [ kernel32_sys_0_2_2 winapi_0_2_8 ] else []); }; - toml_0_4_5 = toml_0_4_5_ { + libc_0_2_33_features."default".from_time_0_1_38__default = true; + rustc_serialize_0_0_0_features."default".from_time_0_1_38__default = true; + redox_syscall_0_1_32_features."default".from_time_0_1_38__default = true; + kernel32_sys_0_2_2_features."default".from_time_0_1_38__default = true; + winapi_0_2_8_features."default".from_time_0_1_38__default = true; + toml_0_4_5 = toml_0_4_5_ rec { dependencies = [ serde_1_0_21 ]; }; - unicode_width_0_1_4 = unicode_width_0_1_4_ {}; - unicode_xid_0_0_4 = unicode_xid_0_0_4_ {}; - unreachable_1_0_0 = unreachable_1_0_0_ { - dependencies = [ void_1_0_2 ]; + serde_1_0_21_features."default".from_toml_0_4_5__default = true; + unicode_width_0_1_4 = unicode_width_0_1_4_ rec { + features = mkFeatures unicode_width_0_1_4_features; }; - utf8_ranges_1_0_0 = utf8_ranges_1_0_0_ {}; - vcpkg_0_2_2 = vcpkg_0_2_2_ {}; - vec_map_0_8_0 = vec_map_0_8_0_ {}; - void_1_0_2 = void_1_0_2_ { - features = [ "std" ]; + unicode_width_0_1_4_features."".self = true; + unicode_xid_0_0_4 = unicode_xid_0_0_4_ rec { + features = mkFeatures unicode_xid_0_0_4_features; }; - winapi_0_2_8 = winapi_0_2_8_ {}; - winapi_build_0_1_1 = winapi_build_0_1_1_ {}; + unicode_xid_0_0_4_features."".self = true; + unreachable_1_0_0 = unreachable_1_0_0_ rec { + dependencies = [ void_1_0_2 ]; + }; + void_1_0_2_features."default".from_unreachable_1_0_0__default = false; + utf8_ranges_1_0_0 = utf8_ranges_1_0_0_ rec {}; + vcpkg_0_2_2 = vcpkg_0_2_2_ rec {}; + vec_map_0_8_0 = vec_map_0_8_0_ rec { + dependencies = []; + features = mkFeatures vec_map_0_8_0_features; + }; + vec_map_0_8_0_features."serde".self_eders = hasFeature (vec_map_0_8_0_features."eders" or {}); + vec_map_0_8_0_features."serde_derive".self_eders = hasFeature (vec_map_0_8_0_features."eders" or {}); + serde_0_0_0_features."default".from_vec_map_0_8_0__default = true; + serde_derive_0_0_0_features."default".from_vec_map_0_8_0__default = true; + void_1_0_2 = void_1_0_2_ rec { + features = mkFeatures void_1_0_2_features; + }; + void_1_0_2_features."std".self_default = hasDefault void_1_0_2_features; + winapi_0_2_8 = winapi_0_2_8_ rec {}; + winapi_build_0_1_1 = winapi_build_0_1_1_ rec {}; } diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 7cc76fc4b25695..690372c9b4fd02 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -6219,7 +6219,7 @@ with pkgs; buildRustCrate = callPackage ../build-support/rust/rust-utils.nix { }; - carnix = (callPackage ../build-support/rust/carnix.nix { }).carnix_0_4_14; + carnix = (callPackage ../build-support/rust/carnix.nix { }).carnix_0_5_0; defaultCrateOverrides = callPackage ../build-support/rust/defaultCrateOverrides.nix { }; From 1cd1fcad0f544674804669c4af4cfedb5faa2ed9 Mon Sep 17 00:00:00 2001 From: "pe@pijul.org" Date: Mon, 11 Dec 2017 16:06:26 +0100 Subject: [PATCH 44/47] Explain argument forwarding --- doc/languages-frameworks/rust.md | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/doc/languages-frameworks/rust.md b/doc/languages-frameworks/rust.md index fed279a6544afa..90886be267a67e 100644 --- a/doc/languages-frameworks/rust.md +++ b/doc/languages-frameworks/rust.md @@ -200,6 +200,21 @@ rec { } ``` +Another situation is when we want to override a nested +dependency. This actually works in the exact same way, since the +`crateOverrides` parameter is forwarded to the crate's +dependencies. For instance, to override the build inputs for crate +`libc` in the example above, where `libc` is a dependency of the main +crate, we could do: + +``` +(import helo.nix).helo_0_1_0.override { + crateOverrides = defaultCrateOverrides // { + libc = attrs: { buildInputs = []; }; + }; + }; +} +``` Three more parameters can be overridden: From cd0f35933151dea1947b991a64b3cca1c1e2dc69 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B6rg=20Thalheim?= Date: Tue, 12 Dec 2017 04:29:29 -0600 Subject: [PATCH 45/47] rename rust-utils to build-rust-crate --- .../build-support/rust/{rust-utils.nix => build-rust-crate.nix} | 0 pkgs/top-level/all-packages.nix | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) rename pkgs/build-support/rust/{rust-utils.nix => build-rust-crate.nix} (100%) diff --git a/pkgs/build-support/rust/rust-utils.nix b/pkgs/build-support/rust/build-rust-crate.nix similarity index 100% rename from pkgs/build-support/rust/rust-utils.nix rename to pkgs/build-support/rust/build-rust-crate.nix diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 690372c9b4fd02..1b97a601bd6ee8 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -6217,7 +6217,7 @@ with pkgs; rust = callPackage ../development/compilers/rust { }; inherit (rust) cargo rustc; - buildRustCrate = callPackage ../build-support/rust/rust-utils.nix { }; + buildRustCrate = callPackage ../build-support/rust/build-rust-crate.nix { }; carnix = (callPackage ../build-support/rust/carnix.nix { }).carnix_0_5_0; From bf70097af22831d530adde2057504fb573bd63f2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B6rg=20Thalheim?= Date: Tue, 12 Dec 2017 04:30:07 -0600 Subject: [PATCH 46/47] rename defaultCrateOverrides to default-crate-overrides --- pkgs/build-support/rust/default-crate-overrides.nix | 10 ++++++++++ pkgs/build-support/rust/defaultCrateOverrides.nix | 6 ------ pkgs/top-level/all-packages.nix | 2 +- 3 files changed, 11 insertions(+), 7 deletions(-) create mode 100644 pkgs/build-support/rust/default-crate-overrides.nix delete mode 100644 pkgs/build-support/rust/defaultCrateOverrides.nix diff --git a/pkgs/build-support/rust/default-crate-overrides.nix b/pkgs/build-support/rust/default-crate-overrides.nix new file mode 100644 index 00000000000000..c074d46a7f75b8 --- /dev/null +++ b/pkgs/build-support/rust/default-crate-overrides.nix @@ -0,0 +1,10 @@ +{ pkgconfig, sqlite, openssl, ... }: + +{ + libsqlite3-sys = attrs: { + buildInputs = [ pkgconfig sqlite ]; + }; + openssl-sys = attrs: { + buildInputs = [ pkgconfig openssl ]; + }; +} diff --git a/pkgs/build-support/rust/defaultCrateOverrides.nix b/pkgs/build-support/rust/defaultCrateOverrides.nix deleted file mode 100644 index 0c6b4d9f983481..00000000000000 --- a/pkgs/build-support/rust/defaultCrateOverrides.nix +++ /dev/null @@ -1,6 +0,0 @@ -{ pkgconfig, sqlite, openssl, ... }: - -{ - libsqlite3-sys = attrs: { buildInputs = [ pkgconfig sqlite ] ++ (attrs.buildInputs or []); }; - openssl-sys = attrs: { buildInputs = [ pkgconfig openssl ] ++ (attrs.buildInputs or []); }; -} diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 1b97a601bd6ee8..09cb8e511bacde 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -6221,7 +6221,7 @@ with pkgs; carnix = (callPackage ../build-support/rust/carnix.nix { }).carnix_0_5_0; - defaultCrateOverrides = callPackage ../build-support/rust/defaultCrateOverrides.nix { }; + defaultCrateOverrides = callPackage ../build-support/rust/default-crate-overrides.nix { }; rustPlatform = recurseIntoAttrs (makeRustPlatform rust); From f84ad3417f765bfb20c6430bcaf860d47f2340d8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B6rg=20Thalheim?= Date: Tue, 12 Dec 2017 04:30:43 -0600 Subject: [PATCH 47/47] doc/rust: update documentation to reflect latest carnix --- doc/languages-frameworks/rust.md | 95 +++++++++++++------------------- 1 file changed, 37 insertions(+), 58 deletions(-) diff --git a/doc/languages-frameworks/rust.md b/doc/languages-frameworks/rust.md index 90886be267a67e..d93d80dae909ff 100644 --- a/doc/languages-frameworks/rust.md +++ b/doc/languages-frameworks/rust.md @@ -81,23 +81,23 @@ Now, the file produced by the call to `carnix`, called `hello.nix`, looks like: ``` with import {}; -let release = true; - verbose = true; +let kernel = buildPlatform.parsed.kernel.name; + # ... (content skipped) hello_0_1_0_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate { crateName = "hello"; version = "0.1.0"; + authors = [ "Authorname " ]; src = ./.; - inherit dependencies buildDependencies features release verbose; + inherit dependencies buildDependencies features; }; - in rec { - hello_0_1_0 = hello_0_1_0_ {}; + hello_0_1_0 = hello_0_1_0_ rec {}; } ``` In particular, note that the argument given as `--src` is copied -verbatim to the source. If we look at a more complicated +verbatim to the source. If we look at a more complicated dependencies, for instance by adding a single line `libc="*"` to our `Cargo.toml`, we first need to run `cargo build` to update the `Cargo.lock`. Then, `carnix` needs to be run again, and produces the @@ -105,29 +105,32 @@ following nix file: ``` with import {}; -let release = true; - verbose = true; +let kernel = buildPlatform.parsed.kernel.name; + # ... (content skipped) hello_0_1_0_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate { crateName = "hello"; version = "0.1.0"; + authors = [ "Jörg Thalheim " ]; src = ./.; - inherit dependencies buildDependencies features release verbose; + inherit dependencies buildDependencies features; }; - libc_0_2_33_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate { + libc_0_2_34_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate { crateName = "libc"; - version = "0.2.33"; - sha256 = "1l7synziccnvarsq2kk22vps720ih6chmn016bhr2bq54hblbnl1"; - inherit dependencies buildDependencies features release verbose; + version = "0.2.34"; + authors = [ "The Rust Project Developers" ]; + sha256 = "11jmqdxmv0ka10ay0l8nzx0nl7s2lc3dbrnh1mgbr2grzwdyxi2s"; + inherit dependencies buildDependencies features; }; - in rec { - hello_0_1_0 = hello_0_1_0_ { - dependencies = [ libc_0_2_33 ]; + hello_0_1_0 = hello_0_1_0_ rec { + dependencies = [ libc_0_2_34 ]; }; - libc_0_2_33 = libc_0_2_33_ { - features = [ "use_std" ]; + libc_0_2_34_features."default".from_hello_0_1_0__default = true; + libc_0_2_34 = libc_0_2_34_ rec { + features = mkFeatures libc_0_2_34_features; }; + libc_0_2_34_features."use_std".self_default = hasDefault libc_0_2_34_features; } ``` @@ -137,28 +140,16 @@ attribute is still needed for Nix purity. Some crates require external libraries. For crates from [crates.io](https://crates.io), such libraries can be specified in -``. +`defaultCrateOverrides` package in nixpkgs itself. Starting from that file, one can add more overrides, to add features -or build inputs, as follows: +or build inputs by overriding the hello crate in a seperate file. ``` with import {}; -let kernel = buildPlatform.parsed.kernel.name; - abi = buildPlatform.parsed.abi.name; - helo_0_1_0_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate { - crateName = "helo"; - version = "0.1.0"; - authors = [ "pe@pijul.org " ]; - src = ./.; - inherit dependencies buildDependencies features; - }; -in -rec { - helo_0_1_0 = (helo_0_1_0_ {}).override { - crateOverrides = defaultCrateOverrides // { - helo = attrs: { buildInputs = [ openssl ]; }; - }; +(import ./hello.nix).hello_0_1_0.override { + crateOverrides = defaultCrateOverrides // { + hello = attrs: { buildInputs = [ openssl ]; }; }; } ``` @@ -176,25 +167,13 @@ patches the derivation: ``` with import {}; -let kernel = buildPlatform.parsed.kernel.name; - abi = buildPlatform.parsed.abi.name; - helo_0_1_0_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate { - crateName = "helo"; - version = "0.1.0"; - authors = [ "pe@pijul.org " ]; - src = ./.; - inherit dependencies buildDependencies features; - }; -in -rec { - helo_0_1_0 = (helo_0_1_0_ {}).override { - crateOverrides = defaultCrateOverrides // { - helo = attrs: lib.optionalAttrs (lib.versionAtLeast attrs.version "1.0") { - postPatch = '' - substituteInPlace lib/zoneinfo.rs \ - --replace "/usr/share/zoneinfo" "${tzdata}/share/zoneinfo" - ''; - }; +(import ./hello.nix).hello_0_1_0.override { + crateOverrides = defaultCrateOverrides // { + hello = attrs: lib.optionalAttrs (lib.versionAtLeast attrs.version "1.0") { + postPatch = '' + substituteInPlace lib/zoneinfo.rs \ + --replace "/usr/share/zoneinfo" "${tzdata}/share/zoneinfo" + ''; }; }; } @@ -208,10 +187,10 @@ dependencies. For instance, to override the build inputs for crate crate, we could do: ``` -(import helo.nix).helo_0_1_0.override { - crateOverrides = defaultCrateOverrides // { - libc = attrs: { buildInputs = []; }; - }; +with import {}; +(import hello.nix).hello_0_1_0.override { + crateOverrides = defaultCrateOverrides // { + libc = attrs: { buildInputs = []; }; }; } ```