about summary refs log tree commit diff
path: root/nixpkgs/pkgs/data/fonts/openmoji
diff options
context:
space:
mode:
Diffstat (limited to 'nixpkgs/pkgs/data/fonts/openmoji')
-rw-r--r--nixpkgs/pkgs/data/fonts/openmoji/build.patch77
-rw-r--r--nixpkgs/pkgs/data/fonts/openmoji/default.nix108
2 files changed, 127 insertions, 58 deletions
diff --git a/nixpkgs/pkgs/data/fonts/openmoji/build.patch b/nixpkgs/pkgs/data/fonts/openmoji/build.patch
new file mode 100644
index 000000000000..ddc9b554caf0
--- /dev/null
+++ b/nixpkgs/pkgs/data/fonts/openmoji/build.patch
@@ -0,0 +1,77 @@
+diff --git a/helpers/generate-fonts-runner.sh b/helpers/generate-fonts-runner.sh
+index 21267e50f..873b5c664 100755
+--- a/helpers/generate-fonts-runner.sh
++++ b/helpers/generate-fonts-runner.sh
+@@ -25,10 +25,10 @@ mkdir -p "$build_dir"
+ 
+ # Change these to enable/disable formats
+ # Remember to update font/README.md accordingly
+-methods_black=(glyf)
+-methods_color=(cbdt glyf_colr_0 glyf_colr_1 sbix picosvgz untouchedsvgz)
++#methods_black=(glyf)
++#methods_color=(cbdt glyf_colr_0 glyf_colr_1 sbix picosvgz untouchedsvgz)
+ 
+-saturations=(black color)
++#saturations=(black color)
+ for saturation in "${saturations[@]}"; do
+     case "$saturation" in
+     black)
+@@ -43,6 +43,7 @@ for saturation in "${saturations[@]}"; do
+     mkdir -p "$build_dir/$saturation"
+ 
+     for method in "${methods[@]}"; do
++        if [ -z "$method" ]; then continue; fi
+         cat >"$build_dir/$saturation/OpenMoji-$saturation-$method.toml" <<-EOF
+ output_file = "$build_dir/$saturation/OpenMoji-$saturation-$method.ttf"
+ color_format = "$method"
+@@ -55,10 +56,7 @@ default = 400
+ 
+ [master.regular]
+ style_name = "Regular"
+-
+-# To quickly check build reverse comments below
+-srcs = ["/mnt/$saturation/svg/*.svg"]
+-# srcs = ["/mnt/$saturation/svg/1F923.svg", "/mnt/$saturation/svg/1F1E9-1F1F0.svg"]
++srcs = ["$(pwd)/$saturation/svg/*.svg"]
+ 
+ [master.regular.position]
+ wght = 400
+@@ -71,7 +69,7 @@ EOF
+     for method in "${methods[@]}"; do
+         # Generate XML for font
+         sed "s/Color/${saturation^}/;" \
+-            /mnt/data/OpenMoji-Color.ttx \
++            data/OpenMoji-Color.ttx \
+             > "$build_dir/$saturation/OpenMoji-$saturation-$method.ttx"
+ 
+         # Add version to XML
+@@ -89,25 +87,21 @@ EOF
+ 
+         # Compress with WOFF2
+         woff2_compress "$build_dir/fonts/OpenMoji-$saturation-$method/OpenMoji-$saturation-$method.ttf"
+-
+-        # Generate font demo
+-        /mnt/helpers/generate-font-demo.js "OpenMoji-$saturation-$method.woff2" "$build_dir/fonts/OpenMoji-$saturation-$method"
+     done
+ done
+ 
+-for colr_version in 0 1; do
++for colr_version in "${maximumColorVersions[@]}"; do
++    if [ -z "$colr_version" ]; then continue; fi
+     # Make TTF with both COLR and SVG font data in it
+     mkdir -p "$build_dir/fonts/OpenMoji-color-colr${colr_version}_svg"
+ 
+-    maximum_color \
++    maximum_color --build_dir="$build_dir/color" \
+         "$build_dir/fonts/OpenMoji-color-glyf_colr_${colr_version}/OpenMoji-color-glyf_colr_${colr_version}.ttf"\
+         --output_file "$build_dir/fonts/OpenMoji-color-colr${colr_version}_svg/OpenMoji-color-colr${colr_version}_svg.ttf"
+ 
+     woff2_compress "$build_dir/fonts/OpenMoji-color-colr${colr_version}_svg/OpenMoji-color-colr${colr_version}_svg.ttf"
+ 
+-    /mnt/helpers/generate-font-demo.js\
+-        "OpenMoji-color-colr${colr_version}_svg.woff2"\
+-        "$build_dir/fonts/OpenMoji-color-colr${colr_version}_svg"
++    rm -rf "$build_dir/fonts/OpenMoji-color-glyf_colr_${colr_version}"
+ done
+ 
+ echo "Done building fonts!"
diff --git a/nixpkgs/pkgs/data/fonts/openmoji/default.nix b/nixpkgs/pkgs/data/fonts/openmoji/default.nix
index fd0d8882059c..3f19bbe91f33 100644
--- a/nixpkgs/pkgs/data/fonts/openmoji/default.nix
+++ b/nixpkgs/pkgs/data/fonts/openmoji/default.nix
@@ -1,93 +1,85 @@
 { lib
-, stdenv
+, stdenvNoCC
 , fetchFromGitHub
-, fetchpatch
-, scfbuild
-, fontforge
-, node-glob
-, libuninameslist
-, nodejs
-, nodePackages
+, nanoemoji
 , python3Packages
-, variant ? "color" # "color" or "black"
+, woff2
+, xmlstarlet
+  # available color formats: ["cbdt" "glyf_colr_0" "glyf_colr_1" "sbix" "picosvgz" "untouchedsvgz"]
+  # available black formats: ["glyf"]
+, fontFormats ? [ "glyf" "cbdt" "glyf_colr_0" "glyf_colr_1" ]
+  # when at least one of the glyf_colr_0/1 formats is specified, whether to build maximum color fonts
+  # "none" to not build any, "svg" to build colr+svg, "bitmap" to build cbdt+colr+svg fonts
+, buildMaximumColorFonts ? "bitmap"
 }:
