Hi Oleg & Pierre, l...@gnu.org (Ludovic Courtès) skribis:
> Indeed. I have: > > $ guix environment --ad-hoc aspell aspell-dict-ru -C -- aspell --config | > grep -A3 dict-dir > # dict-dir (string) > # location of the main word list > # default: <$ASPELL_DICT_DIR|home-dir/.guix-profile/lib/aspell> = > /gnu/store/b411b0fbwc85fjnf0h030gdkbv1qdmqh-profile/lib/aspell > dict-dir /home/ludo/.guix-profile/lib/aspell > > # encoding (string) > # encoding to expect data to be in > -- > # default: <actual-dict-dir> = /home/ludo/.guix-profile/lib/aspell/ > > # master (string) > # base name of the main dictionary to use > > The value that shows up after the “=” sign is as expected (it’s > $ASPELL_DICT_DIR), but the value shown on the line below is not. > > Sounds like a problem in ‘aspell-dict-dir.patch’. Actually the problem is the ‘wrap-aspell’ phase, which predates ‘aspell-dict-dir.patch’ and is unnecessary in the presence of this patch. In addition to removing the phase, the patch had to be adjusted so that it would actually adjust the right-hand size of ‘|’ for ‘dict-dir’ (a bug that apparently went unnoticed, probably because the ‘wrap-aspell’ phase was hiding it). With the patch below, I get: --8<---------------cut here---------------start------------->8--- $ ./pre-inst-env guix environment --ad-hoc aspell aspell-dict-ru -C -- aspell --config |grep -A2 '^# dict-dir' # dict-dir (string) # location of the main word list # default: <$ASPELL_DICT_DIR|$HOME/.guix-profile/lib/aspell> = /gnu/store/adfc4l73nw3ccai3h5im21wblmrhfy4z-profile/lib/aspell --8<---------------cut here---------------end--------------->8--- and: --8<---------------cut here---------------start------------->8--- $ ./pre-inst-env guix environment --ad-hoc aspell aspell-dict-ru -C -- aspell dicts ru ru-ye ru-yeyo ru-yo --8<---------------cut here---------------end--------------->8--- … while still getting the intended result when running it outside ‘guix environment’: --8<---------------cut here---------------start------------->8--- $ (unset ASPELL_DICT_DIR; ./pre-inst-env guix environment --ad-hoc aspell -K -- aspell --config) |grep -A2 '^# dict-dir' # dict-dir (string) # location of the main word list # default: <$ASPELL_DICT_DIR|$HOME/.guix-profile/lib/aspell> = /home/ludo/.guix-profile/lib/aspell $ (unset ASPELL_DICT_DIR; ./pre-inst-env guix environment --ad-hoc aspell -K -- aspell dicts) |wc -l 58 $ (unset HOME; ./pre-inst-env guix environment --ad-hoc aspell -K -- aspell dicts) |wc -l 58 --8<---------------cut here---------------end--------------->8--- I’ll apply it on ‘core-updates’ if it’s fine with you. Ludo’.
diff --git a/gnu/packages/aspell.scm b/gnu/packages/aspell.scm index af38c149c2..a5d02a453d 100644 --- a/gnu/packages/aspell.scm +++ b/gnu/packages/aspell.scm @@ -1,5 +1,5 @@ ;;; GNU Guix --- Functional package management for GNU -;;; Copyright © 2013, 2014, 2015, 2017, 2018 Ludovic Courtès <l...@gnu.org> +;;; Copyright © 2013, 2014, 2015, 2017, 2018, 2019 Ludovic Courtès <l...@gnu.org> ;;; Copyright © 2015, 2016 Alex Kost <alez...@gmail.com> ;;; Copyright © 2016 John Darrington <j...@gnu.org> ;;; Copyright © 2016, 2017, 2019 Efraim Flashner <efr...@flashner.co.il> @@ -65,14 +65,6 @@ (("\"filter-path(.*)DICT_DIR" _ middle) (string-append "\"filter-path" middle "\"" libdir "\""))) - #t))) - (add-after 'install 'wrap-aspell - (lambda* (#:key outputs #:allow-other-keys) - (let ((bin/aspell (string-append (assoc-ref outputs "out") - "/bin/aspell"))) - (wrap-program bin/aspell - '("ASPELL_CONF" "" = - ("${ASPELL_CONF:-\"dict-dir ${GUIX_PROFILE:-$HOME/.guix-profile}/lib/aspell\"}"))) #t)))))) (inputs `(("perl" ,perl))) diff --git a/gnu/packages/patches/aspell-default-dict-dir.patch b/gnu/packages/patches/aspell-default-dict-dir.patch index 17a6ff606f..5f759a66d9 100644 --- a/gnu/packages/patches/aspell-default-dict-dir.patch +++ b/gnu/packages/patches/aspell-default-dict-dir.patch @@ -8,12 +8,34 @@ However it is necessary for applications that use libaspell since --- a/common/config.cpp +++ b/common/config.cpp +@@ -651,7 +651,20 @@ namespace acommon { + } else { // sep == '|' + assert(replace[0] == '$'); + const char * env = getenv(replace.c_str()+1); +- final_str += env ? env : second; ++ if (env) { ++ final_str += env; ++ } else if (second[0] == '$') { ++ // Expand the right-hand side of '|', which starts with a ++ // reference to an environment variable. ++ auto slash = second.find('/'); ++ String variable = second.substr(1, slash - 1); ++ const char * env = getenv(variable.c_str()); ++ String value = env ? String(env) : ""; ++ value += second.substr(slash, second.size() - slash); ++ final_str += value; ++ } else { ++ final_str += second; ++ } + } + replace = ""; + in_replace = false; @@ -1349,6 +1349,9 @@ namespace acommon { # define REPL ".aspell.<lang>.prepl" #endif +#undef DICT_DIR -+#define DICT_DIR "<$ASPELL_DICT_DIR|home-dir/.guix-profile/lib/aspell>" ++#define DICT_DIR "<$ASPELL_DICT_DIR|$HOME/.guix-profile/lib/aspell>" + static const KeyInfo config_keys[] = { // the description should be under 50 chars