guix/gnu/packages/patches/aspell-default-dict-dir.patch
Ludovic Courtès 4554d6b77e
gnu: aspell: Truly honor $ASPELL_DICT_DIR.
Fixes <https://bugs.gnu.org/29686>.
Reported by Oleg Pykhalov <go.wigust@gmail.com>.

* gnu/packages/aspell.scm (aspell)[arguments]: Remove 'wrap-aspell' phase.
* gnu/packages/patches/aspell-default-dict-dir.patch: Add hunk to expand
the right-hand size of '|' in values like "<$FOO|$BAR/baz>".  Change
DICT_DIR to refer to "$HOME" on the right-hand side.
2019-11-14 22:30:24 +01:00

42 lines
1.5 KiB
Diff

This patch changes the default value of 'dict-dir' to correspond
to ~/.guix-profile/lib/aspell rather than $prefix/lib/aspell-X.Y.
This is not strictly necessary for the 'aspell' program itself since
one can simply set "ASPELL_CONF=dict-dir $HOME/.guix-profile/lib/aspell".
However it is necessary for applications that use libaspell since
'ASPELL_CONF' is not honored in this case. See <https://bugs.gnu.org/25836>.
--- 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/.guix-profile/lib/aspell>"
+
static const KeyInfo config_keys[] = {
// the description should be under 50 chars
{"actual-dict-dir", KeyInfoString, "<dict-dir^master>", 0}