diff --git a/maintainers/maintainer-list.nix b/maintainers/maintainer-list.nix index 9af80b4fac1f..e91cc0e4174d 100644 --- a/maintainers/maintainer-list.nix +++ b/maintainers/maintainer-list.nix @@ -9963,6 +9963,12 @@ githubId = 782440; name = "Luna Nova"; }; + lurkki = { + email = "jussi.kuokkanen@protonmail.com"; + github = "Lurkki14"; + githubId = 44469719; + name = "Jussi Kuokkanen"; + }; lux = { email = "lux@lux.name"; github = "luxzeitlos"; diff --git a/pkgs/development/libraries/hfst-ospell/default.nix b/pkgs/development/libraries/hfst-ospell/default.nix new file mode 100644 index 000000000000..ad07025cc35d --- /dev/null +++ b/pkgs/development/libraries/hfst-ospell/default.nix @@ -0,0 +1,46 @@ +{ lib +, stdenv +, autoreconfHook +, fetchFromGitHub +, icu +, libarchive +, pkg-config +}: + +stdenv.mkDerivation (finalAttrs: { + pname = "hfst-ospell"; + version = "0.5.3"; + + src = fetchFromGitHub { + owner = "hfst"; + repo = "hfst-ospell"; + rev = "refs/tags/v${finalAttrs.version}"; + hash = "sha256-16H1nbAIe+G71+TnlLG0WnH9LktZwmc0d0O+oYduH1k="; + }; + + buildInputs = [ + icu + libarchive + ]; + + nativeBuildInputs = [ + autoreconfHook + pkg-config + ]; + + # libxmlxx is listed as a dependency but Darwin build fails with it, + # might also be better in general since libxmlxx in Nixpkgs is 8 years old + # https://github.com/hfst/hfst-ospell/issues/48#issuecomment-546535653 + configureFlags = [ + "--without-libxmlpp" + "--without-tinyxml2" + ]; + + meta = with lib; { + homepage = "https://github.com/hfst/hfst-ospell/"; + description = "HFST spell checker library and command line tool "; + license = licenses.asl20; + maintainers = with maintainers; [ lurkki ]; + platforms = platforms.unix; + }; +}) diff --git a/pkgs/development/libraries/hfst/default.nix b/pkgs/development/libraries/hfst/default.nix new file mode 100644 index 000000000000..41707bbd4986 --- /dev/null +++ b/pkgs/development/libraries/hfst/default.nix @@ -0,0 +1,53 @@ +{ lib +, autoreconfHook +, bison +, flex +, foma +, fetchFromGitHub +, gettext +, icu +, stdenv +, swig +, pkg-config +, zlib +}: + +stdenv.mkDerivation (finalAttrs: { + pname = "hfst"; + version = "3.16.0"; + + src = fetchFromGitHub { + owner = "hfst"; + repo = "hfst"; + rev = "refs/tags/v${finalAttrs.version}"; + hash = "sha256-2ST0s08Pcp+hTn7rUTgPE1QkH6PPWtiuFezXV3QW0kU="; + }; + + nativeBuildInputs = [ + autoreconfHook + bison + flex + pkg-config + swig + ]; + + buildInputs = [ + foma + gettext + icu + zlib + ]; + + configureFlags = [ + "--enable-all-tools" + "--with-foma-upstream=true" + ]; + + meta = with lib; { + description = "FST language processing library"; + homepage = "https://github.com/hfst/hfst"; + license = licenses.gpl3Plus; + maintainers = with maintainers; [ lurkki ]; + platforms = platforms.unix; + }; +}) diff --git a/pkgs/development/libraries/libvoikko/default.nix b/pkgs/development/libraries/libvoikko/default.nix new file mode 100644 index 000000000000..3f5f4ef5c858 --- /dev/null +++ b/pkgs/development/libraries/libvoikko/default.nix @@ -0,0 +1,40 @@ +{ stdenv +, lib +, autoreconfHook +, hfst-ospell +, fetchFromGitHub +, pkg-config +, python3 +}: + +stdenv.mkDerivation (finalAttrs: { + pname = "libvoikko"; + version = "4.3.2"; + + src = fetchFromGitHub { + owner = "voikko"; + repo = "corevoikko"; + rev = "refs/tags/rel-libvoikko-${finalAttrs.version}"; + hash = "sha256-0MIQ54dCxyAfdgYWmmTVF+Yfa15K2sjJyP1JNxwHP2M="; + }; + + sourceRoot = "${finalAttrs.src.name}/libvoikko"; + + nativeBuildInputs = [ + autoreconfHook + pkg-config + python3 + ]; + + buildInputs = [ + hfst-ospell + ]; + + meta = with lib; { + homepage = "https://voikko.puimula.org/"; + description = "Finnish language processing library"; + license = licenses.lgpl21Plus; + maintainers = with maintainers; [ lurkki ]; + platforms = platforms.unix; + }; +}) diff --git a/pkgs/development/libraries/omorfi/default.nix b/pkgs/development/libraries/omorfi/default.nix new file mode 100644 index 000000000000..d6d0f1741d17 --- /dev/null +++ b/pkgs/development/libraries/omorfi/default.nix @@ -0,0 +1,81 @@ +{ lib +, stdenv +, autoreconfHook +, cg3 +, fetchFromGitHub +, hfst +, hfst-ospell +, icu +, libvoikko +, makeWrapper +, pkg-config +, python3 +, zip +}: + +stdenv.mkDerivation (finalAttrs: { + pname = "omorfi"; + version = "0.9.9"; + + src = fetchFromGitHub { + owner = "flammie"; + repo = "omorfi"; + rev = "refs/tags/v${finalAttrs.version}"; + hash = "sha256-UoqdwNWCNOPX6u1YBlnXUcB/fmcvcy/HXbYciVrMBOY="; + }; + + # Fix for omorfi-hyphenate.sh file not found error + postInstall = '' + ln -s $out/share/omorfi/{omorfi.hyphenate-rules.hfst,omorfi.hyphenate.hfst} + ''; + + nativeBuildInputs = [ + autoreconfHook + cg3 + makeWrapper + pkg-config + python3 + zip + python3.pkgs.wrapPython + ]; + + buildInputs = [ + python3.pkgs.hfst + hfst-ospell + libvoikko + ]; + + # Supplied pkg-config file doesn't properly expose these + propagatedBuildInputs = [ + hfst + icu + ]; + + # Wrap shell scripts so they find the Python scripts + # omorfi.bash inexplicably fails when wrapped + preFixup = '' + wrapPythonProgramsIn "$out/bin" "$out ${python3.pkgs.hfst}" + for i in "$out/bin"/*.{sh,bash}; do + if [ $(basename "$i") != "omorfi.bash" ]; then + wrapProgram "$i" --prefix "PATH" : "$out/bin/" + fi + done + ''; + + # Enable all features + configureFlags = [ + "--enable-labeled-segments" + "--enable-lemmatiser" + "--enable-segmenter" + "--enable-hyphenator" + ]; + + meta = with lib; { + description = "Analysis for Finnish text"; + homepage = "https://github.com/flammie/omorfi"; + license = licenses.gpl3; + maintainers = with maintainers; [ lurkki ]; + # Darwin build fails due to hfst not being found + broken = stdenv.isDarwin; + }; +}) diff --git a/pkgs/development/python-modules/hfst/default.nix b/pkgs/development/python-modules/hfst/default.nix new file mode 100644 index 000000000000..b865c4c84d63 --- /dev/null +++ b/pkgs/development/python-modules/hfst/default.nix @@ -0,0 +1,45 @@ +{ lib +, pkgs +, stdenv +, buildPythonPackage +, foma +, icu +, swig +}: + +buildPythonPackage rec { + pname = "hfst"; + inherit (pkgs.hfst) version src; + + sourceRoot = "${src.name}/python"; + + postPatch = '' + # omorfi-python looks for 'hfst' Python package + sed -i 's/libhfst_swig/hfst/' setup.py; + ''; + + nativeBuildInputs = [ + swig + ]; + + buildInputs = [ + icu + pkgs.hfst + ]; + + setupPyBuildFlags = [ + "--inplace" + ]; + + # Find foma in Darwin tests + preCheck = lib.optionalString stdenv.isDarwin '' + export DYLD_LIBRARY_PATH="${foma}/lib" + ''; + + meta = with lib; { + description = "Python bindings for HFST"; + homepage = "https://github.com/hfst/hfst"; + license = licenses.gpl3; + maintainers = with maintainers; [ lurkki ]; + }; +} diff --git a/pkgs/development/python-modules/omorfi/default.nix b/pkgs/development/python-modules/omorfi/default.nix new file mode 100644 index 000000000000..6bbe964de734 --- /dev/null +++ b/pkgs/development/python-modules/omorfi/default.nix @@ -0,0 +1,32 @@ +{ buildPythonPackage +, pkgs +, lib +, stdenv +, hfst +}: + +buildPythonPackage rec { + pname = "omorfi"; + inherit (pkgs.omorfi) src version; + + sourceRoot = "${src.name}/src/python"; + + propagatedBuildInputs = [ + hfst + ]; + + # Fixes some improper import paths + patches = [ ./importfix.patch ]; + + # Apply patch relative to source/src + patchFlags = [ "-p3" ]; + + meta = with lib; { + description = "Python interface for Omorfi"; + homepage = "https://github.com/flammie/omorfi"; + license = licenses.gpl3; + maintainers = with maintainers; [ lurkki ]; + # Ofborg build error (hfst not found?) + broken = stdenv.isDarwin; + }; +} diff --git a/pkgs/development/python-modules/omorfi/importfix.patch b/pkgs/development/python-modules/omorfi/importfix.patch new file mode 100644 index 000000000000..67a54363c7b1 --- /dev/null +++ b/pkgs/development/python-modules/omorfi/importfix.patch @@ -0,0 +1,76 @@ +diff --git a/src/python/omorfi/entryguessing/gradation.py b/src/python/omorfi/entryguessing/gradation.py +index 7d3ed8cb..825d7ead 100755 +--- a/src/python/omorfi/entryguessing/gradation.py ++++ b/src/python/omorfi/entryguessing/gradation.py +@@ -17,8 +17,8 @@ + # You should have received a copy of the GNU General Public License + # along with this program. If not, see . + +-from .omorfi.error_logging import fail_guess_because +-from .omorfi.string_mangling import replace_rightmost, replace_rightmosts ++from omorfi.error_logging import fail_guess_because ++from omorfi.string_manglers import replace_rightmost, replace_rightmosts + + + def gradation_make_morphophonemes(wordmap): +diff --git a/src/python/omorfi/entryguessing/guess_new_class.py b/src/python/omorfi/entryguessing/guess_new_class.py +index 1884716b..3a781bfc 100755 +--- a/src/python/omorfi/entryguessing/guess_new_class.py ++++ b/src/python/omorfi/entryguessing/guess_new_class.py +@@ -17,8 +17,8 @@ + # You should have received a copy of the GNU General Public License + # along with this program. If not, see . + +-from .error_logging import fail_guess_because +-from .string_manglers import three_syllable ++from omorfi.error_logging import fail_guess_because ++from omorfi.string_manglers import three_syllable + + + def guess_new_class(wordmap): +diff --git a/src/python/omorfi/entryguessing/plurale_tantum.py b/src/python/omorfi/entryguessing/plurale_tantum.py +index a8af81fb..95fc4b7b 100755 +--- a/src/python/omorfi/entryguessing/plurale_tantum.py ++++ b/src/python/omorfi/entryguessing/plurale_tantum.py +@@ -17,8 +17,8 @@ + # You should have received a copy of the GNU General Public License + # along with this program. If not, see . + +-from .error_logging import fail_guess_because +-from .omorfi.string_manglers import replace_rightmost, replace_rightmosts ++from omorfi.error_logging import fail_guess_because ++from omorfi.string_manglers import replace_rightmost, replace_rightmosts + + + def plurale_tantum_get_singular_stem(wordmap): +diff --git a/src/python/omorfi/formats/experimental_xml_formatter.py b/src/python/omorfi/formats/experimental_xml_formatter.py +index abccbff5..11b0f518 100755 +--- a/src/python/omorfi/formats/experimental_xml_formatter.py ++++ b/src/python/omorfi/formats/experimental_xml_formatter.py +@@ -19,9 +19,9 @@ + + from xml.sax.saxutils import escape as xml_escape + +-from ftb3_formatter import Ftb3Formatter ++from .ftb3_formatter import Ftb3Formatter + +-from .settings import version_id_easter_egg ++from omorfi.settings import version_id_easter_egg + + + def make_xmlid(s): +diff --git a/src/python/omorfi/formats/lexc_formatter.py b/src/python/omorfi/formats/lexc_formatter.py +index 4ec616b7..b146129f 100755 +--- a/src/python/omorfi/formats/lexc_formatter.py ++++ b/src/python/omorfi/formats/lexc_formatter.py +@@ -19,8 +19,8 @@ + + # functions for formatting the database data to lexc + +-from .settings import deriv_boundary, morph_boundary, newword_boundary, optional_hyphen, stub_boundary, word_boundary +-from .string_manglers import lexc_escape ++from omorfi.settings import deriv_boundary, morph_boundary, newword_boundary, optional_hyphen, stub_boundary, word_boundary ++from omorfi.string_manglers import lexc_escape + + + def format_copyright_lexc(): diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 050b7eb6235c..10a2ff4df8b8 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -41577,6 +41577,14 @@ with pkgs; charasay = callPackage ../tools/misc/charasay { }; + libvoikko = callPackage ../development/libraries/libvoikko { }; + + hfst = callPackage ../development/libraries/hfst { }; + + omorfi = callPackage ../development/libraries/omorfi { }; + + hfst-ospell = callPackage ../development/libraries/hfst-ospell { }; + waylyrics = callPackage ../applications/audio/waylyrics { }; gitrs = callPackage ../tools/misc/gitrs { }; diff --git a/pkgs/top-level/python-packages.nix b/pkgs/top-level/python-packages.nix index 7344b930e6c4..e643cf5861c9 100644 --- a/pkgs/top-level/python-packages.nix +++ b/pkgs/top-level/python-packages.nix @@ -4718,6 +4718,8 @@ self: super: with self; { hexdump = callPackage ../development/python-modules/hexdump { }; + hfst = callPackage ../development/python-modules/hfst { }; + hg-commitsigs = callPackage ../development/python-modules/hg-commitsigs { }; hg-evolve = callPackage ../development/python-modules/hg-evolve { }; @@ -7282,6 +7284,8 @@ self: super: with self; { omnilogic = callPackage ../development/python-modules/omnilogic { }; + omorfi = callPackage ../development/python-modules/omorfi { }; + omrdatasettools = callPackage ../development/python-modules/omrdatasettools { }; ondilo = callPackage ../development/python-modules/ondilo { };