From 29879ec9bd80f4f24a391b2222efc20a6ab2139a Mon Sep 17 00:00:00 2001 From: Kristian Lein-Mathisen Date: Tue, 23 Aug 2022 12:45:49 +0200 Subject: [PATCH] gnu: Add solvespace. * gnu/packages/engineering.scm (solvespace): New variable. --- gnu/packages/engineering.scm | 120 +++++++++++++++++++++++++++++++++++ 1 file changed, 120 insertions(+) diff --git a/gnu/packages/engineering.scm b/gnu/packages/engineering.scm index f195179413..68d0e55242 100644 --- a/gnu/packages/engineering.scm +++ b/gnu/packages/engineering.scm @@ -2895,6 +2895,126 @@ (define-public pcb2gcode dynamic calibration of the milling depth.") (license license:gpl3+)))) +;; There is another mimalloc, used in rust-mimalloc. But it's on mimalloc +;; version 1.6.4. TODO: See if it's possible to re-use this package by both. +(define mimalloc-for-solvespace + (let ((commit "f2712f4a8f038a7fb4df2790f4c3b7e3ed9e219b") + (version "2.0.6")) + (package + (name "mimalloc-for-solvespace") + (version (git-version version "1" commit)) + (source (origin + (method git-fetch) + (uri (git-reference + (url "https://github.com/microsoft/mimalloc") + (commit commit))) + (file-name (git-file-name name version)) + (sha256 + (base32 + "05x2dl3zimflfj91ns3vrphmzpdlyyr230p9adqgfds101f16qmv")))) + (build-system cmake-build-system) + (arguments + `(#:build-type "Release")) + (synopsis "Compact general purpose allocator with excellent performance") + (description "@code{mimalloc} is a drop-in replacement for @code{malloc} +and can be used in other programs without code changes, for example, on dynamically +linked ELF-based systems (Linux, BSD, etc.) you can use it as: + +LD_PRELOAD=/usr/lib/libmimalloc.so myprogram + +Initially developed by Daan Leijen for the run-time systems of the Koka and +Lean languages.") + (home-page "https://microsoft.github.io/mimalloc/") + (license license:expat)))) + + +(define-public solvespace + (let ((commit "70bde63cb32a7f049fa56cbdf924e2695fcb2916") + (version "3.1") + ;; libdxfrw has no readme, no version release, no tags. Initial + ;; commit says "libdxfrw-0.6.3 import", but it shares no git history + ;; with "upstream" https://github.com/codelibs/libdxfrw. Both are + ;; difficult to package separately as they don't install properly. + ;; Copying in-tree instead of #:recursive #t to avoid downloading the + ;; other bigger dependencies which aren't needed. + (libdxfrw-sources (origin + (method git-fetch) + (uri (git-reference (url + "https://github.com/solvespace/libdxfrw") + (commit + "0b7b7b709d9299565db603f878214656ef5e9ddf"))) + (sha256 (base32 + "0d2wjq81466m3hb5cffiy99vhx0irwwy47yfxp318k2q4cvd5z2a"))))) + (package + (name "solvespace") + (version (git-version version "1" commit)) + (source (origin + (method git-fetch) + (uri (git-reference + (url "https://github.com/solvespace/solvespace") + (commit commit))) + (file-name (git-file-name name version)) + (sha256 + (base32 + "1hbdln44k00a6vlklv2mq2c9zda3i9d5x0f7ks85w4v6zskhqnra")))) + (build-system cmake-build-system) + (native-inputs (list pkg-config gettext-minimal)) + (arguments + (list #:build-type "Release" + #:phases #~(modify-phases %standard-phases + (add-after 'unpack 'unpack-libdxfrw + (lambda _ + (copy-recursively #$libdxfrw-sources + "extlib/libdxfrw"))) + (add-before 'configure 'embed-git-commit-hash + (lambda _ + ;; `git describe` doesn't work here, so embed + ;; the commit hash directly in CMakeLists.txt as + ;; described instead. + (substitute* "CMakeLists.txt" + (("include\\(GetGitCommitHash\\)") + (string-append "set(GIT_COMMIT_HASH " + #$commit ")"))))) + (add-before 'configure 'use-packaged-mimalloc + (lambda _ + (substitute* "CMakeLists.txt" + (("message\\(STATUS \"Using in-tree mimalloc\"\\)") + "message(STATUS \"Using guix packaged mimalloc\")") + (("add_subdirectory\\(extlib/mimalloc EXCLUDE_FROM_ALL\\)") + "find_package(mimalloc REQUIRED)"))))))) + (inputs (list cairo + eigen + freetype + gtkmm-3 + json-c + libpng + libspnav ;spaceware + mimalloc-for-solvespace + mesa + zlib)) + (synopsis "Parametric 2D/3D CAD") + (description + "SOLVESPACE is a parametric 3D @acronym{CAD, +Computer Aided Design} tool. Applications include: + +@itemize +@item modeling 3d parts — draw with extrudes, revolves, helixes and + Boolean (union / difference / intersection) operations +@item modeling 2d parts — draw the part as a single section, + and export DXF, PDF, SVG; use 3d assembly to verify fit +@item 3d-printed parts — export the STL or other triangle mesh + expected by most 3d printers +@item preparing CAM data — export 2d vector art for a waterjet + machine or laser cutter; or generate STEP or STL, for import into + third-party CAM software for machining +@item mechanism design — use the constraint solver to simulate planar + or spatial linkages, with pin, ball, or slide joints +@item plane and solid geometry — replace hand-solved trigonometry and spreadsheets + with a live dimensioned drawing +@end itemize") + (home-page "https://solvespace.com/") + (license license:gpl3+)))) + (define-public syscall-intercept ;; Upstream provides no tag. Also, last version update is 4 years old. (let ((commit "304404581c57d43478438d175099d20260bae74e") base-commit: 7c47fa25134a2111e596e96198d02644aedae459 -- 2.37.2