This diff makes cdda2wav use sndio to play sound. Tested on amd64. Many thanks to jca@ who did a big part of the work.
OK? Index: Makefile =================================================================== RCS file: /cvs/ports/sysutils/cdrtools/Makefile,v retrieving revision 1.21 diff -u -p -u -p -r1.21 Makefile --- Makefile 12 Jun 2014 08:07:32 -0000 1.21 +++ Makefile 31 Oct 2014 09:28:39 -0000 @@ -3,17 +3,18 @@ COMMENT= ISO 9660 filesystem and CD/DVD/BD creation tools DISTNAME= cdrtools-3.00 -REVISION= 0 +REVISION= 1 CATEGORIES= sysutils HOMEPAGE= http://cdrtools.sourceforge.net/private/cdrtools.html # mostly CDDL, some components GPL (see COPYING) PERMIT_PACKAGE_CDROM= Yes -WANTLIB= c ossaudio +WANTLIB= c sndio MASTER_SITES= ${MASTER_SITE_SOURCEFORGE:=cdrtools/} +BUILD_DEPENDS= devel/m4 USE_GMAKE= Yes MAKE_ENV += MAKEPROG=${MAKE_PROGRAM} @@ -21,8 +22,7 @@ MAKE_FLAGS = GMAKE_NOWARN=true CC="${CC LDCC="${CC}" LDCC++="${CXX}" \ MKC++DEP="${CXX} -M" MKDEP="${CC} -M" \ DYNLD="${CC}" DYNLDC++="${CXX}" \ - GCCOPTOPT="" RANLIB=ranlib AR=ar \ - OSS_SOUND_DEV='"/dev/audio"' + GCCOPTOPT="" RANLIB=ranlib AR=ar NO_TEST= Yes Index: patches/patch-cdda2wav_configure_in =================================================================== RCS file: patches/patch-cdda2wav_configure_in diff -N patches/patch-cdda2wav_configure_in --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ patches/patch-cdda2wav_configure_in 31 Oct 2014 09:28:39 -0000 @@ -0,0 +1,55 @@ +$OpenBSD$ +--- cdda2wav/configure.in.orig Sat Aug 8 21:40:53 2009 ++++ cdda2wav/configure.in Thu Oct 30 19:15:57 2014 +@@ -19,15 +19,32 @@ case "$host_os" in + AC_CHECK_LIB(posix4, sched_get_priority_max) + ;; + esac ++case "$host_os" in ++ *openbsd*) ++dnl skip obsolete libossaudio on OpenBSD ++;; ++ *) + AC_CHECK_LIB(ossaudio, _oss_ioctl) ++;; ++esac ++AC_CHECK_LIB(sndio, sio_open) + + EXTRALIBS="$LIBS" + + AC_SUBST(EXTRALIBS) + + dnl check header files +-AC_CHECK_HEADERS(sys/cdio.h sys/cdrio.h sundev/srreg.h sys/audioio.h sun/audioio.h) ++AC_CHECK_HEADERS(sndio.h) ++AC_CHECK_HEADERS(sys/cdio.h sys/cdrio.h sundev/srreg.h) ++case "$host_os" in ++ *openbsd*) ++dnl skip obsolete soundcard.h and non-SunOS-compatible audioio.h on OpenBSD ++;; ++ *) ++AC_CHECK_HEADERS(sys/audioio.h sun/audioio.h) + AC_CHECK_HEADERS(soundcard.h sys/soundcard.h linux/soundcard.h machine/soundcard.h) ++;; ++esac + dnl We no longer include HAVE_WINDOWS_H in lconfig.h but we need the test + dnl result together with the test for mmsystem.h + AC_CHECK_HEADERS(sys/asoundlib.h windows.h mmsystem.h) +@@ -61,6 +78,17 @@ HAVE_OSS= + ;; + esac + AC_SUBST(HAVE_OSS) ++ ++case "${ac_cv_header_sndio_h}" in ++ *yes*) ++HAVE_SNDIO=1 ++;; ++ *) ++HAVE_SNDIO= ++;; ++esac ++AC_SUBST(HAVE_SNDIO) ++ + + AC_SUBST(HAVE_SYS_ASOUNDLIB_H) + Index: patches/patch-cdda2wav_lconfig_h_in =================================================================== RCS file: patches/patch-cdda2wav_lconfig_h_in diff -N patches/patch-cdda2wav_lconfig_h_in --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ patches/patch-cdda2wav_lconfig_h_in 31 Oct 2014 09:28:39 -0000 @@ -0,0 +1,25 @@ +$OpenBSD$ + +preprocessor directives for sndio + +--- cdda2wav/lconfig.h.in.orig Sat Aug 8 21:24:22 2009 ++++ cdda2wav/lconfig.h.in Thu Oct 30 19:14:12 2014 +@@ -19,12 +19,18 @@ + + #undef HAVE_MACHINE_SOUNDCARD_H /* if we should use machine/soundcard.h */ + ++#undef HAVE_SNDIO_H /* if we should use sndio.h */ ++ + #undef HAVE_SYS_ASOUNDLIB_H /* if we should use sys/asoundlib.h */ + + #undef HAVE_MMSYSTEM_H /* if we should use mmsystem.h */ + + #if defined HAVE_SOUNDCARD_H || defined HAVE_SYS_SOUNDCARD_H || defined HAVE_LINUX_SOUNDCARD_H || defined HAVE_MACHINE_SOUNDCARD_H + #define HAVE_OSS 1 ++#endif ++ ++#if defined HAVE_SNDIO_H ++#define HAVE_SNDIO 1 + #endif + + #if defined HAVE_WINDOWS_H && defined HAVE_MMSYSTEM_H Index: patches/patch-cdda2wav_local_cnf_in =================================================================== RCS file: patches/patch-cdda2wav_local_cnf_in diff -N patches/patch-cdda2wav_local_cnf_in --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ patches/patch-cdda2wav_local_cnf_in 31 Oct 2014 09:28:39 -0000 @@ -0,0 +1,23 @@ +$OpenBSD$ +--- cdda2wav/local.cnf.in.orig Mon Dec 28 17:16:56 2009 ++++ cdda2wav/local.cnf.in Fri Oct 31 10:01:12 2014 +@@ -47,15 +47,16 @@ OSS_SOUND_DEV= '"/dev/dsp"' + SUN_SOUND_DEV= '"/dev/audio"' + + HAVE_OSS= @HAVE_OSS@ ++HAVE_SNDIO= @HAVE_SNDIO@ + HAVE_SUNSOUND= @HAVE_SUNSOUND@ + HAVE_WINSOUND= @HAVE_WINSOUND@ + HAVE_OS2SOUND= @HAVE_OS2SOUND@ + HAVE_QNXSOUND= @HAVE_SYS_ASOUNDLIB_H@ + #_HAVE_SOUND= $(_UNIQ)$(HAVE_OSS)$(HAVE_SUNSOUND) +-_HAVE_SOUND= $(_UNIQ)$(HAVE_OSS)$(HAVE_SUNSOUND)$(HAVE_WINSOUND)$(HAVE_OS2SOUND)$(HAVE_QNXSOUND) ++_HAVE_SOUND= $(_UNIQ)$(HAVE_OSS)$(HAVE_SNDIO)$(HAVE_SUNSOUND)$(HAVE_WINSOUND)$(HAVE_OS2SOUND)$(HAVE_QNXSOUND) + __HAVE_SOUND= $(_HAVE_SOUND:$(_UNIQ)=) +-#HAVE_SOUND= $(__HAVE_SOUND:$(_UNIQ)$(HAVE_OSS)$(HAVE_SUNSOUND)=-DECHO_TO_SOUNDCARD) +-HAVE_SOUND= $(__HAVE_SOUND:$(_UNIQ)$(HAVE_OSS)$(HAVE_SUNSOUND)$(HAVE_WINSOUND)$(HAVE_OS2SOUND)$(HAVE_QNXSOUND)=-DECHO_TO_SOUNDCARD) ++#HAVE_SOUND= $(__HAVE_SOUND:$(_UNIQ)$(HAVE_OSS)$(HAVE_SNDIO)$(HAVE_SUNSOUND)=-DECHO_TO_SOUNDCARD) ++HAVE_SOUND= $(__HAVE_SOUND:$(_UNIQ)$(HAVE_OSS)$(HAVE_SNDIO)$(HAVE_SUNSOUND)$(HAVE_WINSOUND)$(HAVE_OS2SOUND)$(HAVE_QNXSOUND)=-DECHO_TO_SOUNDCARD) + + _SOUND_DEVICE= $(_UNIQ)$(HAVE_OSS)$(HAVE_SOUND)$(HAVE_SUNSOUND) + __SOUND_DEVICE= $(_SOUND_DEVICE:$(_UNIQ)='""') Index: patches/patch-cdda2wav_sndconfig_c =================================================================== RCS file: patches/patch-cdda2wav_sndconfig_c diff -N patches/patch-cdda2wav_sndconfig_c --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ patches/patch-cdda2wav_sndconfig_c 31 Oct 2014 09:28:39 -0000 @@ -0,0 +1,128 @@ +$OpenBSD$ +--- cdda2wav/sndconfig.c.orig Sun Nov 29 23:07:37 2009 ++++ cdda2wav/sndconfig.c Fri Oct 31 10:18:09 2014 +@@ -51,6 +51,10 @@ static UConst char sccsid[] = + # endif + #endif + ++#ifdef HAVE_SNDIO ++#include <sndio.h> ++#endif ++ + #include "mytype.h" + #include "byteorder.h" + #include "lowlevel.h" +@@ -85,7 +89,11 @@ static PLAYLISTSTRUCTURE PlayList[FRAGMENTS + 1]; + static unsigned BufferInd; + # endif /* defined __EMX__ */ + ++#if defined(HAVE_SNDIO) ++static char snd_device[200] = SIO_DEVANY; ++#else + static char snd_device[200] = SOUND_DEV; ++#endif + + int + set_snd_device(devicename) +@@ -161,6 +169,11 @@ check_winsound_caps(bits, rate, channels) + snd_pcm_t *pcm_handle; + #endif + ++#ifdef HAVE_SNDIO ++struct sio_hdl *hdl; ++struct sio_par par; ++#endif ++ + #if defined HAVE_OSS && defined SNDCTL_DSP_GETOSPACE + audio_buf_info abinfo; + #endif +@@ -172,6 +185,41 @@ init_soundcard(rate, bits) + { + #ifdef ECHO_TO_SOUNDCARD + if (global.echo) { ++# if defined(HAVE_SNDIO) ++ hdl = sio_open(snd_device, SIO_PLAY, 0); ++ if (hdl == NULL) { ++ errmsg("Cannot open sound device '%s'.\n", snd_device); ++ return (1); ++ } ++ sio_initpar(&par); ++ par.bits = bits; ++ par.sig = 1; ++ par.le = SIO_LE_NATIVE; ++ par.pchan = 2; ++ par.rate = rate; ++ par.appbufsz = 44100 / 4; ++ if (!sio_setpar(hdl, &par) || !sio_getpar(hdl, &par)) { ++ errmsg("Cannot set sound parameters for '%s'.\n", snd_device); ++ sio_close(hdl); ++ hdl = NULL; ++ return (1); ++ } ++ if (par.bits != bits || par.sig != 1 || par.le != SIO_LE_NATIVE || ++ par.pchan != 2 || par.rate != (int)rate) { ++ errmsg("Unsupported sound parameters for '%s'.\n", snd_device); ++ sio_close(hdl); ++ hdl = NULL; ++ return (1); ++ } ++ if (!sio_start(hdl)) { ++ errmsg("Couldn't start sound device '%s'.\n", snd_device); ++ sio_close(hdl); ++ hdl = NULL; ++ return (1); ++ } ++ ++# else /* HAVE_SNDIO */ ++ + # if defined(HAVE_OSS) && HAVE_OSS == 1 + if (open_snd_device() != 0) { + errmsg("Cannot open sound device '%s'.\n", snd_device); +@@ -543,6 +591,7 @@ init_soundcard(rate, bits) + # endif /* CYGWIN Windows sound */ + # endif /* else SUN audio */ + # endif /* else HAVE_OSS */ ++# endif /* else HAVE_SNDIO */ + } + #endif /* ifdef ECHO_TO_SOUNDCARD */ + return (0); +@@ -586,6 +635,12 @@ close_snd_device() + return (0); + #else + ++# if defined(HAVE_SNDIO) ++ if (hdl != NULL) { ++ sio_close(hdl); ++ hdl = NULL; ++ } ++#else + # if defined(__CYGWIN32__) || defined(__MINGW32__) + waveOutReset(0); + return (waveOutClose(DeviceID)); +@@ -610,6 +665,7 @@ close_snd_device() + # endif /* !QNX */ + # endif /* !EMX */ + # endif /* !Cygwin32 */ ++# endif + #endif /* ifdef ECHO_TO_SOUNDCARD */ + } + +@@ -620,6 +676,10 @@ write_snd_device(buffer, todo) + { + int result = 0; + #ifdef ECHO_TO_SOUNDCARD ++#if defined(HAVE_SNDIO) ++ if (hdl == NULL || !sio_write(hdl, buffer, todo)) ++ return (1); ++#else + #if defined(__CYGWIN32__) || defined(__MINGW32__) + MMRESULT mmres; + +@@ -706,6 +766,7 @@ outside_loop: + ; + #endif /* !defined __EMX__ */ + #endif /* !defined __CYGWIN32__ */ ++#endif + #endif /* ECHO_TO_SOUNDCARD */ + return (result); + }
