unofficial mirror of guix-patches@gnu.org 
 help / color / mirror / code / Atom feed
* [bug#39367] [PATCH] gnu: Add anki.
@ 2020-01-31 12:01 Robert Smith
  2020-02-02 13:01 ` Nicolas Goaziou
  2020-02-04 12:01 ` [bug#39367] [PATCH v2] " Robert Smith
  0 siblings, 2 replies; 6+ messages in thread
From: Robert Smith @ 2020-01-31 12:01 UTC (permalink / raw)
  To: 39367; +Cc: Robert Smith

* gnu/packages/education.scm (anki): New variable.
---
Add package anki to guix, using a slightly outdated version to avoid NPM
dependencies
 gnu/packages/education.scm | 80 ++++++++++++++++++++++++++++++++++++++
 1 file changed, 80 insertions(+)

diff --git a/gnu/packages/education.scm b/gnu/packages/education.scm
index 4f8d7582c7..3f1fa2ca52 100644
--- a/gnu/packages/education.scm
+++ b/gnu/packages/education.scm
@@ -5,6 +5,7 @@
 ;;; Copyright © 2017, 2018, 2019 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2018, 2019 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2018, 2019, 2020 Nicolas Goaziou <mail@nicolasgoaziou.fr>
+;;; Copyright © 2020 Robert Smith <robertsmith@posteo.net>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -24,6 +25,7 @@
 (define-module (gnu packages education)
   #:use-module (ice-9 regex)
   #:use-module (gnu packages)
+  #:use-module (gnu packages audio)
   #:use-module (gnu packages base)
   #:use-module (gnu packages bash)
   #:use-module (gnu packages compression)
@@ -39,14 +41,18 @@
   #:use-module (gnu packages javascript)
   #:use-module (gnu packages kde)
   #:use-module (gnu packages kde-frameworks) ; extra-cmake-modules
+  #:use-module (gnu packages mp3)
   #:use-module (gnu packages perl)
   #:use-module (gnu packages pkg-config)
   #:use-module (gnu packages python)
+  #:use-module (gnu packages python-web)
+  #:use-module (gnu packages python-xyz)
   #:use-module (gnu packages qt)
   #:use-module (gnu packages sdl)
   #:use-module (gnu packages sqlite)
   #:use-module (gnu packages texinfo)
   #:use-module (gnu packages tls)
+  #:use-module (gnu packages video)
   #:use-module (gnu packages xorg)
   #:use-module (gnu packages xml)
   #:use-module ((guix licenses) #:prefix license:)
@@ -714,3 +720,77 @@ each key.  A collection of lessons are included for a wide range of different
 languages and keyboard layouts, and typing statistics are used to dynamically
 adjust the level of difficulty.")
     (license license:gpl2)))
+
+(define-public anki
+  (package
+    (name "anki")
+   ;; Later versions have dependencies on npm packages not yet in guix
+    (version "2.1.16")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "https://apps.ankiweb.net/downloads/archive/anki-"
+                           version "-source.tgz"))
+       (sha256
+        (base32 "1gfr51rnllkyzli73p4r51h5ypzfa3m7lic3m3rzpywmqwrxs07k"))))
+    (build-system gnu-build-system)
+    (arguments
+     '(#:make-flags (list (string-append "PREFIX=" %output))
+       #:tests? #f ;no check target
+       #:phases
+       (modify-phases %standard-phases
+         (delete 'configure)
+         (add-after 'install 'wrap
+           ;; The program fails to find the QtWebEngineProcess program,
+           ;; so we set QTWEBENGINEPROCESS_PATH to help it.
+           (lambda* (#:key inputs outputs #:allow-other-keys)
+             (let ((bin (string-append (assoc-ref outputs "out") "/bin"))
+                   (qtwebengineprocess (string-append
+                                        (assoc-ref inputs "qtwebengine")
+                                        "/lib/qt5/libexec/QtWebEngineProcess")))
+               (for-each (lambda (program)
+                           (wrap-program program
+                             `("QTWEBENGINEPROCESS_PATH" =
+                               (,qtwebengineprocess))))
+                         (find-files bin ".*")))
+             #t)))))
+    (native-inputs
+     `(("perl" ,perl)
+       ("xdg-utils" ,xdg-utils)))
+    (inputs
+     `(("python" ,python-wrapper)
+       ("qtwebengine" ,qtwebengine)
+       ("mpv" ,mpv)
+       ("lame" ,lame)))
+    (propagated-inputs
+     `(("python-pyqtwebengine" ,python-pyqtwebengine)
+       ("python-pyqt" ,python-pyqt)
+       ("python-beautifulsoup4" ,python-beautifulsoup4)
+       ("python-decorator" ,python-decorator)
+       ("python-distro" ,python-distro)
+       ("python-markdown" ,python-markdown)
+       ("python-jsonschema" ,python-jsonschema)
+       ("python-pyaudio" ,python-pyaudio)
+       ("python-requests" ,python-requests)
+       ("python-send2trash" ,python-send2trash)
+       ("python-sip" ,python-sip)))
+    (home-page "https://apps.ankiweb.net/")
+    (synopsis "Powerful, intelligent flash cards")
+    (description "Anki is a program which makes remembering things
+easy.  Because it's a lot more efficient than traditional study
+methods, you can either greatly decrease your time spent studying, or
+greatly increase the amount you learn.
+
+Anyone who needs to remember things in their daily life can benefit
+from Anki.  Since it is content-agnostic and supports images, audio,
+videos and scientific markup (via LaTeX), the possibilities are
+endless.  For example:
+@itemize
+@item Learning a language
+@item Studying for medical and law exams
+@item Memorizing people's names and faces
+@item Brushing up on geography
+@item Mastering long poems
+@item Even practicing guitar chords!
+@end itemize")
+    (license license:agpl3+)))
-- 
2.25.0

^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [bug#39367] [PATCH] gnu: Add anki.
  2020-01-31 12:01 [bug#39367] [PATCH] gnu: Add anki Robert Smith
@ 2020-02-02 13:01 ` Nicolas Goaziou
  2020-02-03 16:11   ` Robert Smith
  2020-02-04 12:01 ` [bug#39367] [PATCH v2] " Robert Smith
  1 sibling, 1 reply; 6+ messages in thread
From: Nicolas Goaziou @ 2020-02-02 13:01 UTC (permalink / raw)
  To: Robert Smith; +Cc: 39367

Hello,

Robert Smith <robertsmith@posteo.net> writes:

> * gnu/packages/education.scm (anki): New variable.

Thank you! Some comments follow.

> +     '(#:make-flags (list (string-append "PREFIX=" %output))

OOC, isn't it automatic in gnu-build-system?

> +    (inputs
> +     `(("python" ,python-wrapper)
> +       ("qtwebengine" ,qtwebengine)
> +       ("mpv" ,mpv)
> +       ("lame" ,lame)))
> +    (propagated-inputs
> +     `(("python-pyqtwebengine" ,python-pyqtwebengine)
> +       ("python-pyqt" ,python-pyqt)
> +       ("python-beautifulsoup4" ,python-beautifulsoup4)
> +       ("python-decorator" ,python-decorator)
> +       ("python-distro" ,python-distro)
> +       ("python-markdown" ,python-markdown)
> +       ("python-jsonschema" ,python-jsonschema)
> +       ("python-pyaudio" ,python-pyaudio)
> +       ("python-requests" ,python-requests)
> +       ("python-send2trash" ,python-send2trash)
> +       ("python-sip" ,python-sip)))

Please order inputs and propagated-inputs alphabetically.

The package builds fine, but when trying to run "anki", I get the
following error:

  ModuleNotFoundError: No module named 'decorator'

It looks like you also need to wrap PYTHONPATH around the executable. WDYT?

Regards,

-- 
Nicolas Goaziou

^ permalink raw reply	[flat|nested] 6+ messages in thread

* [bug#39367] [PATCH] gnu: Add anki.
  2020-02-02 13:01 ` Nicolas Goaziou
@ 2020-02-03 16:11   ` Robert Smith
  2020-02-03 16:18     ` Nicolas Goaziou
  0 siblings, 1 reply; 6+ messages in thread
From: Robert Smith @ 2020-02-03 16:11 UTC (permalink / raw)
  To: Nicolas Goaziou; +Cc: 39367

On Sun Feb 2, 2020 at 2:01 PM Nicolas Goaziou wrote:
> > +     '(#:make-flags (list (string-append "PREFIX=" %output))
> 
> OOC, isn't it automatic in gnu-build-system?

For some reason I thought that this usually happened in the configure
stage, which I deleted. You're probably right, I'll double-check and fix
if necessary.

> Please order inputs and propagated-inputs alphabetically.

Will fix!
 
> The package builds fine, but when trying to run "anki", I get the
> following error:
> 
>   ModuleNotFoundError: No module named 'decorator'
> 
> It looks like you also need to wrap PYTHONPATH around the executable. WDYT?

Since Anki uses python at run time, is the proper action to wrap the
executable with the desired pythonpath, or to declare python as a
propagated input? Propagating python sounds simpler, but would likely be
inconvienent for users who need custom python versions. I'll look into
wrapping PYTHONPATH and I will resubmit. Thank you for reviewing my
patch!

Best,

Robert

^ permalink raw reply	[flat|nested] 6+ messages in thread

* [bug#39367] [PATCH] gnu: Add anki.
  2020-02-03 16:11   ` Robert Smith
@ 2020-02-03 16:18     ` Nicolas Goaziou
  0 siblings, 0 replies; 6+ messages in thread
From: Nicolas Goaziou @ 2020-02-03 16:18 UTC (permalink / raw)
  To: Robert Smith; +Cc: 39367

Hello,

"Robert Smith" <robertsmith@posteo.net> writes:

> Since Anki uses python at run time, is the proper action to wrap the
> executable with the desired pythonpath, or to declare python as a
> propagated input? Propagating python sounds simpler, but would likely be
> inconvienent for users who need custom python versions. I'll look into
> wrapping PYTHONPATH and I will resubmit.

As a rule of thumb, with a few exceptions—notably in
emacs-build-system—, propagated-inputs should ideally be used as a last
resort, when nothing else works.

Regards,

-- 
Nicolas Goaziou

^ permalink raw reply	[flat|nested] 6+ messages in thread

* [bug#39367] [PATCH v2] gnu: Add anki.
  2020-01-31 12:01 [bug#39367] [PATCH] gnu: Add anki Robert Smith
  2020-02-02 13:01 ` Nicolas Goaziou
@ 2020-02-04 12:01 ` Robert Smith
  2020-02-05 14:03   ` bug#39367: " Nicolas Goaziou
  1 sibling, 1 reply; 6+ messages in thread
From: Robert Smith @ 2020-02-04 12:01 UTC (permalink / raw)
  To: Nicolas Goaziou; +Cc: Robert Smith, 39367

* gnu/packages/education.scm (anki): New variable.
---
 gnu/packages/education.scm | 103 +++++++++++++++++++++++++++++++++++++
 1 file changed, 103 insertions(+)

Nicolas, I was able to wrap the PYTHONPATH environment variable into the
binary, avoiding any propagated inputs. I still have to set 'PREFIX'
manually, as in the GNU build system that is done in the configure
stage, which anki doesn't have. I also removed perl as a native input,
which was an uncaught mistake from last time (the last patch woud have
built without perl as well).

Thanks again for reviewing my work!

-Robert

diff --git a/gnu/packages/education.scm b/gnu/packages/education.scm
index 4f8d7582c7..dcb57c8874 100644
--- a/gnu/packages/education.scm
+++ b/gnu/packages/education.scm
@@ -5,6 +5,7 @@
 ;;; Copyright © 2017, 2018, 2019 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2018, 2019 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2018, 2019, 2020 Nicolas Goaziou <mail@nicolasgoaziou.fr>
+;;; Copyright © 2020 Robert Smith <robertsmith@posteo.net>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -24,6 +25,7 @@
 (define-module (gnu packages education)
   #:use-module (ice-9 regex)
   #:use-module (gnu packages)
+  #:use-module (gnu packages audio)
   #:use-module (gnu packages base)
   #:use-module (gnu packages bash)
   #:use-module (gnu packages compression)
@@ -39,14 +41,18 @@
   #:use-module (gnu packages javascript)
   #:use-module (gnu packages kde)
   #:use-module (gnu packages kde-frameworks) ; extra-cmake-modules
+  #:use-module (gnu packages mp3)
   #:use-module (gnu packages perl)
   #:use-module (gnu packages pkg-config)
   #:use-module (gnu packages python)
+  #:use-module (gnu packages python-web)
+  #:use-module (gnu packages python-xyz)
   #:use-module (gnu packages qt)
   #:use-module (gnu packages sdl)
   #:use-module (gnu packages sqlite)
   #:use-module (gnu packages texinfo)
   #:use-module (gnu packages tls)
+  #:use-module (gnu packages video)
   #:use-module (gnu packages xorg)
   #:use-module (gnu packages xml)
   #:use-module ((guix licenses) #:prefix license:)
@@ -714,3 +720,100 @@ each key.  A collection of lessons are included for a wide range of different
 languages and keyboard layouts, and typing statistics are used to dynamically
 adjust the level of difficulty.")
     (license license:gpl2)))
+
+(define-public anki
+  (package
+    (name "anki")
+    ;; Later versions have dependencies on npm packages not yet in guix
+    (version "2.1.16")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "https://apps.ankiweb.net/downloads/archive/anki-"
+                           version "-source.tgz"))
+       (sha256
+        (base32 "1gfr51rnllkyzli73p4r51h5ypzfa3m7lic3m3rzpywmqwrxs07k"))))
+    (build-system gnu-build-system)
+    (arguments
+     `(#:make-flags (list (string-append "PREFIX=" %output))
+       #:tests? #f ;no check target
+       #:phases
+       (modify-phases %standard-phases
+         (delete 'configure)
+         (add-after 'install 'wrap
+           (lambda* (#:key inputs outputs #:allow-other-keys)
+             (let ((bin (string-append (assoc-ref outputs "out") "/bin"))
+                   ;; List of paths to the site-packages directories of python
+                   ;; library inputs
+                   (site-packages (map
+                                   (lambda (pyinput)
+                                     (string-append
+                                      (cdr pyinput)
+                                      "/lib/python"
+                                      ;; Calculate the python version to avoid
+                                      ;; breaking with future 3.X releases
+                                      ,(version-major+minor
+                                        (package-version python-wrapper))
+                                      "/site-packages"))
+                                   (filter
+                                    (lambda (input)
+                                      (and
+                                       (>= (string-length (car input)) 7)
+                                       (string= (car input) "python-" 0 7)))
+                                    inputs)))
+                   (qtwebengineprocess (string-append
+                                        (assoc-ref inputs "qtwebengine")
+                                        "/lib/qt5/libexec/QtWebEngineProcess")))
+               ;; The program fails to find the QtWebEngineProcess program, so
+               ;; we set QTWEBENGINEPROCESS_PATH to help it.  PYTHONPATH is
+               ;; wrapped to avoid declaring python libraries as propagated
+               ;; inputs
+               (for-each (lambda (program)
+                           (wrap-program program
+                             `("QTWEBENGINEPROCESS_PATH" =
+                               (,qtwebengineprocess))
+                             `("PYTHONPATH" =
+                               ,site-packages)))
+                         (find-files bin ".*")))
+             #t)))))
+    (native-inputs
+     `(("xdg-utils" ,xdg-utils)))
+    (inputs
+     `(("lame" ,lame)
+       ("mpv" ,mpv)
+       ("python" ,python-wrapper)
+       ("python-beautifulsoup4" ,python-beautifulsoup4)
+       ("python-decorator" ,python-decorator)
+       ("python-distro" ,python-distro)
+       ("python-jsonschema" ,python-jsonschema)
+       ("python-markdown" ,python-markdown)
+       ("python-pyaudio" ,python-pyaudio)
+       ;; python-pyqtwebengine must preceed python-pyqt in the PYTHONPATH
+       ("python-pyqtwebengine" ,python-pyqtwebengine)
+       ("python-pyqt" ,python-pyqt)
+       ("python-requests" ,python-requests)
+       ("python-send2trash" ,python-send2trash)
+       ("python-sip" ,python-sip)
+       ;;qtwebengine is included in pyqtwebengine, included here for easy
+       ;;wrapping
+       ("qtwebengine" ,qtwebengine)))
+    (home-page "https://apps.ankiweb.net/")
+    (synopsis "Powerful, intelligent flash cards")
+    (description "Anki is a program which makes remembering things
+easy.  Because it's a lot more efficient than traditional study
+methods, you can either greatly decrease your time spent studying, or
+greatly increase the amount you learn.
+
+Anyone who needs to remember things in their daily life can benefit
+from Anki.  Since it is content-agnostic and supports images, audio,
+videos and scientific markup (via LaTeX), the possibilities are
+endless.  For example:
+@itemize
+@item Learning a language
+@item Studying for medical and law exams
+@item Memorizing people's names and faces
+@item Brushing up on geography
+@item Mastering long poems
+@item Even practicing guitar chords!
+@end itemize")
+    (license license:agpl3+)))
-- 
2.25.0

^ permalink raw reply related	[flat|nested] 6+ messages in thread

* bug#39367: [PATCH v2] gnu: Add anki.
  2020-02-04 12:01 ` [bug#39367] [PATCH v2] " Robert Smith
@ 2020-02-05 14:03   ` Nicolas Goaziou
  0 siblings, 0 replies; 6+ messages in thread
From: Nicolas Goaziou @ 2020-02-05 14:03 UTC (permalink / raw)
  To: Robert Smith; +Cc: 39367-done

Hello,

Robert Smith <robertsmith@posteo.net> writes:

> * gnu/packages/education.scm (anki): New variable.

Applied as 8534c9491d86406ade201bacc3b14fdf63a1f39d.

I refactored a bit the part filtering Python packages, added a comment
about why `configure' phase was deleted.

Thank you!

Regards,

-- 
Nicolas Goaziou

^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2020-02-05 14:04 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-01-31 12:01 [bug#39367] [PATCH] gnu: Add anki Robert Smith
2020-02-02 13:01 ` Nicolas Goaziou
2020-02-03 16:11   ` Robert Smith
2020-02-03 16:18     ` Nicolas Goaziou
2020-02-04 12:01 ` [bug#39367] [PATCH v2] " Robert Smith
2020-02-05 14:03   ` bug#39367: " Nicolas Goaziou

Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/guix.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).