From 84d844e03da6e84e7895d19b4c817a436c532ef4 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Bj=C3=B8rn=20Forsman?= <bjorn.forsman@gmail.com>
Date: Mon, 27 Oct 2014 22:02:23 +0100
Subject: [PATCH] arduino-core: fixup ELF interperter paths in prebuilt
 binaries

Fixes #4688
---
 .../arduino/arduino-core/default.nix           | 18 ++++++++++++++++--
 1 file changed, 16 insertions(+), 2 deletions(-)

diff --git a/pkgs/development/arduino/arduino-core/default.nix b/pkgs/development/arduino/arduino-core/default.nix
index 94336cc9e2b4..3f722d1b7d45 100644
--- a/pkgs/development/arduino/arduino-core/default.nix
+++ b/pkgs/development/arduino/arduino-core/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, jdk, jre, ant, coreutils, gnugrep }:
+{ stdenv, fetchFromGitHub, jdk, jre, ant, coreutils, gnugrep, file }:
 
 stdenv.mkDerivation rec {
 
@@ -12,7 +12,7 @@ stdenv.mkDerivation rec {
     sha256 = "0nr5b719qi03rcmx6swbhccv6kihxz3b8b6y46bc2j348rja5332";
   };
 
-  buildInputs = [ jdk ant ];
+  buildInputs = [ jdk ant file ];
 
   buildPhase = ''
     cd ./core && ant 
@@ -27,6 +27,20 @@ stdenv.mkDerivation rec {
     cp -r ./build/linux/work/tools/ $out/share/arduino
     cp -r ./build/linux/work/lib/ $out/share/arduino
     echo ${version} > $out/share/arduino/lib/version.txt
+
+    # Fixup "/lib64/ld-linux-x86-64.so.2" like references in ELF executables.
+    echo "running patchelf on prebuilt binaries:"
+    find "$out" | while read filepath; do
+        if file "$filepath" | grep -q "ELF.*executable"; then
+            # skip target firmware files
+            if echo "$filepath" | grep -q "\.elf$"; then
+                continue
+            fi
+            echo "setting interpreter $(cat "$NIX_GCC"/nix-support/dynamic-linker) in $filepath"
+            patchelf --set-interpreter "$(cat "$NIX_GCC"/nix-support/dynamic-linker)" "$filepath"
+            test $? -eq 0 || { echo "patchelf failed to process $filepath"; exit 1; }
+        fi
+    done
   '';
 
   meta = {