Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

curaLulzbot: 15.02.1-1.03-5064 -> 3.6.18 #61054

Merged
merged 2 commits into from Aug 8, 2019
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
96 changes: 52 additions & 44 deletions pkgs/applications/misc/cura/lulzbot.nix
@@ -1,58 +1,66 @@
{ stdenv, fetchurl, dpkg, bash, python27Packages }:
{ lib, fetchgit, curaengineLulzbot, cmake, jq, python3Packages, qtbase, qtquickcontrols2 }:

let
py = python27Packages;
# admittedly, we're using (printer firmware) blobs when we could compile them ourselves.
curaBinaryDataVersion = "3.6.18"; # Marlin v2.0.0.144. Keep this accurate wrt. the below.
curaBinaryData = fetchgit {
url = https://code.alephobjects.com/diffusion/CBD/cura-binary-data.git;
rev = "cdc046494bbfe1f65bfb34659a257eef9a0100a0";
sha256 = "0v0s036gxdjiglas2yzw95alv60sw3pq5k1zrrhmw9mxr4irrblb";
};
curaengine = curaengineLulzbot;
libarcus = python3Packages.libarcusLulzbot;
uranium = python3Packages.uraniumLulzbot;
libsavitar = python3Packages.libsavitarLulzbot;
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Since we don't want to use these python packages in any other place, it might be better to copy them to pkgs/applications/misc/cura/lulzbot and just reference them here locally.
The reason is that having different versions of a python library will collide in PYTHONPATH, which is why we want to avoid having different versions of the same library for python.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@Mic92, is 784c69a in line with your suggestion here?

