(address . guix-patches@gnu.org)
Hi! I'm Daniel Trujillo,
This is my first-time-ever contribution to GNU Guix, so please, don't
hold any nitpick to yourself!! :)
I don't know if these kind of packages are of interest, but this is
PrusaSlicer [0], a software to prepare 3D printings (hence I put it in
engineering.scm).
The packaged version, 2.3.3 is the latest stable available at this
moment. But this version has as important problem [1]: It cannot be
invoked just naming the executable (through $PATH), because then, it
can't locate the resources directory. I learned **the hard way** that
the fix was applied *after* the release of the 2.3.3 version, so I
decided to backport the fix adding a patch because it's a show-stopper
to have to type the path to the executable in /gnu/store/... That's the
reason why the patch attached to this email contains, not only the
additions to engineering.scm, but also a patch that implements the
solution in the version 2.3.3 codebase (It's quite simple, it uses a
boost function to determine the path to the executable rather than
relying on argv[0]).
Known improvable things:
* It's configured to use GTK3. After many attempts to compile it under
GTK2 in a guix environment, sometimes it detected GTK right away, and
some ether times I had to add more includes. It wasn't quite reliable
and, according to the convention followed in gtk+ packages, probably it
would be better that prusa-slicer uses GTK3, and a hypothetical future
GTK2 version would be called prusa-slicer-gtk2.
* In order for the above $PATH issue fix to work, it's crucial that the
cmake variable SLIC3R_FHS is set to off. This is the default value
according to the CMakeLists.txt, but because it's so important, probably
it should have been included in the configure-flags argument? Just for
clarity.
* Currently, the version displayed in the title bar is
"....2.3.3+UNKNOWN". This is because of another cmake option not set. It
doesn't have any influence in the software, as far as I know, but it's
arguably ugly. The version I currently use, doesn't display that in the
title bar, but it does in the "About" window, and it says
".....2.3.3+linux-64". Maybe something like "GNU Guix" would be
prettier. But if I have to include the arch, I would have to dig deeper
into package definitions ^_^'''
I hope everything is in order, I'm looking forward to see your comments,
and hope I can start contributing more packages to Guix!!
Cheers,
Dani.
From 522c1904cf62afac25a9d974091211adac760c25 Mon Sep 17 00:00:00 2001
From: Daniel Trujillo Viedma <danihacker.viedma@gmail.com>
Date: Sat, 14 Aug 2021 00:00:55 +0200
Subject: [PATCH] Add prusa-slicer
---
gnu/packages/engineering.scm | 58 ++++++++++++++++++++++
.../patches/prusa-slicer-backport-fix-5542.patch | 31 ++++++++++++
2 files changed, 89 insertions(+)
create mode 100644 gnu/packages/patches/prusa-slicer-backport-fix-5542.patch
Toggle diff (105 lines)
diff --git a/gnu/packages/engineering.scm b/gnu/packages/engineering.scm
index 33c124a2ea..047d99c0af 100644
--- a/gnu/packages/engineering.scm
+++ b/gnu/packages/engineering.scm
@@ -2863,3 +2863,61 @@ for hooking Linux system calls in user space. This is achieved by
hot-patching the machine code of the standard C library in the memory of
a process.")
(license license:bsd-2))))
+
+(define-public prusa-slicer
+ (package
+ (name "prusa-slicer")
+ (version "2.3.3")
+ (source
+ (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://github.com/prusa3d/PrusaSlicer")
+ (commit (string-append "version_" version))))
+ (sha256
+ (base32 "0w0synqi3iz9aigsgv6x1c6sg123fasbx19h4w3ic1l48r8qmpwm"))
+ (patches (search-patches "prusa-slicer-backport-fix-5542.patch"))))
+ (build-system cmake-build-system)
+ (arguments
+ `(#:configure-flags `("-DSLIC3R_GTK=3")))
+ (native-inputs
+ `(("pkg-config" ,pkg-config)))
+ (inputs
+ `(("perl" ,perl)
+ ("glibc-locales" ,glibc-locales)
+ ("adwaita-icon-theme" ,adwaita-icon-theme)
+ ("boost" ,boost)
+ ("tbb" ,tbb)
+ ("curl" ,curl)
+ ("zlib" ,zlib)
+ ("eigen" ,eigen)
+ ("expat" ,expat)
+ ("libpng" ,libpng)
+ ("mesa" ,mesa)
+ ("glew" ,glew)
+ ("cereal" ,cereal)
+ ("nlopt" ,nlopt)
+ ("openvdb" ,openvdb)
+ ("cgal" ,cgal)
+ ("gmp" ,gmp)
+ ("mpfr" ,mpfr)
+ ("qhull" ,qhull)
+ ("wxwidgets" ,wxwidgets-3.1)
+ ("coreutils" ,coreutils)
+ ("grep" ,grep)
+ ("sed" ,sed)
+ ("openexr" ,openexr)
+ ("glib" ,glib)
+ ("glibc" ,glibc)
+ ("gtk+" ,gtk+)
+ ("pango" ,pango)
+ ("dbus" ,dbus)))
+ (home-page "https://www.prusa3d.com/prusaslicer/")
+ (synopsis "G-code generator for 3D printers (RepRap, Makerbot, Ultimaker etc.)")
+ (description
+ "PrusaSlicer (formerly known as Slic3r Prusa Edition or Slic3r PE) is
+our own in-house developed slicer software based on the open-source project
+Slic3r. PrusaSlicer is an open-source, feature-rich, frequently updated
+tool that contains everything you need to export the perfect print files
+for your Original Prusa 3D printer.")
+ (license license:agpl3)))
diff --git a/gnu/packages/patches/prusa-slicer-backport-fix-5542.patch b/gnu/packages/patches/prusa-slicer-backport-fix-5542.patch
new file mode 100644
index 0000000000..63d2a45be1
--- /dev/null
+++ b/gnu/packages/patches/prusa-slicer-backport-fix-5542.patch
@@ -0,0 +1,31 @@
+This patch backports a solution for the issue:
+https://github.com/prusa3d/PrusaSlicer/issues/5542
+that causes PrusaSlicer to crash when invoked
+from the command line by means of the $PATH variable.
+This fix is applied in:
+https://github.com/prusa3d/PrusaSlicer/commit/293f85b6cf9b805af93b9f79f5ff878b6d673969
+quite after the release of 2.3.3, so this backport is needed.
+
+diff --git a/src/PrusaSlicer.cpp b/src/PrusaSlicer.cpp
+index b0df2c99a..31e30af81 100644
+--- a/src/PrusaSlicer.cpp
++++ b/src/PrusaSlicer.cpp
+@@ -28,6 +28,7 @@
+ #include <boost/nowide/cenv.hpp>
+ #include <boost/nowide/iostream.hpp>
+ #include <boost/nowide/integration/filesystem.hpp>
++#include <boost/dll/runtime_symbol_info.hpp>
+
+ #include "unix/fhs.hpp" // Generated by CMake from ../platform/unix/fhs.hpp.in
+
+@@ -612,7 +613,9 @@ bool CLI::setup(int argc, char **argv)
+ // Detect the operating system flavor after SLIC3R_LOGLEVEL is set.
+ detect_platform();
+
+- boost::filesystem::path path_to_binary = boost::filesystem::system_complete(argv[0]);
++ // See Invoking prusa-slicer from $PATH environment variable crashes #5542
++ // boost::filesystem::path path_to_binary = boost::filesystem::system_complete(argv[0]);
++ boost::filesystem::path path_to_binary = boost::dll::program_location();
+
+ // Path from the Slic3r binary to its resources.
+ #ifdef __APPLE__
--
2.11.0