summaryrefslogtreecommitdiff
path: root/gnu/packages/mruby-xyz.scm
diff options
context:
space:
mode:
Diffstat (limited to 'gnu/packages/mruby-xyz.scm')
-rw-r--r--gnu/packages/mruby-xyz.scm174
1 files changed, 174 insertions, 0 deletions
diff --git a/gnu/packages/mruby-xyz.scm b/gnu/packages/mruby-xyz.scm
new file mode 100644
index 0000000000..db7f616641
--- /dev/null
+++ b/gnu/packages/mruby-xyz.scm
@@ -0,0 +1,174 @@
+;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2025 Sughosha <Sughosha@disroot.org>
+;;;
+;;; This file is part of GNU Guix.
+;;;
+;;; GNU Guix is free software; you can redistribute it and/or modify it
+;;; under the terms of the GNU General Public License as published by
+;;; the Free Software Foundation; either version 3 of the License, or (at
+;;; your option) any later version.
+;;;
+;;; GNU Guix is distributed in the hope that it will be useful, but
+;;; WITHOUT ANY WARRANTY; without even the implied warranty of
+;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+;;; GNU General Public License for more details.
+;;;
+;;; You should have received a copy of the GNU General Public License
+;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
+
+(define-module (gnu packages mruby-xyz)
+ #:use-module (guix gexp)
+ #:use-module (guix packages)
+ #:use-module (guix git-download)
+ #:use-module ((guix licenses) #:prefix license:)
+ #:use-module (guix build-system gnu)
+ #:use-module (guix utils)
+ #:use-module (gnu packages)
+ #:use-module (gnu packages audio)
+ #:use-module (gnu packages fonts)
+ #:use-module (gnu packages gl)
+ #:use-module (gnu packages libevent)
+ #:use-module (gnu packages pkg-config)
+ #:use-module (gnu packages ruby)
+ #:use-module (gnu packages xorg)
+ #:use-module (ice-9 match))
+
+(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)
+ ;; Clone recursively for the mruby sources and gems that
+ ;; are needed for compilation. The rest of the bundled
+ ;; dependencies will be deleted in the snippet.
+ (recursive? #t)))
+ (file-name (git-file-name name version))
+ (sha256
+ (base32
+ "0dz4zv1km9805lji2q2qqdd8s8hgfd723dxdzcivbhm612szm1mc"))
+ (modules '((guix build utils)))
+ (snippet
+ '(begin
+ ;; This package contains a custom "pugl". Replacing it with
+ ;; the system "pugl" fails to build.
+ ;; Delete the bundled "libuv", "nanovg" and "rtosc".
+ (with-directory-excursion "deps"
+ (for-each delete-file-recursively
+ (list "libuv" "nanovg" "rtosc")))
+ ;; Do not compile "nanovg" and "libuv" and replace them with
+ ;; the respective system libraries.
+ (substitute* "Makefile"
+ (("cd deps/nanovg") "#cd deps/nanovg")
+ (("\\$\\(AR\\) rc deps/libnanovg\\.a")
+ "#$(AR) rc deps/libnanovg.a")
+ (("\\./deps/libnanovg\\.a")
+ "-lnanovg")
+ (("cd deps/libuv") "#cd deps/libuv")
+ (("\\./deps/libuv/\\.libs/libuv\\.a")
+ "-luv")
+ (("\\./deps/libuv/\\.libs/libuv-win\\.a")
+ "-luv-win"))
+ ;; Do not include the bundled "nanovg" and "uv" and replace
+ ;; them with the respective system libraries.
+ (substitute* "build_config.rb"
+ (("cc\\.include_paths.*\\./deps/nanovg/.*$" all)
+ (string-append "#" all))
+ (("cc\\.include_paths.*\\./deps/libuv/.*$" all)
+ (string-append "#" all))
+ (("#\\{`pwd`\\.strip\\}/\\.\\./deps/libnanovg\\.a")
+ "-lnanovg")
+ (("#\\{`pwd`\\.strip\\}/\\.\\./deps/libuv\\.a")
+ "-luv"))
+ ;; Fix including "nanovg" headers.
+ (substitute* (find-files "deps/mruby-nanovg" "\\.(c|h)")
+ (("nanovg\\.h") "nanovg/nanovg.h")
+ (("nanovg_gl\\.h") "nanovg/nanovg_gl.h")
+ (("\"\\.\\./\\.\\./nanovg/.*/stb_image_write\\.h\"")
+ "<nanovg/stb_image_write.h>"))
+ ;; Fix including "rtosc" headers.
+ (substitute* "src/mruby-widget-lib/src/gem.c"
+ (("\"\\.\\./\\.\\./\\.\\./deps/.*/rtosc\\.h\"")
+ "<rtosc/rtosc.h>"))))))
+ (build-system gnu-build-system)
+ (arguments
+ (list #:tests? #f ;no test suite
+ #:make-flags
+ #~(list (string-append "CC=" #$(cc-for-target))
+ "CONFIG_SHELL=bash")
+ #:modules
+ `(,@%default-gnu-modules
+ (srfi srfi-26))
+ #:phases
+ #~(modify-phases %standard-phases
+ (delete 'configure) ;no configure script
+ (add-after 'unpack 'patch-paths
+ (lambda* (#:key inputs #:allow-other-keys)
+ ;; Patch paths to the missing fonts.
+ (substitute*
+ "src/mruby-widget-lib/mrblib/script.rb"
+ (("sans = \\[")
+ (string-append
+ "sans = [\""
+ (search-input-file inputs
+ "/share/fonts/truetype/Roboto-Regular.ttf")
+ "\", "))
+ (("bold = \\[")
+ (string-append
+ "bold = [\""
+ (search-input-file inputs
+ "/share/fonts/truetype/Roboto-Bold.ttf")
+ "\", ")))
+ ;; Patch paths to the zyn-fusion files.
+ (substitute* "src/osc-bridge/src/bridge.c"
+ (("fopen\\(\\\"schema/")
+ (string-append
+ "fopen(\"" #$output "/share/zyn-fusion/schema/")))
+ (substitute* "test-libversion.c"
+ (("./libzest.so")
+ (string-append #$output "/lib/libzest.so")))
+ (substitute* "src/mruby-widget-lib/src/api.c"
+ ((", \\\"\\./qml/") ", \"../share/zyn-fusion/qml/")
+ (("\\./qml/")
+ (string-append #$output "/share/zyn-fusion/qml")))))
+ ;; No install target.
+ (replace 'install
+ (lambda _
+ (let* ((bin (string-append #$output "/bin"))
+ (lib (string-append #$output "/lib"))
+ (share (string-append #$output "/share"))
+ (qml (string-append share "/zyn-fusion/qml"))
+ (schema (string-append share "/zyn-fusion/schema"))
+ (completions
+ (string-append share
+ "/bash-completion/completions")))
+ ;; zynaddsubfx looks for "zyn-fusion" instead of "zest".
+ (rename-file "zest" "zyn-fusion")
+ (install-file "zyn-fusion" bin)
+ (install-file "libzest.so" lib)
+ (for-each (cut install-file <> qml)
+ (append (find-files "src/mruby-zest/qml"
+ "\\.qml$")
+ (find-files "src/mruby-zest/example"
+ "\\.qml$")))
+ (install-file "src/osc-bridge/schema/test.json" schema)
+ (install-file "completions/zyn-fusion" completions)))))))
+ (native-inputs
+ (list pkg-config ruby))
+ (inputs
+ (list font-google-roboto
+ libuv
+ libx11
+ mesa
+ nanovg
+ rtosc))
+ (home-page "https://github.com/mruby-zest/mruby-zest-build")
+ (synopsis "Zyn-Fusion user interface")
+ (description
+ "This package provides Zyn-Fusion user interface for
+@command{zynaddsubfx}.")
+ (license
+ (list license:lgpl2.1))))