diff --git a/pkgs/applications/misc/bambu-studio/0001-not-for-upstream-CMakeLists-Link-against-webkit2gtk-.patch b/pkgs/applications/misc/bambu-studio/0001-not-for-upstream-CMakeLists-Link-against-webkit2gtk-.patch new file mode 100644 index 0000000000000..15f1bf8f0b59e --- /dev/null +++ b/pkgs/applications/misc/bambu-studio/0001-not-for-upstream-CMakeLists-Link-against-webkit2gtk-.patch @@ -0,0 +1,34 @@ +From 7eed499898226222a949a792e0400ec10db4a1c9 Mon Sep 17 00:00:00 2001 +From: Zhaofeng Li +Date: Tue, 22 Nov 2022 13:00:39 -0700 +Subject: [PATCH] [not for upstream] CMakeLists: Link against webkit2gtk in + libslic3r_gui + +WebView.cpp uses symbols from webkitgtk directly. Upstream setup +links wxGTK statically so webkitgtk is already pulled in. + +> /nix/store/039g378vc3pc3dvi9dzdlrd0i4q93qwf-binutils-2.39/bin/ld: slic3r/liblibslic3r_gui.a(WebView.cpp.o): undefined reference to symbol 'webkit_web_view_run_javascript_finish' +> /nix/store/039g378vc3pc3dvi9dzdlrd0i4q93qwf-binutils-2.39/bin/ld: /nix/store/8yvy428jy2nwq4dhmrcs7gj5r27a2pv6-webkitgtk-2.38.2+abi=4.0/lib/libwebkit2gtk-4.0.so.37: error adding symbols: DSO missing from command line +--- + src/CMakeLists.txt | 5 +++++ + 1 file changed, 5 insertions(+) + +diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt +index 9c5cb96..e92a0e3 100644 +--- a/src/CMakeLists.txt ++++ b/src/CMakeLists.txt +@@ -175,6 +175,11 @@ if (WIN32) + target_link_libraries(BambuStudio_app_gui PRIVATE boost_headeronly) + endif () + ++# We link against webkit2gtk symbols in src/slic3r/GUI/Widgets/WebView.cpp ++if (CMAKE_SYSTEM_NAME STREQUAL "Linux") ++ target_link_libraries(libslic3r_gui "-lwebkit2gtk-4.0") ++endif () ++ + # Link the resources dir to where Slic3r GUI expects it + set(output_dlls_Release "") + set(output_dlls_Debug "") +-- +2.38.1 + diff --git a/pkgs/applications/misc/bambu-studio/default.nix b/pkgs/applications/misc/bambu-studio/default.nix new file mode 100644 index 0000000000000..03dae399f2b2a --- /dev/null +++ b/pkgs/applications/misc/bambu-studio/default.nix @@ -0,0 +1,164 @@ +{ stdenv +, lib +, binutils +, fetchFromGitHub +, cmake +, pkg-config +, wrapGAppsHook +, boost +, cereal +, cgal_5 +, curl +, dbus +, eigen +, expat +, glew +, glfw +, glib +, glib-networking +, gmp +, gstreamer +, gst-plugins-base +, gst-plugins-bad +, gtest +, gtk3 +, hicolor-icon-theme +, ilmbase +, libpng +, mesa +, mpfr +, nlopt +, opencascade-occt +, openvdb +, pcre +, qhull +, systemd +, tbb +, webkitgtk +, wxGTK31 +, xorg +, fetchpatch +, withSystemd ? stdenv.isLinux +}: +let + wxGTK31' = wxGTK31.overrideAttrs (old: { + configureFlags = old.configureFlags ++ [ + # Disable noisy debug dialogs + "--enable-debug=no" + ]; + }); +in +stdenv.mkDerivation rec { + pname = "bambu-studio"; + version = "unstable-2023-01-11"; + + src = fetchFromGitHub { + owner = "bambulab"; + repo = "BambuStudio"; + rev = "730aa890c324426d6954afd9cb6333f1148288c5"; + hash = "sha256-DM8BbgRcf/VS+IFRAwtlESunRdlj7z7siZ7wgxs1PIA="; + }; + + nativeBuildInputs = [ + cmake + pkg-config + wrapGAppsHook + ]; + + buildInputs = [ + binutils + boost + cereal + cgal_5 + curl + dbus + eigen + expat + glew + glfw + glib + glib-networking + gmp + gstreamer + gst-plugins-base + gst-plugins-bad + gtk3 + hicolor-icon-theme + ilmbase + libpng + mesa.osmesa + mpfr + nlopt + opencascade-occt + openvdb + pcre + tbb + webkitgtk + wxGTK31' + xorg.libX11 + ] ++ lib.optionals withSystemd [ + systemd + ] ++ checkInputs; + + patches = [ + # Fix for webkitgtk linking + ./0001-not-for-upstream-CMakeLists-Link-against-webkit2gtk-.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" + ) + ''; + + meta = with lib; { + description = "PC Software for BambuLab's 3D printers"; + homepage = "https://github.com/bambulab/BambuStudio"; + license = licenses.agpl3; + maintainers = with maintainers; [ zhaofengli ]; + mainProgram = "bambu-studio"; + }; +} diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 827f5343dc1b7..e3dbb32c0adee 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -33145,6 +33145,24 @@ with pkgs; super-slicer-latest = super-slicer.latest; + bambu-studio = callPackage ../applications/misc/bambu-studio { + inherit (gst_all_1) gstreamer gst-plugins-base gst-plugins-bad; + + # Needs to be the same version as in the closed-source networking plugin. + curl = curl.override { openssl = openssl_1_1; }; + + glew = glew-egl; + + wxGTK31 = wxGTK31.override { + # https://github.com/supermerill/SuperSlicer/issues/1093 + #withEGL = false; + + withCurl = true; + withPrivateFonts = true; + withWebKit = true; + }; + }; + snapmaker-luban = callPackage ../applications/misc/snapmaker-luban { }; robustirc-bridge = callPackage ../servers/irc/robustirc-bridge { };