Merge pull request #28943 from LnL7/stdenv-tests

tests: add some basic stdenv/cc-wrapper tests

authored by Daiderd Jordan and committed by GitHub 33c99ab2 4d101993

+201
+7
pkgs/test/cc-wrapper/cc-main.c
··· 1 + #include <stdio.h> 2 + 3 + int main(int argc, char **argv) 4 + { 5 + fprintf(stderr, "ok\n"); 6 + return 0; 7 + }
+10
pkgs/test/cc-wrapper/cflags-main.c
··· 1 + #include <stdio.h> 2 + #include <foo.h> 3 + 4 + int main(int argc, char **argv) 5 + { 6 + if (foo() != 42) 7 + return 1; 8 + fprintf(stderr, "ok\n"); 9 + return 0; 10 + }
+7
pkgs/test/cc-wrapper/core-foundation-main.c
··· 1 + #include <CoreFoundation/CoreFoundation.h> 2 + 3 + int main(int argc, char** argv) 4 + { 5 + CFShow(CFSTR("ok")); 6 + return 0; 7 + }
+7
pkgs/test/cc-wrapper/cxx-main.cc
··· 1 + #include <iostream> 2 + 3 + int main(int argc, char **argv) 4 + { 5 + std::cerr << "ok" << std::endl; 6 + return 0; 7 + }
+45
pkgs/test/cc-wrapper/default.nix
··· 1 + { stdenv }: 2 + 3 + let 4 + shlib = if stdenv.isDarwin then "dylib" else "so"; 5 + in 6 + 7 + stdenv.mkDerivation { 8 + name = "cc-wrapper-test"; 9 + 10 + buildCommand = '' 11 + NIX_DEBUG=1 $CC -v 12 + NIX_DEBUG=1 $CXX -v 13 + 14 + printf "checking whether compiler builds valid C binaries... " >&2 15 + $CC -o cc-check ${./cc-main.c} 16 + ./cc-check 17 + 18 + printf "checking whether compiler builds valid C++ binaries... " >&2 19 + $CXX -o cxx-check ${./cxx-main.cc} 20 + ./cxx-check 21 + 22 + ${stdenv.lib.optionalString (stdenv.isDarwin && stdenv.cc.isClang) '' 23 + printf "checking whether compiler can build with CoreFoundation.framework... " >&2 24 + mkdir -p foo/lib 25 + $CC -framework CoreFoundation -o core-foundation-check ${./core-foundation-main.c} 26 + ./core-foundation-check 27 + ''} 28 + 29 + printf "checking whether compiler uses NIX_CFLAGS_COMPILE... " >&2 30 + mkdir -p foo/include 31 + cp ${./foo.c} foo/include/foo.h 32 + NIX_CFLAGS_COMPILE="-Ifoo/include -DVALUE=42" $CC -o cflags-check ${./cflags-main.c} 33 + ./cflags-check 34 + 35 + printf "checking whether compiler uses NIX_LDFLAGS... " >&2 36 + mkdir -p foo/lib 37 + $CC -shared ${stdenv.lib.optionalString stdenv.isDarwin "-Wl,-install_name,@rpath/libfoo.dylib"} -DVALUE=42 -o foo/lib/libfoo.${shlib} ${./foo.c} 38 + NIX_LDFLAGS="-L$NIX_BUILD_TOP/foo/lib -rpath $NIX_BUILD_TOP/foo/lib" $CC -lfoo -o ldflags-check ${./ldflags-main.c} 39 + ./ldflags-check 40 + 41 + touch $out 42 + ''; 43 + 44 + meta.platforms = stdenv.lib.platforms.all; 45 + }
+4
pkgs/test/cc-wrapper/foo.c
··· 1 + unsigned int foo(void) 2 + { 3 + return VALUE; 4 + }
+12
pkgs/test/cc-wrapper/ldflags-main.c
··· 1 + #include <stdio.h> 2 + 3 + extern unsigned int foo(void); 4 + 5 + int main(int argc, char **argv) 6 + { 7 + if (foo() != 42) { 8 + return 1; 9 + } 10 + fprintf(stderr, "ok\n"); 11 + return 0; 12 + }
+3
pkgs/test/stdenv-inputs/bar.c
··· 1 + unsigned int bar(void) { 2 + return 42; 3 + }
+7
pkgs/test/stdenv-inputs/cc-main.c
··· 1 + #include <stdio.h> 2 + 3 + int main(int argc, char **argv) 4 + { 5 + fprintf(stderr, "ok\n"); 6 + return 0; 7 + }
+64
pkgs/test/stdenv-inputs/default.nix
··· 1 + { stdenv }: 2 + 3 + let 4 + shlib = if stdenv.isDarwin then "dylib" else "so"; 5 + 6 + foo = stdenv.mkDerivation { 7 + name = "foo-test"; 8 + 9 + unpackPhase = ":"; 10 + 11 + installPhase = '' 12 + mkdir -p $out/bin $out/include $out/lib 13 + $CC -o $out/bin/foo ${./cc-main.c} 14 + chmod +x $out/bin/foo 15 + cp ${./foo.c} $out/include/foo.h 16 + $CC -shared ${stdenv.lib.optionalString stdenv.isDarwin "-Wl,-install_name,$out/lib/libfoo.dylib"} -o $out/lib/libfoo.${shlib} ${./foo.c} 17 + ''; 18 + }; 19 + 20 + bar = stdenv.mkDerivation { 21 + name = "bar-test"; 22 + outputs = [ "out" "dev" ]; 23 + 24 + unpackPhase = ":"; 25 + 26 + installPhase = '' 27 + mkdir -p $out/bin $dev/include $dev/lib 28 + $CC -o $out/bin/bar ${./cc-main.c} 29 + chmod +x $out/bin/bar 30 + cp ${./bar.c} $dev/include/bar.h 31 + $CC -shared ${stdenv.lib.optionalString stdenv.isDarwin "-Wl,-install_name,$dev/lib/libbar.dylib"} -o $dev/lib/libbar.${shlib} ${./bar.c} 32 + ''; 33 + }; 34 + in 35 + 36 + stdenv.mkDerivation { 37 + name = "stdenv-inputs-test"; 38 + phases = [ "buildPhase" ]; 39 + 40 + buildInputs = [ foo bar ]; 41 + 42 + buildPhase = '' 43 + env 44 + 45 + printf "checking whether binaries are available... " >&2 46 + foo && bar 47 + 48 + printf "checking whether compiler can find headers... " >&2 49 + $CC -o include-check ${./include-main.c} 50 + ./include-check 51 + 52 + printf "checking whether compiler can find headers... " >&2 53 + $CC -o include-check ${./include-main.c} 54 + ./include-check 55 + 56 + printf "checking whether compiler can find libraries... " >&2 57 + $CC -lfoo -lbar -o lib-check ${./lib-main.c} 58 + ./lib-check 59 + 60 + touch $out 61 + ''; 62 + 63 + meta.platforms = stdenv.lib.platforms.all; 64 + }
+3
pkgs/test/stdenv-inputs/foo.c
··· 1 + unsigned int foo(void) { 2 + return 42; 3 + }
+13
pkgs/test/stdenv-inputs/include-main.c
··· 1 + #include <stdio.h> 2 + #include <foo.h> 3 + #include <bar.h> 4 + 5 + int main(int argc, char **argv) 6 + { 7 + if (foo() != 42) 8 + return 1; 9 + if (bar() != 42) 10 + return 1; 11 + fprintf(stderr, "ok\n"); 12 + return 0; 13 + }
+14
pkgs/test/stdenv-inputs/lib-main.c
··· 1 + #include <stdio.h> 2 + 3 + extern unsigned int foo(void); 4 + extern unsigned int bar(void); 5 + 6 + int main(int argc, char **argv) 7 + { 8 + if (foo() != 42) 9 + return 1; 10 + if (bar() != 42) 11 + return 1; 12 + fprintf(stderr, "ok\n"); 13 + return 0; 14 + }
+5
pkgs/top-level/all-packages.nix
··· 19409 19409 19410 19410 # `recurseIntoAttrs` for sake of hydra, not nix-env 19411 19411 tests = recurseIntoAttrs { 19412 + cc-wrapper = callPackage ../test/cc-wrapper { }; 19413 + cc-wrapper-clang = callPackage ../test/cc-wrapper { stdenv = clangStdenv; }; 19414 + cc-wrapper-libcxx = callPackage ../test/cc-wrapper { stdenv = libcxxStdenv; }; 19415 + stdenv-inputs = callPackage ../test/stdenv-inputs { }; 19416 + 19412 19417 macOSSierraShared = callPackage ../test/macos-sierra-shared {}; 19413 19418 }; 19414 19419 }