diff --git a/pkgs/applications/science/electronics/kicad/default.nix b/pkgs/applications/science/electronics/kicad/default.nix index e3244ec339e..3e783d2e177 100644 --- a/pkgs/applications/science/electronics/kicad/default.nix +++ b/pkgs/applications/science/electronics/kicad/default.nix @@ -1,72 +1,73 @@ -{ stdenv, fetchurl, cmake, libGLU_combined, wxGTK, zlib, libX11, gettext, glew, cairo, curl, openssl, boost, pkgconfig, doxygen }: +{ wxGTK, lib, stdenv, fetchurl, cmake, libGLU_combined, zlib +, libX11, gettext, glew, glm, cairo, curl, openssl, boost, pkgconfig +, doxygen, pcre, libpthreadstubs, libXdmcp +, wrapGAppsHook +, oceSupport ? true, opencascade +, ngspiceSupport ? true, libngspice +, swig, python, pythonPackages +}: +assert ngspiceSupport -> libngspice != null; + +with lib; stdenv.mkDerivation rec { name = "kicad-${version}"; - series = "4.0"; - version = "4.0.7"; + series = "5.0"; + version = "5.0.0"; - srcs = [ - (fetchurl { - url = "https://code.launchpad.net/kicad/${series}/${version}/+download/kicad-${version}.tar.xz"; - sha256 = "1hgxan9321szgyqnkflb0q60yjf4yvbcc4cpwhm0yz89qrvlq1q9"; - }) + src = fetchurl { + url = "https://launchpad.net/kicad/${series}/${version}/+download/kicad-${version}.tar.xz"; + sha256 = "17nqjszyvd25wi6550j981whlnb1wxzmlanljdjihiki53j84x9p"; + }; - (fetchurl { - url = "http://downloads.kicad-pcb.org/libraries/kicad-library-${version}.tar.gz"; - sha256 = "1azb7v1y3l6j329r9gg7f4zlg0wz8nh4s4i5i0l9s4yh9r6i9zmv"; - }) + postPatch = '' + substituteInPlace CMakeModules/KiCadVersion.cmake \ + --replace no-vcs-found ${version} + ''; - (fetchurl { - url = "http://downloads.kicad-pcb.org/libraries/kicad-footprints-${version}.tar.gz"; - sha256 = "08qrz5zzsb5127jlnv24j0sgiryd5nqwg3lfnwi8j9a25agqk13j"; - }) + cmakeFlags = [ + "-DKICAD_SCRIPTING=ON" + "-DKICAD_SCRIPTING_MODULES=ON" + "-DKICAD_SCRIPTING_WXPYTHON=ON" + # nix installs wxPython headers in wxPython package, not in wxwidget + # as assumed. We explicitely set the header location. + "-DCMAKE_CXX_FLAGS=-I${pythonPackages.wxPython}/include/wx-3.0" + ] ++ optionals (oceSupport) [ "-DKICAD_USE_OCE=ON" "-DOCE_DIR=${opencascade}" ] + ++ optional (ngspiceSupport) "-DKICAD_SPICE=ON"; + + nativeBuildInputs = [ + # https://www.mail-archive.com/kicad-developers@lists.launchpad.net/msg29840.html + (cmake.override {majorVersion = "3.10";}) + doxygen + pkgconfig + wrapGAppsHook + pythonPackages.wrapPython ]; + pythonPath = [ pythonPackages.wxPython ]; + propagatedBuildInputs = [ pythonPackages.wxPython ]; - sourceRoot = "kicad-${version}"; + buildInputs = [ + libGLU_combined zlib libX11 wxGTK pcre libXdmcp gettext glew glm libpthreadstubs + cairo curl openssl boost + swig python + ] ++ optional (oceSupport) opencascade + ++ optional (ngspiceSupport) libngspice; - cmakeFlags = '' - -DKICAD_SKIP_BOOST=ON - -DKICAD_BUILD_VERSION=${version} - -DKICAD_REPO_NAME=stable + # this breaks other applications in kicad + dontWrapGApps = true; + + preFixup = '' + buildPythonPath "$out $pythonPath" + gappsWrapperArgs+=(--set PYTHONPATH "$program_PYTHONPATH") + + wrapProgram "$out/bin/kicad" "''${gappsWrapperArgs[@]}" ''; - enableParallelBuilding = true; # often fails on Hydra: fatal error: pcb_plot_params_lexer.h: No such file or directory - - nativeBuildInputs = [ pkgconfig ]; - buildInputs = [ cmake libGLU_combined wxGTK zlib libX11 gettext glew cairo curl openssl boost doxygen ]; - - # They say they only support installs to /usr or /usr/local, - # so we have to handle this. - patchPhase = '' - sed -i -e 's,/usr/local/kicad,'$out,g common/gestfich.cpp - ''; - - postUnpack = '' - pushd $(pwd) - ''; - - postInstall = '' - popd - - pushd kicad-library-* - cmake -DCMAKE_INSTALL_PREFIX=$out - make $MAKE_FLAGS - make install - popd - - pushd kicad-footprints-* - mkdir -p $out/share/kicad/modules - cp -R *.pretty $out/share/kicad/modules/ - popd - ''; - - meta = { description = "Free Software EDA Suite"; homepage = http://www.kicad-pcb.org/; - license = stdenv.lib.licenses.gpl2; - maintainers = with stdenv.lib.maintainers; [viric]; - platforms = with stdenv.lib.platforms; linux; - hydraPlatforms = []; # 'output limit exceeded' error on hydra + license = licenses.gpl2; + maintainers = with maintainers; [ berce ]; + platforms = with platforms; linux; }; }