[PATCH] gnu: smalltalk: add pharo-vm 10.1.1.

  • Open
  • quality assurance status badge
Details
2 participants
  • Daniel Ziltener
  • Nicolas Graves
Owner
unassigned
Submitted by
Daniel Ziltener
Severity
normal

Debbugs page

D
D
Daniel Ziltener wrote on 20 Mar 08:36 -0700
(address . guix-patches@gnu.org)(address . dziltener@lyrion.ch)
163fe58d525795ccdb3f24960655f036@lyrion.ch
---
gnu/packages/smalltalk.scm | 66 +++++++++++++++++++++++++++++++++++++-
1 file changed, 65 insertions(+), 1 deletion(-)

Toggle diff (96 lines)
diff --git a/gnu/packages/smalltalk.scm b/gnu/packages/smalltalk.scm
index 64146813d1..60e0cc5778 100644
--- a/gnu/packages/smalltalk.scm
+++ b/gnu/packages/smalltalk.scm
@@ -5,6 +5,7 @@
;;; Copyright © 2016 Ludovic Courtès <ludo@gnu.org>
;;; Copyright © 2018 Tobias Geerinckx-Rice <me@tobias.gr>
;;; Copyright © 2021 Maxime Devos <maximedevos@telenet.be>
+;;; Copyright © 2024 Daniel Ziltener <dziltener@lyrion.ch>
;;;
;;; This file is part of GNU Guix.
;;;
@@ -36,13 +37,16 @@ (define-module (gnu packages smalltalk)
#:use-module (gnu packages fontutils)
#:use-module (gnu packages gl)
#:use-module (gnu packages glib)
+ #:use-module (gnu packages image)
#:use-module (gnu packages libffi)
#:use-module (gnu packages libsigsegv)
#:use-module (gnu packages linux)
#:use-module (gnu packages multiprecision)
#:use-module (gnu packages pkg-config)
#:use-module (gnu packages pulseaudio)
- #:use-module (gnu packages xorg))
+ #:use-module (gnu packages version-control)
+ #:use-module (gnu packages xorg)
+ #:use-module (gnu packages xdisorg))
(define-public smalltalk
(package
@@ -184,3 +188,63 @@ (define-public squeak-vm
interactively extensible Web sites.")
(home-page "http://squeakvm.org/")
(license license:x11)))
+
+(define-public pharo-vm
+ (package
+ (name "pharo-vm")
+ (version "10.1.1")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (string-append "http://files.pharo.org/vm/pharo-spur64-headless/Linux-x86_64/source/PharoVM-" version "-32b2be5-Linux-x86_64-c-src.tar.gz"))
+ (sha256
+ (base32
+ "1hbkvfrw57sz5nw48z64789yjcry9l1am4hmkndy9dd6i06n2c2n"))))
+ (build-system cmake-build-system)
+ (arguments
+ (list
+ #:configure-flags
+ #~(list
+ (string-append "-DPHARO_LIBRARY_PATH="
+ (assoc-ref %outputs "out") "/lib")
+ "-DGENERATED_SOURCE_DIR=."
+ "-DALWAYS_INTERACTIVE=on"
+ "-DBUILD_IS_RELEASE=on"
+ "-DGENERATE_SOURCES=off"
+ "-DBUILD_BUNDLE=off")
+ #:phases
+ #~(modify-phases %standard-phases
+ (delete 'check)
+ (delete 'validate-runpath)
+ (add-after 'install 'really-install
+ (lambda _
+ (let ((bin (string-append #$output "/bin"))
+ (lib (string-append #$output "/lib")))
+ (mkdir-p bin)
+ (mkdir-p lib)
+ (copy-recursively "./build/vm/pharo"
+ (string-append bin "/pharo"))
+ (for-each (lambda (file)
+ (let ((inode (string-append "./build/vm/" file)))
+ (copy-recursively
+ inode
+ (string-append lib "/" file))))
+ (with-directory-excursion
+ "./build/vm"
+ (find-files "."
+ (lambda (file stat)
+ (string-contains file ".so")))))
+ (wrap-program (string-append bin "/pharo")
+ `("LD_LIBRARY_PATH" prefix (,lib)))))))))
+ (inputs
+ (list libffi
+ libgit2
+ cairo
+ freetype
+ pixman
+ libpng
+ util-linux))
+ (synopsis "This is the VM used by Pharo")
+ (home-page "https://www.pharo.org")
+ (description "This is the VM used by Pharo.")
+ (license license:expat)))
--
2.41.0
N
N
Nicolas Graves wrote on 20 May 05:36 -0700
(address . 69918@debbugs.gnu.org)(address . dziltener@lyrion.ch)
87o790y81u.fsf@ngraves.fr
Hi, thanks for this patch!

Some comments below.

On 2024-03-20 16:36, Daniel Ziltener via Guix-patches via wrote:

Toggle quote (32 lines)
> ---
> gnu/packages/smalltalk.scm | 66 +++++++++++++++++++++++++++++++++++++-
> 1 file changed, 65 insertions(+), 1 deletion(-)
>
> diff --git a/gnu/packages/smalltalk.scm b/gnu/packages/smalltalk.scm
> index 64146813d1..60e0cc5778 100644
> --- a/gnu/packages/smalltalk.scm
> +++ b/gnu/packages/smalltalk.scm
> @@ -5,6 +5,7 @@
> ;;; Copyright © 2016 Ludovic Courtès <ludo@gnu.org>
> ;;; Copyright © 2018 Tobias Geerinckx-Rice <me@tobias.gr>
> ;;; Copyright © 2021 Maxime Devos <maximedevos@telenet.be>
> +;;; Copyright © 2024 Daniel Ziltener <dziltener@lyrion.ch>
> ;;;
> ;;; This file is part of GNU Guix.
> ;;;
> @@ -36,13 +37,16 @@ (define-module (gnu packages smalltalk)
> #:use-module (gnu packages fontutils)
> #:use-module (gnu packages gl)
> #:use-module (gnu packages glib)
> + #:use-module (gnu packages image)
> #:use-module (gnu packages libffi)
> #:use-module (gnu packages libsigsegv)
> #:use-module (gnu packages linux)
> #:use-module (gnu packages multiprecision)
> #:use-module (gnu packages pkg-config)
> #:use-module (gnu packages pulseaudio)
> - #:use-module (gnu packages xorg))
> + #:use-module (gnu packages version-control)
> + #:use-module (gnu packages xorg)
> + #:use-module (gnu packages xdisorg))

You're missing a few imports : (guix gexp) (gnu packages gtk).

Toggle quote (17 lines)
>
> (define-public smalltalk
> (package
> @@ -184,3 +188,63 @@ (define-public squeak-vm
> interactively extensible Web sites.")
> (home-page "http://squeakvm.org/")
> (license license:x11)))
> +
> +(define-public pharo-vm
> + (package
> + (name "pharo-vm")
> + (version "10.1.1")
> + (source
> + (origin
> + (method url-fetch)
> + (uri (string-append "http://files.pharo.org/vm/pharo-spur64-headless/Linux-x86_64/source/PharoVM-" version "-32b2be5-Linux-x86_64-c-src.tar.gz"))

You should keep the lines under 79 characters. If you need, you can
split a line with a \ character before the end of the line. I'm also not
sure we wouldn't want the github code directly, since we want to
cross-compile when possible, and this seems specific to x86_64
architectures.

Toggle quote (15 lines)
> + (sha256
> + (base32
> + "1hbkvfrw57sz5nw48z64789yjcry9l1am4hmkndy9dd6i06n2c2n"))))
> + (build-system cmake-build-system)
> + (arguments
> + (list
> + #:configure-flags
> + #~(list
> + (string-append "-DPHARO_LIBRARY_PATH="
> + (assoc-ref %outputs "out") "/lib")
> + "-DGENERATED_SOURCE_DIR=."
> + "-DALWAYS_INTERACTIVE=on"
> + "-DBUILD_IS_RELEASE=on"
> + "-DGENERATE_SOURCES=off"

We should try when possible to generate sources and vm instances. Here
it seems to be a classic bootstrap chain: each major version of pharo is
used to build the next. Let's hope there's not a lot more dependencies
along the chain. Do you feel confident enough with guix and is your
computer beefy enough to tackle this?

Toggle quote (5 lines)
> + "-DBUILD_BUNDLE=off")
> + #:phases
> + #~(modify-phases %standard-phases
> + (delete 'check)

You should rather use #:tests? #false and explain in a comment why tests
are not present.

Toggle quote (22 lines)
> + (delete 'validate-runpath)
> + (add-after 'install 'really-install
> + (lambda _
> + (let ((bin (string-append #$output "/bin"))
> + (lib (string-append #$output "/lib")))
> + (mkdir-p bin)
> + (mkdir-p lib)
> + (copy-recursively "./build/vm/pharo"
> + (string-append bin "/pharo"))
> + (for-each (lambda (file)
> + (let ((inode (string-append "./build/vm/" file)))
> + (copy-recursively
> + inode
> + (string-append lib "/" file))))
> + (with-directory-excursion
> + "./build/vm"
> + (find-files "."
> + (lambda (file stat)
> + (string-contains file ".so")))))
> + (wrap-program (string-append bin "/pharo")
> + `("LD_LIBRARY_PATH" prefix (,lib)))))))))

This phase can be reduced to:

(add-after 'install 'really-install
(lambda _
(install-file "./build/vm/pharo"
(string-append #$output "/bin"))
(for-each
(lambda (file)
(install-file file (string-append #$output "/lib")))
(find-files "./build/vm" "\\.so"))))

Isn't there a way to replace this last phase by carefully chosen Cmake
flags? I couldn't, but would be great if possible.

I've fixed the part about rpath, will be adding a patch over that,
you may use it as a basis for a v3.

Toggle quote (10 lines)
> + (inputs
> + (list libffi
> + libgit2
> + cairo
> + freetype
> + pixman
> + libpng
> + util-linux))
> + (synopsis "This is the VM used by Pharo")

I like to write my synopses as action statements, answering the question
What can you do with this package?

Toggle quote (3 lines)
> + (home-page "https://www.pharo.org")
> + (description "This is the VM used by Pharo.")

Be more specific about description : what is Pharo? What can you do
with this package? You may also add the PharoVM features from Github
repo wrapped in a @itemize / @end itemize texinfo snippet.

Toggle quote (2 lines)
> + (license license:expat)))

--
Best regards,
Nicolas Graves
N
N
Nicolas Graves wrote on 20 May 05:49 -0700
[PATCH v2] gnu: Add pharo-vm.
(address . 69918@debbugs.gnu.org)
20240520124921.7417-1-ngraves@ngraves.fr
* gnu/packages/smalltalk.scm (pharo-vm): New variable.

Change-Id: I7238a8e1e4602192a85772ef2f35081d267ec892
---
gnu/packages/smalltalk.scm | 67 +++++++++++++++++++++++++++++++++++++-
1 file changed, 66 insertions(+), 1 deletion(-)

Toggle diff (104 lines)
diff --git a/gnu/packages/smalltalk.scm b/gnu/packages/smalltalk.scm
index 64146813d1f..a27237ef815 100644
--- a/gnu/packages/smalltalk.scm
+++ b/gnu/packages/smalltalk.scm
@@ -5,6 +5,7 @@
;;; Copyright © 2016 Ludovic Courtès <ludo@gnu.org>
;;; Copyright © 2018 Tobias Geerinckx-Rice <me@tobias.gr>
;;; Copyright © 2021 Maxime Devos <maximedevos@telenet.be>
+;;; Copyright © 2024 Daniel Ziltener <dziltener@lyrion.ch>
;;;
;;; This file is part of GNU Guix.
;;;
@@ -23,6 +24,7 @@
(define-module (gnu packages smalltalk)
#:use-module ((guix licenses) #:prefix license:)
+ #:use-module (guix gexp)
#:use-module (guix packages)
#:use-module (guix download)
#:use-module (guix build-system cmake)
@@ -36,13 +38,17 @@ (define-module (gnu packages smalltalk)
#:use-module (gnu packages fontutils)
#:use-module (gnu packages gl)
#:use-module (gnu packages glib)
+ #:use-module (gnu packages gtk)
+ #:use-module (gnu packages image)
#:use-module (gnu packages libffi)
#:use-module (gnu packages libsigsegv)
#:use-module (gnu packages linux)
#:use-module (gnu packages multiprecision)
#:use-module (gnu packages pkg-config)
#:use-module (gnu packages pulseaudio)
- #:use-module (gnu packages xorg))
+ #:use-module (gnu packages version-control)
+ #:use-module (gnu packages xorg)
+ #:use-module (gnu packages xdisorg))
(define-public smalltalk
(package
@@ -184,3 +190,62 @@ (define-public squeak-vm
interactively extensible Web sites.")
(home-page "http://squeakvm.org/")
(license license:x11)))
+
+(define-public pharo-vm
+ (package
+ (name "pharo-vm")
+ (version "10.1.1")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (string-append "http://files.pharo.org/vm/pharo-spur64-headless/Linux-x86_64/source/PharoVM-" version "-32b2be5-Linux-x86_64-c-src.tar.gz"))
+ (sha256
+ (base32
+ "1hbkvfrw57sz5nw48z64789yjcry9l1am4hmkndy9dd6i06n2c2n"))))
+ (build-system cmake-build-system)
+ (arguments
+ (list
+ #:configure-flags
+ #~(list
+ (string-append "-DPHARO_LIBRARY_PATH=" #$output "/lib")
+ "-DGENERATED_SOURCE_DIR=."
+ "-DALWAYS_INTERACTIVE=on"
+ "-DBUILD_IS_RELEASE=on"
+ "-DGENERATE_VMMAKER=off" ; FIXME: bootstrap chain to resolve
+ "-DGENERATE_SOURCES=off" ; FIXME: properly generate sources
+ "-DFEATURE_COMPILE_GNUISATION=on"
+ "-DBUILD_BUNDLE=off"
+ "-DWITHOUT_DEPENDENCIES=on"
+ (string-append "-DCMAKE_INSTALL_PREFIX=" #$output)
+ ;; add libraries of the project itself to rpath
+ (string-append "-DCMAKE_INSTALL_RPATH=" #$output "/lib")
+ "-DCMAKE_BUILD_WITH_INSTALL_RPATH=TRUE")
+ #:tests? #false ; no tests
+ #:phases
+ #~(modify-phases %standard-phases
+ (add-after 'unpack 'fix-rpath
+ (lambda _
+ (substitute* "cmake/Linux.cmake"
+ (("set\\(CMAKE_C_FLAGS \"\\$\\{CMAKE_C_FLAGS\\}\
+ -Wl,-rpath=\\.\"\\)")
+ ""))))
+ (add-after 'install 'really-install
+ (lambda _
+ (install-file "./build/vm/pharo"
+ (string-append #$output "/bin"))
+ (for-each
+ (lambda (file)
+ (install-file file (string-append #$output "/lib")))
+ (find-files "./build/vm" "\\.so")))))))
+ (inputs
+ (list libffi
+ libgit2
+ cairo
+ freetype
+ pixman
+ libpng
+ util-linux))
+ (synopsis "This is the VM used by Pharo")
+ (home-page "https://www.pharo.org")
+ (description "This is the VM used by Pharo.")
+ (license license:expat)))
--
2.41.0
?
Your comment

Commenting via the web interface is currently disabled.

To comment on this conversation send an email to 69918@patchwise.org

To respond to this issue using the mumi CLI, first switch to it
mumi current 69918
Then, you may apply the latest patchset in this issue (with sign off)
mumi am -- -s
Or, compose a reply to this issue
mumi compose
Or, send patches to this issue
mumi send-email *.patch