summary refs log tree commit diff
path: root/pkgs/test/rpath/builder.sh
diff options
context:
space:
mode:
Diffstat (limited to 'pkgs/test/rpath/builder.sh')
-rw-r--r--pkgs/test/rpath/builder.sh79
1 files changed, 79 insertions, 0 deletions
diff --git a/pkgs/test/rpath/builder.sh b/pkgs/test/rpath/builder.sh
new file mode 100644
index 000000000000..0a75e1cd33a7
--- /dev/null
+++ b/pkgs/test/rpath/builder.sh
@@ -0,0 +1,79 @@
+export NIX_DEBUG=1
+
+. $stdenv/setup
+
+mkdir $out
+mkdir $out/bin
+
+
+# 1: link statically against glibc.
+res=$out/bin/hello1
+gcc -static $src/hello1.c -o $res
+
+case $(ldd $res) in
+  *"not a dynamic executable"*)
+        ;;
+  *)
+        echo "$res not statically linked!"
+        exit 1
+esac
+
+
+# 2: link dynamically against glibc.
+res=$out/bin/hello2
+gcc $src/hello1.c -o $res
+
+case $(ldd $res) in
+  */store/*glibc*/lib/libc.so*/store/*glibc*/lib/ld-linux.so*)
+        ;;
+  *)
+        echo "$res not dynamically linked / bad rpath!"
+        exit 1
+        ;;
+esac
+
+
+# 3: link C++ dynamically against glibc / libstdc++.
+res=$out/bin/hello3
+g++ $src/hello2.cc -o $res
+
+case $(ldd $res) in
+  */store/*gcc*/lib/*libstdc++*/store/*glibc*/lib/libm*/store/*gcc*/lib/libgcc_s*/store/*glibc*/lib/libc.so*/store/*glibc*/lib/ld-linux.so*)
+        ;;
+  *)
+        echo "$res not dynamically linked / bad rpath!"
+        exit 1
+        ;;
+esac
+
+
+# 4: build dynamic library locally, link against it, copy it.
+res=$out/bin/hello4
+mkdir bla
+gcc -shared $src/text.c -o bla/libtext.so 
+gcc $src/hello3.c -o $res -L$(pwd)/bla -ltext
+mkdir $out/lib
+
+case $(ldd $res) in
+  */tmp*)
+        echo "$res depends on file in /tmp!"
+        exit 1
+        ;;
+esac
+
+cp bla/libtext.so $out/lib
+
+case $(ldd $res) in
+  */store/*glibc*/lib/libc.so*/store/*glibc*/lib/ld-linux.so*)
+        ;;
+  *)
+        echo "$res not dynamically linked / bad rpath!"
+        exit 1
+        ;;
+esac
+
+
+# Run the programs we just made.
+for i in $out/bin/*; do
+    $i
+done