GNU bug report logs - #63422
[PATCH 0/3] gnu: libfive: Fixes

Previous Next

Package: guix-patches;

Reported by: Morgan.J.Smith <at> outlook.com

Date: Wed, 10 May 2023 17:23:01 UTC

Severity: normal

Tags: patch

Done: Ludovic Courtès <ludo <at> gnu.org>

Bug is archived. No further changes may be made.

To add a comment to this bug, you must first unarchive it, by sending
a message to control AT debbugs.gnu.org, with unarchive 63422 in the body.
You can then email your comments to 63422 AT debbugs.gnu.org in the normal way.

Toggle the display of automated, internal messages from the tracker.

View this report as an mbox folder, status mbox, maintainer mbox


Report forwarded to guix-patches <at> gnu.org:
bug#63422; Package guix-patches. (Wed, 10 May 2023 17:23:01 GMT) Full text and rfc822 format available.

Acknowledgement sent to Morgan.J.Smith <at> outlook.com:
New bug report received and forwarded. Copy sent to guix-patches <at> gnu.org. (Wed, 10 May 2023 17:23:02 GMT) Full text and rfc822 format available.

Message #5 received at submit <at> debbugs.gnu.org (full text, mbox):

From: Morgan.J.Smith <at> outlook.com
To: guix-patches <at> gnu.org
Subject: [PATCH 0/3] gnu: libfive: Fixes
Date: Wed, 10 May 2023 13:17:26 -0400
[PATCH 1/3] gnu: libfive: Fix install and wrap Studio.
[PATCH 2/3] gnu: libfive: Add Python bindings.
[PATCH 3/3] gnu: libfive: Generate bindings instead of using





Information forwarded to guix-patches <at> gnu.org:
bug#63422; Package guix-patches. (Wed, 10 May 2023 17:48:02 GMT) Full text and rfc822 format available.

Message #8 received at 63422 <at> debbugs.gnu.org (full text, mbox):

From: Morgan Smith <Morgan.J.Smith <at> outlook.com>
To: 63422 <at> debbugs.gnu.org
Subject: [PATCH 1/3] gnu: libfive: Fix install and wrap Studio.
Date: Wed, 10 May 2023 13:46:16 -0400
The old install phase didn't handle nested directories (which there are) and
the cmake files didn't seem to install the go files in a way that guile would
use so I just used the guile build system instead.

Also Studio works much better when it know where the libraries are.

* gnu/packages/engineering.scm (libfive)
[imported-modules]: Add (guix build guile-build-system).
[modules]: Add (guix build guile-build-system).
[configure-flags]: Remove.
[phases]: Remove phases 'fix-autocompilation and 'install-scm-files.  Add
phase 'do-not-build-guile-bindings and add phase 'guile-build which uses the
guile build system.  Add wrap-studio phase.
[inputs]: Add bash-minimal for the wrapper.  Use qtbase instead of qtbase-5
---
 gnu/packages/engineering.scm | 47 ++++++++++++++++++++++++------------
 1 file changed, 32 insertions(+), 15 deletions(-)

diff --git a/gnu/packages/engineering.scm b/gnu/packages/engineering.scm
index a8261dfbc1..1f7fdf942f 100644
--- a/gnu/packages/engineering.scm
+++ b/gnu/packages/engineering.scm
@@ -20,7 +20,7 @@
 ;;; Copyright © 2020, 2021 Ekaitz Zarraga <ekaitz <at> elenq.tech>
 ;;; Copyright © 2020 B. Wilson <elaexuotee <at> wilsonb.com>
 ;;; Copyright © 2020, 2021, 2022, 2023 Vinicius Monego <monego <at> posteo.net>
-;;; Copyright © 2020, 2021 Morgan Smith <Morgan.J.Smith <at> outlook.com>
+;;; Copyright © 2020, 2021, 2023 Morgan Smith <Morgan.J.Smith <at> outlook.com>
 ;;; Copyright © 2021 qblade <qblade <at> protonmail.com>
 ;;; Copyright © 2021 Gerd Heber <gerd.heber <at> gmail.com>
 ;;; Copyright © 2021, 2022 Guillaume Le Vaillant <glv <at> posteo.net>
