summary refs log tree commit diff
diff options
context:
space:
mode:
authorBrian Cully <bjc@spork.org>2023-01-03 18:48:39 -0500
committerRicardo Wurmus <rekado@elephly.net>2023-01-04 12:40:17 +0100
commit201793fd07f602270b2375491a2f5d1d85d4f2b1 (patch)
treef3891e77b8dc6e1af1bf45a1646a44de629c46e7
parentd62c65d5ad49d3bf7ae24b31743d96241170faca (diff)
downloadguix-201793fd07f602270b2375491a2f5d1d85d4f2b1.tar.gz
gnu: hunspell: Move hunspell and dictionaries to hunspell module.
Consolidate hunspell and its dictionaries into the (gnu packages hunspell)
module instead of having them scattered about.

* gnu/packages/aspell.scm (aspell-word-list, define-word-list-dictionary,
hunspell-dict-{en, en-au, en-gb, en-gb-ize, en-us}): Remove variables.
* gnu/packages/libreoffice.scm (hunspell, dicollecte-french-dictionary,
define-french-dictionary, hunspell-dict-fr-{classique, moderne, réforme,
toutes-variantes}, hunspell-dict-pl, hunspell-dict-de, hunspell-dict-hu):
Remove variables.
* gnu/packages/hunspell.scm (hunspell, dicollecte-french-dictionary,
define-french-dictionary, hunspell-dict-fr-{classique, moderne, réforme,
toutes-variantes}, hunspell-dict-pl, hunspell-dict-de, hunspell-dict-hu,
aspell-word-list, define-word-list-dictionary, hunspell-dict-{en, en-au,
en-gb, en-gb-ize, en-us}): Add variables.
(hunspell-dictionary): Explicitly declare upstream libreoffice version to
prevent circular dependency.
* gnu/packages/ebook.scm,
gnu/packages/enchant.scm,
gnu/packages/freedesktop.scm,
gnu/packages/gnuzilla.scm,
gnu/packages/kde-frameworks.scm,
gnu/packages/messaging.scm,
gnu/packages/scribus.scm,
gnu/packages/task-management.scm,
gnu/packages/telegram.scm,
gnu/packages/tex.scm,
gnu/packages/text-editors.scm,
gnu/packages/video.scm: Adjust module imports.
-rw-r--r--gnu/packages/aspell.scm118
-rw-r--r--gnu/packages/ebook.scm3
-rw-r--r--gnu/packages/enchant.scm2
-rw-r--r--gnu/packages/freedesktop.scm2
-rw-r--r--gnu/packages/gnuzilla.scm2
-rw-r--r--gnu/packages/hunspell.scm362
-rw-r--r--gnu/packages/kde-frameworks.scm2
-rw-r--r--gnu/packages/libreoffice.scm233
-rw-r--r--gnu/packages/messaging.scm2
-rw-r--r--gnu/packages/scribus.scm1
-rw-r--r--gnu/packages/task-management.scm2
-rw-r--r--gnu/packages/telegram.scm2
-rw-r--r--gnu/packages/tex.scm1
-rw-r--r--gnu/packages/text-editors.scm2
-rw-r--r--gnu/packages/video.scm2
15 files changed, 374 insertions, 362 deletions
diff --git a/gnu/packages/aspell.scm b/gnu/packages/aspell.scm
index 76deb7cdce..8978b4e087 100644
--- a/gnu/packages/aspell.scm
+++ b/gnu/packages/aspell.scm
@@ -395,124 +395,6 @@ dictionaries, including personal ones.")
                      (base32
                       "0gb8j9iy1acdl11jq76idgc2lbc1rq3w04favn8cyh55d1v8phsk")))
 
