anvil-editor: init at 0.4
[NixPkgs.git] / pkgs / applications / misc / bambu-studio / default.nix
blob168c3ccf72f9573c117f8a7927b32fd977127e07
2   stdenv,
3   lib,
4   binutils,
5   fetchFromGitHub,
6   cmake,
7   pkg-config,
8   wrapGAppsHook3,
9   boost180,
10   cereal,
11   cgal_5,
12   curl,
13   dbus,
14   eigen,
15   expat,
16   gcc-unwrapped,
17   glew,
18   glfw,
19   glib,
20   glib-networking,
21   gmp,
22   gst_all_1,
23   gtest,
24   gtk3,
25   hicolor-icon-theme,
26   ilmbase,
27   libpng,
28   mesa,
29   mpfr,
30   nlopt,
31   opencascade-occt_7_6,
32   openvdb,
33   opencv,
34   pcre,
35   systemd,
36   tbb_2021_11,
37   webkitgtk_4_0,
38   wxGTK31,
39   xorg,
40   withSystemd ? stdenv.hostPlatform.isLinux,
42 let
43   wxGTK' =
44     (wxGTK31.override {
45       withCurl = true;
46       withPrivateFonts = true;
47       withWebKit = true;
48     }).overrideAttrs
49       (old: {
50         configureFlags = old.configureFlags ++ [
51           # Disable noisy debug dialogs
52           "--enable-debug=no"
53         ];
54       });
56 stdenv.mkDerivation rec {
57   pname = "bambu-studio";
58   version = "01.09.07.52";
60   src = fetchFromGitHub {
61     owner = "bambulab";
62     repo = "BambuStudio";
63     rev = "v${version}";
64     hash = "sha256-fhH4N29P/ysdHHbZt+FnBl3+QtTNhbVE3j4ZnFJyJH0=";
65   };
67   nativeBuildInputs = [
68     cmake
69     pkg-config
70     wrapGAppsHook3
71   ];
73   buildInputs = [
74     binutils
75     boost180
76     cereal
77     cgal_5
78     curl
79     dbus
80     eigen
81     expat
82     gcc-unwrapped
83     glew
84     glfw
85     glib
86     glib-networking
87     gmp
88     gst_all_1.gstreamer
89     gst_all_1.gst-plugins-base
90     gst_all_1.gst-plugins-bad
91     gst_all_1.gst-plugins-good
92     gtk3
93     hicolor-icon-theme
94     ilmbase
95     libpng
96     mesa.osmesa
97     mpfr
98     nlopt
99     opencascade-occt_7_6
100     openvdb
101     pcre
102     tbb_2021_11
103     webkitgtk_4_0
104     wxGTK'
105     xorg.libX11
106     opencv
107   ] ++ lib.optionals withSystemd [ systemd ] ++ checkInputs;
109   patches = [
110     # Fix for webkitgtk linking
111     ./patches/0001-not-for-upstream-CMakeLists-Link-against-webkit2gtk-.patch
112     # Fix build with cgal-5.6.1+
113     ./patches/meshboolean-const.patch
114     # Fix an issue with
115     ./patches/dont-link-opencv-world-bambu.patch
116   ];
118   doCheck = true;
119   checkInputs = [ gtest ];
121   separateDebugInfo = true;
123   # The build system uses custom logic - defined in
124   # cmake/modules/FindNLopt.cmake in the package source - for finding the nlopt
125   # library, which doesn't pick up the package in the nix store.  We
126   # additionally need to set the path via the NLOPT environment variable.
127   NLOPT = nlopt;
129   # Disable compiler warnings that clutter the build log.
130   # It seems to be a known issue for Eigen:
131   # http://eigen.tuxfamily.org/bz/show_bug.cgi?id=1221
132   NIX_CFLAGS_COMPILE = toString [
133     "-Wno-ignored-attributes"
134     "-I${opencv.out}/include/opencv4"
135   ];
137   # prusa-slicer uses dlopen on `libudev.so` at runtime
138   NIX_LDFLAGS = lib.optionalString withSystemd "-ludev";
140   # TODO: macOS
141   prePatch = ''
142     # Since version 2.5.0 of nlopt we need to link to libnlopt, as libnlopt_cxx
143     # now seems to be integrated into the main lib.
144     sed -i 's|nlopt_cxx|nlopt|g' cmake/modules/FindNLopt.cmake
145   '';
147   cmakeFlags = [
148     "-DSLIC3R_STATIC=0"
149     "-DSLIC3R_FHS=1"
150     "-DSLIC3R_GTK=3"
152     # BambuStudio-specific
153     "-DBBL_RELEASE_TO_PUBLIC=1"
154     "-DBBL_INTERNAL_TESTING=0"
155     "-DDEP_WX_GTK3=ON"
156     "-DSLIC3R_BUILD_TESTS=0"
157     "-DCMAKE_CXX_FLAGS=-DBOOST_LOG_DYN_LINK"
158   ];
160   preFixup = ''
161     gappsWrapperArgs+=(
162       --prefix LD_LIBRARY_PATH : "$out/lib"
164       # Fixes intermittent crash
165       # The upstream setup links in glew statically
166       --prefix LD_PRELOAD : "${glew.out}/lib/libGLEW.so"
167     )
168   '';
170   # needed to prevent collisions between the LICENSE.txt files of
171   # bambu-studio and orca-slicer.
172   postInstall = ''
173     mv $out/LICENSE.txt $out/share/BambuStudio/LICENSE.txt
174     mv $out/README.md $out/share/BambuStudio/README.md
175   '';
177   meta = with lib; {
178     description = "PC Software for BambuLab's 3D printers";
179     homepage = "https://github.com/bambulab/BambuStudio";
180     changelog = "https://github.com/bambulab/BambuStudio/releases/tag/v${version}";
181     license = licenses.agpl3Plus;
182     maintainers = with maintainers; [
183       zhaofengli
184       dsluijk
185     ];
186     mainProgram = "bambu-studio";
187     platforms = platforms.linux;
188   };