From b090f29ba9452bdd9ed59b725a7f10f3d50d7c78 Mon Sep 17 00:00:00 2001 From: Sughosha Date: Sat, 15 Oct 2022 15:56:23 +0200 Subject: [PATCH 3/4] gnu: Add mruby-zest * gnu/packages/music.scm (mruby-zest): New variable. Modified-by: Maxime Devos --- gnu/packages/music.scm | 120 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 120 insertions(+) diff --git a/gnu/packages/music.scm b/gnu/packages/music.scm index 31e2bd651d..63c66b17d5 100644 --- a/gnu/packages/music.scm +++ b/gnu/packages/music.scm @@ -167,6 +167,7 @@ (define-module (gnu packages music) #:use-module (gnu packages rdf) #:use-module (gnu packages readline) #:use-module (gnu packages rsync) + #:use-module (gnu packages ruby) #:use-module (gnu packages sdl) #:use-module (gnu packages serialization) #:use-module (gnu packages sphinx) @@ -3044,6 +3045,125 @@ (define-public nanovg OpenGL. It has lean API modeled after HTML5 canvas API.") (license license:zlib)))) +;; TODO: https://github.com/archlinux/svntogit-community/tree/packages/zynaddsubfx/trunk +(define-public mruby-zest + (package + (name "mruby-zest") + (version "3.0.6") + (source (origin + (method git-fetch) + (uri (git-reference + (url "https://github.com/mruby-zest/mruby-zest-build") + (commit version) + ;; TODO: package mruby gems seperately. + (recursive? #t))) + (file-name (git-file-name name version)) + (sha256 + (base32 + "0dz4zv1km9805lji2q2qqdd8s8hgfd723dxdzcivbhm612szm1mc")) + (modules '((guix build utils))) + (snippet + '(begin + (use-modules (ice-9 ftw)) + (delete-file-recursively "mruby") + (delete-file-recursively "deps/mruby-regexp-pcre/pcre") + (for-each + (lambda (x) + (unless (or (string-prefix? "mruby-" x) + (member x '("pugl" "rtosc" "." ".."))) + (delete-file-recursively (string-append "deps/" x)))) + (scandir "deps")))))) + (build-system gnu-build-system) + (arguments + (list #:make-flags #~(list (string-append "CC=" + #$(cc-for-target)) + "CONFIG_SHELL=bash") + #:test-target "rtest" ; The 'test' tests mruby instead of mruby-zest + #:phases #~(modify-phases %standard-phases + (delete 'configure) ;no configure script + (add-after 'unpack 'unbundle + (lambda* (#:key inputs #:allow-other-keys) + (substitute* "Makefile" + (("cd (deps/nanovg|mruby)") "#") + (("\\$\\(AR\\) rc deps/libnanovg\\.a") "#") + (("cd deps/mruby-file-stat") "#") + (("\\./deps/libnanovg\\.a") "-lnanovg")))) + (add-after 'unpack 'disable-unused-deps + (lambda _ + (substitute* "build_config.rb" + (("conf\\.gem 'deps/mruby-file-stat'") + "#")) + (substitute* "deps/mruby-dir-glob/mrbgem.rake" + (("spec\\.add_dependency 'mruby-file-stat'") + "#")))) + ;; It is unknown if this is sufficient, because at + ;; time of writing, the dependency mesa failed to + ;; cross-compile. + (add-after 'unpack 'fix-cross-compilation + (lambda _ + (substitute* '("Makefile" "build_config.rb") + (("pkg-config\\b") #$(pkg-config-for-target))))) + (add-after 'unpack 'hardcode-file-names + ;; TODO: fonts do not appear in the references, + ;; why is the Ruby code not installed? + (lambda* (#:key inputs #:allow-other-keys) + (substitute* (find-files "." "\\.rb$") + (("search \\+ \"font/([a-zA-Z-]+\\.ttf)\"(.*)$" _ font-basename) + (string-append + "\"" + (search-input-file + inputs + (string-append "share/fonts/truetype/" + font-basename)) + "\"]")) + (("'([a-zA-Z-]+\\.ttf)'" _ font-basename) + (string-append + "'" + (search-input-file + inputs + (string-append "share/fonts/truetype/" + font-basename)) + "'"))) + (substitute* "test-libversion.c" + (("\"(.*libzest)\\.so\"") + (format #f "\"~a/lib/libzest.so\"" #$output))) + (substitute* "src/osc-bridge/src/bridge.c" + (("./qml/MainWindow.qml") + (string-append #$output "/lib/zyn-fusion/qml/MainWindow.qml"))) + (substitute* "src/mruby-widget-lib/mrblib/script.rb" + (("schema/test.json") + (string-append #$output "/lib/zyn-fusion/schema/test.json"))))) + (replace 'install + (lambda* (#:key inputs #:allow-other-keys) + (let* ((lib (string-append #$output + "/lib/zyn-fusion")) + (qml (string-append lib "/qml")) + (bin (string-append #$output "/bin"))) + (copy-recursively "src/mruby-zest/qml" qml) + (copy-recursively "src/mruby-zest/example" qml) + (install-file "src/osc-bridge/schema/test.json" + (string-append lib "/schema")) + (install-file "libzest.so" lib) + ;; zynaddsubfx requires this name. + (rename-file "zest" "zyn-fusion") + (install-file "zyn-fusion" bin) + (install-file "completions/zyn-fusion" + (string-append #$output + "/share/bash-completion/completions")))))))) + (native-inputs (list mruby pkg-config ruby ruby-ruby-prof)) + (inputs (list font-entypo + font-google-roboto + libuv + libx11 + mesa + nanovg)) + (home-page "https://github.com/mruby-zest/mruby-zest-build") + (synopsis "Widget classes for the mruby-zest framework") + (description + "This repository contains all of the widgets needed to create the +@code{zyn-fusion} user interface for ZynAddSubFX.") + (license license:lgpl2.1))) + (define-public zynaddsubfx (package (name "zynaddsubfx") -- 2.38.0