From 19c46733104c680267a0a0dd3a2e6be893bd52b4 Mon Sep 17 00:00:00 2001 From: Daiderd Jordan Date: Sat, 2 Sep 2017 14:00:47 +0200 Subject: [PATCH 1/2] nixpkgs-tests: add basic test for cc-wrapper --- pkgs/test/cc-wrapper/cc-main.c | 7 ++++ pkgs/test/cc-wrapper/cflags-main.c | 10 +++++ pkgs/test/cc-wrapper/core-foundation-main.c | 7 ++++ pkgs/test/cc-wrapper/cxx-main.cc | 7 ++++ pkgs/test/cc-wrapper/default.nix | 45 +++++++++++++++++++++ pkgs/test/cc-wrapper/foo.c | 4 ++ pkgs/test/cc-wrapper/ldflags-main.c | 12 ++++++ pkgs/top-level/all-packages.nix | 4 ++ 8 files changed, 96 insertions(+) create mode 100644 pkgs/test/cc-wrapper/cc-main.c create mode 100644 pkgs/test/cc-wrapper/cflags-main.c create mode 100644 pkgs/test/cc-wrapper/core-foundation-main.c create mode 100644 pkgs/test/cc-wrapper/cxx-main.cc create mode 100644 pkgs/test/cc-wrapper/default.nix create mode 100644 pkgs/test/cc-wrapper/foo.c create mode 100644 pkgs/test/cc-wrapper/ldflags-main.c diff --git a/pkgs/test/cc-wrapper/cc-main.c b/pkgs/test/cc-wrapper/cc-main.c new file mode 100644 index 000000000000..06f28bc33c69 --- /dev/null +++ b/pkgs/test/cc-wrapper/cc-main.c @@ -0,0 +1,7 @@ +#include + +int main(int argc, char **argv) +{ + fprintf(stderr, "ok\n"); + return 0; +} diff --git a/pkgs/test/cc-wrapper/cflags-main.c b/pkgs/test/cc-wrapper/cflags-main.c new file mode 100644 index 000000000000..9491232b5387 --- /dev/null +++ b/pkgs/test/cc-wrapper/cflags-main.c @@ -0,0 +1,10 @@ +#include +#include + +int main(int argc, char **argv) +{ + if (foo() != 42) + return 1; + fprintf(stderr, "ok\n"); + return 0; +} diff --git a/pkgs/test/cc-wrapper/core-foundation-main.c b/pkgs/test/cc-wrapper/core-foundation-main.c new file mode 100644 index 000000000000..fb3bd3126191 --- /dev/null +++ b/pkgs/test/cc-wrapper/core-foundation-main.c @@ -0,0 +1,7 @@ +#include + +int main(int argc, char** argv) +{ + CFShow(CFSTR("ok")); + return 0; +} diff --git a/pkgs/test/cc-wrapper/cxx-main.cc b/pkgs/test/cc-wrapper/cxx-main.cc new file mode 100644 index 000000000000..83f704617a46 --- /dev/null +++ b/pkgs/test/cc-wrapper/cxx-main.cc @@ -0,0 +1,7 @@ +#include + +int main(int argc, char **argv) +{ + std::cerr << "ok" << std::endl; + return 0; +} diff --git a/pkgs/test/cc-wrapper/default.nix b/pkgs/test/cc-wrapper/default.nix new file mode 100644 index 000000000000..d8a5e1355815 --- /dev/null +++ b/pkgs/test/cc-wrapper/default.nix @@ -0,0 +1,45 @@ +{ stdenv }: + +let + shlib = if stdenv.isDarwin then "dylib" else "so"; +in + +stdenv.mkDerivation { + name = "cc-wrapper-test"; + + buildCommand = '' + NIX_DEBUG=1 $CC -v + NIX_DEBUG=1 $CXX -v + + printf "checking whether compiler builds valid C binaries... " >&2 + $CC -o cc-check ${./cc-main.c} + ./cc-check + + printf "checking whether compiler builds valid C++ binaries... " >&2 + $CXX -o cxx-check ${./cxx-main.cc} + ./cxx-check + + ${stdenv.lib.optionalString (stdenv.isDarwin && stdenv.cc.isClang) '' + printf "checking whether compiler can build with CoreFoundation.framework... " >&2 + mkdir -p foo/lib + $CC -framework CoreFoundation -o core-foundation-check ${./core-foundation-main.c} + ./core-foundation-check + ''} + + printf "checking whether compiler uses NIX_CFLAGS_COMPILE... " >&2 + mkdir -p foo/include + cp ${./foo.c} foo/include/foo.h + NIX_CFLAGS_COMPILE="-Ifoo/include -DVALUE=42" $CC -o cflags-check ${./cflags-main.c} + ./cflags-check + + printf "checking whether compiler uses NIX_LDFLAGS... " >&2 + mkdir -p foo/lib + $CC -shared ${stdenv.lib.optionalString stdenv.isDarwin "-Wl,-install_name,@rpath/libfoo.dylib"} -DVALUE=42 -o foo/lib/libfoo.${shlib} ${./foo.c} + NIX_LDFLAGS="-L$NIX_BUILD_TOP/foo/lib -rpath $NIX_BUILD_TOP/foo/lib" $CC -lfoo -o ldflags-check ${./ldflags-main.c} + ./ldflags-check + + touch $out + ''; + + meta.platforms = stdenv.lib.platforms.all; +} diff --git a/pkgs/test/cc-wrapper/foo.c b/pkgs/test/cc-wrapper/foo.c new file mode 100644 index 000000000000..8be674be3103 --- /dev/null +++ b/pkgs/test/cc-wrapper/foo.c @@ -0,0 +1,4 @@ +unsigned int foo(void) +{ + return VALUE; +} diff --git a/pkgs/test/cc-wrapper/ldflags-main.c b/pkgs/test/cc-wrapper/ldflags-main.c new file mode 100644 index 000000000000..89832b3bbad2 --- /dev/null +++ b/pkgs/test/cc-wrapper/ldflags-main.c @@ -0,0 +1,12 @@ +#include + +extern unsigned int foo(void); + +int main(int argc, char **argv) +{ + if (foo() != 42) { + return 1; + } + fprintf(stderr, "ok\n"); + return 0; +} diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 2bf0622e09a5..03d2a3a984a2 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -19409,6 +19409,10 @@ with pkgs; # `recurseIntoAttrs` for sake of hydra, not nix-env tests = recurseIntoAttrs { + cc-wrapper = callPackage ../test/cc-wrapper { }; + cc-wrapper-clang = callPackage ../test/cc-wrapper { stdenv = clangStdenv; }; + cc-wrapper-libcxx = callPackage ../test/cc-wrapper { stdenv = libcxxStdenv; }; + macOSSierraShared = callPackage ../test/macos-sierra-shared {}; }; } From b91307c2e1bfa8a32eb450cc00613f70af2ad1f6 Mon Sep 17 00:00:00 2001 From: Daiderd Jordan Date: Sat, 2 Sep 2017 23:48:55 +0200 Subject: [PATCH 2/2] nixpkgs-tests: add basic test for buildInputs --- pkgs/test/stdenv-inputs/bar.c | 3 ++ pkgs/test/stdenv-inputs/cc-main.c | 7 +++ pkgs/test/stdenv-inputs/default.nix | 64 ++++++++++++++++++++++++++ pkgs/test/stdenv-inputs/foo.c | 3 ++ pkgs/test/stdenv-inputs/include-main.c | 13 ++++++ pkgs/test/stdenv-inputs/lib-main.c | 14 ++++++ pkgs/top-level/all-packages.nix | 1 + 7 files changed, 105 insertions(+) create mode 100644 pkgs/test/stdenv-inputs/bar.c create mode 100644 pkgs/test/stdenv-inputs/cc-main.c create mode 100644 pkgs/test/stdenv-inputs/default.nix create mode 100644 pkgs/test/stdenv-inputs/foo.c create mode 100644 pkgs/test/stdenv-inputs/include-main.c create mode 100644 pkgs/test/stdenv-inputs/lib-main.c diff --git a/pkgs/test/stdenv-inputs/bar.c b/pkgs/test/stdenv-inputs/bar.c new file mode 100644 index 000000000000..2d7299c2d462 --- /dev/null +++ b/pkgs/test/stdenv-inputs/bar.c @@ -0,0 +1,3 @@ +unsigned int bar(void) { + return 42; +} diff --git a/pkgs/test/stdenv-inputs/cc-main.c b/pkgs/test/stdenv-inputs/cc-main.c new file mode 100644 index 000000000000..06f28bc33c69 --- /dev/null +++ b/pkgs/test/stdenv-inputs/cc-main.c @@ -0,0 +1,7 @@ +#include + +int main(int argc, char **argv) +{ + fprintf(stderr, "ok\n"); + return 0; +} diff --git a/pkgs/test/stdenv-inputs/default.nix b/pkgs/test/stdenv-inputs/default.nix new file mode 100644 index 000000000000..d1eb8b9bfe24 --- /dev/null +++ b/pkgs/test/stdenv-inputs/default.nix @@ -0,0 +1,64 @@ +{ stdenv }: + +let + shlib = if stdenv.isDarwin then "dylib" else "so"; + + foo = stdenv.mkDerivation { + name = "foo-test"; + + unpackPhase = ":"; + + installPhase = '' + mkdir -p $out/bin $out/include $out/lib + $CC -o $out/bin/foo ${./cc-main.c} + chmod +x $out/bin/foo + cp ${./foo.c} $out/include/foo.h + $CC -shared ${stdenv.lib.optionalString stdenv.isDarwin "-Wl,-install_name,$out/lib/libfoo.dylib"} -o $out/lib/libfoo.${shlib} ${./foo.c} + ''; + }; + + bar = stdenv.mkDerivation { + name = "bar-test"; + outputs = [ "out" "dev" ]; + + unpackPhase = ":"; + + installPhase = '' + mkdir -p $out/bin $dev/include $dev/lib + $CC -o $out/bin/bar ${./cc-main.c} + chmod +x $out/bin/bar + cp ${./bar.c} $dev/include/bar.h + $CC -shared ${stdenv.lib.optionalString stdenv.isDarwin "-Wl,-install_name,$dev/lib/libbar.dylib"} -o $dev/lib/libbar.${shlib} ${./bar.c} + ''; + }; +in + +stdenv.mkDerivation { + name = "stdenv-inputs-test"; + phases = [ "buildPhase" ]; + + buildInputs = [ foo bar ]; + + buildPhase = '' + env + + printf "checking whether binaries are available... " >&2 + foo && bar + + printf "checking whether compiler can find headers... " >&2 + $CC -o include-check ${./include-main.c} + ./include-check + + printf "checking whether compiler can find headers... " >&2 + $CC -o include-check ${./include-main.c} + ./include-check + + printf "checking whether compiler can find libraries... " >&2 + $CC -lfoo -lbar -o lib-check ${./lib-main.c} + ./lib-check + + touch $out + ''; + + meta.platforms = stdenv.lib.platforms.all; +} diff --git a/pkgs/test/stdenv-inputs/foo.c b/pkgs/test/stdenv-inputs/foo.c new file mode 100644 index 000000000000..0253a26d5d2c --- /dev/null +++ b/pkgs/test/stdenv-inputs/foo.c @@ -0,0 +1,3 @@ +unsigned int foo(void) { + return 42; +} diff --git a/pkgs/test/stdenv-inputs/include-main.c b/pkgs/test/stdenv-inputs/include-main.c new file mode 100644 index 000000000000..35e5ee0d90f7 --- /dev/null +++ b/pkgs/test/stdenv-inputs/include-main.c @@ -0,0 +1,13 @@ +#include +#include +#include + +int main(int argc, char **argv) +{ + if (foo() != 42) + return 1; + if (bar() != 42) + return 1; + fprintf(stderr, "ok\n"); + return 0; +} diff --git a/pkgs/test/stdenv-inputs/lib-main.c b/pkgs/test/stdenv-inputs/lib-main.c new file mode 100644 index 000000000000..c9488fe43e55 --- /dev/null +++ b/pkgs/test/stdenv-inputs/lib-main.c @@ -0,0 +1,14 @@ +#include + +extern unsigned int foo(void); +extern unsigned int bar(void); + +int main(int argc, char **argv) +{ + if (foo() != 42) + return 1; + if (bar() != 42) + return 1; + fprintf(stderr, "ok\n"); + return 0; +} diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 03d2a3a984a2..6f449057a786 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -19412,6 +19412,7 @@ with pkgs; cc-wrapper = callPackage ../test/cc-wrapper { }; cc-wrapper-clang = callPackage ../test/cc-wrapper { stdenv = clangStdenv; }; cc-wrapper-libcxx = callPackage ../test/cc-wrapper { stdenv = libcxxStdenv; }; + stdenv-inputs = callPackage ../test/stdenv-inputs { }; macOSSierraShared = callPackage ../test/macos-sierra-shared {}; };