Subject: [PATCH]: gnu: opencc: Update to 1.1.1.

From: Zhu Zihao <[email-masked]>
Date: Mon, 15 Feb 2021 00:23:37 +0800

This patch update opencc to 1.1.1 and add the python binding build for
it.

>From bcb056a18920c8e7eb33b1735e4e7cf5499fc2e9 Mon Sep 17 00:00:00 2001
From: Zhu Zihao <[email-masked]>
Date: Sun, 14 Feb 2021 21:52:35 +0800
Subject: [PATCH] gnu: opencc: Update to 1.1.1.

* gnu/packages/textutils.scm(opencc): Update to 1.1.1

[source]<patches>: Add new patch.

[arguments]<out-of-source?>: Build in source tree.
<parallel-build?>: Disable.
<phases>: In "patch-3rd-party-references", fix the version of dependency.
Add phases "patch-python-binding-installation", "install-python-binding"
and "enable-bytecode-determinism".

[native-inputs]: Add python-setuptools and python-wheel.

* gnu/packages/patches/opencc-py-binding-dont-rebuild.patch: New file.
* gnu/local.mk(dist_patch_DATA): Add new entry.
---
 gnu/local.mk                                  |  1 +
 .../opencc-py-binding-dont-rebuild.patch      | 13 +++++
 gnu/packages/textutils.scm                    | 58 ++++++++++++++++---
 3 files changed, 63 insertions(+), 9 deletions(-)
 create mode 100644 gnu/packages/patches/opencc-py-binding-dont-rebuild.patch

diff --git a/gnu/local.mk b/gnu/local.mk
index 7b6cd8e0ae..9d9d394d84 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -1419,6 +1419,7 @@ dist_patch_DATA =						\
   %D%/packages/patches/omake-fix-non-determinism.patch	\
   %D%/packages/patches/openbabel-fix-crash-on-nwchem-output.patch	\
   %D%/packages/patches/opencascade-oce-glibc-2.26.patch		\
+  %D%/packages/patches/opencc-py-binding-dont-rebuild.patch	\
   %D%/packages/patches/opencv-fix-build-of-grfmt_jpeg2000.cpp.patch	\
   %D%/packages/patches/opencv-rgbd-aarch64-test-fix.patch	\
   %D%/packages/patches/opendht-fix-jami.patch			\
diff --git a/gnu/packages/patches/opencc-py-binding-dont-rebuild.patch b/gnu/packages/patches/opencc-py-binding-dont-rebuild.patch
new file mode 100644
index 0000000000..d1140489db
--- /dev/null
+++ b/gnu/packages/patches/opencc-py-binding-dont-rebuild.patch
@@ -0,0 +1,13 @@
+This patch prevents the rebuild of OpenCC while installing the python binding.
+
+Author: Zhu Zihao <[email-masked]>
+--- a/python/setup.py
++++ b/python/setup.py
+@@ -195,7 +195,6 @@
+         'clib/share/opencc/*',
+     ]},
+     cmdclass={
+-        'build_py': BuildPyCommand,
+         'bdist_wheel': BDistWheelCommand
+     },
+ 
diff --git a/gnu/packages/textutils.scm b/gnu/packages/textutils.scm
index 34da04d0d8..e10cfd5615 100644
--- a/gnu/packages/textutils.scm
+++ b/gnu/packages/textutils.scm
@@ -60,6 +60,7 @@
   #:use-module (gnu packages perl)
   #:use-module (gnu packages pkg-config)
   #:use-module (gnu packages python)
+  #:use-module (gnu packages python-build)
   #:use-module (gnu packages python-xyz)
   #:use-module (gnu packages readline)
   #:use-module (gnu packages slang)
