Subject: [bug#30259] [PATCH] gnu: octave: Add audio and Qt GUI support.

From: Kei Kebreau <[email-masked]>
Date: Fri, 26 Jan 2018 21:09:13 -0500

[email-masked] writes:

> On Fri, 26 Jan 2018, [email-masked] wrote:
>> On Fri, 26 Jan 2018, Kei Kebreau <[email-masked]> wrote:
>>> * gnu/packages/maths.scm (octave)[inputs]: Add qscintilla, qt, suitesparse,
>>> libsndfile, portaudio and alsa-lib.
>>> [native-inputs]: Add qttools.
>>> [arguments]: Add 'patch-qscintilla-library-name' phase.
>>
>> Woo! Nice :) I've started work on the Qt GUI a while ago but
>> never finished it. Do you think we should split this into octave
>> and octave-qt (or octave-gui)? Qt is quiet huge and not everyone
>> will want this I think.
>>
>> Building this now and getting back to you with results.
>>
>>> ---
>>>  gnu/packages/maths.scm | 23 ++++++++++++++++++++++-
>>>  1 file changed, 22 insertions(+), 1 deletion(-)
>>>
>>> diff --git a/gnu/packages/maths.scm b/gnu/packages/maths.scm
>>> index bce662737..172f1da07 100644
>>> --- a/gnu/packages/maths.scm
>>> +++ b/gnu/packages/maths.scm
>>> @@ -52,6 +52,7 @@
>>>    #:use-module (guix build-system ocaml)
>>>    #:use-module (guix build-system r)
>>>    #:use-module (gnu packages algebra)
>>> +  #:use-module (gnu packages audio)
>>>    #:use-module (gnu packages autotools)
>>>    #:use-module (gnu packages bison)
>>>    #:use-module (gnu packages boost)
>>> @@ -74,6 +75,7 @@
>>>    #:use-module (gnu packages image)
>>>    #:use-module (gnu packages java)
>>>    #:use-module (gnu packages less)
>>> +  #:use-module (gnu packages linux)
>>>    #:use-module (gnu packages lisp)
>>>    #:use-module (gnu packages logging)
>>>    #:use-module (gnu packages lua)
>>> @@ -91,8 +93,10 @@
>>>    #:use-module (gnu packages popt)
>>>    #:use-module (gnu packages perl)
>>>    #:use-module (gnu packages pkg-config)
>>> +  #:use-module (gnu packages pulseaudio)
>>>    #:use-module (gnu packages python)
>>>    #:use-module (gnu packages python-web)
>>> +  #:use-module (gnu packages qt)
>>>    #:use-module (gnu packages readline)
>>>    #:use-module (gnu packages tbb)
>>>    #:use-module (gnu packages scheme)
>>> @@ -1310,12 +1314,19 @@ can solve two kinds of problems:
>>>         ("zlib" ,zlib)
>>>         ("curl" ,curl)
>>>         ("texinfo" ,texinfo)
>>> -       ("graphicsmagick" ,graphicsmagick)))
>>> +       ("graphicsmagick" ,graphicsmagick)
>>> +       ("qscintilla", qscintilla)
>>> +       ("qt", qtbase)
>>> +       ("suitesparse" ,suitesparse)
>>> +       ("libsndfile" ,libsndfile)
>>> +       ("portaudio" ,portaudio)
>>> +       ("alsa-lib" ,alsa-lib)))
>>>      (native-inputs
>>>       `(("lzip" ,lzip)
>>>         ("gfortran" ,gfortran)
>>>         ("pkg-config" ,pkg-config)
>>>         ("perl" ,perl)
>>> +       ("qttools" ,qttools) ;for lrelease
>>>         ;; The following inputs are not actually used in the build process.
>>>         ;; However, the ./configure gratuitously tests for their existence and
>>>         ;; assumes that programs not present at build time are also not, and
>>> @@ -1333,6 +1344,16 @@ can solve two kinds of problems:
>>>                              "/bin/sh"))
>>>         #:phases
>>>         (modify-phases %standard-phases
>>> +         (add-before 'configure 'patch-qscintilla-library-name
>>> +           (lambda* (#:key inputs #:allow-other-keys)
>>> +             ;; The QScintilla library that the Octave configure script tries
>>> +             ;; to link with should be named libqscintilla-qt5.so, but the
>>> +             ;; QScintilla input provides the shared library as
>>> +             ;; libqscintilla2_qt5.so.
>>> +             (substitute* "configure"
>>> +               (("qscintilla2-qt5")
>>> +                "qscintilla2_qt5"))
>>> +             #t))
>>>           (add-after 'configure 'configure-makeinfo
>>>             (lambda* (#:key inputs #:allow-other-keys)
>>>               (substitute* "libinterp/corefcn/help.cc"
>
> Build, compiled, installed, LGTM and works for me. At least the
> minimal basics I've tested.
>

Excellent! Thanks for testing this.

> However I still think we should split it later on. I'm not sure
> if other systems just provide it in one piece or if they provide
> octave-cli, octave-qt, etc.
> In my scenario we don't have substitutes for Qt all the time and
> someone running a
> machine which isn't capable of building Qt wants to use octave.

I agree that this package should be split. Should a split be made now
while we leave the lighter CLI-only Octave package available on master,
or should it be postponed until later on?