From 321be4649d7de7c6d82b7d57881746182f8ca43d Mon Sep 17 00:00:00 2001 From: Eelco Dolstra Date: Tue, 6 Jul 2004 14:10:09 +0000 Subject: [PATCH] * Linker accepts a name for the program. * Better diagnostics. --- examples/not-so-simple-header/default.nix | 2 +- lib/compile-c.sh | 5 +++-- lib/default.nix | 4 ++-- lib/link.sh | 6 ++++-- 4 files changed, 10 insertions(+), 7 deletions(-) diff --git a/examples/not-so-simple-header/default.nix b/examples/not-so-simple-header/default.nix index ad7470f81..61ded57c8 100644 --- a/examples/not-so-simple-header/default.nix +++ b/examples/not-so-simple-header/default.nix @@ -2,7 +2,7 @@ let { inherit (import ../../lib) compileC link; - hello = link {objects = compileC { + hello = link {programName = "hello"; objects = compileC { main = ./foo/hello.c; localIncludes = [ [./foo/fnord/indirect.h "fnord/indirect.h"] diff --git a/lib/compile-c.sh b/lib/compile-c.sh index 71c67f744..e07d6afc0 100644 --- a/lib/compile-c.sh +++ b/lib/compile-c.sh @@ -2,7 +2,7 @@ mainName=$(basename $main | cut -c34-) -echo "compiling $mainName..." +echo "compiling \`$mainName'..." # Turn $localIncludes into an array. localIncludes=($localIncludes) @@ -67,4 +67,5 @@ done ln -s $main $prefix$mainName mkdir $out -gcc -Wall -c $prefix$mainName -o $out/$mainName.o +test "$prefix" && cd $prefix +gcc -Wall -c $mainName -o $out/$mainName.o diff --git a/lib/default.nix b/lib/default.nix index ab4e517a4..d2cafc8c2 100644 --- a/lib/default.nix +++ b/lib/default.nix @@ -8,10 +8,10 @@ rec { inherit main localIncludes; }; - link = {objects}: stdenv.mkDerivation { + link = {objects, programName ? "program"}: stdenv.mkDerivation { name = "link"; builder = ./link.sh; - inherit objects; + inherit objects programName; }; } diff --git a/lib/link.sh b/lib/link.sh index 6dc762ad4..048652f9b 100644 --- a/lib/link.sh +++ b/lib/link.sh @@ -2,9 +2,11 @@ objs= for i in "$objects"; do - obj=$i/*.o + obj=$(echo $i/*.o) objs="$objs $obj" done +echo "linking object files into \`$programName'..." + mkdir $out -gcc -o $out/program $objs +gcc -o $out/$programName $objs