me
/
guix
Archived
1
0
Fork 0

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>
master
nixo 2021-01-19 11:23:10 +01:00 committed by Ludovic Courtès
parent 03010d5d3e
commit a06db9c1ee
No known key found for this signature in database
GPG Key ID: 090B11993D9AEBB5
2 changed files with 68 additions and 4 deletions

View File

@ -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}

View File

@ -147,6 +147,49 @@ scaled by a constant factor. Consequently, they have a fixed number of
digits (bits) after the decimal (radix) point.")
(license license:expat)))
(define-public julia-jllwrappers
(package
(name "julia-jllwrappers")
(version "1.2.0")
(source
(origin
(method git-fetch)
(uri (git-reference
(url "https://github.com/JuliaPackaging/JLLWrappers.jl")
(commit (string-append "v" version))))
(file-name (git-file-name name version))
(sha256
(base32 "1sj3mi2dcc13apqfpy401wic5n0pgbck1p98b2g3zw0mln9s83m4"))))
(arguments
;; Wants to download stuff
'(#:tests? #f
#:phases
(modify-phases %standard-phases
(add-after 'unpack 'custom-override-path
(lambda* (#:key inputs #:allow-other-keys)
;; Make @generate_wrapper_header take an optional argument that
;; guix packagers can pass to override the default "override"
;; binary path. This won't be needed when something like
;; https://github.com/JuliaPackaging/JLLWrappers.jl/pull/27
;; will be merged.
(substitute* "src/wrapper_generators.jl"
(("generate_wrapper_header.*")
"generate_wrapper_header(src_name, override_path = nothing)\n")
(("pkg_dir = .*" all)
(string-append
all "\n" "override = something(override_path,"
"joinpath(dirname(pkg_dir), \"override\"))\n"))
(("@static if isdir.*") "@static if isdir($override)\n")
(("return joinpath.*") "return $override\n"))
#t)))))
(build-system julia-build-system)
(home-page "https://github.com/JuliaPackaging/JLLWrappers.jl")
(synopsis "Julia macros used by JLL packages")
(description "This package contains Julia macros that enable JLL packages
to generate themselves. It is not intended to be used by users, but rather is
used in autogenerated packages via @code{BinaryBuilder.jl}.")
(license license:expat)))
(define-public julia-json
(package
(name "julia-json")