Subject: Re: [bug#39155] [PATCH] gnu: tuxguitar: Build and install alsa plugin.
From: Kei Kebreau <[email-masked]>
To: Mike Rosset <[email-masked]>
Cc: [email-masked]
Date: Thu, 23 Jan 2020 21:02:25 -0500
List-Id: <debbugs-submit.debbugs.gnu.org>

Hello Mike!

Mike Rosset <[email-masked]> writes:

> * gnu/packages/music.scm (tuxguitar): Allows midi sound output when using
>   a synthesizer like timidity.
>
>   [inputs]: Adds alsa-lib as an input.
>   [phases]: No longer change build directory context between phases.
>   [install]: Now install desktop, mime and manual files.

I've changed the format of this log message a bit so it's less
repetitive.

> ---
>  gnu/packages/music.scm | 90 +++++++++++++++++++++++++++---------------
>  1 file changed, 59 insertions(+), 31 deletions(-)
>
> diff --git a/gnu/packages/music.scm b/gnu/packages/music.scm
> index ad369bd3a8..15594ab0ba 100644
> --- a/gnu/packages/music.scm
> +++ b/gnu/packages/music.scm
> @@ -1746,60 +1746,86 @@ is subjective.")
>      (arguments
>       `(#:build-target "build"
>         #:jdk ,icedtea-8
> -       #:tests? #f                      ; no tests
> +       #:tests? #f

I left this comment in since it notes that TuxGuitar actually doesn't
have a test suite, and that we haven't just disabled it for another reason.

>         #:phases
>         (modify-phases %standard-phases
> -         (add-after 'unpack 'enter-dir
> -           (lambda _ (chdir "TuxGuitar-lib") #t))
> -         (add-after 'build 'build-libraries
> +         (replace 'build
>             (lambda* (#:key inputs outputs #:allow-other-keys)
>               (let* ((initial-classpath (getenv "CLASSPATH"))
>                      (build-dir (lambda (dir)
> -                                 (chdir "..")
> -                                 (setenv "CLASSPATH"
> -                                         (string-join (cons initial-classpath
> -                                                            (find-files (getcwd) "\\.jar$"))
> -                                                      ":"))
> -                                 (chdir dir)
> -                                 (if (file-exists? "build.xml")
> -                                     ((assoc-ref %standard-phases 'build)
> -                                      #:build-target "build")
> -                                     (begin
> -                                       ;; Generate default build.xml.
> -                                       ((@@ (guix build ant-build-system) default-build.xml)
> -                                        (string-append (string-downcase dir) ".jar")
> -                                        (string-append (assoc-ref outputs "out")
> -                                                       "/share/java"))
> -                                       ((assoc-ref %standard-phases 'build)))))))
> -               (map build-dir '("TuxGuitar-editor-utils"
> +                                 (setenv
> +                                  "CLASSPATH"
> +                                  (string-join (cons initial-classpath
> +                                                     (find-files (getcwd) "\\.jar$"))
> +                                               ":"))
> +                                 (with-directory-excursion dir
> +                                   (if (file-exists? "build.xml")
> +                                       ((assoc-ref %standard-phases 'build)
> +                                        #:build-target "build")
> +                                       (begin
> +                                         ;; Generate default build.xml.
> +                                         ((@@ (guix build ant-build-system)
> +                                              default-build.xml)
> +                                          (string-append (string-downcase dir) ".jar")
> +                                          (string-append (assoc-ref outputs "out")
> +                                                         "/share/java"))
> +                                         ((assoc-ref %standard-phases 'build))))))))
> +               (map build-dir '("TuxGuitar-lib"
> +                                "TuxGuitar-editor-utils"
>                                  "TuxGuitar-ui-toolkit"
>                                  "TuxGuitar-ui-toolkit-swt"
> -                                "TuxGuitar-awt-graphics")))))
> -         (add-after 'build-libraries 'build-application
> +                                "TuxGuitar-viewer"
> +                                "TuxGuitar"
> +                                "TuxGuitar-gm-utils"
> +                                "TuxGuitar-alsa"
> +                                "TuxGuitar-midi"
> +                                "TuxGuitar-midi-ui"))
> +               #t)))
> +         (add-after 'build 'build-jni
>             (lambda _
> -             (chdir "../TuxGuitar")
> -             ((assoc-ref %standard-phases 'build)
> -              #:build-target "build")))
> +               (setenv "CC" "gcc")
> +               (setenv "CFLAGS" (string-append
> +                                 "-fpic -I"
> +                                 (getcwd)
> +                                 "/build-scripts/native-modules/common-include"))
> +               (invoke "make" "-C" "./TuxGuitar-alsa/jni" "-f" "GNUmakefile")))
>           (replace 'install
>             (lambda* (#:key inputs outputs #:allow-other-keys)
>               (let* ((out   (assoc-ref outputs "out"))
>                      (bin   (string-append out "/bin"))
>                      (share (string-append out "/share"))
> +                    (jni-lib (string-append out "/lib"))
>                      (lib   (string-append share "/java"))
> -                    (swt   (assoc-ref inputs "java-swt")))
> +                    (swt   (assoc-ref inputs "java-swt"))
> +                    (mime  (string-append share "/mime/packages"))
> +                    (app   (string-append share "/applications"))
> +                    (man   (string-append share "/man/man1")))
> +
>                 (mkdir-p bin)
>                 ;; Install all jars.
>                 (for-each (lambda (file)
>                             (install-file file lib))
> -                         (find-files ".." "\\.jar$"))
> +                         (find-files "." "\\.jar$"))
> +
> +               ;; Install jni libraries
> +               (for-each (lambda (file)
> +                           (install-file file jni-lib))
> +                         (find-files "." "\\-jni.so$"))
>  
>                 ;; Install all resources.
> -               (copy-recursively "share" share)
> +               (copy-recursively "./TuxGuitar/share" share)
> +
> +               ;; Install desktop and mime files
> +               (install-file "./misc/tuxguitar.xml" mime)
> +               (install-file "./misc/tuxguitar.desktop" app)
> +
> +               ;; Install manaual
> +               (install-file "./misc/tuxguitar.1" man)
>  
>                 ;; Create wrapper.
>                 (call-with-output-file (string-append bin "/tuxguitar")
>                   (lambda (port)
> -                   (let ((classpath (string-join (append (find-files lib "\\.jar$")
> +                   (let ((classpath (string-join (append  (find-files lib "\\.jar$")
>                                                           (find-files swt "\\.jar$"))
>                                                   ":")))
>                       (format
> @@ -1810,12 +1836,14 @@ is subjective.")
>                                       " -Dtuxguitar.home.path=" out
>                                       " -Dtuxguitar.share.path=" out "/share"
>                                       " -Dswt.library.path=" swt "/lib"
> +                                     " -Djava.library.path=" out "/lib"
>                                       " org.herac.tuxguitar.app.TGMainSingleton"
>                                       " \"$1\" \"$2\"")))))
>                 (chmod (string-append bin "/tuxguitar") #o555)
>                 #t))))))
>      (inputs
> -     `(("java-swt" ,java-swt)))
> +     `(("alsa-lib" ,alsa-lib)
> +       ("java-swt" ,java-swt)))
>      (home-page "http://tuxguitar.com.ar/")
>      (synopsis "Multitrack tablature editor and player")
>      (description

The rest of this LGTM!  This has been pushed to master as commit
44e70dee184c4e4190349def71dc07f05822f591.  Thanks for contributing!  Now
we guitarists can hear our beautiful
tablature! :-)

Kei