Subject: Re: bug#54558: mcomix refuses to run, missing GTK libraries

From: Maxim Cournoyer <[email-masked]>
Date: Fri, 25 Mar 2022 22:57:26 -0400

Hi Liliana,

Liliana Marie Prikler <[email-masked]> writes:

> * gnu/packages/image-viewers.scm (mcomix): Update to 2.0.1.
> [source]: Use sourceforge once again.
> [inputs]: Add ‘python’.
> [arguments]: Convert to a list of G-Expressions.
> <#:tests?>: Drop.
> <#:phases>: Rename ‘configure’ to ‘patch-sources’.  Also fix an assertion
> error in "mcomix/image_tools.py".
> No longer replace ‘build’ or ‘install’.  Add ‘install-data’ phase after
> ‘install’.  Use (this-package-input) to refer to the python input.
> ---
>  gnu/packages/image-viewers.scm | 123 +++++++++++----------------------
>  1 file changed, 42 insertions(+), 81 deletions(-)
>
> diff --git a/gnu/packages/image-viewers.scm b/gnu/packages/image-viewers.scm
> index 6ab6cf3307..1c325cd8a7 100644
> --- a/gnu/packages/image-viewers.scm
> +++ b/gnu/packages/image-viewers.scm
> @@ -662,91 +662,52 @@ (define-public luminance-hdr
>  
>  ;; CBR and RAR are currently unsupported, due to non-free dependencies.
>  (define-public mcomix
> -  ;; Official mcomix hasn't been updated since 2016, it's broken with
> -  ;; python-pillow 6+ and only supports Python 2.  We use fork instead.
> -  (let ((commit "fea55a7a9369569eefed72209eed830409c4af98"))
> -    (package
> -      (name "mcomix")
> -      (version (git-version "1.2.1" "1" commit))
> -      (source
> -       (origin
> -         (method git-fetch)
> -         (uri (git-reference
> -               (url "https://github.com/multiSnow/mcomix3")
> -               (commit commit)))
> -         (file-name (git-file-name name version))
> -         (sha256
> -          (base32
> -           "05zl0dkjwbdcm2zlk4nz9w33amlqj8pbf32a8ymshc2356fqhhi5"))))
> -      (build-system python-build-system)
> -      (inputs
> -       (list p7zip python-pillow python-pygobject python-pycairo))
> -      (arguments
> -       `(#:tests? #f                    ; FIXME: How do we run tests?
> -         #:phases
> -         (modify-phases %standard-phases
> -           (add-after 'unpack 'configure
> -             (lambda* (#:key inputs #:allow-other-keys)
> -               (let ((p7zip (assoc-ref inputs "p7zip")))
> -                 ;; insert absolute path to 7z executable
> -                 (substitute* "mcomix/mcomix/archive/sevenzip_external.py"
> -                   (("_7z_executable = -1")
> -                    (string-append "_7z_executable = u'" p7zip "/bin/7z'"))))
> -               #t))
> -           (replace 'build
> -             (lambda* (#:key outputs #:allow-other-keys)
> -               (let* ((out (assoc-ref outputs "out"))
> -                      (pyver ,(version-major+minor (package-version python)))
> -                      (lib (string-append out "/lib/python" pyver)))
> -                 (invoke (which "python") "installer.py" "--srcdir=mcomix"
> -                         (string-append "--target=" lib))
> -                 (rename-file (string-append lib "/mcomix")
> -                              (string-append lib "/site-packages"))
> -                 #t)))
> -           (replace 'install
> -             (lambda* (#:key outputs #:allow-other-keys)
> -               (let* ((out (assoc-ref outputs "out"))
> -                      (share (string-append out "/share"))
> -                      (bin (string-append out "/bin"))
> -                      (pyver ,(version-major+minor (package-version python)))
> -                      (lib (string-append out "/lib/python" pyver "/site-packages")))
> -                 (mkdir-p bin)
> -                 (rename-file (string-append lib "/mcomixstarter.py")
> -                              (string-append bin "/mcomix"))
> -                 (rename-file (string-append lib "/comicthumb.py")
> -                              (string-append bin "/comicthumb"))
> -                 (install-file "mime/mcomix.desktop"
> -                               (string-append share "/applications"))
> -                 (install-file "mime/mcomix.appdata.xml"
> -                               (string-append share "/metainfo"))
> -                 (install-file "mime/mcomix.xml"
> -                               (string-append share "/mime/packages"))
> -                 (install-file "mime/comicthumb.thumbnailer"
> -                               (string-append share "/thumbnailers"))
> -                 (install-file "man/mcomix.1" (string-append share "/man/man1"))
> -                 (install-file "man/comicthumb.1" (string-append share "/man/man1"))
> -                 (for-each
> -                  (lambda (size)
> -                    (install-file
> -                     (format #f "mcomix/mcomix/images/~sx~s/mcomix.png" size size)
> -                     (format #f "~a/icons/hicolor/~sx~s/apps/" share size size))
> -                    (for-each
> -                     (lambda (ext)
> -                       (install-file
> -                        (format #f "mime/icons/~sx~s/application-x-~a.png" size size ext)
> -                        (format #f "~a/icons/hicolor/~sx~s/mimetypes/"
> -                                share size size)))
> -                     '("cb7" "cbr" "cbt" "cbz")))
> -                  '(16 22 24 32 48))
> -                 #t))))))
> -      (home-page "https://sourceforge.net/p/mcomix/wiki/Home/")
> -      (synopsis "Image viewer for comics")
> -      (description "MComix is a customizable image viewer that specializes as
> +  (package
> +    (name "mcomix")
> +    (version "2.0.1")
> +    (source
> +     (origin
> +       (method url-fetch)
> +       (uri (string-append "mirror://sourceforge/mcomix/MComix-" version "/"
> +                           "mcomix-" version ".tar.gz"))
> +       (sha256
> +        (base32
> +         "187ca815vxb2in1ryvfiaf1zapi0bc9jxdac3c1bky0kr6x7xyap"))))
> +    (build-system python-build-system)
> +    (inputs
> +     (list p7zip python python-pillow python-pygobject python-pycairo))
> +    (arguments
> +     (list
> +      #:phases
> +      #~(modify-phases %standard-phases
> +          (add-after 'unpack 'patch-source
> +            (lambda* (#:key inputs #:allow-other-keys)
> +              (let ((p7zip (assoc-ref inputs "p7zip")))
> +                ;; insert absolute path to 7z executable

I know it's in the original, but since while we're revamping the
package, let's make this comment a proper complete sentence.

> +                (substitute* "mcomix/archive/sevenzip_external.py"
> +                  (("_7z_executable = -1")
> +                   (string-append "_7z_executable = u'" p7zip "/bin/7z'")))

I'd use something like:

(format #f "_7z_executable = ~s"
 (search-input-file inputs "bin/7z"))

For the replacement.  That unicode string (u"something") is
obsolete/unnecessary (all strings are unicode in Python 3).

> +                (substitute* "mcomix/image_tools.py"
> +                  (("assert name not in supported_formats_gdk")
> +                   "if name in supported_formats_gdk: continue")))))
> +         (add-after 'install 'install-data
> +           (lambda* (#:key outputs #:allow-other-keys)
> +             (copy-recursively
> +              "mcomix/images"
> +              (string-append (assoc-ref outputs "out")
> +                             "/lib/python"
> +                             #$(version-major+minor
> +                                (package-version (this-package-input "python")))
> +                             "/site-packages/mcomix/images")))))))
> +    (home-page "https://sourceforge.net/p/mcomix/wiki/Home/")
> +    (synopsis "Image viewer for comics")
> +    (description "MComix is a customizable image viewer that specializes as
>  a comic and manga reader.  It supports a variety of container formats
>  including CBZ, CB7, CBT, LHA.
>  
>  For PDF support, install the @emph{mupdf} package.")
> -      (license license:gpl2+))))
> +    (license license:gpl2+)))

I haven't tried it, but LGTM with my above comments addressed.

Thank you!

Maxim