From fc1a7289ed86b8e1f04fdd8827ddd198ecbb64b8 Mon Sep 17 00:00:00 2001
From: Jan Tojnar <jtojnar@gmail.com>
Date: Wed, 30 Oct 2019 18:35:22 +0100
Subject: [PATCH] scfbuild: switch to Python 3

Needed to drop phases @#$% to be able to use this at all.

Fixes emojione and twemoji-color-font
---
 pkgs/tools/misc/scfbuild/default.nix    | 16 +++++++--
 pkgs/tools/misc/scfbuild/python-3.patch | 46 +++++++++++++++++++++++++
 pkgs/top-level/all-packages.nix         |  2 +-
 3 files changed, 60 insertions(+), 4 deletions(-)
 create mode 100644 pkgs/tools/misc/scfbuild/python-3.patch

diff --git a/pkgs/tools/misc/scfbuild/default.nix b/pkgs/tools/misc/scfbuild/default.nix
index f66567798ffb..7fbe13fd44e3 100644
--- a/pkgs/tools/misc/scfbuild/default.nix
+++ b/pkgs/tools/misc/scfbuild/default.nix
@@ -4,26 +4,36 @@ buildPythonApplication {
   pname = "scfbuild";
   version = "1.0.3";
 
+  format = "other";
+
   src = fetchFromGitHub {
-    owner = "eosrei";
+    owner = "13rac1";
     repo = "scfbuild";
     rev = "9acc7fc5fedbf48683d8932dd5bd7583bf922bae";
     sha256 = "1zlqsxkpg7zvmhdjgbqwwc9qgac2b8amzq8c5kwyh5cv95zcp6qn";
   };
 
-  phases = [ "unpackPhase" "installPhase" "fixupPhase" ];
+  patches = [
+    # Convert to Python 3
+    # https://github.com/13rac1/scfbuild/pull/19
+    ./python-3.patch
+  ];
 
   propagatedBuildInputs = [ pyyaml fonttools fontforge ];
 
   installPhase = ''
+    runHook preInstall
+
     mkdir -p $out/${python.sitePackages}
     cp -r scfbuild $out/${python.sitePackages}
     cp -r bin $out
+
+    runHook postInstall
   '';
 
   meta = with lib; {
     description = "SVGinOT color font builder";
-    homepage = https://github.com/eosrei/scfbuild;
+    homepage = https://github.com/13rac1/scfbuild;
     license = licenses.gpl3;
     maintainers = with maintainers; [ abbradar ];
   };
diff --git a/pkgs/tools/misc/scfbuild/python-3.patch b/pkgs/tools/misc/scfbuild/python-3.patch
new file mode 100644
index 000000000000..5a0178ad8c8e
--- /dev/null
+++ b/pkgs/tools/misc/scfbuild/python-3.patch
@@ -0,0 +1,46 @@
+--- a/bin/scfbuild
++++ b/bin/scfbuild
+@@ -1,4 +1,4 @@
+-#!/usr/bin/env python2
++#!/usr/bin/env python3
+ # -*- coding: utf-8 -*-
+ 
+ from __future__ import (absolute_import, division, print_function,
+--- a/scfbuild/builder.py
++++ b/scfbuild/builder.py
+@@ -287,8 +287,8 @@ def _add_name_record(self, text, name_id, platform_id, plat_enc_id, lang_id):
+         # TODO: The installed version of fontTools doesn't have
+         # table__n_a_m_e.setName().
+         record = NameRecord()
+-        # PyYAML creates strings, force to Unicode
+-        record.string = unicode(text)
++        # PyYAML creates strings, which are unicode as of Python3
++        record.string = text
+         record.nameID = name_id
+         record.platformID = platform_id
+         record.platEncID = plat_enc_id
+--- a/scfbuild/fforge.py
++++ b/scfbuild/fforge.py
+@@ -84,7 +84,7 @@ def add_glyphs(font, svg_filepaths, conf):
+             u_ids = [int(u_id, 16) for u_id in filename.split("-")]
+             # Example: (0x1f441, 0x1f5e8)
+ 
+-            u_str = ''.join(map(unichr, u_ids))
++            u_str = ''.join(map(chr, u_ids))
+             # Example: "U\0001f441U\0001f5e8"
+ 
+             # Replace sequences with correct ZWJ/VS16 versions as needed
+--- a/scfbuild/main.py
++++ b/scfbuild/main.py
+@@ -1,4 +1,4 @@
+-#!/usr/bin/env python2
++#!/usr/bin/env python3
+ # -*- coding: utf-8 -*-
+ 
+ # SCFBuild is released under the GNU General Public License v3.
+index 0000000..99418b5
+--- /dev/null
++++ b/scfbuild/requirements.txt
+@@ -0,0 +1,2 @@
++fonttools>=3.41.2
++PyYAML>=5.1
diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix
index 9a7bb910876e..b174fdf79983 100644
--- a/pkgs/top-level/all-packages.nix
+++ b/pkgs/top-level/all-packages.nix
@@ -6111,7 +6111,7 @@ in
     qtbase = qt4;
   };
 
-  scfbuild = python2.pkgs.callPackage ../tools/misc/scfbuild { };
+  scfbuild = python3.pkgs.callPackage ../tools/misc/scfbuild { };
 
   scriptaculous = callPackage ../development/libraries/scriptaculous { };