-
-;;;
-;;; Hunspell packages made from the Aspell word lists.
-;;;
-
-(define* (aspell-word-list language synopsis
-                           #:optional
-                           (nick (string-map (lambda (chr)
-                                               (if (char=? #\_ chr)
-                                                   #\-
-                                                   chr))
-                                             (string-downcase language))))
-  (package
-    (name (string-append "hunspell-dict-" nick))
-    (version "2018.04.16")
-    (source (origin
-              (method url-fetch)
-              (uri (string-append
-                    "mirror://sourceforge/wordlist/SCOWL/"
-                    version "/scowl-" version ".tar.gz"))
-              (sha256
-               (base32
-                "11lkrnhwrf5mvrrq45k4mads3n9aswgac8dc25ba61c75alxb5rs"))))
-    (native-inputs
-     (list tar gzip perl aspell))
-    (build-system gnu-build-system)
-    (arguments
-     `(#:phases
-       (modify-phases %standard-phases
-         (add-after 'unpack 'make-reproducible
-           (lambda _
-             (substitute* "speller/README_en.txt.sh"
-               (("\\bdate\\b") ""))))
-         (delete 'configure)
-         (delete 'check)
-         (replace 'build
-           (lambda _
-             (substitute* "speller/make-hunspell-dict"
-               (("zip -9 .*$")
-                "return\n"))
-             (mkdir "speller/hunspell")
-
-             ;; XXX: This actually builds all the dictionary variants.
-             (invoke "make" "-C" "speller" "hunspell")))
-         (replace 'install
-           (lambda* (#:key outputs #:allow-other-keys)
-             (let* ((out      (assoc-ref %outputs "out"))
-                    (hunspell (string-append out "/share/hunspell"))
-                    (myspell  (string-append out "/share/myspell"))
-                    (doc      (string-append out "/share/doc/"
-                                             ,name))
-                    (dot-dic  ,(string-append "speller/" language ".dic")))
-               (mkdir-p myspell)
-
-               ;; Usually there's only a 'LANGUAGE.dic' file, but for the "en"
-               ;; dictionary, there no 'en.dic'.  Instead, there's a set of
-               ;; 'en*.dic' files, hence the 'find-files' call below.
-               (if (file-exists? dot-dic)
-                   (install-file dot-dic hunspell)
-                   (for-each (lambda (dic)
-                               (install-file dic hunspell))
-                             (find-files "speller"
-                                         ,(string-append language ".*\\.dic$"))))
-
-               ;; Install affix files corresponding to installed dictionaries
-               (for-each (lambda (dic)
-                           (install-file (string-append
-                                           "speller/" (basename dic ".dic") ".aff")
-                                         hunspell))
-                         (find-files hunspell ".*\\.dic$"))
-               (symlink hunspell (string-append myspell "/dicts"))
-               (for-each (lambda (file)
-                           (install-file file doc))
-                         (find-files "."
-                                     "^(Copyright|.*\\.(txt|org|md))$"))
-               #t))))))
-    (synopsis synopsis)
-    (description
-     "This package provides a dictionary for the Hunspell spell-checking
-library.")
-    (home-page "http://wordlist.aspell.net/")
-    (license (non-copyleft "file://Copyright"
-                           "Word lists come from several sources, all
-under permissive licensing terms.  See the 'Copyright' file."))))
-
-(define-syntax define-word-list-dictionary
-  (syntax-rules (synopsis)
-    ((_ name language (synopsis text))
-     (define-public name
-       (aspell-word-list language text)))
-    ((_ name language nick (synopsis text))
-     (define-public name
-       (aspell-word-list language text nick)))))
-
-(define-word-list-dictionary hunspell-dict-en
-  "en"
-  (synopsis "Hunspell dictionary for English"))
-
-(define-word-list-dictionary hunspell-dict-en-au
-  "en_AU"
-  (synopsis "Hunspell dictionary for Australian English"))
-
-(define-word-list-dictionary hunspell-dict-en-ca
-  "en_CA"
-  (synopsis "Hunspell dictionary for Canadian English"))
-
-(define-word-list-dictionary hunspell-dict-en-gb
-  "en_GB-ise" "en-gb"
-  (synopsis "Hunspell dictionary for British English, with -ise endings"))
-
-(define-word-list-dictionary hunspell-dict-en-gb-ize
-  "en_GB-ize"
-  (synopsis "Hunspell dictionary for British English, with -ize endings"))
-
-(define-word-list-dictionary hunspell-dict-en-us
-  "en_US"
-  (synopsis "Hunspell dictionary for United States English"))
-
 (define-public ispell
   (package
     (name "ispell")
diff --git a/gnu/packages/ebook.scm b/gnu/packages/ebook.scm
index 8dff0f2ec8..b21fcfdc9a 100644
--- a/gnu/packages/ebook.scm
+++ b/gnu/packages/ebook.scm
@@ -56,12 +56,13 @@
   #:use-module (gnu packages gnome)
   #:use-module (gnu packages glib)
   #:use-module (gnu packages gstreamer)
+  #:use-module (gnu packages hunspell)
   #:use-module (gnu packages icu4c)
   #:use-module (gnu packages image)
   #:use-module (gnu packages javascript)
   #:use-module (gnu packages language)
-  #:use-module (gnu packages libusb)
   #:use-module (gnu packages libreoffice)
+  #:use-module (gnu packages libusb)
   #:use-module (gnu packages music)
   #:use-module (gnu packages pantheon)
   #:use-module (gnu packages pdf)
diff --git a/gnu/packages/enchant.scm b/gnu/packages/enchant.scm
index 1f82b2447e..015af0d096 100644
--- a/gnu/packages/enchant.scm
+++ b/gnu/packages/enchant.scm
@@ -25,8 +25,8 @@
   #:use-module (gnu packages boost)
   #:use-module (gnu packages check)
   #:use-module (gnu packages glib)
+  #:use-module (gnu packages hunspell)
   #:use-module (gnu packages icu4c)
-  #:use-module (gnu packages libreoffice)
   #:use-module (gnu packages man)
   #:use-module (gnu packages perl)
   #:use-module (gnu packages pkg-config)
diff --git a/gnu/packages/freedesktop.scm b/gnu/packages/freedesktop.scm
index 304d04a711..515d9b9cea 100644
--- a/gnu/packages/freedesktop.scm
+++ b/gnu/packages/freedesktop.scm
@@ -94,12 +94,12 @@
   #:use-module (gnu packages graphviz)
   #:use-module (gnu packages gstreamer)
   #:use-module (gnu packages gtk)
+  #:use-module (gnu packages hunspell)
   #:use-module (gnu packages ibus)
   #:use-module (gnu packages image)
   #:use-module (gnu packages kde-frameworks)
   #:use-module (gnu packages language)
   #:use-module (gnu packages libffi)
-  #:use-module (gnu packages libreoffice)
   #:use-module (gnu packages libunwind)
   #:use-module (gnu packages libusb)
   #:use-module (gnu packages linux)
diff --git a/gnu/packages/gnuzilla.scm b/gnu/packages/gnuzilla.scm
index b507ec0406..01b6245f8b 100644
--- a/gnu/packages/gnuzilla.scm
+++ b/gnu/packages/gnuzilla.scm
@@ -70,8 +70,8 @@
   #:use-module (gnu packages compression)
   #:use-module (gnu packages fontutils)
   #:use-module (gnu packages fonts)
+  #:use-module (gnu packages hunspell)
   #:use-module (gnu packages libevent)
-  #:use-module (gnu packages libreoffice)  ;for hunspell
   #:use-module (gnu packages image)
   #:use-module (gnu packages libffi)
   #:use-module (gnu packages pulseaudio)
diff --git a/gnu/packages/hunspell.scm b/gnu/packages/hunspell.scm
index 48df196e17..8bc8c38176 100644
--- a/gnu/packages/hunspell.scm
+++ b/gnu/packages/hunspell.scm
@@ -17,13 +17,253 @@
 ;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>.
 
 (define-module (gnu packages hunspell)
+  #:use-module (guix build-system gnu)
   #:use-module (guix build-system trivial)
   #:use-module (guix download)
+  #:use-module (guix gexp)
   #:use-module (guix git-download)
   #:use-module ((guix licenses) #:prefix license:)
   #:use-module (guix packages)
   #:use-module (ice-9 match)
-  #:use-module (gnu packages libreoffice))
+  #:use-module (gnu packages aspell)
+  #:use-module (gnu packages autotools)
+  #:use-module (gnu packages base)
+  #:use-module (gnu packages compression)
+  #:use-module (gnu packages m4)
+  #:use-module (gnu packages perl)
+  #:use-module (gnu packages textutils))
+
+(define-public hunspell
+  (package
+    (name "hunspell")
+    (version "1.7.0")
+    (source
+      (origin
+        (method git-fetch)
+        (uri (git-reference
+               (url "https://github.com/hunspell/hunspell")
+               (commit (string-append "v" version))))
+        (file-name (git-file-name name version))
+        (sha256
+         (base32
+          "0qxlkd012r45ppd21kldbq9k5ac5nmxz290z6m2kch9l56v768k1"))))
+    (build-system gnu-build-system)
+    (native-inputs
+     (list autoconf automake libtool))
+    (inputs
+     (list perl))
+    (native-search-paths (list (search-path-specification
+                                (variable "DICPATH")
+                                (files '("share/hunspell")))))
+    (home-page "https://hunspell.github.io/")
+    (synopsis "Spell checker")
+    (description "Hunspell is a spell checker and morphological analyzer
+library and program designed for languages with rich morphology and complex
+word compounding or character encoding.")
+    ;; Triple license, including "mpl1.1 or later".
+    (license (list license:mpl1.1 license:gpl2+ license:lgpl2.1+))))
+
+(define (dicollecte-french-dictionary variant synopsis)
+  ;; Return a French dictionary package from dicollecte.org, for the given
+  ;; VARIANT.
+  (package
+    (name (match variant
+            ("classique" "hunspell-dict-fr")
+            (_ (string-append "hunspell-dict-fr-" variant))))
+    (version "6.2")
+    (source (origin
+              (uri (string-append
+                    "http://www.dicollecte.org/download/fr/hunspell-french-dictionaries-v"
+                    version ".zip"))
+              (method url-fetch)
+              (sha256
+               (base32
+                "139hfrn5p87sl8hqmgkf6sgvnxrk2mm8vd8xsm8sm98qjnwlg0f9"))))
+    (build-system trivial-build-system)
+    (native-inputs (list unzip))
+    (arguments
+     `(#:modules ((guix build utils))
+       #:builder (begin
+                   (use-modules (guix build utils)
+                                (srfi srfi-26))
+
+                   (let* ((out      (assoc-ref %outputs "out"))
+                          (hunspell (string-append out "/share/hunspell"))
+                          (myspell  (string-append out "/share/myspell"))
+                          (doc      (string-append out "/share/doc/"
+                                                   ,name))
+                          (unzip    (assoc-ref %build-inputs "unzip")))
+                     (invoke (string-append unzip "/bin/unzip")
+                             (assoc-ref %build-inputs "source"))
+                     (for-each (cut install-file <> hunspell)
+                               (find-files "."
+                                           ,(string-append variant
+                                                           "\\.(dic|aff)$")))
+                     (mkdir-p myspell)
+                     (symlink hunspell (string-append myspell "/dicts"))
+                     (for-each (cut install-file <> doc)
+                               (find-files "." "\\.(txt|org|md)$"))
+                     #t))))
+    (synopsis synopsis)
+    (description
+     "This package provides a dictionary for the Hunspell spell-checking
+library.")
+    (home-page "https://www.dicollecte.org/home.php?prj=fr")
+    (license license:mpl2.0)))
+
+(define-syntax define-french-dictionary
+  (syntax-rules (synopsis)
+    ((_ name variant (synopsis text))
+     (define-public name
+       (dicollecte-french-dictionary variant text)))))
+
+(define-french-dictionary hunspell-dict-fr-classique
+  "classique"
+  ;; TRANSLATORS: In French, this is "Français classique".
+  (synopsis "Hunspell dictionary for ``classic'' French (recommended)"))
+
+(define-french-dictionary hunspell-dict-fr-moderne
+  "moderne"
+  ;; TRANSLATORS: In French, this is "Français moderne".
+  (synopsis "Hunspell dictionary for ``modern'' French"))
+
+(define-french-dictionary hunspell-dict-fr-réforme-1990
+  "reforme1990"
+  (synopsis "Hunspell dictionary for the post @dfn{1990 réforme} French"))
+
+(define-french-dictionary hunspell-dict-fr-toutes-variantes
+  "toutesvariantes"
+  (synopsis "Hunspell dictionary for all variants of French"))
+
+(define-public hunspell-dict-pl
+  (package
+    (name "hunspell-dict-pl")
+    (version "20200327")
+    (source
+     (origin
+       (method url-fetch)
+       ;; Since creators of dictionary host only the latest daily release,
+       ;; we're using version mirrored by Arch Linux, which seems good
+       ;; enough. They're mirroring hunspell-pl releases since 2011.
+       (uri (string-append "https://sources.archlinux.org/other/community/"
+                           "hunspell-pl/sjp-myspell-pl-"
+                           version ".zip"))
+       (sha256 (base32
+                "14mzf8glxkp2775dcqisb1zv6r8ncm3bvzl46q352rwyl2dg1c59"))))
+
+    (build-system trivial-build-system)
+    (native-inputs (list unzip))
+    (arguments
+     `(#:modules ((guix build utils))
+       #:builder (begin
+                   (use-modules (guix build utils)
+                                (srfi srfi-26))
+
+                   (let* ((out      (assoc-ref %outputs "out"))
+                          (hunspell (string-append out "/share/hunspell"))
+                          (myspell  (string-append out "/share/myspell"))
+                          (doc      (string-append out "/share/doc/"
+                                                   ,name))
+                          (unzip (search-input-file %build-inputs
+                                                    "/bin/unzip")))
+                     (invoke unzip "-j" "-o" (assoc-ref %build-inputs "source"))
+                     (invoke unzip "-j" "-o" "pl_PL.zip")
+                     (for-each (cut install-file <> hunspell)
+                               (find-files "."
+                                           ,(string-append "pl_PL"
+                                                           "\\.(dic|aff)$")))
+                     (mkdir-p myspell)
+                     (symlink hunspell (string-append myspell "/dicts"))
+                     (for-each (cut install-file <> doc)
+                               (find-files "." "\\.(txt|org|md)$"))
+                     #t))))
+    (synopsis "Hunspell dictionary for Polish")
+    (description
+     "This package provides a dictionary for the Hunspell spell-checking
+library.")
+    (home-page "https://sjp.pl/slownik/ort/")
+    (license
+     (list license:gpl2 license:mpl1.1 license:cc-by4.0 license:lgpl2.1 license:asl2.0))))
+
+(define-public hunspell-dict-de
+  (package
+    (name "hunspell-dict-de")
+    (version "20161207")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "https://www.j3e.de/ispell/igerman98/dict/"
+                           "igerman98-" version ".tar.bz2"))
+       (sha256
+        (base32 "1a3055hp2bc4q4nlg3gmg0147p3a1zlfnc65xiv2v9pyql1nya8p"))))
+    (build-system gnu-build-system)
+    (arguments
+     `(#:make-flags '("hunspell/de_DE.dic")
+       #:phases
+       (modify-phases %standard-phases
+         (delete 'configure)
+         (replace 'install              ;no install target
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let* ((out (assoc-ref outputs "out"))
+                    (share (string-append out "/share/hunspell/")))
+               (install-file "hunspell/de_DE.aff" share)
+               (install-file "hunspell/de_DE.dic" share)
+               #t))))
+       #:tests? #f))        ; no tests
+    (native-inputs
+     (list hunspell ispell perl))
+    (synopsis "Hunspell dictionary for German (de_DE)")
+    (description "This package provides a dictionary for the Hunspell
+spell-checking library.")
+    (home-page "https://www.j3e.de/ispell/igerman98/")
+    (license (list license:gpl2 license:gpl3))))
+
+(define-public hunspell-dict-hu
+  (let ((revision "2")
+        (major+minor "1.7"))
+    (package
+      (name "hunspell-dict-hu")
+      (version (string-append major+minor "-" revision))
+      (source
+       (origin
+         (method url-fetch)
+         (uri (string-append "mirror://sourceforge/magyarispell/Magyar Ispell/"
+                             major+minor
+                             "/magyarispell-" version ".tar.gz"))
+         (sha256
+          (base32 "0r22rvqrp5bzgr9sqyap82kibi5z9n6xy5b06si28idqijw7c772"))))
+      (build-system gnu-build-system)
+      (arguments
+       (list #:make-flags
+             #~(list "myspell"
+                     "--jobs=1"     ;the Makefile is not ready for parallelism
+                     (string-append "SH="
+                                    (search-input-file %build-inputs
+                                                       "/bin/bash"))
+                     (string-append "AWK="
+                                    (search-input-file %build-inputs
+                                                       "/bin/awk")))
+             #:phases
+             #~(modify-phases %standard-phases
+                 (replace 'configure
+                   (lambda* (#:key outputs #:allow-other-keys)
+                     (substitute* "config"
+                       (("/usr/bin/awk")
+                        (which "awk")))))
+                 (replace 'install                ;no install target
+                   (lambda* (#:key outputs #:allow-other-keys)
+                     (let* ((out (assoc-ref outputs "out"))
+                            (share (string-append out "/share/hunspell/")))
+                       (install-file "hu_HU.aff" share)
+                       (install-file "hu_HU.dic" share)))))
+             #:tests? #f))                        ; no tests
+      (native-inputs
+       (list hunspell m4 recode))
+      (synopsis "Hunspell dictionary for Hungarian (hu_HU)")
+      (description "This package provides a dictionary for the Hunspell
+spell-checking library.")
+      (home-page "http://magyarispell.sourceforge.net/")
+      (license (list license:gpl2 license:gpl3)))))
 
 (define* (hunspell-dictionary dict-name full-name #:key synopsis home-page license)
   (package
@@ -35,7 +275,7 @@
                          (#\_ #\-)
                          (chr chr))
                        (string-downcase dict-name))))
-    (version (package-version libreoffice))
+    (version "7.4.3.2")
     (source
      (origin
        (method git-fetch)
@@ -79,3 +319,121 @@ spell-checking library.")
                          #:synopsis (synopsis "Hunspell dictionary for Italian")
                          #:home-page "https://www.libreitalia.org/"
                          #:license license:gpl3)))
+
+;;;
+;;; Hunspell packages made from the Aspell word lists.
+;;;
+
+(define* (aspell-word-list language synopsis
+                           #:optional
+                           (nick (string-map (lambda (chr)
+                                               (if (char=? #\_ chr)
+                                                   #\-
+                                                   chr))
+                                             (string-downcase language))))
+  (package
+    (name (string-append "hunspell-dict-" nick))
+    (version "2018.04.16")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append
+                    "mirror://sourceforge/wordlist/SCOWL/"
+                    version "/scowl-" version ".tar.gz"))
+              (sha256
+               (base32
+                "11lkrnhwrf5mvrrq45k4mads3n9aswgac8dc25ba61c75alxb5rs"))))
+    (native-inputs
+     (list tar gzip perl aspell))
+    (build-system gnu-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'make-reproducible
+           (lambda _
+             (substitute* "speller/README_en.txt.sh"
+               (("\\bdate\\b") ""))))
+         (delete 'configure)
+         (delete 'check)
+         (replace 'build
+           (lambda _
+             (substitute* "speller/make-hunspell-dict"
+               (("zip -9 .*$")
+                "return\n"))
+             (mkdir "speller/hunspell")
+
+             ;; XXX: This actually builds all the dictionary variants.
+             (invoke "make" "-C" "speller" "hunspell")))
+         (replace 'install
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let* ((out      (assoc-ref %outputs "out"))
+                    (hunspell (string-append out "/share/hunspell"))
+                    (myspell  (string-append out "/share/myspell"))
+                    (doc      (string-append out "/share/doc/"
+                                             ,name))
+                    (dot-dic  ,(string-append "speller/" language ".dic")))
+               (mkdir-p myspell)
+
+               ;; Usually there's only a 'LANGUAGE.dic' file, but for the "en"
+               ;; dictionary, there no 'en.dic'.  Instead, there's a set of
+               ;; 'en*.dic' files, hence the 'find-files' call below.
+               (if (file-exists? dot-dic)
+                   (install-file dot-dic hunspell)
+                   (for-each (lambda (dic)
+                               (install-file dic hunspell))
+                             (find-files "speller"
+                                         ,(string-append language ".*\\.dic$"))))
+
+               ;; Install affix files corresponding to installed dictionaries
+               (for-each (lambda (dic)
+                           (install-file (string-append
+                                           "speller/" (basename dic ".dic") ".aff")
+                                         hunspell))
+                         (find-files hunspell ".*\\.dic$"))
+               (symlink hunspell (string-append myspell "/dicts"))
+               (for-each (lambda (file)
+                           (install-file file doc))
+                         (find-files "."
+                                     "^(Copyright|.*\\.(txt|org|md))$"))
+               #t))))))
+    (synopsis synopsis)
+    (description
+     "This package provides a dictionary for the Hunspell spell-checking
+library.")
+    (home-page "http://wordlist.aspell.net/")
+    (license (license:non-copyleft "file://Copyright"
+                                   "Word lists come from several sources, all
+under permissive licensing terms.  See the 'Copyright' file."))))
+
+(define-syntax define-word-list-dictionary
+  (syntax-rules (synopsis)
+    ((_ name language (synopsis text))
+     (define-public name
+       (aspell-word-list language text)))
+    ((_ name language nick (synopsis text))
+     (define-public name
+       (aspell-word-list language text nick)))))
+
+(define-word-list-dictionary hunspell-dict-en
+  "en"
+  (synopsis "Hunspell dictionary for English"))
+
+(define-word-list-dictionary hunspell-dict-en-au
+  "en_AU"
+  (synopsis "Hunspell dictionary for Australian English"))
+
+(define-word-list-dictionary hunspell-dict-en-ca
+  "en_CA"
+  (synopsis "Hunspell dictionary for Canadian English"))
+
+(define-word-list-dictionary hunspell-dict-en-gb
+  "en_GB-ise" "en-gb"
+  (synopsis "Hunspell dictionary for British English, with -ise endings"))
+
+(define-word-list-dictionary hunspell-dict-en-gb-ize
+  "en_GB-ize"
+  (synopsis "Hunspell dictionary for British English, with -ize endings"))
+
+(define-word-list-dictionary hunspell-dict-en-us
+  "en_US"
+  (synopsis "Hunspell dictionary for United States English"))
+
diff --git a/gnu/packages/kde-frameworks.scm b/gnu/packages/kde-frameworks.scm
index aaa5a82d5f..fb578ee7e1 100644
--- a/gnu/packages/kde-frameworks.scm
+++ b/gnu/packages/kde-frameworks.scm
@@ -64,13 +64,13 @@
   #:use-module (gnu packages graphviz)
   #:use-module (gnu packages gstreamer)
   #:use-module (gnu packages gtk)
+  #:use-module (gnu packages hunspell)
   #:use-module (gnu packages image)
   #:use-module (gnu packages iso-codes)
   #:use-module (gnu packages kerberos)
   #:use-module (gnu packages kde)
   #:use-module (gnu packages kde-plasma)
   #:use-module (gnu packages libcanberra)
-  #:use-module (gnu packages libreoffice)
   #:use-module (gnu packages linux)
   #:use-module (gnu packages mp3)
   #:use-module (gnu packages openbox)
diff --git a/gnu/packages/libreoffice.scm b/gnu/packages/libreoffice.scm
index 2103aec5a0..b959470d8f 100644
--- a/gnu/packages/libreoffice.scm
+++ b/gnu/packages/libreoffice.scm
@@ -70,6 +70,7 @@
   #:use-module (gnu packages graphics)
   #:use-module (gnu packages gstreamer)
   #:use-module (gnu packages gtk)
+  #:use-module (gnu packages hunspell)
   #:use-module (gnu packages icu4c)
   #:use-module (gnu packages image)
   #:use-module (gnu packages java)
@@ -792,191 +793,6 @@ Callisto/Draw documents.  Currently it only understands documents created by
 Zoner Draw version 4 and 5.")
     (license license:mpl2.0)))
 
-(define-public hunspell
-  (package
-    (name "hunspell")
-    (version "1.7.0")
-    (source
-      (origin
-        (method git-fetch)
-        (uri (git-reference
-               (url "https://github.com/hunspell/hunspell")
-               (commit (string-append "v" version))))
-        (file-name (git-file-name name version))
-        (sha256
-         (base32
-          "0qxlkd012r45ppd21kldbq9k5ac5nmxz290z6m2kch9l56v768k1"))))
-    (build-system gnu-build-system)
-    (native-inputs
-     (list autoconf automake libtool))
-    (inputs
-     (list perl))
-    (native-search-paths (list (search-path-specification
-                                (variable "DICPATH")
-                                (files '("share/hunspell")))))
-    (home-page "https://hunspell.github.io/")
-    (synopsis "Spell checker")
-    (description "Hunspell is a spell checker and morphological analyzer
-library and program designed for languages with rich morphology and complex
-word compounding or character encoding.")
-    ;; Triple license, including "mpl1.1 or later".
-    (license (list license:mpl1.1 license:gpl2+ license:lgpl2.1+))))
-
-(define (dicollecte-french-dictionary variant synopsis)
-  ;; Return a French dictionary package from dicollecte.org, for the given
-  ;; VARIANT.
-  (package
-    (name (match variant
-            ("classique" "hunspell-dict-fr")
-            (_ (string-append "hunspell-dict-fr-" variant))))
-    (version "6.2")
-    (source (origin
-              (uri (string-append
-                    "http://www.dicollecte.org/download/fr/hunspell-french-dictionaries-v"
-                    version ".zip"))
-              (method url-fetch)
-              (sha256
-               (base32
-                "139hfrn5p87sl8hqmgkf6sgvnxrk2mm8vd8xsm8sm98qjnwlg0f9"))))
-    (build-system trivial-build-system)
-    (native-inputs (list unzip))
-    (arguments
-     `(#:modules ((guix build utils))
-       #:builder (begin
-                   (use-modules (guix build utils)
-                                (srfi srfi-26))
-
-                   (let* ((out      (assoc-ref %outputs "out"))
-                          (hunspell (string-append out "/share/hunspell"))
-                          (myspell  (string-append out "/share/myspell"))
-                          (doc      (string-append out "/share/doc/"
-                                                   ,name))
-                          (unzip    (assoc-ref %build-inputs "unzip")))
-                     (invoke (string-append unzip "/bin/unzip")
-                             (assoc-ref %build-inputs "source"))
-                     (for-each (cut install-file <> hunspell)
-                               (find-files "."
-                                           ,(string-append variant
-                                                           "\\.(dic|aff)$")))
-                     (mkdir-p myspell)
-                     (symlink hunspell (string-append myspell "/dicts"))
-                     (for-each (cut install-file <> doc)
-                               (find-files "." "\\.(txt|org|md)$"))
-                     #t))))
-    (synopsis synopsis)
-    (description
-     "This package provides a dictionary for the Hunspell spell-checking
-library.")
-    (home-page "https://www.dicollecte.org/home.php?prj=fr")
-    (license license:mpl2.0)))
-
-(define-syntax define-french-dictionary
-  (syntax-rules (synopsis)
-    ((_ name variant (synopsis text))
-     (define-public name
-       (dicollecte-french-dictionary variant text)))))
-
-(define-french-dictionary hunspell-dict-fr-classique
-  "classique"
-  ;; TRANSLATORS: In French, this is "Français classique".
-  (synopsis "Hunspell dictionary for ``classic'' French (recommended)"))
-
-(define-french-dictionary hunspell-dict-fr-moderne
-  "moderne"
-  ;; TRANSLATORS: In French, this is "Français moderne".
-  (synopsis "Hunspell dictionary for ``modern'' French"))
-
-(define-french-dictionary hunspell-dict-fr-réforme-1990
-  "reforme1990"
-  (synopsis "Hunspell dictionary for the post @dfn{1990 réforme} French"))
-
-(define-french-dictionary hunspell-dict-fr-toutes-variantes
-  "toutesvariantes"
-  (synopsis "Hunspell dictionary for all variants of French"))
-
-(define-public hunspell-dict-pl
-  (package
-    (name "hunspell-dict-pl")
-    (version "20200327")
-    (source
-     (origin
-       (method url-fetch)
-       ;; Since creators of dictionary host only the latest daily release,
-       ;; we're using version mirrored by Arch Linux, which seems good
-       ;; enough. They're mirroring hunspell-pl releases since 2011.
-       (uri (string-append "https://sources.archlinux.org/other/community/"
-                           "hunspell-pl/sjp-myspell-pl-"
-                           version ".zip"))
-       (sha256 (base32
-                "14mzf8glxkp2775dcqisb1zv6r8ncm3bvzl46q352rwyl2dg1c59"))))
-
-    (build-system trivial-build-system)
-    (native-inputs (list unzip))
-    (arguments
-     `(#:modules ((guix build utils))
-       #:builder (begin
-                   (use-modules (guix build utils)
-                                (srfi srfi-26))
-
-                   (let* ((out      (assoc-ref %outputs "out"))
-                          (hunspell (string-append out "/share/hunspell"))
-                          (myspell  (string-append out "/share/myspell"))
-                          (doc      (string-append out "/share/doc/"
-                                                   ,name))
-                          (unzip (search-input-file %build-inputs
-                                                    "/bin/unzip")))
-                     (invoke unzip "-j" "-o" (assoc-ref %build-inputs "source"))
-                     (invoke unzip "-j" "-o" "pl_PL.zip")
-                     (for-each (cut install-file <> hunspell)
-                               (find-files "."
-                                           ,(string-append "pl_PL"
-                                                           "\\.(dic|aff)$")))
-                     (mkdir-p myspell)
-                     (symlink hunspell (string-append myspell "/dicts"))
-                     (for-each (cut install-file <> doc)
-                               (find-files "." "\\.(txt|org|md)$"))
-                     #t))))
-    (synopsis "Hunspell dictionary for Polish")
-    (description
-     "This package provides a dictionary for the Hunspell spell-checking
-library.")
-    (home-page "https://sjp.pl/slownik/ort/")
-    (license
-     (list license:gpl2 license:mpl1.1 license:cc-by4.0 license:lgpl2.1 license:asl2.0))))
-
-(define-public hunspell-dict-de
-  (package
-    (name "hunspell-dict-de")
-    (version "20161207")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append "https://www.j3e.de/ispell/igerman98/dict/"
-                           "igerman98-" version ".tar.bz2"))
-       (sha256
-        (base32 "1a3055hp2bc4q4nlg3gmg0147p3a1zlfnc65xiv2v9pyql1nya8p"))))
-    (build-system gnu-build-system)
-    (arguments
-     `(#:make-flags '("hunspell/de_DE.dic")
-       #:phases
-       (modify-phases %standard-phases
-         (delete 'configure)
-         (replace 'install              ;no install target
-           (lambda* (#:key outputs #:allow-other-keys)
-             (let* ((out (assoc-ref outputs "out"))
-                    (share (string-append out "/share/hunspell/")))
-               (install-file "hunspell/de_DE.aff" share)
-               (install-file "hunspell/de_DE.dic" share)
-               #t))))
-       #:tests? #f))        ; no tests
-    (native-inputs
-     (list hunspell ispell perl))
-    (synopsis "Hunspell dictionary for German (de_DE)")
-    (description "This package provides a dictionary for the Hunspell
-spell-checking library.")
-    (home-page "https://www.j3e.de/ispell/igerman98/")
-    (license (list license:gpl2 license:gpl3))))
-
 (define-public hyphen
   (package
     (name "hyphen")
@@ -1000,53 +816,6 @@ patterns, which are pre-processed by a perl script.")
     (license
      (list license:mpl1.1 license:mpl2.0 license:gpl2+ license:lgpl2.1+))))
 
-(define-public hunspell-dict-hu
-  (let ((revision "2")
-        (major+minor "1.7"))
-    (package
-      (name "hunspell-dict-hu")
-      (version (string-append major+minor "-" revision))
-      (source
-       (origin
-         (method url-fetch)
-         (uri (string-append "mirror://sourceforge/magyarispell/Magyar Ispell/"
-                             major+minor
-                             "/magyarispell-" version ".tar.gz"))
-         (sha256
-          (base32 "0r22rvqrp5bzgr9sqyap82kibi5z9n6xy5b06si28idqijw7c772"))))
-      (build-system gnu-build-system)
-      (arguments
-       (list #:make-flags
-             #~(list "myspell"
-                     "--jobs=1"     ;the Makefile is not ready for parallelism
-                     (string-append "SH="
-                                    (search-input-file %build-inputs
-                                                       "/bin/bash"))
-                     (string-append "AWK="
-                                    (search-input-file %build-inputs
-                                                       "/bin/awk")))
-             #:phases
-             #~(modify-phases %standard-phases
-                 (replace 'configure
-                   (lambda* (#:key outputs #:allow-other-keys)
-                     (substitute* "config"
-                       (("/usr/bin/awk")
-                        (which "awk")))))
-                 (replace 'install                ;no install target
-                   (lambda* (#:key outputs #:allow-other-keys)
-                     (let* ((out (assoc-ref outputs "out"))
-                            (share (string-append out "/share/hunspell/")))
-                       (install-file "hu_HU.aff" share)
-                       (install-file "hu_HU.dic" share)))))
-             #:tests? #f))                        ; no tests
-      (native-inputs
-       (list hunspell m4 recode))
-      (synopsis "Hunspell dictionary for Hungarian (hu_HU)")
-      (description "This package provides a dictionary for the Hunspell
-spell-checking library.")
-      (home-page "http://magyarispell.sourceforge.net/")
-      (license (list license:gpl2 license:gpl3)))))
-
 (define-public mythes
   (package
     (name "mythes")
diff --git a/gnu/packages/messaging.scm b/gnu/packages/messaging.scm
index 7b693a07fa..80a058f12e 100644
--- a/gnu/packages/messaging.scm
+++ b/gnu/packages/messaging.scm
@@ -88,6 +88,7 @@
   #:use-module (gnu packages gstreamer)
   #:use-module (gnu packages gtk)
   #:use-module (gnu packages guile)
+  #:use-module (gnu packages hunspell)
   #:use-module (gnu packages icu4c)
   #:use-module (gnu packages image)
   #:use-module (gnu packages kde)
@@ -98,7 +99,6 @@
   #:use-module (gnu packages libevent)
   #:use-module (gnu packages libffi)
   #:use-module (gnu packages libidn)
-  #:use-module (gnu packages libreoffice)
   #:use-module (gnu packages linux)
   #:use-module (gnu packages logging)
   #:use-module (gnu packages lua)
diff --git a/gnu/packages/scribus.scm b/gnu/packages/scribus.scm
index a1d81f5697..de598ac2f4 100644
--- a/gnu/packages/scribus.scm
+++ b/gnu/packages/scribus.scm
@@ -34,6 +34,7 @@
   #:use-module (gnu packages fontutils)
   #:use-module (gnu packages ghostscript)
   #:use-module (gnu packages gtk)
+  #:use-module (gnu packages hunspell)
   #:use-module (gnu packages icu4c)
   #:use-module (gnu packages image)
   #:use-module (gnu packages imagemagick)
diff --git a/gnu/packages/task-management.scm b/gnu/packages/task-management.scm
index cb5cc6ff0d..c4f7f99049 100644
--- a/gnu/packages/task-management.scm
+++ b/gnu/packages/task-management.scm
@@ -36,7 +36,7 @@
   #:use-module (gnu packages gnome)
   #:use-module (gnu packages gstreamer)
   #:use-module (gnu packages gtk)
-  #:use-module (gnu packages libreoffice)  ;for hunspell
+  #:use-module (gnu packages hunspell)
   #:use-module (gnu packages linux)
   #:use-module (gnu packages lua)
   #:use-module (gnu packages ncurses)
diff --git a/gnu/packages/telegram.scm b/gnu/packages/telegram.scm
index 82c9227ba8..14e0602d93 100644
--- a/gnu/packages/telegram.scm
+++ b/gnu/packages/telegram.scm
@@ -38,12 +38,12 @@
   #:use-module (gnu packages gnome)
   #:use-module (gnu packages gnupg)
   #:use-module (gnu packages gtk)
+  #:use-module (gnu packages hunspell)
   #:use-module (gnu packages image)
   #:use-module (gnu packages jemalloc)
   #:use-module (gnu packages kde-frameworks)
   #:use-module (gnu packages language)
   #:use-module (gnu packages libevent)
-  #:use-module (gnu packages libreoffice)
   #:use-module (gnu packages linux)
   #:use-module (gnu packages llvm)
   #:use-module (gnu packages lxqt)
diff --git a/gnu/packages/tex.scm b/gnu/packages/tex.scm
index a600bcae58..13bc000918 100644
--- a/gnu/packages/tex.scm
+++ b/gnu/packages/tex.scm
@@ -69,6 +69,7 @@
   #:use-module (gnu packages ghostscript)
   #:use-module (gnu packages graphviz)
   #:use-module (gnu packages gtk)
+  #:use-module (gnu packages hunspell)
   #:use-module (gnu packages icu4c)
   #:use-module (gnu packages image)
   #:use-module (gnu packages libreoffice)
diff --git a/gnu/packages/text-editors.scm b/gnu/packages/text-editors.scm
index 854a424b8a..0094959cbb 100644
--- a/gnu/packages/text-editors.scm
+++ b/gnu/packages/text-editors.scm
@@ -72,10 +72,10 @@
   #:use-module (gnu packages gtk)
   #:use-module (gnu packages guile)
   #:use-module (gnu packages haskell-xyz)
+  #:use-module (gnu packages hunspell)
   #:use-module (gnu packages icu4c)
   #:use-module (gnu packages image)
   #:use-module (gnu packages libbsd)
-  #:use-module (gnu packages libreoffice)
   #:use-module (gnu packages llvm)
   #:use-module (gnu packages lua)
   #:use-module (gnu packages ncurses)
diff --git a/gnu/packages/video.scm b/gnu/packages/video.scm
index c4b0024d06..e934379ff4 100644
--- a/gnu/packages/video.scm
+++ b/gnu/packages/video.scm
@@ -145,11 +145,11 @@
   #:use-module (gnu packages gstreamer)
   #:use-module (gnu packages gtk)
   #:use-module (gnu packages haskell-xyz)
+  #:use-module (gnu packages hunspell)
   #:use-module (gnu packages image)
   #:use-module (gnu packages imagemagick)
   #:use-module (gnu packages iso-codes)
   #:use-module (gnu packages libidn)
-  #:use-module (gnu packages libreoffice)
   #:use-module (gnu packages libusb)
   #:use-module (gnu packages linux)
   #:use-module (gnu packages llvm)