@@ -908,17 +908,21 @@ (define-public libfive
       (build-system cmake-build-system)
       (arguments
        (list
+        #:imported-modules `((guix build guile-build-system)
+                             ,@%cmake-build-system-modules)
+        #:modules '((guix build cmake-build-system)
+                    ((guix build guile-build-system) #:prefix guile:)
+                    (guix build utils))
         #:test-target "libfive-test"
-        #:configure-flags
-        #~(list (string-append "-DGUILE_CCACHE_DIR="
-                               #$output "/lib/guile/3.0/site-ccache"))
         #:phases
         #~(modify-phases %standard-phases
-            (add-after 'unpack 'fix-autocompilation
-              (lambda _ (setenv "HOME" "/tmp")))
             (add-after 'unpack 'remove-native-compilation
               (lambda _
                 (substitute* "CMakeLists.txt" (("-march=native") ""))))
+            (add-after 'unpack 'remove-environment-variable-override
+              (lambda _
+                (substitute* "studio/src/guile/interpreter.cpp"
+                  (("qputenv\\(\"GUILE_LOAD_COMPILED_PATH\".*") ""))))
             (add-after 'unpack 'fix-library-location
               (lambda _
                 (substitute* "libfive/bind/guile/libfive/lib.scm"
@@ -926,19 +930,32 @@ (define-public libfive
                    (string-append m "\n\"" #$output "/lib/\""))
                   (("\\(get-environment-variable \"LIBFIVE_STDLIB_DIR\"\\)" m)
                    (string-append m "\n\"" #$output "/lib/\"")))))
-            (add-after 'install 'install-scm-files
+            (add-after 'unpack 'do-not-build-guile-bindings
+              (lambda _
+                (delete-file "libfive/bind/guile/CMakeLists.txt")
+                (call-with-output-file
+                    "libfive/bind/guile/CMakeLists.txt"
+                  (lambda (port)
+                    (display "add_custom_target(libfive-guile)\n" port)))))
+            (add-after 'build 'guile-build
+              (lambda args
+                (apply (assoc-ref guile:%standard-phases 'build)
+                       #:source-directory "../source/libfive/bind/guile"
+                       args)))
+            (add-after 'install 'wrap-studio
               (lambda _
-                (for-each
-                 (lambda (file)
-                   (install-file file
-                                 (string-append #$output
-                                                "/share/guile/site/3.0/libfive")))
-                 (find-files "../source/libfive/bind/guile/libfive"
-                             "\\.scm$")))))))
+                (let* ((effective-version (guile:target-guile-effective-version))
+                       (scm (string-append #$output "/share/guile/site/"
+                                           effective-version))
+                       (go (string-append #$output "/lib/guile/"
+                                          effective-version "/site-ccache")))
+                  (wrap-program (string-append #$output "/bin/Studio")
+                    `("GUILE_LOAD_PATH" ":" prefix (,scm))
+                    `("GUILE_LOAD_COMPILED_PATH" ":" prefix (,go)))))))))
       (native-inputs
        (list pkg-config))
       (inputs
-       (list boost libpng qtbase-5 eigen guile-3.0))
+       (list boost libpng qtbase eigen guile-3.0 bash-minimal))
       (home-page "https://libfive.com")
       (synopsis "Tool for programmatic computer-aided design")
       (description

base-commit: e0c35d1578c10a8fe27c8372f3a8bb5dd88b01b8
-- 
2.39.2





Information forwarded to guix-patches <at> gnu.org:
bug#63422; Package guix-patches. (Wed, 10 May 2023 17:50:01 GMT) Full text and rfc822 format available.

Message #11 received at 63422 <at> debbugs.gnu.org (full text, mbox):

From: Morgan Smith <Morgan.J.Smith <at> outlook.com>
To: 63422 <at> debbugs.gnu.org
Subject: [PATCH 2/3] gnu: libfive: Add Python bindings.
Date: Wed, 10 May 2023 13:46:18 -0400
* gnu/packages/engineering.scm (libfive)
[configure-flags]: Add python site-dir.
[phases]<fix-library-location>: Fix for python as well.
<wrap-studio>: Wrap for python as well.
[inputs]: Add python-wrapper.  Alphabetize.
[description]: Add python.
---
 gnu/packages/engineering.scm | 33 +++++++++++++++++++++++++--------
 1 file changed, 25 insertions(+), 8 deletions(-)

diff --git a/gnu/packages/engineering.scm b/gnu/packages/engineering.scm
index 1f7fdf942f..be7e235fcc 100644
--- a/gnu/packages/engineering.scm
+++ b/gnu/packages/engineering.scm
@@ -914,6 +914,14 @@ (define-public libfive
                     ((guix build guile-build-system) #:prefix guile:)
                     (guix build utils))
         #:test-target "libfive-test"
+        #:configure-flags #~(list
+                             (string-append
+                              "-DPYTHON_SITE_PACKAGES_DIR="
+                              #$output "/lib/python"
+                              #$(version-major+minor
+                                 (package-version
+                                  (this-package-input "python-wrapper")))
+                              "/site-packages"))
         #:phases
         #~(modify-phases %standard-phases
             (add-after 'unpack 'remove-native-compilation
@@ -929,7 +937,10 @@ (define-public libfive
                   (("\\(get-environment-variable \"LIBFIVE_FRAMEWORK_DIR\"\\)" m)
                    (string-append m "\n\"" #$output "/lib/\""))
                   (("\\(get-environment-variable \"LIBFIVE_STDLIB_DIR\"\\)" m)
-                   (string-append m "\n\"" #$output "/lib/\"")))))
+                   (string-append m "\n\"" #$output "/lib/\"")))
+                (substitute* "libfive/bind/python/libfive/ffi.py"
+                  (("os.environ.get\\('LIBFIVE_FRAMEWORK_DIR'\\)" m)
+                   (string-append m " or \"" #$output "/lib/\"")))))
             (add-after 'unpack 'do-not-build-guile-bindings
               (lambda _
                 (delete-file "libfive/bind/guile/CMakeLists.txt")
@@ -948,22 +959,28 @@ (define-public libfive
                        (scm (string-append #$output "/share/guile/site/"
                                            effective-version))
                        (go (string-append #$output "/lib/guile/"
-                                          effective-version "/site-ccache")))
+                                          effective-version "/site-ccache"))
+                       (py (string-append #$output "/lib/python"
+                                          #$(version-major+minor
+                                             (package-version
+                                              (this-package-input "python-wrapper")))
+                                          "/site-packages")))
                   (wrap-program (string-append #$output "/bin/Studio")
                     `("GUILE_LOAD_PATH" ":" prefix (,scm))
-                    `("GUILE_LOAD_COMPILED_PATH" ":" prefix (,go)))))))))
+                    `("GUILE_LOAD_COMPILED_PATH" ":" prefix (,go))
+                    `("GUIX_PYTHONPATH" ":" prefix (,py)))))))))
       (native-inputs
        (list pkg-config))
       (inputs
-       (list boost libpng qtbase eigen guile-3.0 bash-minimal))
+       (list bash-minimal boost eigen guile-3.0 libpng python-wrapper qtbase))
       (home-page "https://libfive.com")
       (synopsis "Tool for programmatic computer-aided design")
       (description
        "Libfive is a tool for programmatic computer-aided design (CAD).  In
-libfive, solid models are defined as Scheme scripts, and there are no opaque
-function calls into the geometry kernel: everything is visible to the user.
-Even fundamental, primitive shapes are represented as code in the user-level
-language.")
+libfive, solid models are defined as Scheme or Python scripts, and there are
+no opaque function calls into the geometry kernel: everything is visible to
+the user.  Even fundamental, primitive shapes are represented as code in the
+user-level language.")
       (license (list license:mpl2.0               ;library
                      license:gpl2+))              ;Guile bindings and GUI
 
-- 
2.39.2





Information forwarded to guix-patches <at> gnu.org:
bug#63422; Package guix-patches. (Wed, 10 May 2023 17:50:02 GMT) Full text and rfc822 format available.

Message #14 received at 63422 <at> debbugs.gnu.org (full text, mbox):

From: Morgan Smith <Morgan.J.Smith <at> outlook.com>
To: 63422 <at> debbugs.gnu.org
Subject: [PATCH 3/3] gnu: libfive: Generate bindings instead of using
 pre-generated ones.
Date: Wed, 10 May 2023 13:46:20 -0400
* gnu/packages/engineering.scm (libfive)[phases]: Add phase 'generate-bindings
to generate the bindings
---
 gnu/packages/engineering.scm | 10 ++++++++++
 1 file changed, 10 insertions(+)

diff --git a/gnu/packages/engineering.scm b/gnu/packages/engineering.scm
index be7e235fcc..ec3071129e 100644
--- a/gnu/packages/engineering.scm
+++ b/gnu/packages/engineering.scm
@@ -941,6 +941,16 @@ (define-public libfive
                 (substitute* "libfive/bind/python/libfive/ffi.py"
                   (("os.environ.get\\('LIBFIVE_FRAMEWORK_DIR'\\)" m)
                    (string-append m " or \"" #$output "/lib/\"")))))
+            (add-before 'build 'generate-bindings
+              (lambda _
+                ;; These files already exist but we regenerate them from source
+                (with-directory-excursion "../source/libfive/stdlib"
+                  (substitute* '("gen_scm.py" "gen_c.py" "gen_py.py")
+                    (("datetime.now\\(\\)\\.strftime\\([^)]+)") "\"N/A\"")
+                    (("os\\.getlogin\\(\\)") "\"guix\""))
+                  (invoke "python" "gen_scm.py")
+                  (invoke "python" "gen_c.py")
+                  (invoke "python" "gen_py.py"))))
             (add-after 'unpack 'do-not-build-guile-bindings
               (lambda _
                 (delete-file "libfive/bind/guile/CMakeLists.txt")
-- 
2.39.2





Reply sent to Ludovic Courtès <ludo <at> gnu.org>:
You have taken responsibility. (Thu, 18 May 2023 17:51:02 GMT) Full text and rfc822 format available.

Notification sent to Morgan.J.Smith <at> outlook.com:
bug acknowledged by developer. (Thu, 18 May 2023 17:51:02 GMT) Full text and rfc822 format available.

Message #19 received at 63422-done <at> debbugs.gnu.org (full text, mbox):

From: Ludovic Courtès <ludo <at> gnu.org>
To: Morgan.J.Smith <at> outlook.com
Cc: 63422-done <at> debbugs.gnu.org
Subject: Re: bug#63422: [PATCH 0/3] gnu: libfive: Fixes
Date: Thu, 18 May 2023 19:50:03 +0200
Hi,

Morgan.J.Smith <at> outlook.com skribis:

> [PATCH 1/3] gnu: libfive: Fix install and wrap Studio.
> [PATCH 2/3] gnu: libfive: Add Python bindings.
> [PATCH 3/3] gnu: libfive: Generate bindings instead of using

Applied, thanks!

Ludo’.




bug archived. Request was from Debbugs Internal Request <help-debbugs <at> gnu.org> to internal_control <at> debbugs.gnu.org. (Fri, 16 Jun 2023 11:24:07 GMT) Full text and rfc822 format available.

This bug report was last modified 308 days ago.

Previous Next


GNU bug tracking system
Copyright (C) 1999 Darren O. Benham, 1997,2003 nCipher Corporation Ltd, 1994-97 Ian Jackson.