Subject: [PATCH v4] Added orca-lang package

From: Christopher Rodriguez <[email-masked]>
Date: Tue, 29 Mar 2022 14:51:10 -0400

---

> I think you could probably just add a post-install phase that moves the
> binary file in its output directory from "orca" to "orca-music"?
>
> Why not give it a try anyway? :)

Done! I actually made it a post-build, because I was manually selecting the
files to install anyway.

Updated patch below. Should be ready for merge, aside from unmentioned issues
and/or the propagated inputs (if those must be fixed). If that's the case, let
me know.

Otherwise, I look forward to contributing my first (of hopefully many!) bits of
code to Guix! Thank You all for Your help!

 gnu/packages/music.scm | 81 ++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 81 insertions(+)

diff --git a/gnu/packages/music.scm b/gnu/packages/music.scm
index 9c8203aa80..04b3cd4b4b 100644
--- a/gnu/packages/music.scm
+++ b/gnu/packages/music.scm
@@ -6879,3 +6879,84 @@ (define-public musikcube
 streaming audio server.")
     (home-page "https://musikcube.com/")
     (license license:bsd-3)))
+(define-public orca-music
+  (let ((commit "5ba56ca67baae3db140f8b7a2b2fc46bbac5602f") (revision "1"))
+    (package
+      (name "orca-music")
+      ;; No upstream version numbers; Using commit instead.
+      (version (git-version "0" revision commit))
+      (source (origin
+                (method git-fetch)
+                (uri (git-reference
+                      (url "https://git.sr.ht/~rabbits/orca")
+                      (commit commit)))
+                (file-name (git-file-name name version))
+                (sha256
+                 (base32
+                  "1mnhk68slc6g5y5348vj86pmnz90a385jxvm3463fic79k90gckd"))))
+      (build-system gnu-build-system)
+      (arguments
+       `(#:tests? #f
+         #:phases (modify-phases %standard-phases
+                    (delete 'configure) ;; No autoconf
+                    ;; (add-after 'wrap 'wrap-program
+                    ;;   (lambda* (#:key inputs outputs #:allow-other-keys)
+                    ;;     (let ((out (assoc-ref outputs "out"))
+                    ;;           (pulseaudio-plugins
+                    ;;            (assoc-ref inputs "alsa-plugins:pulseaudio")))
+                    ;;       (with-directory-excursion (string-append out "/bin")
+                    ;;         (for-each
+                    ;;          (lambda (binary)
+                    ;;            (wrap-program binary
+                    ;;              ;; Make QtWebEngineProcess available
+                    ;;              `("QTWEBENGINEPROCESS_PATH" ":" =
+                    ;;                ,(list (string-append
+                    ;;                        qtwebengine
+                    ;;                        "/lib/qt5/libexec/QtWebEngineProcess")))))
+                    ;;          ;; wrap all the binaries shipping with the package, except
+                    ;;          ;; for the wrappings created during the 'wrap standard phase.
+                    ;;          ;; This extends existing .calibre-real wrappers rather than
+                    ;;          ;; create ..calibre-real-real-s.
+                    ;;          ;; For more information see: https://issues.guix.gnu.org/43249
+                    ;;          (find-files "." (lambda (file stat)
+                    ;;                            (not (wrapper? file)))))))))                      
+                    (replace 'build
+                      (lambda* (#:key inputs outputs #:allow-other-keys)
+                        (setenv "CC"
+                                ,(cc-for-target))
+                        (invoke "make" "release")))
+                    (add-after 'build 'rename-orca
+                      (lambda* _
+                        (invoke "mv" "-v" "./build/orca" "./build/orca-music")))
+                    (replace 'install
+                      (lambda* (#:key outputs #:allow-other-keys)
+                        (let* ((out (assoc-ref outputs "out")) (dest-bin (string-append
+                                                                          out
+                                                                          "/bin"))
+                               (share (string-append out "/share"))
+                               (dest-examples (string-append share "/examples"))
+                               (dest-doc (string-append share "/doc")))
+                          (install-file "./build/orca-music" dest-bin)
+                          (copy-recursively "./examples" dest-examples)
+                          (install-file "./README.md" dest-doc)))))))
+      (inputs (list ncurses portmidi alsa-plugins `(,alsa-plugins "pulseaudio")))
+      (native-inputs (list pkg-config))
+      ;; The below are needed as propagated inputs to let orca interact with
+      ;; alsa/pulse MIDI.
+      ;; (propagated-inputs `(("alsa-plugins" ,alsa-plugins) ("alsa-plugins:pulseaudio" ,alsa-plugins
+      ;;                                                      "pulseaudio")))
+      (native-search-paths (list
+                             (search-path-specification
+                              (variable "TERMINFO_DIRS")
+                              (files '("share/terminfo")))))
+      (synopsis "musical live-coding environment")
+      (description
+       "This is the C implementation of the ORCΛ language and terminal
+livecoding environment. It's designed to be power efficient. It can handle
+large files, even if your terminal is small.
+
+Orca is not a synthesizer, but a flexible livecoding environment capable of
+sending MIDI, OSC, and UDP to your audio/visual interfaces like Ableton,
+Renoise, VCV Rack, or SuperCollider.")
+      (home-page "https://100r.co/site/orca.html")
+      (license license:expat))))
-- 
2.34.0