diff options
author | Philip McGrath <philip@philipmcgrath.com> | 2022-07-25 08:16:33 -0400 |
---|---|---|
committer | Ludovic Courtès <ludo@gnu.org> | 2022-08-04 12:05:52 +0200 |
commit | 14a50b62d4e8765b794861226d79f6872d6c434c (patch) | |
tree | ef1d26387edd7e4e1f699021b4e0892e6e66f080 /gnu/packages/ruby.scm | |
parent | bc2de56572872eefdc2992b34cce69c77deb485a (diff) | |
download | guix-14a50b62d4e8765b794861226d79f6872d6c434c.tar guix-14a50b62d4e8765b794861226d79f6872d6c434c.tar.gz |
gnu: ruby-anystyle: Initialize dictionary files.
For the GDBM and Marshal dictionary adapters to be useful with their
default settings, we must initialize their data files during the package
build: upstream would initialize them lazily, but that doesn't work with
an immutable installation directory (at least, not without more complex
patches). Otherwise, we would always end up rebuilding the dictionary at
startup, which is “slow” and “not recommended”.
* gnu/packages/patches/ruby-anystyle-fix-dictionary-populate.patch: New
patch.
* gnu/local.mk (dist_patch_DATA): Add it.
* gnu/packages/ruby.scm (ruby-anystyle)[patches]: Use it.
[arguments]<#:phases>: Add 'populate-dictionaries' phase.
Signed-off-by: Ludovic Courtès <ludo@gnu.org>
Diffstat (limited to 'gnu/packages/ruby.scm')
-rw-r--r-- | gnu/packages/ruby.scm | 31 |
1 files changed, 30 insertions, 1 deletions
diff --git a/gnu/packages/ruby.scm b/gnu/packages/ruby.scm index 6e0b2dd14c..0b558de6db 100644 --- a/gnu/packages/ruby.scm +++ b/gnu/packages/ruby.scm @@ -13516,6 +13516,9 @@ the power of the built-in @code{OptionParser}.") (substitute* "spec/anystyle/parser_spec.rb" (("language: 'en'," orig) (string-append "# " orig " # no lanugage_detector"))))) + (patches + (search-patches + "ruby-anystyle-fix-dictionary-populate.patch")) (file-name (git-file-name name version)))) (build-system ruby-build-system) (propagated-inputs @@ -13545,7 +13548,33 @@ the power of the built-in @code{OptionParser}.") (lambda args (substitute* "anystyle.gemspec" (("`git ls-files spec`") - "`find spec -type f | sort`"))))))) + "`find spec -type f | sort`")))) + (add-after 'wrap 'populate-dictionaries + (lambda args + ;; We must initiallize these files here, or they will never be + ;; usable with the default settings. A more flexible approach + ;; might use something like `Gem.find_files()` or + ;; XDG_DATA_DIRS. + (with-output-to-file "initialize-dictionaries.rb" + (lambda () + (display " +require 'anystyle/dictionary' # must come before 'anystyle/data' +require 'anystyle/data' +[:marshal, :gdbm].each do |adapter| + AnyStyle::Dictionary.create({adapter: adapter}).open().close() +end +"))) + (let* ((old-gems (getenv "GEM_PATH")) + (new-gems (string-append #$output + "/lib/ruby/vendor_ruby:" + old-gems))) + (dynamic-wind + (lambda () + (setenv "GEM_PATH" new-gems)) + (lambda () + (invoke "ruby" "initialize-dictionaries.rb")) + (lambda () + (setenv "GEM_PATH" old-gems))))))))) (home-page "https://anystyle.io") (synopsis "Fast and smart citation reference parsing (Ruby library)") (description |