@@ -1051,36 +1052,75 @@ OpenDocument presentations (*.odp).")
 (define-public opencc
   (package
     (name "opencc")
-    (version "1.0.5")
+    (version "1.1.1")
     (source
      (origin
        (method git-fetch)
        (uri (git-reference
-              (url "https://github.com/BYVoid/OpenCC")
-              (commit (string-append "ver." version))))
+             (url "https://github.com/BYVoid/OpenCC")
+             (commit (string-append "ver." version))))
        (file-name (git-file-name name version))
        (sha256
         (base32
-         "1pv5md225qwhbn8ql932zdg6gh1qlx3paiajaks8gfsa07yzvhr4"))
+         "07y0pvxjlmpcnym229j87qcfwnfm7vi10dad0a20xy6as55a9j3d"))
        (modules '((guix build utils)))
        (snippet
         '(begin
            ;; TODO: Unbundle tclap, darts-clone, gtest
-           (delete-file-recursively "deps/rapidjson-0.11") #t))))
+           (delete-file-recursively "deps/rapidjson-1.1.0") #t))
+       (patches (search-patches "opencc-py-binding-dont-rebuild.patch"))))
     (build-system cmake-build-system)
     (arguments
-     '(#:phases
+     ;; Required to locate the install script properly.
+     `(#:out-of-source? #f
+       #:parallel-build? #f             ;occasionally failed.
+       #:imported-modules
+       (,@%cmake-build-system-modules
+        (guix build python-build-system))
+       #:modules ((guix build cmake-build-system)
+                  ((guix build python-build-system) #:prefix python:)
+                  (guix build utils))
+       #:phases
        (modify-phases %standard-phases
          (add-after 'unpack 'patch-3rd-party-references
            (lambda* (#:key inputs #:allow-other-keys)
              (let ((rapidjson (assoc-ref inputs "rapidjson")))
                (substitute* "src/CMakeLists.txt"
-                 (("../deps/rapidjson-0.11")
+                 (("../deps/rapidjson-1.1.0")
                   (string-append rapidjson "/include/rapidjson")))
-             #t))))))
+               #t)))
+         (add-before 'configure 'patch-python-binding-installation
+           (lambda* (#:key outputs inputs #:allow-other-keys)
+             (let ((out (assoc-ref outputs "out")))
+               (substitute* "python/opencc/__init__.py"
+                 (("(_libopenccfile =).*$" _ prefix)
+                  (format #f "~a os.path.join('~a/lib', _libopenccfilename)~%"
+                          prefix out))
+                 (("(_opencc_share_dir =).*$" _ prefix)
+                  (format #f "~a '~a/share/opencc'~%" prefix out))))
+             #t))
+         (add-after 'install 'install-python-binding
+           (lambda* (#:key outputs inputs #:allow-other-keys)
+             (let* ((out (assoc-ref outputs "out"))
+                    (dist (string-append
+                           out "/lib/python"
+                           ,(version-major+minor (package-version python))
+                           "/site-packages")))
+               (chdir "python")
+               (mkdir-p dist)
+               (setenv "PYTHONPATH"
+                       (string-append dist ":" (getenv "PYTHONPATH")))
+               (invoke "python" "setup.py" "install"
+                       "--root=/" "--single-version-externally-managed"
+                       (string-append "--prefix=" out))
+               #t)))
+         (add-before 'install-python-binding 'enable-bytecode-determinism
+           (assoc-ref python:%standard-phases 'enable-bytecode-determinism)))))
     (native-inputs
      `(("python" ,python-wrapper)
-       ("rapidjson" ,rapidjson)))
+       ("rapidjson" ,rapidjson)
+       ("python-setuptools" ,python-setuptools)
+       ("python-wheel" ,python-wheel)))
     (home-page "https://github.com/BYVoid/OpenCC")
     (synopsis "Convert between Traditional Chinese and Simplified Chinese")
     (description "Open Chinese Convert (OpenCC) converts between Traditional
-- 
2.30.0

-- 
Retrieve my PGP public key:

  gpg --recv-keys D47A9C8B2AE3905B563D9135BE42B352A9F6821F

Zihao