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
parent
03010d5d3e
commit
a06db9c1ee
|
@ -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}
|
value can be overridden by passing the argument @code{#:julia-package-name}
|
||||||
(which must be correctly capitalized).
|
(which must be correctly capitalized).
|
||||||
|
|
||||||
For packages requiring shared library dependencies, you may need to write the
|
Julia packages usually manage they binary dependencies via
|
||||||
@file{/deps/deps.jl} file manually. It's usually a line of @code{const
|
@code{JLLWrappers.jl}, a Julia package that creates a module (named
|
||||||
variable = /gnu/store/library.so} for each dependency, plus a void function
|
after the wrapped library followed by @code{_jll.jl}.
|
||||||
@code{check_deps() = nothing}.
|
|
||||||
|
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
|
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}
|
this file to be created, too. The function @code{julia-create-package-toml}
|
||||||
|
|
|
@ -147,6 +147,49 @@ scaled by a constant factor. Consequently, they have a fixed number of
|
||||||
digits (bits) after the decimal (radix) point.")
|
digits (bits) after the decimal (radix) point.")
|
||||||
(license license:expat)))
|
(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
|
(define-public julia-json
|
||||||
(package
|
(package
|
||||||
(name "julia-json")
|
(name "julia-json")
|
||||||
|
|
Reference in New Issue