{ stdenv , lib , openexr , jemalloc , c-blosc , binutils , fetchFromGitHub , cmake , pkg-config , wrapGAppsHook , boost179 , cereal , cgal_5 , curl , dbus , eigen , expat , gcc-unwrapped , glew , glfw , glib , glib-networking , gmp , gstreamer , gst-plugins-base , gst-plugins-bad , gst-plugins-good , gtest , gtk3 , hicolor-icon-theme , ilmbase , libpng , mesa , mpfr , nlopt , opencascade-occt , openvdb , pcre , qhull , systemd , tbb_2021_11 , webkitgtk , wxGTK31 , xorg , fetchpatch , withSystemd ? stdenv.isLinux }: let wxGTK31' = wxGTK31.overrideAttrs (old: { configureFlags = old.configureFlags ++ [ # Disable noisy debug dialogs "--enable-debug=no" ]; }); openvdb_tbb_2021_8 = openvdb.overrideAttrs (old: rec { buildInputs = [ openexr boost179 tbb_2021_11 jemalloc c-blosc ilmbase ]; }); in stdenv.mkDerivation rec { pname = "bambu-studio"; version = "01.09.00.60"; src = fetchFromGitHub { owner = "bambulab"; repo = "BambuStudio"; rev = "v${version}"; hash = "sha256-LJK+hGhBXCewbNIBA8CeE01vMQ/n1mO+bervN/y45P0="; }; nativeBuildInputs = [ cmake pkg-config wrapGAppsHook ]; buildInputs = [ binutils boost179 cereal cgal_5 curl dbus eigen expat gcc-unwrapped glew glfw glib glib-networking gmp gstreamer gst-plugins-base gst-plugins-bad gst-plugins-good gtk3 hicolor-icon-theme ilmbase libpng mesa.osmesa mpfr nlopt opencascade-occt openvdb_tbb_2021_8 pcre tbb_2021_11 webkitgtk wxGTK31' xorg.libX11 ] ++ lib.optionals withSystemd [ systemd ] ++ checkInputs; patches = [ # Fix for webkitgtk linking ./0001-not-for-upstream-CMakeLists-Link-against-webkit2gtk-.patch # Fix build with cgal-5.6.1+ ./meshboolean-const.patch ]; doCheck = true; checkInputs = [ gtest ]; separateDebugInfo = true; # The build system uses custom logic - defined in # cmake/modules/FindNLopt.cmake in the package source - for finding the nlopt # library, which doesn't pick up the package in the nix store. We # additionally need to set the path via the NLOPT environment variable. NLOPT = nlopt; # Disable compiler warnings that clutter the build log. # It seems to be a known issue for Eigen: # http://eigen.tuxfamily.org/bz/show_bug.cgi?id=1221 NIX_CFLAGS_COMPILE = "-Wno-ignored-attributes"; # prusa-slicer uses dlopen on `libudev.so` at runtime NIX_LDFLAGS = lib.optionalString withSystemd "-ludev"; # TODO: macOS prePatch = '' # Since version 2.5.0 of nlopt we need to link to libnlopt, as libnlopt_cxx # now seems to be integrated into the main lib. sed -i 's|nlopt_cxx|nlopt|g' cmake/modules/FindNLopt.cmake ''; cmakeFlags = [ "-DSLIC3R_STATIC=0" "-DSLIC3R_FHS=1" "-DSLIC3R_GTK=3" # BambuStudio-specific "-DBBL_RELEASE_TO_PUBLIC=1" "-DBBL_INTERNAL_TESTING=0" "-DDEP_WX_GTK3=ON" "-DSLIC3R_BUILD_TESTS=0" "-DCMAKE_CXX_FLAGS=-DBOOST_LOG_DYN_LINK" ]; preFixup = '' gappsWrapperArgs+=( --prefix LD_LIBRARY_PATH : "$out/lib" # Fixes intermittent crash # The upstream setup links in glew statically --prefix LD_PRELOAD : "${glew.out}/lib/libGLEW.so" ) ''; # needed to prevent collisions between the LICENSE.txt files of # bambu-studio and orca-slicer. postInstall = '' mkdir -p $out/share/doc mv $out/LICENSE.txt $out/share/doc/LICENSE.txt if [ -f $out/README.md ]; then mv $out/README.md $out/share/doc/README.md fi ''; meta = with lib; { description = "PC Software for BambuLab's 3D printers"; homepage = "https://github.com/bambulab/BambuStudio"; license = licenses.agpl3Plus; maintainers = with maintainers; [ zhaofengli ]; mainProgram = "bambu-studio"; platforms = platforms.linux; }; }