diff --git a/pkgs/applications/graphics/pymeshlab/default.nix b/pkgs/applications/graphics/pymeshlab/default.nix index b6d37dfc56490..ec6edb230aff1 100644 --- a/pkgs/applications/graphics/pymeshlab/default.nix +++ b/pkgs/applications/graphics/pymeshlab/default.nix @@ -1,106 +1,103 @@ { - stdenv, lib, + + stdenv, fetchFromGitHub, - libGLU, - qtbase, - qtscript, - qtxmlpatterns, - lib3ds, - bzip2, - muparser, - eigen, - glew, - gmp, - levmar, - qhull, + fetchpatch, + + # nativeBuildInputs cmake, - cgal, - boost, - mpfr, - xercesc, - onetbb, - embree, - vcg, - libigl, - corto, - openctm, - structuresynth, - wrapQtAppsHook, python3Packages, + + # propagatedBuildInputs + meshlab, + + # buildInputs + libsForQt5, + llvmPackages, + glew, + vcg, }: stdenv.mkDerivation (finalAttrs: { pname = "pymeshlab"; - version = "2023.12"; + version = "2025.7"; src = fetchFromGitHub { owner = "cnr-isti-vclab"; repo = "pymeshlab"; - rev = "v${finalAttrs.version}"; - hash = "sha256-IOlRdXoUPOJt67g3HqsLchV5aL+JUEks2y1Sy+wpwsg="; - fetchSubmodules = true; + tag = "v${finalAttrs.version}"; + hash = "sha256-LCR2/AyX9uVX4xhZareUL6YlpUsCFiGDMBB5nFp+H6k="; }; - buildInputs = [ - libGLU - qtbase - qtscript - qtxmlpatterns - lib3ds - bzip2 - muparser - eigen - glew - gmp - levmar - qhull - cgal - boost - mpfr - xercesc - onetbb - embree - vcg - libigl - corto - structuresynth - openctm + patches = [ + # CMake: allow use of system-provided meshlab & pybind11 + # ref. https://github.com/cnr-isti-vclab/PyMeshLab/pull/445 + # merged upstream + (fetchpatch { + url = "https://github.com/cnr-isti-vclab/PyMeshLab/commit/b363caae4362746b3f9e9326fe7b72a2ec7824d9.patch"; + hash = "sha256-euKfOx/T0qdeMx79dpEalzmdWsr4nbDFJfKdksvULBw="; + }) ]; nativeBuildInputs = [ cmake - wrapQtAppsHook python3Packages.pybind11 ]; + nativeCheckInputs = [ + python3Packages.pythonImportsCheckHook + ]; + propagatedBuildInputs = [ + meshlab python3Packages.numpy ]; - preConfigure = '' - substituteInPlace src/meshlab/src/external/libigl.cmake \ - --replace-fail '$'{MESHLAB_EXTERNAL_DOWNLOAD_DIR}/libigl-2.4.0 ${libigl} - substituteInPlace src/meshlab/src/external/nexus.cmake \ - --replace-fail '$'{NEXUS_DIR}/src/corto ${corto.src} - substituteInPlace src/meshlab/src/external/levmar.cmake \ - --replace-fail '$'{LEVMAR_LINK} ${levmar.src} \ - --replace-warn "MD5 ''${LEVMAR_MD5}" "" - substituteInPlace src/meshlab/src/external/ssynth.cmake \ - --replace-fail '$'{SSYNTH_LINK} ${structuresynth.src} \ - --replace-warn "MD5 ''${SSYNTH_MD5}" "" - ''; + buildInputs = [ + glew + libsForQt5.qtbase + vcg + ] + ++ lib.optionals stdenv.cc.isClang [ + llvmPackages.openmp + ]; + + dontWrapQtApps = true; cmakeFlags = [ "-DCMAKE_INSTALL_PREFIX=${placeholder "out"}/${python3Packages.python.sitePackages}/pymeshlab" - "-DVCGDIR=${vcg.src}" ]; + # Get io & filter plugins from meshlab, to avoild render, decorate & edit ones + postInstall = + let + plugins = + if stdenv.hostPlatform.isDarwin then + "Applications/meshlab.app/Contents/PlugIns" + else + "lib/meshlab/plugins"; + pyPlugins = if stdenv.hostPlatform.isDarwin then "PlugIns" else "lib/plugins"; + in + '' + install -D -t $out/${python3Packages.python.sitePackages}/pymeshlab/${pyPlugins} \ + ${meshlab}/${plugins}/libio_* \ + ${meshlab}/${plugins}/libfilter_* + ''; + + postFixup = lib.optionalString stdenv.hostPlatform.isLinux '' + patchelf \ + --add-needed ${meshlab}/lib/meshlab/libmeshlab-common.so \ + $out/${python3Packages.python.sitePackages}/pymeshlab/pmeshlab.*.so + ''; + + pythonImportsCheck = [ "pymeshlab" ]; + meta = { description = "Open source mesh processing python library"; homepage = "https://github.com/cnr-isti-vclab/PyMeshLab"; license = lib.licenses.gpl3Only; maintainers = with lib.maintainers; [ nim65s ]; - platforms = with lib.platforms; linux; + platforms = with lib.platforms; linux ++ darwin; }; }) diff --git a/pkgs/by-name/co/corto/package.nix b/pkgs/by-name/co/corto/package.nix index acf0517e0c10a..5efe16c864c44 100644 --- a/pkgs/by-name/co/corto/package.nix +++ b/pkgs/by-name/co/corto/package.nix @@ -2,26 +2,42 @@ lib, stdenv, fetchFromGitHub, + fetchpatch, cmake, + nix-update-script, }: -stdenv.mkDerivation { +stdenv.mkDerivation (finalAttrs: { pname = "corto"; - version = "0-unstable-2024-04-05"; + version = "2025.07"; src = fetchFromGitHub { owner = "cnr-isti-vclab"; repo = "corto"; - rev = "d880519c490c88a39d12c31a914b6a687a7019c3"; - hash = "sha256-0OUijrf+0ZNv3oYko2r8Kp9zgtg8b9RPL7DXHf15Ryc="; + tag = "v${finalAttrs.version}"; + hash = "sha256-wfIZQdypBTfUZJgPE4DetSt1SUNSyZihmL1Uzapqh1o="; }; + patches = [ + # CMake: exports + # ref. https://github.com/cnr-isti-vclab/corto/pull/47 + # merged upstream + (fetchpatch { + name = "cmake-exports.patch"; + url = "https://github.com/cnr-isti-vclab/corto/commit/169356e97b29587b278822118aef34ed742b6b37.patch"; + hash = "sha256-imJfQ8JEhCcSkkO35N7Z3NtGElCyVxENPMDMWfNqdW0="; + }) + ]; + nativeBuildInputs = [ cmake ]; - meta = with lib; { + updateScript = nix-update-script { }; + + meta = { description = "Mesh compression library, designed for rendering and speed"; homepage = "https://github.com/cnr-isti-vclab/corto"; - license = licenses.mit; - maintainers = with maintainers; [ nim65s ]; + license = lib.licenses.mit; + maintainers = with lib.maintainers; [ nim65s ]; + mainProgram = "corto"; }; -} +}) diff --git a/pkgs/by-name/le/levmar/package.nix b/pkgs/by-name/le/levmar/package.nix index ac7879f740874..a52760b373680 100644 --- a/pkgs/by-name/le/levmar/package.nix +++ b/pkgs/by-name/le/levmar/package.nix @@ -26,7 +26,7 @@ stdenv.mkDerivation (finalAttrs: { installPhase = '' mkdir -p $out/include $out/lib - cp lm.h $out/include + cp levmar.h lm.h $out/include cp liblevmar.a $out/lib ''; @@ -34,7 +34,7 @@ stdenv.mkDerivation (finalAttrs: { description = "ANSI C implementations of Levenberg-Marquardt, usable also from C++"; homepage = "https://www.ics.forth.gr/~lourakis/levmar/"; license = lib.licenses.gpl2Plus; - maintainers = [ ]; + maintainers = [ lib.maintainers.nim65s ]; platforms = lib.platforms.all; }; }) diff --git a/pkgs/by-name/li/lib3mf/package.nix b/pkgs/by-name/li/lib3mf/package.nix index 813138971444b..8038e0f5b0db0 100644 --- a/pkgs/by-name/li/lib3mf/package.nix +++ b/pkgs/by-name/li/lib3mf/package.nix @@ -59,7 +59,7 @@ stdenv.mkDerivation (finalAttrs: { ]; cmakeFlags = [ - "-DCMAKE_INSTALL_INCLUDEDIR=include/lib3mf" + "-DCMAKE_INSTALL_INCLUDEDIR=${placeholder "dev"}/include/lib3mf" "-DUSE_INCLUDED_ZLIB=OFF" "-DUSE_INCLUDED_LIBZIP=OFF" "-DUSE_INCLUDED_GTEST=OFF" @@ -95,9 +95,19 @@ stdenv.mkDerivation (finalAttrs: { # functions are no longer in openssl, remove them from test cleanup function substituteInPlace Tests/CPP_Bindings/Source/UnitTest_EncryptionUtils.cpp \ - --replace-warn "RAND_cleanup();" "" \ - --replace-warn "EVP_cleanup();" "" \ - --replace-warn "CRYPTO_cleanup_all_ex_data();" "" + --replace-fail "RAND_cleanup();" "" \ + --replace-fail "EVP_cleanup();" "" \ + --replace-fail "CRYPTO_cleanup_all_ex_data();" "" + + # Fix CMake export + # ref https://github.com/3MFConsortium/lib3mf/pull/434 + substituteInPlace cmake/lib3mfConfig.cmake \ + --replace-fail "$""{LIB3MF_ROOT_DIR}/include" "$""{LIB3MF_ROOT_DIR}/include/lib3mf" \ + --replace-fail "$""{LIB3MF_ROOT_DIR}/lib" "$out/lib" + + # Use absolute CMAKE_INSTALL_INCLUDEDIR + substituteInPlace lib3mf.pc.in \ + --replace-fail "includedir=$""{prefix}/@CMAKE_INSTALL_INCLUDEDIR@" "includedir=@CMAKE_INSTALL_INCLUDEDIR@" ''; doCheck = true; @@ -109,7 +119,7 @@ stdenv.mkDerivation (finalAttrs: { description = "Reference implementation of the 3D Manufacturing Format file standard"; homepage = "https://3mf.io/"; license = licenses.bsd2; - maintainers = [ ]; + maintainers = with maintainers; [ nim65s ]; platforms = platforms.all; }; }) diff --git a/pkgs/by-name/li/libigl/package.nix b/pkgs/by-name/li/libigl/package.nix index 1fc21b8f63d4d..1ef1a6d733244 100644 --- a/pkgs/by-name/li/libigl/package.nix +++ b/pkgs/by-name/li/libigl/package.nix @@ -20,6 +20,7 @@ stdenvNoCC.mkDerivation (finalAttrs: { installPhase = '' mkdir -p $out/include cp -r include/igl $out/include + rm -rf $out/include/igl/opengl ''; meta = with lib; { diff --git a/pkgs/by-name/me/meshlab-unstable/meshlab.desktop b/pkgs/by-name/me/meshlab-unstable/meshlab.desktop deleted file mode 100644 index aa8de186440d5..0000000000000 --- a/pkgs/by-name/me/meshlab-unstable/meshlab.desktop +++ /dev/null @@ -1,14 +0,0 @@ -[Desktop Entry] -Name=MeshLab -Version=@version@ -Name[en_GB]=MeshLab -GenericName=Mesh processing -GenericName[en_GB]=Mesh processing -Comment=View and process meshes -Type=Application -Exec=@out@/bin/meshlab %U -TryExec=@out@/bin/meshlab -Icon=@out@/share/icons/hicolor/meshlab.png -Terminal=false -MimeType=model/mesh;application/x-3ds;image/x-3ds;model/x-ply;application/sla;model/x-quad-object;model/x-geomview-off;application/x-cyclone-ptx;application/x-vmi;application/x-bre;model/vnd.collada+xml;model/openctm;application/x-expe-binary;application/x-expe-ascii;application/x-xyz;application/x-gts;chemical/x-pdb;application/x-tri;application/x-asc;model/x3d+xml;model/x3d+vrml;model/vrml;model/u3d;model/idtf; -Categories=Graphics;3DGraphics;Viewer;Qt; diff --git a/pkgs/by-name/me/meshlab-unstable/package.nix b/pkgs/by-name/me/meshlab-unstable/package.nix deleted file mode 100644 index 00468e6a08011..0000000000000 --- a/pkgs/by-name/me/meshlab-unstable/package.nix +++ /dev/null @@ -1,159 +0,0 @@ -{ - lib, - stdenv, - fetchFromGitHub, - llvmPackages, - libsForQt5, - libGLU, - lib3ds, - bzip2, - muparser, - eigen, - glew, - gmp, - levmar, - qhull, - cmake, - cgal, - boost, - mpfr, - xercesc, - onetbb, - embree, - libigl, - corto, - openctm, - structuresynth, -}: - -let - tinygltf-src = fetchFromGitHub { - owner = "syoyo"; - repo = "tinygltf"; - tag = "v2.6.3"; - hash = "sha256-IyezvHzgLRyc3z8HdNsQMqDEhP+Ytw0stFNak3C8lTo="; - }; - - # requires submodules to build - lib3mf-src = fetchFromGitHub { - owner = "3MFConsortium"; - repo = "lib3mf"; - tag = "v2.3.2"; - fetchSubmodules = true; - hash = "sha256-pKjnN9H6/A2zPvzpFed65J+mnNwG/dkSE2/pW7IlN58="; - }; -in -stdenv.mkDerivation { - pname = "meshlab-unstable"; - version = "2023.12-unstable-2025-02-21"; - - src = fetchFromGitHub { - owner = "cnr-isti-vclab"; - repo = "meshlab"; - # note that this is in branch devel - rev = "72142583980b6dbfc5b85c6cca226a72f48497a9"; - hash = "sha256-ev6b8sgJsjvD8KMBbC6kbrVvTxTxpqsXu/sK1Ih6+OA="; - # needed for an updated version of vcg in their submodule - fetchSubmodules = true; - }; - - postPatch = lib.optionalString stdenv.hostPlatform.isDarwin '' - substituteInPlace src/meshlab/CMakeLists.txt \ - --replace-fail "set_additional_settings_info_plist(" "# set_additional_settings_info_plist(" \ - --replace-fail " TARGET meshlab" "# TARGET meshlab" \ - --replace-fail " FILE \''${MESHLAB_BUILD_DISTRIB_DIR}/meshlab.app/Contents/Info.plist)" \ - "# FILE \''${MESHLAB_BUILD_DISTRIB_DIR}/meshlab.app/Contents/Info.plist)" - ''; - - buildInputs = [ - libGLU - libsForQt5.qtbase - libsForQt5.qtscript - libsForQt5.qtxmlpatterns - lib3ds - bzip2 - muparser - eigen - glew - gmp - levmar - qhull - cgal - boost - mpfr - xercesc - onetbb - embree - libigl - corto - openctm - structuresynth - ] - ++ lib.optionals stdenv.cc.isClang [ - llvmPackages.openmp - ]; - - nativeBuildInputs = [ - cmake - libsForQt5.wrapQtAppsHook - ]; - - preConfigure = '' - mkdir src/external/downloads - cp -r --no-preserve=mode,ownership ${lib3mf-src} src/external/downloads/lib3mf-2.3.2 - - substituteAll ${./meshlab.desktop} resources/linux/meshlab.desktop - substituteInPlace src/external/tinygltf.cmake \ - --replace-fail '$'{MESHLAB_EXTERNAL_DOWNLOAD_DIR}/tinygltf-2.6.3 ${tinygltf-src} - substituteInPlace src/external/libigl.cmake \ - --replace-fail '$'{MESHLAB_EXTERNAL_DOWNLOAD_DIR}/libigl-'$'{LIBIGL_VER} ${libigl} - substituteInPlace src/external/nexus.cmake \ - --replace-fail '$'{NEXUS_DIR}/src/corto ${corto.src} - substituteInPlace src/external/levmar.cmake \ - --replace-fail '$'{LEVMAR_LINK} ${levmar.src} \ - --replace-warn "MD5 ''${LEVMAR_MD5}" "" - substituteInPlace src/external/ssynth.cmake \ - --replace-fail '$'{SSYNTH_LINK} ${structuresynth.src} \ - --replace-warn "MD5 ''${SSYNTH_MD5}" "" - substituteInPlace src/common_gui/CMakeLists.txt \ - --replace-warn "MESHLAB_LIB_INSTALL_DIR" "CMAKE_INSTALL_LIBDIR" - ''; - - postInstall = lib.optionalString stdenv.hostPlatform.isDarwin '' - mkdir -p $out/{Applications,bin,lib} - mv $out/meshlab.app $out/Applications/ - ln $out/Applications/meshlab.app/Contents/Frameworks/* $out/lib/ - makeWrapper $out/{Applications/meshlab.app/Contents/MacOS,bin}/meshlab - ''; - - postFixup = - lib.optionalString stdenv.hostPlatform.isLinux '' - patchelf --add-needed $out/lib/meshlab/libmeshlab-common.so $out/bin/.meshlab-wrapped - patchelf --add-needed $out/lib/meshlab/lib3mf.so $out/lib/meshlab/plugins/libio_3mf.so - '' - + lib.optionalString stdenv.hostPlatform.isDarwin '' - wrapQtApp "$out/Applications/meshlab.app/Contents/MacOS/meshlab" - install_name_tool -change libopenctm.dylib "${lib.getOutput "out" openctm}/lib/libopenctm.dylib" \ - "$out/Applications/meshlab.app/Contents/PlugIns/libio_ctm.so" - ''; - - # The hook will wrap all the plugin binaries, make they are not a - # valid plugin. So we have to wrap the main app manually. - # See: https://github.com/NixOS/nixpkgs/pull/396295#issuecomment-3137779781 - dontWrapQtApps = stdenv.hostPlatform.isDarwin; - - # display a black screen on wayland, so force XWayland for now. - # Might be fixed when upstream will be ready for Qt6. - qtWrapperArgs = lib.optionals stdenv.hostPlatform.isLinux [ - "--set QT_QPA_PLATFORM xcb" - ]; - - meta = { - description = "System for processing and editing 3D triangular meshes (unstable)"; - mainProgram = "meshlab"; - homepage = "https://www.meshlab.net/"; - license = lib.licenses.gpl3Only; - maintainers = with lib.maintainers; [ pca006132 ]; - platforms = with lib.platforms; linux ++ darwin; - }; -} diff --git a/pkgs/by-name/me/meshlab/1617_cmake-use-system-dependencies-install-exports.patch b/pkgs/by-name/me/meshlab/1617_cmake-use-system-dependencies-install-exports.patch new file mode 100644 index 0000000000000..83e6a21ea509e --- /dev/null +++ b/pkgs/by-name/me/meshlab/1617_cmake-use-system-dependencies-install-exports.patch @@ -0,0 +1,279 @@ +From 1a617220a286c23ecac1ad7bd6aca0d2c68bd1f3 Mon Sep 17 00:00:00 2001 +From: Guilhem Saurel +Date: Fri, 19 Sep 2025 08:43:18 +0200 +Subject: [PATCH 1/6] CMake: allow system vcglib + +--- + src/CMakeLists.txt | 7 ++++++- + 1 file changed, 6 insertions(+), 1 deletion(-) + +diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt +index 0398e8566..839a515be 100644 +--- a/src/CMakeLists.txt ++++ b/src/CMakeLists.txt +@@ -75,7 +75,12 @@ endif() + ### Enter subdirectories + + # VCGLib -- required +-if (VCGDIR) # VCGDIR exists - using custom user vcglib path ++find_package(vcglib CONFIG) ++if(TARGET vcglib::vcglib) ++ message(STATUS "- VCGLib - using system provided library") ++ add_library(vcglib ALIAS vcglib::vcglib) ++ get_target_property(VCGDIR vcglib::vcglib INTERFACE_INCLUDE_DIRECTORIES) ++elseif (VCGDIR) # VCGDIR exists - using custom user vcglib path + if(EXISTS ${VCGDIR}) + add_subdirectory(${VCGDIR} {CMAKE_CURRENT_BINARY_DIR}/vcglib) + message(STATUS "- VCGLib - using custom VCGDIR path library") + +From 73debae9b9ca14554c25fa58480969bc7c3f61d1 Mon Sep 17 00:00:00 2001 +From: Guilhem Saurel +Date: Tue, 16 Sep 2025 12:44:12 +0200 +Subject: [PATCH 2/6] CMake: MESHLAB_ALLOW_SYSTEM_LEVMAR + +--- + src/external/levmar.cmake | 19 ++++++++++++++++++- + 1 file changed, 18 insertions(+), 1 deletion(-) + +diff --git a/src/external/levmar.cmake b/src/external/levmar.cmake +index cc639f09e..882b631db 100644 +--- a/src/external/levmar.cmake ++++ b/src/external/levmar.cmake +@@ -3,8 +3,25 @@ + # SPDX-License-Identifier: BSL-1.0 + + option(MESHLAB_ALLOW_DOWNLOAD_SOURCE_LEVMAR "Allow download and use of levmar source" ON) ++option(MESHLAB_ALLOW_SYSTEM_LEVMAR "Allow use of system-provided levmar" ON) + +-if(MESHLAB_ALLOW_DOWNLOAD_SOURCE_LEVMAR) ++find_path(levmar_INCLUDE_DIR NAMES levmar.h PATHS ${levmar_PREFIX}) ++find_library(levmar_LIBRARY NAMES levmar PATHS ${levmar_PREFIX}) ++include(FindPackageHandleStandardArgs) ++find_package_handle_standard_args( ++ levmar ++ DEFAULT_MSG ++ levmar_LIBRARY ++ levmar_INCLUDE_DIR ++) ++mark_as_advanced(levmar_INCLUDE_DIR levmar_LIBRARY) ++ ++if(MESHLAB_ALLOW_SYSTEM_LEVMAR AND levmar_FOUND) ++ message(STATUS "- levmar - using system-provided library") ++ add_library(external-levmar INTERFACE) ++ target_link_libraries(external-levmar INTERFACE ${levmar_LIBRARY}) ++ target_include_directories(external-levmar INTERFACE ${levmar_INCLUDE_DIR}) ++elseif(MESHLAB_ALLOW_DOWNLOAD_SOURCE_LEVMAR) + set(LEVMAR_VERSION "2.6.1") + + set(LEVMAR_DIR "${MESHLAB_EXTERNAL_DOWNLOAD_DIR}/levmar-${LEVMAR_VERSION}") + +From 161d5dabad4cfdc3ec08d9e5dd2ee6c94b057c5c Mon Sep 17 00:00:00 2001 +From: Guilhem Saurel +Date: Tue, 16 Sep 2025 15:15:11 +0200 +Subject: [PATCH 3/6] CMake: MESHLAB_ALLOW_SYSTEM_LIB3MF + +--- + src/external/lib3mf.cmake | 9 ++++++++- + 1 file changed, 8 insertions(+), 1 deletion(-) + +diff --git a/src/external/lib3mf.cmake b/src/external/lib3mf.cmake +index 1cd1b5dfa..f64a63aa5 100644 +--- a/src/external/lib3mf.cmake ++++ b/src/external/lib3mf.cmake +@@ -22,8 +22,15 @@ + ############################################################################# + + option(MESHLAB_ALLOW_DOWNLOAD_SOURCE_LIB3MF "Allow download and use of lib3MF source" ON) ++option(MESHLAB_ALLOW_SYSTEM_LIB3MF "Allow use of system-provided lib3MF" ON) + +-if(MESHLAB_ALLOW_DOWNLOAD_SOURCE_LIB3MF) ++find_package(lib3mf) ++ ++if(MESHLAB_ALLOW_SYSTEM_LIB3MF AND TARGET lib3mf::lib3mf) ++ message(STATUS "- Lib3MF - using system-provided library") ++ add_library(external-lib3mf INTERFACE) ++ target_link_libraries(external-lib3mf INTERFACE lib3mf::lib3mf) ++elseif(MESHLAB_ALLOW_DOWNLOAD_SOURCE_LIB3MF) + set(LIB3MF_VERSION "2.4.1") + + set(LIB3MF_DIR ${MESHLAB_EXTERNAL_DOWNLOAD_DIR}/lib3mf-${LIB3MF_VERSION}) + +From c6662d486c1f8e5c9c89389abd630d8218b0fcb9 Mon Sep 17 00:00:00 2001 +From: Guilhem Saurel +Date: Tue, 16 Sep 2025 15:42:59 +0200 +Subject: [PATCH 4/6] CMake: MESHLAB_ALLOW_SYSTEM_LIBIGL + +--- + src/external/libigl.cmake | 9 ++++++++- + 1 file changed, 8 insertions(+), 1 deletion(-) + +diff --git a/src/external/libigl.cmake b/src/external/libigl.cmake +index 3666f375d..8f84fea4f 100644 +--- a/src/external/libigl.cmake ++++ b/src/external/libigl.cmake +@@ -3,10 +3,17 @@ + # SPDX-License-Identifier: BSL-1.0 + + option(MESHLAB_ALLOW_DOWNLOAD_SOURCE_LIBIGL "Allow download and use of LibIGL source" ON) ++option(MESHLAB_ALLOW_SYSTEM_LIBIGL "Allow use of system-provided LibIGL" ON) + + set(LIBIGL_VER 2.4.0) + +-if(MESHLAB_ALLOW_DOWNLOAD_SOURCE_LIBIGL) ++find_path(libigl_INCLUDE_DIR NAMES igl_inline.h PATH_SUFFIXES igl PATHS ${libigl_PREFIX}) ++ ++if(MESHLAB_ALLOW_SYSTEM_LIBIGL AND libigl_INCLUDE_DIR) ++ message(STATUS "- LibIGL - using system-provided library") ++ add_library(external-libigl INTERFACE) ++ target_include_directories(external-libigl INTERFACE ${libigl_INCLUDE_DIR}) ++elseif(MESHLAB_ALLOW_DOWNLOAD_SOURCE_LIBIGL) + set(LIBIGL_DIR "${MESHLAB_EXTERNAL_DOWNLOAD_DIR}/libigl-${LIBIGL_VER}") + set(LIBIGL_CHECK "${LIBIGL_DIR}/include/igl/igl_inline.h") + + +From a26427e32af672d2554d662376f3f258c64941ca Mon Sep 17 00:00:00 2001 +From: Guilhem Saurel +Date: Fri, 19 Sep 2025 08:58:16 +0200 +Subject: [PATCH 5/6] CMake: MESHLAB_ALLOW_SYSTEM_NEXUS + +--- + src/external/nexus.cmake | 9 ++++++++- + 1 file changed, 8 insertions(+), 1 deletion(-) + +diff --git a/src/external/nexus.cmake b/src/external/nexus.cmake +index 9fc92f714..1139d11e7 100644 +--- a/src/external/nexus.cmake ++++ b/src/external/nexus.cmake +@@ -3,11 +3,18 @@ + # SPDX-License-Identifier: BSL-1.0 + + option(MESHLAB_ALLOW_DOWNLOAD_SOURCE_NEXUS "Allow download and use of nexus source" ON) ++option(MESHLAB_ALLOW_SYSTEM_NEXUS "Allow use of system-provided nexus and corto" ON) + + set(CORTO_VER 2025.07) + set(NEXUS_VER 2025.05) + +-if(MESHLAB_ALLOW_DOWNLOAD_SOURCE_NEXUS) ++find_package(nexus CONFIG) ++ ++if(MESHLAB_ALLOW_SYSTEM_NEXUS AND TARGET nexus::nexus) ++ message(STATUS "- nexus - using system-provided library") ++ add_library(external-nexus INTERFACE) ++ target_link_libraries(external-nexus INTERFACE nexus::nexus) ++elseif(MESHLAB_ALLOW_DOWNLOAD_SOURCE_NEXUS) + set(NEXUS_DIR "${MESHLAB_EXTERNAL_DOWNLOAD_DIR}/nexus-${NEXUS_VER}") + set(NEXUS_CHECK "${NEXUS_DIR}/CMakeLists.txt") + set(CORTO_DIR "${NEXUS_DIR}/src/corto") + +From 32be737316181bd84d8beac7cb6b74379965d2fe Mon Sep 17 00:00:00 2001 +From: Guilhem Saurel +Date: Fri, 19 Sep 2025 11:26:36 +0200 +Subject: [PATCH 6/6] CMake: install exports + +--- + src/CMakeLists.txt | 21 +++++++++++++++++++++ + src/Config.cmake.in | 9 +++++++++ + src/common/CMakeLists.txt | 18 ++++++++++++++---- + src/meshlabplugins/io_base/CMakeLists.txt | 2 +- + 4 files changed, 45 insertions(+), 5 deletions(-) + create mode 100644 src/Config.cmake.in + +diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt +index 839a515be..c490ea960 100644 +--- a/src/CMakeLists.txt ++++ b/src/CMakeLists.txt +@@ -229,6 +229,27 @@ endforeach() + set(COPIED_FILES) + + if (NOT MESHLAB_BUILD_ONLY_LIBRARIES) ++ # headers ++ install(DIRECTORY common DESTINATION include FILES_MATCHING PATTERN "*.h") ++ # CMake exports ++ install(EXPORT meshlabTargets ++ DESTINATION lib/cmake/meshlab ++ NAMESPACE meshlab:: ++ FILE meshlabTargets.cmake ++ ) ++ include(CMakePackageConfigHelpers) ++ # generate the config file that includes the exports ++ configure_package_config_file(${CMAKE_CURRENT_SOURCE_DIR}/Config.cmake.in ++ "${CMAKE_CURRENT_BINARY_DIR}/meshlabConfig.cmake" ++ INSTALL_DESTINATION lib/cmake/vcglib ++ NO_SET_AND_CHECK_MACRO ++ NO_CHECK_REQUIRED_COMPONENTS_MACRO ++ ) ++ install(FILES ++ "${CMAKE_CURRENT_BINARY_DIR}/meshlabConfig.cmake" ++ DESTINATION lib/cmake/meshlab ++ ) ++ + # shaders + set(SHADER_BASE_DIR "${MESHLAB_RESOURCES_DIR}/shaders") + file( +diff --git a/src/Config.cmake.in b/src/Config.cmake.in +new file mode 100644 +index 000000000..63ba0ce97 +--- /dev/null ++++ b/src/Config.cmake.in +@@ -0,0 +1,9 @@ ++@PACKAGE_INIT@ ++ ++include(CMakeFindDependencyMacro) ++find_dependency(GLEW) ++find_dependency(OpenGL) ++find_dependency(Qt5 COMPONENTS OpenGL Xml Network) ++find_dependency(vcglib) ++ ++include ( "${CMAKE_CURRENT_LIST_DIR}/meshlabTargets.cmake" ) +diff --git a/src/common/CMakeLists.txt b/src/common/CMakeLists.txt +index 0e640fdd4..c74bd579b 100644 +--- a/src/common/CMakeLists.txt ++++ b/src/common/CMakeLists.txt +@@ -198,7 +198,8 @@ endif() + + target_include_directories(meshlab-common + PUBLIC +- ${CMAKE_CURRENT_SOURCE_DIR}/..) ++ $ ++ $) + + target_link_libraries( + meshlab-common +@@ -208,10 +209,19 @@ target_link_libraries( + Qt5::Widgets + Qt5::Xml + Qt5::Network +- vcglib +- external-glew ++ PRIVATE + external-easyexif + ) ++if(TARGET vcglib::vcglib) ++ target_link_libraries(meshlab-common PUBLIC vcglib::vcglib) ++else() ++ target_link_libraries(meshlab-common PUBLIC vcglib) ++endif() ++if(TARGET GLEW::GLEW) ++ target_link_libraries(meshlab-common PUBLIC GLEW::GLEW) ++else() ++ target_link_libraries(meshlab-common PUBLIC external-glew) ++endif() + + set_property(TARGET meshlab-common PROPERTY FOLDER Core) + +@@ -234,4 +244,4 @@ endif() + set_target_properties(meshlab-common PROPERTIES + INSTALL_RPATH "$ORIGIN") + +-install(TARGETS meshlab-common DESTINATION ${MESHLAB_LIB_INSTALL_DIR}) ++install(TARGETS meshlab-common EXPORT meshlabTargets DESTINATION ${MESHLAB_LIB_INSTALL_DIR}) +diff --git a/src/meshlabplugins/io_base/CMakeLists.txt b/src/meshlabplugins/io_base/CMakeLists.txt +index 7a3137e63..64504d56d 100644 +--- a/src/meshlabplugins/io_base/CMakeLists.txt ++++ b/src/meshlabplugins/io_base/CMakeLists.txt +@@ -27,4 +27,4 @@ set(SOURCES + + add_meshlab_plugin(io_base ${SOURCES} ${HEADERS}) + +-target_link_libraries(io_base PRIVATE OpenGL::GLU) ++target_link_libraries(io_base PRIVATE OpenGL::GLU external-easyexif) diff --git a/pkgs/by-name/me/meshlab/no-plist.patch b/pkgs/by-name/me/meshlab/no-plist.patch new file mode 100644 index 0000000000000..7c8d753190a8e --- /dev/null +++ b/pkgs/by-name/me/meshlab/no-plist.patch @@ -0,0 +1,12 @@ +--- src/meshlab/CMakeLists.txt.orig 2025-10-05 23:04:12.786192073 +0200 ++++ src/meshlab/CMakeLists.txt 2025-10-05 23:04:16.379256637 +0200 +@@ -92,9 +92,6 @@ + MACOSX_BUNDLE_COPYRIGHT "Copyright VCG-ISTI-CNR © 2005-2021. All rights reserved." + ) + +- set_additional_settings_info_plist( +- TARGET meshlab +- FILE ${MESHLAB_BUILD_DISTRIB_DIR}/meshlab.app/Contents/Info.plist) + endif() + + install( diff --git a/pkgs/by-name/me/meshlab/package.nix b/pkgs/by-name/me/meshlab/package.nix index dedae59c8c345..9e431b24d75de 100644 --- a/pkgs/by-name/me/meshlab/package.nix +++ b/pkgs/by-name/me/meshlab/package.nix @@ -6,6 +6,7 @@ libsForQt5, libGLU, lib3ds, + lib3mf, bzip2, muparser, eigen, @@ -25,16 +26,10 @@ corto, openctm, structuresynth, + vclab-nexus, }: let - tinygltf-src = fetchFromGitHub { - owner = "syoyo"; - repo = "tinygltf"; - tag = "v2.6.3"; - hash = "sha256-IyezvHzgLRyc3z8HdNsQMqDEhP+Ytw0stFNak3C8lTo="; - }; - downloads = [ "DLL_EMBREE" "SOURCE_BOOST" @@ -57,19 +52,18 @@ let in stdenv.mkDerivation (finalAttrs: { pname = "meshlab"; - version = "2023.12"; + version = "2025.07"; src = fetchFromGitHub { owner = "cnr-isti-vclab"; repo = "meshlab"; tag = "MeshLab-${finalAttrs.version}"; - hash = "sha256-AdUAWS741RQclYaSE3Tz1/I0YSinNAnfSaqef+Tib8Y="; + hash = "sha256-6BozYzPCbBZ+btL4FCdzKlwKqTsvFWDfOXizzJSYo9s="; }; nativeBuildInputs = [ cmake libsForQt5.wrapQtAppsHook - vcg # templated library ]; buildInputs = [ @@ -78,6 +72,7 @@ stdenv.mkDerivation (finalAttrs: { libsForQt5.qtscript libsForQt5.qtxmlpatterns lib3ds + lib3mf bzip2 muparser eigen @@ -91,52 +86,41 @@ stdenv.mkDerivation (finalAttrs: { xercesc onetbb embree + vcg libigl corto openctm structuresynth + vclab-nexus ] ++ lib.optionals stdenv.cc.isClang [ llvmPackages.openmp ]; - postPatch = '' - substituteInPlace src/external/tinygltf.cmake \ - --replace-fail '$'{MESHLAB_EXTERNAL_DOWNLOAD_DIR}/tinygltf-2.6.3 ${tinygltf-src} - substituteInPlace src/external/libigl.cmake \ - --replace-fail '$'{MESHLAB_EXTERNAL_DOWNLOAD_DIR}/libigl-2.4.0 ${libigl} - substituteInPlace src/external/nexus.cmake \ - --replace-fail '$'{NEXUS_DIR}/src/corto ${corto.src} - substituteInPlace src/external/levmar.cmake \ - --replace-fail '$'{LEVMAR_LINK} ${levmar.src} \ - --replace-warn "MD5 ''${LEVMAR_MD5}" "" - substituteInPlace src/external/ssynth.cmake \ - --replace-fail '$'{SSYNTH_LINK} ${structuresynth.src} \ - --replace-warn "MD5 ''${SSYNTH_MD5}" "" - substituteInPlace src/common_gui/CMakeLists.txt \ - --replace-warn "MESHLAB_LIB_INSTALL_DIR" "CMAKE_INSTALL_LIBDIR" - '' - + lib.optionalString stdenv.hostPlatform.isLinux '' + patches = [ + # CMake: use system dependencies, install exports + # ref. https://github.com/cnr-isti-vclab/meshlab/pull/1617 + # merged upstream + ./1617_cmake-use-system-dependencies-install-exports.patch + ] + ++ lib.optionals stdenv.hostPlatform.isDarwin [ + ./no-plist.patch + ]; + + postPatch = lib.optionalString stdenv.hostPlatform.isLinux '' substituteAll ${./meshlab.desktop} resources/linux/meshlab.desktop - '' - + lib.optionalString stdenv.hostPlatform.isDarwin '' - substituteInPlace src/meshlab/CMakeLists.txt \ - --replace-fail "set_additional_settings_info_plist(" "# set_additional_settings_info_plist(" \ - --replace-fail " TARGET meshlab" "# TARGET meshlab" \ - --replace-fail " FILE \''${MESHLAB_BUILD_DISTRIB_DIR}/meshlab.app/Contents/Info.plist)" \ - "# FILE \''${MESHLAB_BUILD_DISTRIB_DIR}/meshlab.app/Contents/Info.plist)" ''; - cmakeFlags = [ - "-DVCGDIR=${vcg.src}" - ] - ++ cmakeFlagsDisallowDownload; + cmakeFlags = cmakeFlagsDisallowDownload; postInstall = lib.optionalString stdenv.hostPlatform.isDarwin '' mkdir -p $out/{Applications,bin,lib} mv $out/meshlab.app $out/Applications/ - ln $out/Applications/meshlab.app/Contents/Frameworks/libmeshlab-common.dylib $out/lib/ + ln $out/Applications/meshlab.app/Contents/Frameworks/libmeshlab-common{,-gui}.dylib $out/lib/ makeWrapper $out/{Applications/meshlab.app/Contents/MacOS,bin}/meshlab + substituteInPlace $out/lib/cmake/meshlab/meshlabTargets-release.cmake --replace-fail \ + "{_IMPORT_PREFIX}/meshlab.app" \ + "{_IMPORT_PREFIX}/Applications/meshlab.app" ''; # The hook will wrap all the plugin binaries, make they are not a @@ -150,7 +134,10 @@ stdenv.mkDerivation (finalAttrs: { postFixup = lib.optionalString stdenv.hostPlatform.isLinux '' - patchelf --add-needed $out/lib/meshlab/libmeshlab-common.so $out/bin/.meshlab-wrapped + patchelf \ + --add-needed $out/lib/meshlab/libmeshlab-common.so \ + --add-needed $out/lib/meshlab/libmeshlab-common-gui.so \ + $out/bin/.meshlab-wrapped '' + lib.optionalString stdenv.hostPlatform.isDarwin '' wrapQtApp "$out/Applications/meshlab.app/Contents/MacOS/meshlab" @@ -163,7 +150,10 @@ stdenv.mkDerivation (finalAttrs: { mainProgram = "meshlab"; homepage = "https://www.meshlab.net/"; license = lib.licenses.gpl3Only; - maintainers = with lib.maintainers; [ yzx9 ]; + maintainers = with lib.maintainers; [ + nim65s + yzx9 + ]; platforms = with lib.platforms; linux ++ darwin; }; }) diff --git a/pkgs/by-name/op/openscad-unstable/package.nix b/pkgs/by-name/op/openscad-unstable/package.nix index b5d73abc4b0ec..7f64438b80781 100644 --- a/pkgs/by-name/op/openscad-unstable/package.nix +++ b/pkgs/by-name/op/openscad-unstable/package.nix @@ -57,6 +57,13 @@ clangStdenv.mkDerivation rec { patches = [ ./test.diff ]; + # fix use of our lib3mf cmake export instead of finder + postPatch = '' + substituteInPlace CMakeLists.txt --replace-fail \ + "Lib3MF" \ + "lib3mf" + ''; + nativeBuildInputs = [ (python3.withPackages ( ps: with ps; [ diff --git a/pkgs/by-name/op/openscad/package.nix b/pkgs/by-name/op/openscad/package.nix index a4256d0350612..e914d3043f836 100644 --- a/pkgs/by-name/op/openscad/package.nix +++ b/pkgs/by-name/op/openscad/package.nix @@ -84,6 +84,15 @@ stdenv.mkDerivation rec { sed -i 's/& / \&/g;s/\*\*/\0 /g;s/^\(.\) /\1\t/' "$out" ''; }) + ] + ++ lib.optionals stdenv.hostPlatform.isDarwin [ + # ref. https://github.com/openscad/openscad/pull/4013 merged upstream + (fetchpatch { + name = "mem_fun-to-mem_fn.patch"; + url = "https://github.com/openscad/openscad/commit/c9a1abbedfbf6dda9a23d3ad5844d11e5278a928.patch"; + hash = "sha256-Man9ledRREb7U+2UOQ0VkpiwbYQjyVOY21YaRFObZc8="; + }) + ]; postPatch = '' @@ -92,6 +101,11 @@ stdenv.mkDerivation rec { substituteInPlace src/openscad.cc \ --replace-fail 'boost::join' 'boost::algorithm::join' + '' + # ref. https://github.com/openscad/openscad/pull/4253 merged upstream but does not apply + + lib.optionalString stdenv.hostPlatform.isDarwin '' + substituteInPlace src/FreetypeRenderer.h \ + --replace-fail ": public std::unary_function" "" ''; nativeBuildInputs = [ diff --git a/pkgs/by-name/ti/tinygltf/package.nix b/pkgs/by-name/ti/tinygltf/package.nix new file mode 100644 index 0000000000000..c9bf9ad7ec824 --- /dev/null +++ b/pkgs/by-name/ti/tinygltf/package.nix @@ -0,0 +1,49 @@ +{ + lib, + + stdenv, + fetchFromGitHub, + nix-update-script, + + # nativeBuildInputs + cmake, + + # propagatedBuildInputs + nlohmann_json, + stb, +}: + +stdenv.mkDerivation (finalAttrs: { + pname = "tinygltf"; + version = "2.9.6"; + + src = fetchFromGitHub { + owner = "syoyo"; + repo = "tinygltf"; + tag = "v${finalAttrs.version}"; + hash = "sha256-3dBxfdXeTbzeQAXaBXFaflLgXYeuOfESdq6V3+0iCXY="; + }; + + nativeBuildInputs = [ + cmake + ]; + + propagatedBuildInputs = [ + nlohmann_json + stb + ]; + + cmakeFlags = [ + (lib.cmakeBool "TINYGLTF_INSTALL_VENDOR" false) + ]; + + passthru.updateScript = nix-update-script { }; + + meta = { + description = "Header only C++11 tiny glTF 2.0 library"; + homepage = "https://github.com/syoyo/tinygltf"; + license = lib.licenses.mit; + maintainers = with lib.maintainers; [ nim65s ]; + platforms = lib.platforms.unix; + }; +}) diff --git a/pkgs/by-name/vc/vcg/package.nix b/pkgs/by-name/vc/vcg/package.nix index 487b4510263ea..8db97500a18fe 100644 --- a/pkgs/by-name/vc/vcg/package.nix +++ b/pkgs/by-name/vc/vcg/package.nix @@ -1,34 +1,57 @@ { lib, + stdenv, fetchFromGitHub, + fetchpatch, + + # nativeBuildInputs + cmake, + + # propagatedBuildInputs eigen, }: -stdenv.mkDerivation rec { +stdenv.mkDerivation (finalAttrs: { pname = "vcg"; version = "2025.07"; src = fetchFromGitHub { owner = "cnr-isti-vclab"; repo = "vcglib"; - rev = version; - sha256 = "sha256-OZnqFnHGXC9fS7JCLTiHNCeA//JBAZGLB5SP/rGzaA8="; + tag = finalAttrs.version; + hash = "sha256-OZnqFnHGXC9fS7JCLTiHNCeA//JBAZGLB5SP/rGzaA8="; }; - propagatedBuildInputs = [ eigen ]; + patches = [ + # CMake: install lib and exports + # ref. https://github.com/cnr-isti-vclab/vcglib/pull/248 + # merged upstream + (fetchpatch { + name = "cmake-install-lib-and-exports.patch"; + url = "https://github.com/cnr-isti-vclab/vcglib/commit/4a8dd8d6e54890aee76917d27aabfa7031cbc68d.patch"; + hash = "sha256-b3qsmLu+4VSs943VS3C4gdG/PDR2mhr9/dDTmkep8zo="; + }) + ]; + + nativeBuildInputs = [ + cmake + ]; + + propagatedBuildInputs = [ + eigen + ]; - installPhase = '' - mkdir -p $out/include - cp -r vcg wrap $out/include - find $out -name \*.h -exec sed -i 's,