curaLulzbot: 15.02.1-1.03-5064 -> 3.6.18

Move Cura Lulzbot Edition to be based on the same generation of the
codebase as the upstream (Ultimaker) branch, away from a many-year-old
legacy tree.

Since prior Lulzbot Edition packaging simply wrapped binaries unpacked
from Debian binary packages, doing this right requires forking the same
dependencies that Lulzbot has branched themselves as well.
This commit is contained in:
Charles Duffy 2019-05-05 18:31:51 -05:00
parent 86c11030ee
commit 0ca75bc294
No known key found for this signature in database
GPG Key ID: BB397BA4CAA75978
8 changed files with 208 additions and 48 deletions

View File

@ -1,58 +1,66 @@
{ stdenv, fetchurl, dpkg, bash, python27Packages }: { lib, fetchgit, curaengineLulzbot, cmake, jq, python3Packages, qtbase, qtquickcontrols2 }:
let 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;
in in
stdenv.mkDerivation rec { python3Packages.buildPythonApplication rec {
name = "cura-lulzbot-${version}"; name = "cura-lulzbot-${version}";
version = "15.02.1-1.03-5064"; version = "3.6.18";
src = src = fetchgit {
if stdenv.hostPlatform.system == "x86_64-linux" then url = https://code.alephobjects.com/source/cura-lulzbot.git;
fetchurl { rev = "71f1ac5a2b9f535175a3858a565930348358a9ca";
url = "https://download.alephobjects.com/ao/aodeb/dists/jessie/main/binary-amd64/cura_${version}_amd64.deb"; sha256 = "0by06fpxvdgy858lwhsccbmvkdq67j2s1cz8v6jnrnjrsxk7vzka";
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 ]; format = "other"; # using cmake to build
pythonPath = python_deps; buildInputs = [ qtbase qtquickcontrols2 ];
propagatedBuildInputs = python_deps; # numpy-stl temporarily disabled due to https://code.alephobjects.com/T8415
buildInputs = [ dpkg bash py.wrapPython ]; propagatedBuildInputs = with python3Packages; [ pyserial requests zeroconf ] ++ [ libsavitar uranium libarcus ]; # numpy-stl
nativeBuildInputs = [ cmake python3Packages.wrapPython ];
phases = [ "unpackPhase" "installPhase" ]; cmakeFlags = [
unpackPhase = "dpkg-deb -x ${src} ./"; "-DURANIUM_DIR=${uranium.src}"
"-DCURA_VERSION=${version}"
];
installPhase = '' postPatch = ''
mkdir -p $out/bin sed -i 's,/python''${PYTHON_VERSION_MAJOR}/dist-packages,/python''${PYTHON_VERSION_MAJOR}.''${PYTHON_VERSION_MINOR}/site-packages,g' CMakeLists.txt
cp -r usr/share $out/share sed -i 's, executable_name = .*, executable_name = "${curaengine}/bin/CuraEngine",' plugins/CuraEngineBackend/CuraEngineBackend.py
find $out/share -type f -exec sed -i 's|/usr/share/cura|$out/share/cura|g' "{}" \;
cat <<EOT > $out/bin/cura
#!${bash}/bin/bash
PYTHONPATH=$PYTHONPATH:$out/share/cura ${py.python}/bin/python $out/share/cura/cura.py "\$@"
EOT
chmod 555 $out/bin/cura
''; '';
meta = with stdenv.lib; { preFixup = ''
description = "3D printing host software for the Lulzbot"; 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"
longDescription = '' ln -sT "${uranium}/share/uranium" "$out/share/uranium"
Cura LulzBot Edition is a fork of the 3D printing/slicing ${jq}/bin/jq --arg out "$out" '.build=$out' >"$out/version.json" <<'EOF'
software from Ultimaker, with changes to support 3D printers ${builtins.toJSON {
from Aleph Objects. 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/; meta = with lib; {
license = licenses.agpl3; 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; platforms = platforms.linux;
maintainers = with maintainers; [ pjones ]; maintainers = with maintainers; [ chaduffy ];
}; };
} }

View File

@ -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 ];
};
}

View File

@ -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 ];
};
}

View File

@ -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 ];
};
}

View File

@ -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 ];
};
}

View File

@ -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__

View File

@ -20203,14 +20203,14 @@ in
curaengine = curaengine_stable; curaengine = curaengine_stable;
}; };
curaengine = callPackage ../applications/misc/curaengine { curaengine = callPackage ../applications/misc/curaengine { inherit (python3.pkgs) libarcus; };
inherit (python3.pkgs) libarcus; curaengineLulzbot = callPackage ../applications/misc/curaengine/lulzbot.nix { inherit (python3.pkgs) libarcusLulzbot; };
};
cura = qt5.callPackage ../applications/misc/cura { }; cura = qt5.callPackage ../applications/misc/cura { };
curaPlugins = callPackage ../applications/misc/cura/plugins.nix { }; 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 { }; curaByDagoma = callPackage ../applications/misc/curabydagoma { };

View File

@ -3238,6 +3238,7 @@ in {
fs-s3fs = callPackage ../development/python-modules/fs-s3fs { }; fs-s3fs = callPackage ../development/python-modules/fs-s3fs { };
libarcus = callPackage ../development/python-modules/libarcus { inherit (pkgs) protobuf; }; 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 { }; libcloud = callPackage ../development/python-modules/libcloud { };
@ -3258,6 +3259,7 @@ in {
}; };
libsavitar = callPackage ../development/python-modules/libsavitar { }; libsavitar = callPackage ../development/python-modules/libsavitar { };
libsavitarLulzbot = callPackage ../development/python-modules/libsavitar/lulzbot.nix { };
libplist = disabledIf isPy3k libplist = disabledIf isPy3k
(toPythonModule (pkgs.libplist.override{python2Packages=self; })).py; (toPythonModule (pkgs.libplist.override{python2Packages=self; })).py;
@ -5537,6 +5539,7 @@ in {
twilio = callPackage ../development/python-modules/twilio { }; twilio = callPackage ../development/python-modules/twilio { };
uranium = callPackage ../development/python-modules/uranium { }; uranium = callPackage ../development/python-modules/uranium { };
uraniumLulzbot = callPackage ../development/python-modules/uranium/lulzbot.nix { };
uuid = callPackage ../development/python-modules/uuid { }; uuid = callPackage ../development/python-modules/uuid { };