diff --git a/pkgs/development/python-modules/gftools/default.nix b/pkgs/development/python-modules/gftools/default.nix new file mode 100644 index 000000000000..9418d7c1acd4 --- /dev/null +++ b/pkgs/development/python-modules/gftools/default.nix @@ -0,0 +1,207 @@ +{ + lib, + fetchFromGitHub, + buildPythonPackage, + pytestCheckHook, + setuptools, + setuptools-scm, + absl-py, + afdko, + axisregistry, + babelfont, + beautifulsoup4, + black, + brotli, + bumpfontversion, + coreutils, + diffenator2, + font-v, + fontbakery, + fontfeatures, + fontmake, + fonttools, + gflanguages, + gfsubsets, + glyphsets, + glyphslib, + harfbuzz, + jinja2, + nanoemoji, + networkx, + ninja, + opentype-feature-freezer, + ots-python, + packaging, + paintcompiler, + pillow, + protobuf, + pycairo, + pygit2, + pygithub, + pytest, + pyyaml, + requests, + rich, + ruamel-yaml, + skia-pathops, + statmake, + strictyaml, + tabulate, + ttfautohint-py, + ufomerge, + unidecode, + vharfbuzz, + vttlib, + python, +}: + +let + fontmake' = python.withPackages (ps: [ ps.fontmake ] ++ ps.fontmake.optional-dependencies.json); + fonttools' = python.withPackages (ps: [ ps.fonttools ] ++ ps.fonttools.optional-dependencies.ufo); +in +buildPythonPackage rec { + pname = "gftools"; + version = "0.9.68"; + pyproject = true; + + src = fetchFromGitHub { + owner = "googlefonts"; + repo = "gftools"; + rev = "refs/tags/v${version}"; + hash = "sha256-xdpfRCtZDxRmrGodXUg8J0T5l5gd7Mvl290BXwNLzvY="; + }; + + postPatch = '' + substituteInPlace \ + Lib/gftools/builder/operations/{buildTTF,glyphs2ds,buildVariable,buildOTF}.py \ + --replace-fail '"fontmake' '"${lib.getExe' fontmake' "fontmake"}' + + substituteInPlace \ + Lib/gftools/builder/operations/instantiateUfo.py \ + --replace-fail "'fontmake" "'${lib.getExe' fontmake' "fontmake"}" + + substituteInPlace \ + Lib/gftools/builder/operations/{compress,subspace}.py \ + --replace-fail '"fonttools' '"${lib.getExe' fonttools' "fonttools"}' + + substituteInPlace \ + Lib/gftools/builder/operations/hbsubset.py \ + --replace-fail '"pyftsubset"' '"${lib.getExe' fonttools' "pyftsubset"}"' \ + --replace-fail '"hb-subset"' '"${lib.getExe' harfbuzz "hb-subset"}"' + + substituteInPlace \ + Lib/gftools/builder/operations/autohintOTF.py \ + --replace-fail '"otfautohint' '"${lib.getExe' afdko "otfautohint"}' + + substituteInPlace \ + Lib/gftools/builder/operations/paintcompiler.py \ + --replace-fail '"paintcompiler' '"${lib.getExe paintcompiler}' + + substituteInPlace \ + Lib/gftools/builder/operations/featureFreeze.py \ + --replace-fail '"pyftfeatfreeze' '"${lib.getExe opentype-feature-freezer}' + + substituteInPlace \ + Lib/gftools/builder/operations/copy.py \ + --replace-fail '"cp' '"${lib.getExe' coreutils "cp"}' + + substituteInPlace \ + Lib/gftools/builder/operations/{fix,remap,autohint,buildStat,addSubset,remapLayout,buildVTT}.py \ + --replace-fail '"gftools' '"${placeholder "out"}/bin/gftools' + + substituteInPlace \ + Lib/gftools/builder/operations/rename.py \ + --replace-fail "'gftools" "'${placeholder "out"}t/bin/gftools" + ''; + + pythonRelaxDeps = [ + "protobuf" + "pygit2" + ]; + + build-system = [ + setuptools + setuptools-scm + ]; + + dependencies = [ + absl-py + afdko + axisregistry + babelfont + beautifulsoup4 + brotli + bumpfontversion + font-v + fontfeatures + fontmake + fonttools + gflanguages + gfsubsets + glyphsets + glyphslib + jinja2 + nanoemoji + networkx + ninja + ots-python + packaging + pillow + protobuf + pygit2 + pygithub + pyyaml + requests + rich + ruamel-yaml + setuptools + skia-pathops + statmake + strictyaml + tabulate + ttfautohint-py + ufomerge + unidecode + vharfbuzz + vttlib + ] ++ fonttools.optional-dependencies.ufo ++ fontmake.optional-dependencies.json; + + optional-dependencies = { + qa = [ + diffenator2 + fontbakery + pycairo + ]; + test = [ + black + pytest + ]; + }; + + nativeCheckInputs = [ pytestCheckHook ]; + + disabledTestPaths = [ + # Wants none exsiting module + "bin/test_args.py" + # Requires internet + "tests/push/test_items.py" + "tests/test_gfgithub.py" + "tests/test_usage.py" + "tests/push/test_servers.py" + # Can't find directory + "tests/test_builder.py" + "tests/test_dependencies.py" + "tests/test_fix.py" + ]; + + pythonImportsCheck = [ "gftools" ]; + + meta = with lib; { + description = "Misc tools for working with the Google Fonts library"; + homepage = "https://github.com/googlefonts/gftools"; + changelog = "https://github.com/googlefonts/gftools/releases/tag/v${version}"; + license = licenses.asl20; + mainProgram = "gftools"; + maintainers = with maintainers; [ jopejoe1 ]; + }; +} diff --git a/pkgs/top-level/python-packages.nix b/pkgs/top-level/python-packages.nix index ab9f2a0071da..a78ea9ad7291 100644 --- a/pkgs/top-level/python-packages.nix +++ b/pkgs/top-level/python-packages.nix @@ -4979,6 +4979,8 @@ self: super: with self; { gfsubsets = callPackage ../development/python-modules/gfsubsets { }; + gftools = callPackage ../development/python-modules/gftools { }; + gguf = callPackage ../development/python-modules/gguf { }; ghapi = callPackage ../development/python-modules/ghapi { };