summary refs log tree commit diff
path: root/doc
diff options
context:
space:
mode:
authornixo <nicolo@nixo.xyz>2021-01-19 11:23:10 +0100
committerLudovic Courtès <ludo@gnu.org>2021-03-20 22:29:14 +0100
commita06db9c1ee8b36021d384e7552f1cf1c41208517 (patch)
treef2e78a59f7d5d01f73ba20ed5df9ebdb12870fb2 /doc
parent03010d5d3efd4ac19c4bddea67cbfe09c129db8d (diff)
downloadguix-a06db9c1ee8b36021d384e7552f1cf1c41208517.tar.gz
gnu: Add julia-jllwrappers.
* gnu/packages/julia-xyz.scm (julia-jllwrappers): New variable.
* doc/guix.texi (julia-build-system): Document how to use jllwrappers to use
  to guix binary packages.

Co-authored-by: Ludovic Courtès <ludo@gnu.org>
Diffstat (limited to 'doc')
-rw-r--r--doc/guix.texi29
1 files changed, 25 insertions, 4 deletions
diff --git a/doc/guix.texi b/doc/guix.texi
index 843f2cfb87..94ecd2c247 100644
--- a/doc/guix.texi
+++ b/doc/guix.texi
@@ -7752,10 +7752,31 @@ The Julia package name is read from the file @file{Project.toml}.  This
 value can be overridden by passing the argument @code{#:julia-package-name}
 (which must be correctly capitalized).
 
-For packages requiring shared library dependencies, you may need to write the
-@file{/deps/deps.jl} file manually.  It's usually a line of @code{const
-variable = /gnu/store/library.so} for each dependency, plus a void function
-@code{check_deps() = nothing}.
+Julia packages usually manage they binary dependencies via
+@code{JLLWrappers.jl}, a Julia package that creates a module (named
+after the wrapped library followed by @code{_jll.jl}.
+
+To add the binary path @code{_jll.jl} packages, you need to patch the
+files under @file{src/wrappers/}, replacing the call to the macro
+@code{JLLWrappers.@@generate_wrapper_header}, adding as a secound
+argument containing the store path the binary.
+
+As an example, in the MbedTLS Julia package, we add a build phase
+(@pxref{Build Phases}) to insert the absolute file name of the wrapped
+MbedTLS package:
+
+@lisp
+(add-after 'unpack 'override-binary-path
+  (lambda* (#:key inputs #:allow-other-keys)
+    (for-each (lambda (wrapper)
+                (substitute* wrapper
+                  (("generate_wrapper_header.*")
+                   (string-append
+                    "generate_wrapper_header(\"MbedTLS\", \""
+                    (assoc-ref inputs "mbedtls-apache") "\")\n"))))
+              ;; There's a Julia file for each platform, override them all.
+              (find-files "src/wrappers/" "\\.jl$"))))
+@end lisp
 
 Some older packages that aren't using @file{Package.toml} yet, will require
 this file to be created, too.  The function @code{julia-create-package-toml}