diff options
Diffstat (limited to 'pkgs/applications/science/electronics/eagle/default.nix')
-rw-r--r-- | pkgs/applications/science/electronics/eagle/default.nix | 86 |
1 files changed, 86 insertions, 0 deletions
diff --git a/pkgs/applications/science/electronics/eagle/default.nix b/pkgs/applications/science/electronics/eagle/default.nix new file mode 100644 index 000000000000..04c9a9b79ec5 --- /dev/null +++ b/pkgs/applications/science/electronics/eagle/default.nix @@ -0,0 +1,86 @@ +{ stdenv, fetchurl, makeDesktopItem, patchelf, zlib, freetype, fontconfig +, openssl, libXrender, libXrandr, libXcursor, libX11, libXext, libXi +}: + +let + + libPath = stdenv.lib.makeLibraryPath + [ zlib freetype fontconfig openssl libXrender libXrandr libXcursor libX11 + libXext libXi + ]; + +in + +stdenv.mkDerivation rec { + name = "eagle-${version}"; + version = "6.4.0"; + + src = fetchurl { + url = "ftp://ftp.cadsoft.de/eagle/program/6.4/eagle-lin-${version}.run"; + sha256 = "0jb44dsq4cl9rx5nam6rxsw9fsmm6fsksv9s544p2zrwnad2x2i8"; + }; + + desktopItem = makeDesktopItem { + name = "Eagle"; + exec = "eagle"; + icon = "eagle"; + comment = "Schematic capture and PCB layout"; + desktopName = "Eagle"; + genericName = "Schematic editor"; + categories = "Application;Development;"; + }; + + buildInputs = + [ patchelf zlib freetype fontconfig openssl libXrender libXrandr libXcursor + libX11 libXext libXi + ]; + + phases = [ "installPhase" ]; + + # NOTES: + # Eagle for Linux comes as a self-extracting shell script with embedded + # tarball. The tarball data (.tar.bz2) starts after a __DATA__ marker. + # + # Eagle apparently doesn't like binary patching. This is what happens: + # $ ./result/eagle-6.4.0/bin/eagle + # argv[0] (/home/bfo/nixpkgs/result/eagle-6.4.0/bin/eagle) is not the currently executed program version! + installPhase = '' + # Extract eagle tarball + mkdir "$out" + sed '1,/^__DATA__$/d' "$src" | tar -xjf - -C "$out" + + # Install manpage + mkdir -p "$out"/share/man/man1 + ln -s "$out"/eagle-${version}/doc/eagle.1 "$out"/share/man/man1/eagle.1 + + # Build LD_PRELOAD library that redirects license file access to the home + # directory of the user + mkdir -p "$out"/lib + gcc -shared -fPIC -DEAGLE_PATH=\"$out/eagle-${version}\" ${./eagle_fixer.c} -o "$out"/lib/eagle_fixer.so -ldl + + # Make wrapper script + dynlinker="$(cat $NIX_GCC/nix-support/dynamic-linker)" + mkdir -p "$out"/bin + cat > "$out"/bin/eagle << EOF + #!${stdenv.shell} + export LD_LIBRARY_PATH="${stdenv.gcc.gcc}/lib:${libPath}" + export LD_PRELOAD="$out/lib/eagle_fixer.so" + exec "$dynlinker" "$out/eagle-${version}/bin/eagle" "\$@" + EOF + chmod a+x "$out"/bin/eagle + + # Make desktop item + mkdir -p "$out"/share/applications + cp "$desktopItem"/share/applications/* "$out"/share/applications/ + mkdir -p "$out"/share/icons + ln -s "$out/eagle-${version}/bin/eagleicon50.png" "$out"/share/icons/eagle.png + ''; + + meta = with stdenv.lib; { + description = "Schematic editor and PCB layout tool from CadSoft"; + homepage = http://www.cadsoftusa.com/; + license = licenses.unfree; + platforms = platforms.linux; + maintainers = [ maintainers.bjornfor ]; + }; +} |