From: Danny Milosavljevic <dannym@friendly-machines.com>
To: 72994@debbugs.gnu.org
Cc: Danny Milosavljevic <dannym@friendly-machines.com>,
Andrew Tropin <andrew@trop.in>,
Katherine Cox-Buday <cox.katherine.e+guix@gmail.com>,
Liliana Marie Prikler <liliana.prikler@gmail.com>
Subject: [bug#72994] [PATCH] gnu: emacs-julia-snail: Vendor julia libraries.
Date: Tue, 3 Sep 2024 02:02:18 +0200 [thread overview]
Message-ID: <58ce361528f55e5ad76ed7da4123525a9e9375e5.1725319687.git.dannym@friendly-machines.com> (raw)
* gnu/packages/patches/emacs-julia-snail-1.3.1-vendor.patch: New file.
* gnu/local.mk (dist_patch_DATA): Add it.
* gnu/packages/emacs-xyz.scm (emacs-julia-snail)[arguments]<#:phases>[vendor]:
New phase.
[inputs]: Add julia-cstparser, julia-tokenize.
[propagated-inputs]: Remove julia-cstparser, julia-tokenize.
[source]: Add patch.
Change-Id: I61c0a4493fcfd219809bcc35f8765be0928a7e81
---
gnu/local.mk | 1 +
gnu/packages/emacs-xyz.scm | 25 ++++++--
.../emacs-julia-snail-1.3.1-vendor.patch | 57 +++++++++++++++++++
3 files changed, 78 insertions(+), 5 deletions(-)
create mode 100644 gnu/packages/patches/emacs-julia-snail-1.3.1-vendor.patch
diff --git a/gnu/local.mk b/gnu/local.mk
index 0c4ab96bf3..8647956f2f 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -1179,6 +1179,7 @@ dist_patch_DATA = \
%D%/packages/patches/emacs-git-email-missing-parens.patch \
%D%/packages/patches/emacs-helpful-fix-tests.patch \
%D%/packages/patches/emacs-highlight-stages-add-gexp.patch \
+ %D%/packages/patches/emacs-julia-snail-1.3.1-vendor.patch \
%D%/packages/patches/emacs-json-reformat-fix-tests.patch \
%D%/packages/patches/emacs-kv-fix-tests.patch \
%D%/packages/patches/emacs-lispy-fix-thread-last-test.patch \
diff --git a/gnu/packages/emacs-xyz.scm b/gnu/packages/emacs-xyz.scm
index 370daaf50e..1837c759d2 100644
--- a/gnu/packages/emacs-xyz.scm
+++ b/gnu/packages/emacs-xyz.scm
@@ -14656,22 +14656,37 @@ (define-public emacs-julia-snail
(file-name (git-file-name name version))
(sha256
(base32
- "0h5lwc2hsk4rc82idhf9qj9553v7x76wmy9x2z1h60pdd93ilcyr"))))
+ "0h5lwc2hsk4rc82idhf9qj9553v7x76wmy9x2z1h60pdd93ilcyr"))
+ (patches
+ (search-patches "emacs-julia-snail-1.3.1-vendor.patch"))))
(build-system emacs-build-system)
(arguments
(list
+ #:phases
+ #~(modify-phases %standard-phases
+ (add-after 'validate-compiled-autoloads 'vendor
+ (lambda* (#:key inputs outputs #:allow-other-keys)
+ (let* ((out (assoc-ref outputs "out"))
+ (base (dirname (car (find-files out "JuliaSnail.jl"))))
+ (vendor (string-append base "/vendor")))
+ (mkdir-p vendor)
+ (copy-recursively (string-append (assoc-ref inputs "julia-cstparser")
+ "/share/julia/loadpath/CSTParser")
+ (string-append vendor "/CSTParser"))
+ (copy-recursively (string-append (assoc-ref inputs "julia-tokenize")
+ "/share/julia/loadpath/Tokenize")
+ (string-append vendor "/Tokenize"))))))
#:include
#~(cons* "^JuliaSnail\\.jl" "extensions" %default-include)))
(inputs
- (list emacs-dash emacs-s emacs-spinner emacs-xref))
+ (list emacs-dash emacs-s emacs-spinner emacs-xref julia-cstparser
+ julia-tokenize))
(propagated-inputs
(list libvterm
emacs-julia-mode ;required by parser
emacs-parsec ;required by parser
emacs-popup
- emacs-vterm
- julia-tokenize
- julia-cstparser))
+ emacs-vterm))
(home-page "https://github.com/gcv/julia-snail")
(synopsis "Development environment and REPL interaction package for Julia")
(description "This package provides a development environment and REPL
diff --git a/gnu/packages/patches/emacs-julia-snail-1.3.1-vendor.patch b/gnu/packages/patches/emacs-julia-snail-1.3.1-vendor.patch
new file mode 100644
index 0000000000..eaa38fb868
--- /dev/null
+++ b/gnu/packages/patches/emacs-julia-snail-1.3.1-vendor.patch
@@ -0,0 +1,57 @@
+Author: Danny Milosavljevic <dannym@friendly-machines.com>
+Date: 2024-09-03
+License: GPL3+
+
+Previously, we propagated julia-cstparser and julia-tokenize. This would only
+work if the user had installed julia in their profile (because only then
+JULIA_LOAD_PATH of julia-cstparser would be propagated).
+That doesn't seem likely or desireable.
+
+It turns out that it's not difficult to make julia read vendored packages.
+Let's do that (since there's a comment inside JuliaSnail.jl that warns about
+CSTParser APIs being easily incompatible, vendoring is better anyway).
+
+diff -ru orig/4l8xr3ldffb30a44x157lj3asaj3ykls-emacs-julia-snail-1.3.1-checkout/JuliaSnail.jl 4l8xr3ldffb30a44x157lj3asaj3ykls-emacs-julia-snail-1.3.1-checkout/JuliaSnail.jl
+--- orig/4l8xr3ldffb30a44x157lj3asaj3ykls-emacs-julia-snail-1.3.1-checkout/JuliaSnail.jl 2024-09-03 00:02:03.798373662 +0200
++++ 4l8xr3ldffb30a44x157lj3asaj3ykls-emacs-julia-snail-1.3.1-checkout/JuliaSnail.jl 2024-09-03 01:05:26.310766009 +0200
+@@ -30,12 +30,12 @@
+ catch err
+ if isa(err, ArgumentError)
+ if isfile(joinpath($dir, "Project.toml"))
+- # force dependency installation
+- Main.Pkg.activate($dir)
+- Main.Pkg.instantiate()
+- Main.Pkg.precompile()
+- # activate what was the first entry before Snail was pushed to the head of LOAD_PATH
+- Main.Pkg.activate(LOAD_PATH[2])
++ # force dependency installation
++ if isa(err, ArgumentError)
++ error("Vendored dependencies not found. Please make sure the vendored packages are located in the 'vendor' directory.")
++ else
++ rethrow(err)
++ end
+ end
+ end
+ finally
+@@ -51,11 +51,16 @@
+ end
+
+ @with_pkg_env (@__DIR__) begin
+- # list all external dependency imports here (from the appropriate Project.toml, either Snail's or an extension's):
+- import CSTParser
+- # check for dependency API compatibility
+- !isdefined(CSTParser, :iscall) &&
+- throw(ArgumentError("CSTParser API not compatible, must install Snail-specific version"))
++ @with_pkg_env (joinpath(@__DIR__, "vendor", "CSTParser")) begin
++ @with_pkg_env (joinpath(@__DIR__, "vendor", "Tokenize")) begin
++ println(LOAD_PATH)
++ # list all external dependency imports here (from the appropriate Project.toml, either Snail's or an extension's):
++ import CSTParser
++ # check for dependency API compatibility
++ !isdefined(CSTParser, :iscall) &&
++ throw(ArgumentError("CSTParser API not compatible, must install Snail-specific version"))
++ end
++ end
+ end
+
+
base-commit: b833aaaee7c95ec0339428a6b602f26831494798
--
2.45.2
next reply other threads:[~2024-09-03 8:30 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-09-03 0:02 Danny Milosavljevic [this message]
2024-09-16 8:24 ` [bug#72994] [PATCH] gnu: emacs-julia-snail: Vendor julia libraries Ludovic Courtès
2024-09-16 18:01 ` dannym
2024-09-17 17:19 ` Liliana Marie Prikler
2024-10-17 7:42 ` Ludovic Courtès
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
List information: https://guix.gnu.org/
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=58ce361528f55e5ad76ed7da4123525a9e9375e5.1725319687.git.dannym@friendly-machines.com \
--to=dannym@friendly-machines.com \
--cc=72994@debbugs.gnu.org \
--cc=andrew@trop.in \
--cc=cox.katherine.e+guix@gmail.com \
--cc=liliana.prikler@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this public inbox
https://git.savannah.gnu.org/cgit/guix.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).