Merge pull request #83488 from kolloch/unfancy-macos-cp-r
buildRustCrate: Add "-r" to cp to make it work under Mac OS
This commit is contained in:
commit
69e8d49f83
3 changed files with 134 additions and 10 deletions
|
@ -14,7 +14,7 @@ if !buildTests then ''
|
||||||
fi
|
fi
|
||||||
if [[ "$(ls -A target/lib)" ]]; then
|
if [[ "$(ls -A target/lib)" ]]; then
|
||||||
mkdir -p $lib/lib
|
mkdir -p $lib/lib
|
||||||
cp target/lib/* $lib/lib #*/
|
cp -r target/lib/* $lib/lib #*/
|
||||||
for library in $lib/lib/*.so $lib/lib/*.dylib; do #*/
|
for library in $lib/lib/*.so $lib/lib/*.dylib; do #*/
|
||||||
ln -s $library $(echo $library | sed -e "s/-${metadata}//")
|
ln -s $library $(echo $library | sed -e "s/-${metadata}//")
|
||||||
done
|
done
|
||||||
|
@ -26,7 +26,7 @@ if !buildTests then ''
|
||||||
if [[ -d target/bin ]]; then
|
if [[ -d target/bin ]]; then
|
||||||
if [[ "$(ls -A target/bin)" ]]; then
|
if [[ "$(ls -A target/bin)" ]]; then
|
||||||
mkdir -p $out/bin
|
mkdir -p $out/bin
|
||||||
cp -P target/bin/* $out/bin # */
|
cp -rP target/bin/* $out/bin # */
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
runHook postInstall
|
runHook postInstall
|
||||||
|
|
|
@ -14,7 +14,6 @@ build_lib() {
|
||||||
--crate-name $CRATE_NAME \
|
--crate-name $CRATE_NAME \
|
||||||
$lib_src \
|
$lib_src \
|
||||||
--out-dir target/lib \
|
--out-dir target/lib \
|
||||||
--emit=dep-info,link \
|
|
||||||
-L dependency=target/deps \
|
-L dependency=target/deps \
|
||||||
--cap-lints allow \
|
--cap-lints allow \
|
||||||
$LIB_RUSTC_OPTS \
|
$LIB_RUSTC_OPTS \
|
||||||
|
@ -45,7 +44,6 @@ build_bin() {
|
||||||
--crate-type bin \
|
--crate-type bin \
|
||||||
$BIN_RUSTC_OPTS \
|
$BIN_RUSTC_OPTS \
|
||||||
--out-dir target/bin \
|
--out-dir target/bin \
|
||||||
--emit=dep-info,link \
|
|
||||||
-L dependency=target/deps \
|
-L dependency=target/deps \
|
||||||
$LINK \
|
$LINK \
|
||||||
$EXTRA_LIB \
|
$EXTRA_LIB \
|
||||||
|
|
|
@ -1,13 +1,14 @@
|
||||||
{ lib
|
{ lib
|
||||||
, stdenv
|
|
||||||
, buildRustCrate
|
, buildRustCrate
|
||||||
, runCommand
|
|
||||||
, runCommandCC
|
|
||||||
, writeTextFile
|
|
||||||
, symlinkJoin
|
|
||||||
, callPackage
|
, callPackage
|
||||||
, releaseTools
|
, releaseTools
|
||||||
|
, runCommand
|
||||||
|
, runCommandCC
|
||||||
|
, stdenv
|
||||||
|
, symlinkJoin
|
||||||
|
, writeTextFile
|
||||||
}:
|
}:
|
||||||
|
|
||||||
let
|
let
|
||||||
mkCrate = args: let
|
mkCrate = args: let
|
||||||
p = {
|
p = {
|
||||||
|
@ -103,6 +104,58 @@ let
|
||||||
''
|
''
|
||||||
);
|
);
|
||||||
|
|
||||||
|
/* Returns a derivation that asserts that the crate specified by `crateArgs`
|
||||||
|
has the specified files as output.
|
||||||
|
|
||||||
|
`name` is used as part of the derivation name that performs the checking.
|
||||||
|
|
||||||
|
`crateArgs` is passed to `mkCrate` to build the crate with `buildRustCrate`.
|
||||||
|
|
||||||
|
`expectedFiles` contains a list of expected file paths in the output. E.g.
|
||||||
|
`[ "./bin/my_binary" ]`.
|
||||||
|
|
||||||
|
`output` specifies the name of the output to use. By default, the default
|
||||||
|
output is used but e.g. `output = "lib";` will cause the lib output
|
||||||
|
to be checked instead. You do not need to specify any directories.
|
||||||
|
*/
|
||||||
|
assertOutputs = { name, crateArgs, expectedFiles, output? null }:
|
||||||
|
assert (builtins.isString name);
|
||||||
|
assert (builtins.isAttrs crateArgs);
|
||||||
|
assert (builtins.isList expectedFiles);
|
||||||
|
|
||||||
|
let
|
||||||
|
crate = mkCrate (builtins.removeAttrs crateArgs ["expectedTestOutput"]);
|
||||||
|
crateOutput = if output == null then crate else crate."${output}";
|
||||||
|
expectedFilesFile = writeTextFile {
|
||||||
|
name = "expected-files-${name}";
|
||||||
|
text =
|
||||||
|
let sorted = builtins.sort (a: b: a<b) expectedFiles;
|
||||||
|
concatenated = builtins.concatStringsSep "\n" sorted;
|
||||||
|
in "${concatenated}\n";
|
||||||
|
};
|
||||||
|
in
|
||||||
|
runCommand "assert-outputs-${name}" {
|
||||||
|
} ''
|
||||||
|
local actualFiles=$(mktemp)
|
||||||
|
|
||||||
|
cd "${crateOutput}"
|
||||||
|
find . -type f | sort >$actualFiles
|
||||||
|
diff -q ${expectedFilesFile} $actualFiles >/dev/null || {
|
||||||
|
echo -e "\033[0;1;31mERROR: Difference in expected output files in ${crateOutput} \033[0m" >&2
|
||||||
|
echo === Got:
|
||||||
|
sed -e 's/^/ /' $actualFiles
|
||||||
|
echo === Expected:
|
||||||
|
sed -e 's/^/ /' ${expectedFilesFile}
|
||||||
|
echo === Diff:
|
||||||
|
diff -u ${expectedFilesFile} $actualFiles |\
|
||||||
|
tail -n +3 |\
|
||||||
|
sed -e 's/^/ /'
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
touch $out
|
||||||
|
''
|
||||||
|
;
|
||||||
|
|
||||||
in rec {
|
in rec {
|
||||||
|
|
||||||
tests = let
|
tests = let
|
||||||
|
@ -361,7 +414,80 @@ let
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
brotliCrates = (callPackage ./brotli-crates.nix {});
|
brotliCrates = (callPackage ./brotli-crates.nix {});
|
||||||
in lib.mapAttrs (key: value: mkTest (value // lib.optionalAttrs (!value?crateName) { crateName = key; })) cases // {
|
tests = lib.mapAttrs (key: value: mkTest (value // lib.optionalAttrs (!value?crateName) { crateName = key; })) cases;
|
||||||
|
in tests // rec {
|
||||||
|
|
||||||
|
crateBinWithPathOutputs = assertOutputs {
|
||||||
|
name="crateBinWithPath";
|
||||||
|
crateArgs = {
|
||||||
|
crateBin = [{ name = "test_binary1"; path = "src/foobar.rs"; }];
|
||||||
|
src = mkBin "src/foobar.rs";
|
||||||
|
};
|
||||||
|
expectedFiles = [
|
||||||
|
"./bin/test_binary1"
|
||||||
|
];
|
||||||
|
};
|
||||||
|
|
||||||
|
crateBinWithPathOutputsDebug = assertOutputs {
|
||||||
|
name="crateBinWithPath";
|
||||||
|
crateArgs = {
|
||||||
|
release = false;
|
||||||
|
crateBin = [{ name = "test_binary1"; path = "src/foobar.rs"; }];
|
||||||
|
src = mkBin "src/foobar.rs";
|
||||||
|
};
|
||||||
|
expectedFiles = [
|
||||||
|
"./bin/test_binary1"
|
||||||
|
] ++ lib.optionals stdenv.isDarwin [
|
||||||
|
# On Darwin, the debug symbols are in a seperate directory.
|
||||||
|
"./bin/test_binary1.dSYM/Contents/Info.plist"
|
||||||
|
"./bin/test_binary1.dSYM/Contents/Resources/DWARF/test_binary1"
|
||||||
|
];
|
||||||
|
};
|
||||||
|
|
||||||
|
crateBinNoPath1Outputs = assertOutputs {
|
||||||
|
name="crateBinNoPath1";
|
||||||
|
crateArgs = {
|
||||||
|
crateBin = [{ name = "my-binary2"; }];
|
||||||
|
src = mkBin "src/my_binary2.rs";
|
||||||
|
};
|
||||||
|
expectedFiles = [
|
||||||
|
"./bin/my-binary2"
|
||||||
|
];
|
||||||
|
};
|
||||||
|
|
||||||
|
crateLibOutputs = assertOutputs {
|
||||||
|
name="crateLib";
|
||||||
|
output="lib";
|
||||||
|
crateArgs = {
|
||||||
|
libName = "test_lib";
|
||||||
|
type = [ "rlib" ];
|
||||||
|
libPath = "src/lib.rs";
|
||||||
|
src = mkLib "src/lib.rs";
|
||||||
|
};
|
||||||
|
expectedFiles = [
|
||||||
|
"./nix-support/propagated-build-inputs"
|
||||||
|
"./lib/libtest_lib-042a1fdbef.rlib"
|
||||||
|
"./lib/link"
|
||||||
|
];
|
||||||
|
};
|
||||||
|
|
||||||
|
crateLibOutputsDebug = assertOutputs {
|
||||||
|
name="crateLib";
|
||||||
|
output="lib";
|
||||||
|
crateArgs = {
|
||||||
|
release = false;
|
||||||
|
libName = "test_lib";
|
||||||
|
type = [ "rlib" ];
|
||||||
|
libPath = "src/lib.rs";
|
||||||
|
src = mkLib "src/lib.rs";
|
||||||
|
};
|
||||||
|
expectedFiles = [
|
||||||
|
"./nix-support/propagated-build-inputs"
|
||||||
|
"./lib/libtest_lib-042a1fdbef.rlib"
|
||||||
|
"./lib/link"
|
||||||
|
];
|
||||||
|
};
|
||||||
|
|
||||||
brotliTest = let
|
brotliTest = let
|
||||||
pkg = brotliCrates.brotli_2_5_0 {};
|
pkg = brotliCrates.brotli_2_5_0 {};
|
||||||
in runCommand "run-brotli-test-cmd" {
|
in runCommand "run-brotli-test-cmd" {
|
||||||
|
|
Loading…
Reference in a new issue