Subject: [bug#43628] Further Info

From: Prafulla Giri <[email-masked]>
Date: Sat, 26 Sep 2020 17:52:34 +0545

Okay, I think I'm stuck now. lol

On Sat, Sep 26, 2020 at 3:42 PM Prafulla Giri <[email-masked]>
wrote:

> Hello Mr. Lepiller,
>
> Thank you for the tip. For the moment, I want to poke around this issue.
> Perhaps I get absolutely tired of it (or find a good hack - and an ugly
> patch). I did manage to learn a bit more about union-builds in general. So,
> that's a silver lining.
>
> Also, your work on guix-android seems so very cool! Please keep up the
> great work!
>
> On Sat, Sep 26, 2020 at 3:28 PM Julien Lepiller <[email-masked]>
> wrote:
>
>>
>>
>> Hi Prafulla,
>>
>> Le 26 septembre 2020 03:31:38 GMT-04:00, Prafulla Giri <
>> [email-masked]> a écrit :
>> >Another information:
>> >
>> >I have other programs on my foreign system (installed via guix) that
>> >produce sound well, without any issues. They include:
>> >espeak and kdenlive.
>> >
>> >Also, I did try making the union-build use copies instead of symlinks
>> >using
>> >(union-build ... #:symlink copy-recursively) but that didn't work out
>> >either.
>> >
>> >Now, I'm going to take a look at fixing the pkg-config rules, and will
>> >be
>> >updating this thread should that resolve this issue.
>> >
>> >On Sat, Sep 26, 2020 at 12:21 PM Prafulla Giri
>> ><[email-masked]>
>> >wrote:
>> >
>> >> I forgot to mention, but the union-build works. If one `guix build`s
>> >the
>> >> union package, and cd into the /gnu/store/...-union-build, one will
>> >see
>> >> that things are there as it should be (lib/normal-alsa-*.so and
>> >> lib/alsa-lib/*pulse*.so).
>> >>
>> >> It's just that aegisub seems to be looking from the
>> >> /gnu/store/normal-alsa-lib-dir instead of
>> >/gnu/store/union-alsa-package.
>> >>
>>
>> I think the issue with the union-build is that it is completely ignored:
>> alsa doesn't look in it's current directory for plugins, but in the
>> directory where it's been configured (at build time) to look for.
>>
>> On the Guix System, there is a service that creates a /etc/asound.conf,
>> which references alsa-plugins:pulseaudio. Maybe you actually want to
>> configure that? Maybe try to copy this to a new file .asoundrc:
>>
>> pcm_type.pule {
>>   lib "/home/foo/.guix-profile/lib/alsa-lib/libasound_module_pcm_pulse.so"
>> }
>>
>> ctl_type.pulse {
>>   lib"/home/foo/.guix-profile/lib/alsa-lib/libasound_module_ctl_pulse.so"
>> }
>>
>> pcm.!default {
>>   type pulse
>> }
>>
>> ctl.!default {
>>   type pulse
>> }
>>
>
diff --git a/gnu/packages/video.scm b/gnu/packages/video.scm
index 0f727a6e9e..c828be546b 100644
--- a/gnu/packages/video.scm
+++ b/gnu/packages/video.scm
@@ -3836,7 +3836,52 @@ programmers to access a standard API to open and decompress media files.")
        ("hunspell" ,hunspell)
        ("mesa" ,mesa)
        ("libass" ,libass)
-       ("alsa-lib" ,alsa-lib)
+       ("alsa-lib-with-pulseaudio-plugin"
+        ,(package
+           (inherit alsa-lib)
+           (name "alsa-lib-with-pulseaudio-plugin")
+           (source #f)
+           (build-system trivial-build-system)
+           (arguments
+            `(#:modules ((guix build union)
+                         (guix build utils))
+              #:builder
+              (begin
+                (use-modules (ice-9 match)
+                             (guix build union)
+                             (guix build utils))
+                (let ((out (assoc-ref %outputs "out"))
+                      (alsa-lib (assoc-ref %build-inputs "alsa-lib")))
+                  (match %build-inputs
+                    (((names . directories) ...)
+                     (union-build out
+                                  directories
+                                  ;; Instead of a symlink union, this is will be a
+                                  ;; copy union, because this won't "Just Work™"
+                                  ;; with mere symlinks. Some of the files that make
+                                  ;; up the union need to tweaked to work properly.
+                                  #:create-all-directories? #t
+                                  #:symlink copy-file)))
+                  ;; Fix alsa-lib pkg-config file to point to the /gnu/store of
+                  ;; this union, rather than that of alsa-lib itself.
+                  (substitute* (string-append out "/lib/pkgconfig/alsa.pc")
+                    ((alsa-lib) out))
+                  #t))))
+           (inputs
+            `(("alsa-lib"
+               ,(package
+                  (inherit alsa-lib)
+                  (arguments `(,@(cons
+                                  (car (package-arguments alsa-lib))
+                                  (list (append
+                                         (cadr
+                                          (package-arguments alsa-lib))
+                                         (list (string-append
+                                                "--with-plugin-dir="
+                                                ;; stuff goes here
+                                                ))))))))
+               )
+              ("alsa-plugins:pulseaudio" ,alsa-plugins "pulseaudio")))))
        ("pulseaudio" ,pulseaudio)
        ("libx11" ,libx11)
        ("freetype" ,freetype)