pkgsrc-Bugs archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

pkg/45599: esound bin/esddsp for NetBSD (Pidgin Festival)



>Number:         45599
>Category:       pkg
>Synopsis:       esound bin/esddsp for NetBSD (Pidgin Festival)
>Confidential:   no
>Severity:       non-critical
>Priority:       low
>Responsible:    pkg-manager
>State:          open
>Class:          change-request
>Submitter-Id:   net
>Arrival-Date:   Fri Nov 11 11:35:00 +0000 2011
>Originator:     B.ICT A.P. deBROUWER Jr.
>Release:        NetBSD/i386 5.99.56
>Organization:
-none-
>Environment:
NetBSD 10.0.2.17 5.99.56 NetBSD 5.99.56 (MONOLITHIC_UGEN) #18: Mon Nov  7 
16:37:44 UTC 2011  
root@10.0.2.17:/obj-src/obj/sys/arch/i386/compile/MONOLITHIC_UGEN i38
>Description:
In Gnome use Pidgin and add wip/pidgin-festival.
In Pidgin sound ESD and
mv /usr/pkg/bin/esd /usr/pkg/bin/esd.orig
ln -s /usr/pkg/bin/esdcompat /usr/pkg/bin/esd
and maybe
gconftool-2 -g /system/gstreamer/0.10/default/audiosink
gconftool-2 -g /system/gstreamer/0.10/default/audiosrc
to get EsounD in PulseAudio.

Now discover we don't build bin/esddsp.
>How-To-Repeat:
see description.
>Fix:
So can we alter audio/esound patch-ac and add a patch-ba and bb.

Kinda like patch-ba to configure,
telling your platform (NetBSD) supports esddsp:

$NetBSD$

--- configure.orig      2011-11-10 20:16:31.000000000 +0000
+++ configure   2011-11-10 20:16:55.000000000 +0000
@@ -23066,7 +23066,7 @@
 { echo "$as_me:$LINENO: checking if your platform supports esddsp" >&5
 echo $ECHO_N "checking if your platform supports esddsp... $ECHO_C" >&6; }
 case "$host_os" in
-  linux* | freebsd* | kfreebsd*-gnu | bsdi4* )
+  linux* | freebsd* | kfreebsd*-gnu | netbsd* | bsdi4* )
     dsp_ok=yes
     ;;
 esac

An extension to patch-ac (patching ./esddsp.c),
conform audio/art/patches/patch-ab (patching artsc/artsdsp.c):

$NetBSD$

--- esddsp.c.orig       2008-11-18 20:35:19.000000000 +0000
+++ esddsp.c    2011-11-10 22:12:26.000000000 +0000
@@ -68,8 +68,9 @@
 #define REAL_LIBC ((void *) -1L)
 #endif
 
-#if defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || defined(__bsdi__)
+#if defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || defined(__NetBSD__) 
|| defined(__bsdi__)
 typedef unsigned long request_t;
+typedef off_t off64_t;
 #else
 typedef int request_t;
 #endif
@@ -104,6 +105,11 @@
 #define OSS_VOL_TO_ESD_RIGHT(vol)                              \
     (ESD_VOLUME_BASE * ((vol >> 8) & 0xff) / OSS_VOLUME_BASE)
 
+#ifdef __NetBSD__
+typedef int (*orig_ioctl_ptr)(int fd, request_t request, ...);
+static orig_ioctl_ptr orig_ioctl;
+#endif
+
 static void
 get_volume (int *left, int *right)
 {
@@ -135,6 +141,9 @@
   pthread_mutex_lock(&mutex);
   if (!ident)
     {
+#if defined(__NetBSD__)
+      void *handle;
+#endif
       const char *str;
      
       str = getenv ("ESDDSP_NAME");
@@ -145,6 +154,12 @@
       str = getenv("ESDDSP_MMAP");
       mmapemu = str && !strcmp(str,"1");
 
+#if defined(__NetBSD__)
+       handle = dlopen(NULL, DL_LAZY);
+       orig_ioctl = (orig_ioctl_ptr)dlsym(handle,"ioctl");
+       (void) dlclose(handle);
+#endif
+
       if (getenv ("ESDDSP_MIXER"))
        {
          use_mixer = 1;
@@ -621,9 +636,14 @@
 }
 
 int
+#ifdef __NetBSD__
+_oss_ioctl (int fd, request_t request, void *argp)
+#else
 ioctl (int fd, request_t request, ...)
+#endif
 {
   static int (*func) (int, request_t, void *) = NULL;
+#if !defined(__NetBSD__)
   va_list args;
   void *argp;
 
@@ -632,6 +652,7 @@
   va_start (args, request);
   argp = va_arg (args, void *);
   va_end (args);
+#endif
 
   if (fd == sndfd)
     return dspctl (fd, request, argp);
@@ -639,7 +660,11 @@
     if(use_mixer)
       return mixctl (fd, request, argp);
   } else { /* (fd != sndfd && fd != mixfd) */
+#ifdef __NetBSD__
+        return orig_ioctl (fd, request, argp); 
+#else
         return (*func) (fd, request, argp); 
+#endif
       }
   return 0;
 }

And a small patch-bb to get bin/esddsp going:

$NetBSD$

--- esddsp.in.orig      2008-11-18 17:33:39.000000000 +0000
+++ esddsp.in   2011-11-11 11:03:01.000000000 +0000
@@ -1,4 +1,4 @@
-#!/bin/sh
+#!/bin/ksh
 # esddsp - wrapper script to allow *some* binary only programs to use esd
 
 # default values for script variables
@@ -107,7 +107,7 @@
 exec_prefix=@exec_prefix@
 
 LD_PRELOAD="libesddsp.so.@ESD_MAJOR_VERSION@ libesd.so.@ESD_MAJOR_VERSION@ 
$LD_PRELOAD"
-export LD_PRELOAD
+#export LD_PRELOAD
 
 # invoke the program with the args given
 exec "$@"

Add PLIST.NetBSD

@comment $NetBSD$
bin/esddsp
lib/libesddsp.la
man/man1/esddsp.1

Bump PKGREVISION, make mps and
now we have Pidgin working w/
wip/pidgin-festival plugin and some, not all, voices.
(And yes, i'm still puzzled why i have to outcomment LD_PRELOAD.)



Home | Main Index | Thread Index | Old Index