Subject: Re: Solvespace package re-done

From: Liliana Marie Prikler <[email-masked]>
Date: Thu, 01 Sep 2022 19:18:37 +0200

Am Mittwoch, dem 31.08.2022 um 20:51 +0200 schrieb Kristian Lein-
Mathisen:

> ;; 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
Given that this is the upstream mimalloc, there's no reason to make
this private or only for solvespace.  Note that you should separate
this into one patch per package.

> +  (let ((commit "f2712f4a8f038a7fb4df2790f4c3b7e3ed9e219b")
> +        (version "2.0.6"))
This is the release commit, no reason to use git-version etc. here
> +    (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)))
You can use (string-append "v" version) to check out the tag.
> +                (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")
Don't bloat the synopsis with marketing terms; "General purpose
allocator" should probably suffice.
> +      (description "@code{mimalloc} is a drop-in replacement for
> @code{malloc}
.")

The rest appears somewhat superfluous :)
> +      (home-page "https://microsoft.github.io/mimalloc/")
> +      (license license:expat))))

> +(define-public solvespace
> +  (let ((commit "70bde63cb32a7f049fa56cbdf924e2695fcb2916")
> +        (version "3.1")
I haven't checked, but is this the release commit?  If so, no need for
all this verbosity.

> +        ;; 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")))))
This should be its own variable.  Unlike with mimalloc, since it's just
an origin, you can use the same patch as solvespace.
> +    (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
`guix style' is not yet perfect when it comes to trade-offs between
horizontal and vertical space.  Prefer 
  (list 
   #:build-type "Release"
   #:phases
   #~(modify-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+))))
> +

Cheers