in
stdenv.mkDerivation rec {
python3Packages.buildPythonApplication rec {
name = "cura-lulzbot-${version}";
version = "15.02.1-1.03-5064";

src =
if stdenv.hostPlatform.system == "x86_64-linux" then
fetchurl {
url = "https://download.alephobjects.com/ao/aodeb/dists/jessie/main/binary-amd64/cura_${version}_amd64.deb";
sha256 = "1gsfidg3gim5pjbl82vkh0cw4ya253m4p7nirm8nr6yjrsirkzxg";
}
else if stdenv.hostPlatform.system == "i686-linux" then
fetchurl {
url = "http://download.alephobjects.com/ao/aodeb/dists/jessie/main/binary-i386/cura_${version}_i386.deb";
sha256 = "0xd3df6bxq4rijgvsqvps454jkc1nzhxbdzzj6j2w317ppsbhyc1";
}
else throw "${name} is not supported on ${stdenv.hostPlatform.system}";

python_deps = with py; [ pyopengl pyserial numpy wxPython30 power setuptools ];
pythonPath = python_deps;
propagatedBuildInputs = python_deps;
buildInputs = [ dpkg bash py.wrapPython ];
version = "3.6.18";

phases = [ "unpackPhase" "installPhase" ];
unpackPhase = "dpkg-deb -x ${src} ./";
src = fetchgit {
url = https://code.alephobjects.com/source/cura-lulzbot.git;
rev = "71f1ac5a2b9f535175a3858a565930348358a9ca";
sha256 = "0by06fpxvdgy858lwhsccbmvkdq67j2s1cz8v6jnrnjrsxk7vzka";
};

installPhase = ''
mkdir -p $out/bin
cp -r usr/share $out/share
find $out/share -type f -exec sed -i 's|/usr/share/cura|$out/share/cura|g' "{}" \;
format = "other"; # using cmake to build
buildInputs = [ qtbase qtquickcontrols2 ];
# numpy-stl temporarily disabled due to https://code.alephobjects.com/T8415
propagatedBuildInputs = with python3Packages; [ pyserial requests zeroconf ] ++ [ libsavitar uranium libarcus ]; # numpy-stl
nativeBuildInputs = [ cmake python3Packages.wrapPython ];

cat <<EOT > $out/bin/cura
#!${bash}/bin/bash
PYTHONPATH=$PYTHONPATH:$out/share/cura ${py.python}/bin/python $out/share/cura/cura.py "\$@"
EOT
cmakeFlags = [
"-DURANIUM_DIR=${uranium.src}"
"-DCURA_VERSION=${version}"
];

chmod 555 $out/bin/cura
postPatch = ''
sed -i 's,/python''${PYTHON_VERSION_MAJOR}/dist-packages,/python''${PYTHON_VERSION_MAJOR}.''${PYTHON_VERSION_MINOR}/site-packages,g' CMakeLists.txt
sed -i 's, executable_name = .*, executable_name = "${curaengine}/bin/CuraEngine",' plugins/CuraEngineBackend/CuraEngineBackend.py
'';

meta = with stdenv.lib; {
description = "3D printing host software for the Lulzbot";

longDescription = ''
Cura LulzBot Edition is a fork of the 3D printing/slicing
software from Ultimaker, with changes to support 3D printers
from Aleph Objects.
'';
preFixup = ''
substituteInPlace "$out/bin/cura-lulzbot" --replace 'import cura.CuraApplication' 'import Savitar; import cura.CuraApplication'
ln -sT "${curaBinaryData}/cura/resources/firmware" "$out/share/cura/resources/firmware"
ln -sT "${uranium}/share/uranium" "$out/share/uranium"
${jq}/bin/jq --arg out "$out" '.build=$out' >"$out/version.json" <<'EOF'
${builtins.toJSON {
cura = version;
cura_version = version;
binarydata = curaBinaryDataVersion;
engine = curaengine.version;
libarcus = libarcus.version;
libsavitar = libsavitar.version;
uranium = uranium.version;
}}
EOF
'';

homepage = https://www.lulzbot.com/cura/;
license = licenses.agpl3;
meta = with lib; {
description = "3D printer / slicing GUI built on top of the Uranium framework";
homepage = https://code.alephobjects.com/diffusion/CURA/;
license = licenses.agpl3; # a partial relicense to LGPL has happened, but not certain that all AGPL bits are expunged
platforms = platforms.linux;
maintainers = with maintainers; [ pjones ];
maintainers = with maintainers; [ chaduffy ];
};
}
26 changes: 26 additions & 0 deletions pkgs/applications/misc/curaengine/lulzbot.nix
@@ -0,0 +1,26 @@
{ stdenv, fetchgit, fetchpatch, cmake, libarcusLulzbot, stb, protobuf }:

stdenv.mkDerivation rec {
name = "curaengine-lulzBot-${version}";
version = "3.6.18";

src = fetchgit {
url = https://code.alephobjects.com/source/curaengine-lulzbot.git;
rev = "ec6a1a0f0aa387ef97e5c106633cf8d7fb9cd00d";
sha256 = "0wdkvg1hmqp1gaym804lw09x4ngf5ffasd861jhflpy7djbmkfn8";
};

nativeBuildInputs = [ cmake ];
buildInputs = [ libarcusLulzbot stb protobuf ];

cmakeFlags = [ "-DCURA_ENGINE_VERSION=${version}" ];

meta = with stdenv.lib; {
description = "A powerful, fast and robust engine for processing 3D models into 3D printing instruction";
homepage = https://code.alephobjects.com/source/curaengine-lulzbot/;
license = licenses.agpl3;
platforms = platforms.linux;
maintainers = with maintainers; [ chaduffy ];
};
}

33 changes: 33 additions & 0 deletions pkgs/development/python-modules/libarcus/lulzbot.nix
@@ -0,0 +1,33 @@
{ stdenv, buildPythonPackage, fetchgit, fetchurl, cmake, sip, protobuf, pythonOlder }:

buildPythonPackage rec {
pname = "libarcus";
version = "3.6.18";
format = "other";

src = fetchgit {
url = https://code.alephobjects.com/source/arcus.git;
rev = "c795c0644591703ce04e1fd799fc97b1539031aa";
sha256 = "1yap9wbqxbjx3kqyqcsldny4mlcm33ywiwpdjlfgs0wjahfg4ip0";
};

disabled = pythonOlder "3.4.0";

propagatedBuildInputs = [ sip ];
nativeBuildInputs = [ cmake ];
buildInputs = [ protobuf ];

postPatch = ''
# To workaround buggy SIP detection which overrides PYTHONPATH
sed -i '/SET(ENV{PYTHONPATH}/d' cmake/FindSIP.cmake
'';

meta = with stdenv.lib; {
description = "Communication library between internal components for Ultimaker software";
homepage = https://code.alephobjects.com/source/arcus/;
license = licenses.lgpl3Plus;
platforms = platforms.linux;
maintainers = with maintainers; [ chaduffy ];
};
}

33 changes: 33 additions & 0 deletions pkgs/development/python-modules/libsavitar/lulzbot.nix
@@ -0,0 +1,33 @@
{ stdenv, buildPythonPackage, pythonOlder, fetchgit, cmake, sip }:

buildPythonPackage rec {
pname = "libsavitar-lulzbot";
name = "libsavitar-lulzbot";
version = "3.6.18";
format = "other";

src = fetchgit {
url = https://code.alephobjects.com/source/savitar.git;
rev = "988a26d35b2a1d042f8c38938ccda77ab146af7d";
sha256 = "146agw3a92azkgs5ahmn2rrck4an78m2r3pcss6ihmb60lx165k7";
};

postPatch = ''
# To workaround buggy SIP detection which overrides PYTHONPATH
sed -i '/SET(ENV{PYTHONPATH}/d' cmake/FindSIP.cmake
'';

nativeBuildInputs = [ cmake ];

propagatedBuildInputs = [ sip ];

disabled = pythonOlder "3.4.0";

meta = with stdenv.lib; {
description = "C++ implementation of 3mf loading with SIP python bindings";
homepage = https://github.com/Ultimaker/libSavitar;
license = licenses.lgpl3Plus;
platforms = platforms.unix;
maintainers = with maintainers; [ chaduffy ];
};
}
41 changes: 41 additions & 0 deletions pkgs/development/python-modules/uranium/lulzbot.nix
@@ -0,0 +1,41 @@
{ stdenv, fetchurl, fetchgit, buildPythonPackage, fetchFromGitHub, python, cmake
, pyqt5, numpy, scipy, shapely, libarcusLulzbot, doxygen, gettext, pythonOlder }:

buildPythonPackage rec {
version = "3.6.18";
pname = "uranium";
name = "uraniumLulzbot";
format = "other";

src = fetchgit {
url = https://code.alephobjects.com/diffusion/U/uranium.git;
rev = "33df88a7414375ac924ac761113baa48d2ced2b4";
sha256 = "109cbv7y105crbrzfp70lmcr9n20ap5c97i5qd46fmxbx86yj7f8";
};

disabled = pythonOlder "3.5.0";

buildInputs = [ python gettext ];
propagatedBuildInputs = [ pyqt5 numpy scipy shapely libarcusLulzbot ];
nativeBuildInputs = [ cmake doxygen ];

# Qt 5.12+ support; see https://code.alephobjects.com/rU70b73ba0a270799b9eacf78e400aa8b8ab3fb2ee
patches = [ ./qt512-support.patch ];

postPatch = ''
sed -i 's,/python''${PYTHON_VERSION_MAJOR}/dist-packages,/python''${PYTHON_VERSION_MAJOR}.''${PYTHON_VERSION_MINOR}/site-packages,g' CMakeLists.txt
sed -i \
-e "s,Resources.addSearchPath(os.path.join(os.path.abspath(os.path.dirname(__file__)).*,Resources.addSearchPath(\"$out/share/uranium/resources\")," \
-e "s,self._plugin_registry.addPluginLocation(os.path.join(os.path.abspath(os.path.dirname(__file__)).*,self._plugin_registry.addPluginLocation(\"$out/lib/uranium/plugins\")," \
UM/Application.py
'';

meta = with stdenv.lib; {
description = "A Python framework for building Desktop applications";
homepage = https://code.alephobjects.com/diffusion/U/;
license = licenses.lgpl3Plus;
platforms = platforms.linux;
maintainers = with maintainers; [ chaduffy ];
};
}

16 changes: 16 additions & 0 deletions pkgs/development/python-modules/uranium/qt512-support.patch
@@ -0,0 +1,16 @@
diff --git a/UM/Qt/Bindings/i18nCatalogProxy.py b/UM/Qt/Bindings/i18nCatalogProxy.py
index 7e2bb16c..cec70dd6 100644
--- a/UM/Qt/Bindings/i18nCatalogProxy.py
+++ b/UM/Qt/Bindings/i18nCatalogProxy.py
@@ -86,9 +86,9 @@ class i18nCatalogProxy(QObject): # [CodeStyle: Ultimaker code style requires cla
# \todo Move this to a more generic place so more things can use it.
def _wrapFunction(self, engine, this_object, function):
# JavaScript code that wraps the Python method call in a closure
- wrap_js = """function(this_object) {{
+ wrap_js = """(function(this_object) {{
return function({args}) {{ return this_object.{function}({args}) }}
- }}"""
+ }})"""

# Get the function name and argument list.
function_name = function.__name__
8 changes: 4 additions & 4 deletions pkgs/top-level/all-packages.nix
Expand Up @@ -20203,14 +20203,14 @@ in
curaengine = curaengine_stable;
};

curaengine = callPackage ../applications/misc/curaengine {
inherit (python3.pkgs) libarcus;
};
curaengine = callPackage ../applications/misc/curaengine { inherit (python3.pkgs) libarcus; };
curaengineLulzbot = callPackage ../applications/misc/curaengine/lulzbot.nix { inherit (python3.pkgs) libarcusLulzbot; };

cura = qt5.callPackage ../applications/misc/cura { };

curaPlugins = callPackage ../applications/misc/cura/plugins.nix { };

curaLulzbot = callPackage ../applications/misc/cura/lulzbot.nix { };
curaLulzbot = qt5.callPackage ../applications/misc/cura/lulzbot.nix { };

curaByDagoma = callPackage ../applications/misc/curabydagoma { };

Expand Down
3 changes: 3 additions & 0 deletions pkgs/top-level/python-packages.nix
Expand Up @@ -3238,6 +3238,7 @@ in {
fs-s3fs = callPackage ../development/python-modules/fs-s3fs { };

libarcus = callPackage ../development/python-modules/libarcus { inherit (pkgs) protobuf; };
libarcusLulzbot = callPackage ../development/python-modules/libarcus/lulzbot.nix { inherit (pkgs) protobuf; };

libcloud = callPackage ../development/python-modules/libcloud { };

Expand All @@ -3258,6 +3259,7 @@ in {
};

libsavitar = callPackage ../development/python-modules/libsavitar { };
libsavitarLulzbot = callPackage ../development/python-modules/libsavitar/lulzbot.nix { };

libplist = disabledIf isPy3k
(toPythonModule (pkgs.libplist.override{python2Packages=self; })).py;
Expand Down Expand Up @@ -5537,6 +5539,7 @@ in {
twilio = callPackage ../development/python-modules/twilio { };

uranium = callPackage ../development/python-modules/uranium { };
uraniumLulzbot = callPackage ../development/python-modules/uranium/lulzbot.nix { };

uuid = callPackage ../development/python-modules/uuid { };

Expand Down