-
 let
-  filename = builtins.replaceStrings
-    [ "color"              "black"              ]
-    [ "OpenMoji-Color.ttf" "OpenMoji-Black.ttf" ]
-    variant;
+  # all available methods
+  methods = {
+    black = [ "glyf" ];
+    color = [ "cbdt" "glyf_colr_0" "glyf_colr_1" "sbix" "picosvgz" "untouchedsvgz" ];
+  };
+in
 
-  # With newer fontforge the build hangs, see
-  # https://github.com/NixOS/nixpkgs/issues/167869
-  # Patches etc taken from
-  # https://github.com/NixOS/nixpkgs/commit/69da642a5a9bb433138ba1b13c8d56fb5bb6ec05
-  fontforge-20201107 = fontforge.overrideAttrs (old: rec {
-    version = "20201107";
-    src = fetchFromGitHub {
-      owner = "fontforge";
-      repo = "fontforge";
-      rev = version;
-      sha256 = "sha256-Rl/5lbXaPgIndANaD0IakaDus6T53FjiBb45FIuGrvc=";
-    };
-    patches = [
-      (fetchpatch {
-        url = "https://salsa.debian.org/fonts-team/fontforge/raw/76bffe6ccf8ab20a0c81476a80a87ad245e2fd1c/debian/patches/0001-add-extra-cmake-install-rules.patch";
-        sha256 = "u3D9od2xLECNEHhZ+8dkuv9818tPkdP6y/Tvd9CADJg=";
-      })
-      (fetchpatch {
-        url = "https://github.com/fontforge/fontforge/commit/69e263b2aff29ad22f97f13935cfa97a1eabf207.patch";
-        sha256 = "06yyf90605aq6ppfiz83mqkdmnaq5418axp9jgsjyjq78b00xb29";
-      })
-    ];
-    buildInputs = old.buildInputs ++ [ libuninameslist ];
-  });
-  scfbuild-with-fontforge-20201107 = scfbuild.override (old: {
-    fontforge = fontforge-20201107;
-  });
+assert lib.asserts.assertEachOneOf "fontFormats" fontFormats (methods.black ++ methods.color);
+assert lib.asserts.assertOneOf "buildMaximumColorFonts" buildMaximumColorFonts [ "none" "bitmap" "svg" ];
 
-in stdenv.mkDerivation rec {
+stdenvNoCC.mkDerivation rec {
   pname = "openmoji";
-  version = "14.0.0";
+  version = "15.0.0";
 
   src = fetchFromGitHub {
     owner = "hfg-gmuend";
     repo = pname;
     rev = version;
-    sha256 = "sha256-XnSRSlWXOMeSaO6dKaOloRg3+sWS4BSaro4bPqOyKmE=";
+    hash = "sha256-659ONkHU45Z2789ay0yLero9j5nFWhslpJad++4oNN8=";
   };
 
+  patches = [
+    # fix paths and variables for nix build and skip generating font demos
+    ./build.patch
+  ];
+
   nativeBuildInputs = [
-    scfbuild-with-fontforge-20201107
-    nodejs
-    node-glob
-    nodePackages.lodash
+    nanoemoji
+    python3Packages.fonttools
+    woff2
+    xmlstarlet
   ];
 
-  postPatch = ''
-    # this is API change in glob >9
-    substituteInPlace helpers/generate-font-glyphs.js \
-      --replace "require('glob').sync" "require('glob').globSync"
+  methods_black = builtins.filter (m: builtins.elem m fontFormats) methods.black;
+  methods_color = builtins.filter (m: builtins.elem m fontFormats) methods.color;
+  saturations = lib.optional (methods_black != [ ]) "black" ++ lib.optional (methods_color != [ ]) "color";
+  maximumColorVersions = lib.optionals (buildMaximumColorFonts != "none") (
+    lib.optional (builtins.elem "glyf_colr_0" fontFormats) "0"
+    ++ lib.optional (builtins.elem "glyf_colr_1" fontFormats) "1"
+  );
+
+  postPatch = lib.optionalString (buildMaximumColorFonts == "bitmap") ''
+    substituteInPlace helpers/generate-fonts-runner.sh \
+      --replace 'maximum_color' 'maximum_color --bitmaps'
   '';
 
   buildPhase = ''
     runHook preBuild
 
-    node helpers/generate-font-glyphs.js
-
-    cd font
-    scfbuild -c scfbuild-${variant}.yml
+    bash helpers/generate-fonts-runner.sh "$(pwd)/build" "${version}"
 
     runHook postBuild
   '';
 
   installPhase = ''
-    install -Dm644 ${filename} $out/share/fonts/truetype/${filename}
+    runHook preInstall
+
+    mkdir -p $out/share/fonts/truetype $out/share/fonts/woff2
+    cp build/fonts/*/*.ttf $out/share/fonts/truetype/
+    cp build/fonts/*/*.woff2 $out/share/fonts/woff2/
+
+    runHook postInstall
   '';
 
   meta = with lib; {
     license = licenses.cc-by-sa-40;
-    maintainers = with maintainers; [ fgaz ];
+    maintainers = with maintainers; [ _999eagle fgaz ];
     platforms = platforms.all;
     homepage = "https://openmoji.org/";
     downloadPage = "https://github.com/hfg-gmuend/openmoji/releases";