Hello Linus, since when we culled OSS support in Fedora's kernel, sidplay could not delight our ears with the three celestial, synth voices of the SID. If you like this patch, I'll go on and commit myself using my überpackager superpowers. I'm also planning to submit the autoconf changes upstream. diff -u -p -r1.6 sidplay.spec --- sidplay.spec 11 May 2009 20:10:35 -0000 1.6 +++ sidplay.spec 8 Sep 2009 04:13:27 -0000 @@ -3,7 +3,7 @@ Name: sidplay Version: 2.0.9 -Release: 7%{?dist} +Release: 8%{?dist} Summary: A command-line tool for playing back SID files URL: http://sidplay2.sourceforge.net/ Group: Applications/Multimedia @@ -12,6 +12,8 @@ # http://packages.debian.org/unstable/oldlibs/sidplay Patch0: sidplay_2.0.9-5.diff.gz Patch1: gcc440.patch +Patch2: sidplay-alsa.patch +Patch3: sidplay-autohell-fixes.patch BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) License: GPL BuildRequires: libsidplay-devel @@ -35,9 +37,12 @@ %setup -q %patch0 -p1 %patch1 -p1 +%patch2 -p1 +%patch3 -p1 %build -%configure --with-sidbuilders=%{_libdir}/sidplay/builders +ACLOCAL='aclocal -I unix' autoreconf -v --force --install +%configure --with-sidbuilders=%{_libdir}/sidplay/builders --with-alsa make %{?_smp_mflags} %install @@ -54,6 +59,11 @@ %{_bindir}/* %changelog +* Mon Sep 07 2009 Bernie Innocenti <bernie@xxxxxxxxxxx> 2.0.9-7 +- Add sidplay-alsa.patch, stolen from Gentoo +- Add sidplay-autohell-fixes.patch, rolled in house +- Rock! + * Mon May 11 2009 Linus Walleij <triad@xxxxxxxxx> 2.0.9-6 - Located a suspect GCC 4.4.0 rebuild bug.
>From http://bugs.gentoo.org/98769 diff -Nrup sidplay-2.0.9.orig/configure.ac sidplay-2.0.9/configure.ac --- sidplay-2.0.9.orig/configure.ac 2009-09-06 00:26:21.370889171 -0400 +++ sidplay-2.0.9/configure.ac 2009-09-06 00:26:38.631866724 -0400 @@ -24,6 +24,8 @@ AC_CHECK_HEADERS(sys/ioctl.h linux/sound sys/soundcard.h soundcard.h sys/audio.h sun/audioio.h sun/dbriio.h sys/audioio.h \ audio.h dmedia/audio.h) +AC_ARG_WITH(alsa,[ --with-alsa Use ALSA library for sound],[WANT_ALSA=$withval],[WANT_ALSA=no]) + AH_TOP( [/* Define supported audio driver */ #undef HAVE_HARDSID @@ -60,9 +62,17 @@ case "$host" in AC_MSG_RESULT(irix) AC_CHECK_LIB(audio, main, [AUDIO_LDADD=-laudio AC_SUBST(AUDIO_LDADD)]) ;; - *linux*) AC_DEFINE(HAVE_OSS) - audiodrv_libadd="./audio/oss/liboss.a" - AC_MSG_RESULT(oss) + *linux*) + if test "$WANT_ALSA" = "yes" ; then + AC_DEFINE(HAVE_ALSA) + audiodrv_libadd="./audio/alsa/libalsa.a" + AC_MSG_RESULT(alsa) + AC_CHECK_LIB(asound, main, [AUDIO_LDFLAGS=-lasound AC_SUBST(AUDIO_LDFLAGS)]) + else + AC_DEFINE(HAVE_OSS) + audiodrv_libadd="./audio/oss/liboss.a" + AC_MSG_RESULT(oss) + fi ;; *netbsd*) AC_DEFINE(HAVE_OSS) audiodrv_libadd="./audio/oss/liboss.a" diff -Nrup sidplay-2.0.9.orig/src/audio/alsa/audiodrv.cpp sidplay-2.0.9/src/audio/alsa/audiodrv.cpp --- sidplay-2.0.9.orig/src/audio/alsa/audiodrv.cpp 2009-09-06 00:26:21.372869292 -0400 +++ sidplay-2.0.9/src/audio/alsa/audiodrv.cpp 2009-09-06 00:26:38.633866542 -0400 @@ -2,6 +2,9 @@ // Advanced Linux Sound Architecture (ALSA) specific audio driver interface. // -------------------------------------------------------------------------- /*************************************************************************** + * 2005-07-12: Heikki Orsila <heikki.orsila@xxxxxx> + * Fixed use of obsolete parts of ALSA API + * * $Log: audiodrv.cpp,v $ * Revision 1.7 2002/03/04 19:07:48 s_a_white * Fix C++ use of nothrow. @@ -31,6 +34,7 @@ #include "audiodrv.h" #ifdef HAVE_ALSA +#include <iostream> #include <stdio.h> #ifdef HAVE_EXCEPTIONS # include <new> @@ -57,88 +61,86 @@ void Audio_ALSA::outOfOrder () void *Audio_ALSA::open (AudioConfig &cfg, const char *) { AudioConfig tmpCfg; - int mask, wantedFormat, format; - int rtn; - int card = -1, dev = 0; - - if (_audioHandle != NULL) - { + snd_pcm_uframes_t buffer_frames; + snd_pcm_hw_params_t *hw_params; + + // Transfer input parameters to this object. + // May later be replaced with driver defaults. + tmpCfg = cfg; + unsigned int rate = tmpCfg.frequency; + + if (_audioHandle != NULL) { _errorString = "ERROR: Device already in use"; return NULL; } - if ((rtn = snd_pcm_open_preferred (&_audioHandle, &card, &dev, SND_PCM_OPEN_PLAYBACK))) - { + if (snd_pcm_open (&_audioHandle, "default", SND_PCM_STREAM_PLAYBACK, 0)) { _errorString = "ERROR: Could not open audio device."; goto open_error; } - - // Transfer input parameters to this object. - // May later be replaced with driver defaults. - tmpCfg = cfg; - snd_pcm_channel_params_t pp; - snd_pcm_channel_setup_t setup; - - snd_pcm_channel_info_t pi; - - memset (&pi, 0, sizeof (pi)); - pi.channel = SND_PCM_CHANNEL_PLAYBACK; - if ((rtn = snd_pcm_plugin_info (_audioHandle, &pi))) - { - _errorString = "ALSA: snd_pcm_plugin_info failed."; - goto open_error; + if (snd_pcm_hw_params_malloc(&hw_params) < 0) { + _errorString = "ERROR: could not malloc hwparams."; + goto open_error; } - - memset(&pp, 0, sizeof (pp)); - - pp.mode = SND_PCM_MODE_BLOCK; - pp.channel = SND_PCM_CHANNEL_PLAYBACK; - pp.start_mode = SND_PCM_START_FULL; - pp.stop_mode = SND_PCM_STOP_STOP; - - pp.buf.block.frag_size = pi.max_fragment_size; - - pp.buf.block.frags_max = 1; - pp.buf.block.frags_min = 1; - - pp.format.interleave = 1; - pp.format.rate = tmpCfg.frequency; - pp.format.voices = tmpCfg.channels; - - // Set sample precision and type of encoding. - if ( tmpCfg.precision == 8 ) - { - tmpCfg.encoding = AUDIO_UNSIGNED_PCM; - pp.format.format = SND_PCM_SFMT_U8; + + if (snd_pcm_hw_params_any (_audioHandle, hw_params) < 0) { + _errorString = "ERROR: could not initialize hw params"; + goto open_error; } - if ( tmpCfg.precision == 16 ) - { - tmpCfg.encoding = AUDIO_SIGNED_PCM; - pp.format.format = SND_PCM_SFMT_S16_LE; + + if (snd_pcm_hw_params_set_access (_audioHandle, hw_params, SND_PCM_ACCESS_RW_INTERLEAVED)) { + _errorString = "ERROR: could not set access type"; + goto open_error; } - if ((rtn = snd_pcm_plugin_params (_audioHandle, &pp)) < 0) - { - _errorString = "ALSA: snd_pcm_plugin_params failed."; - goto open_error; + snd_pcm_format_t alsamode; + switch (tmpCfg.precision) { + case 8: + tmpCfg.encoding = AUDIO_UNSIGNED_PCM; + alsamode = SND_PCM_FORMAT_U8; + break; + case 16: + tmpCfg.encoding = AUDIO_SIGNED_PCM; + alsamode = SND_PCM_FORMAT_S16; + break; + default: + _errorString = "ERROR: set desired number of bits for audio device."; + goto open_error; } - - if ((rtn = snd_pcm_plugin_prepare (_audioHandle, SND_PCM_CHANNEL_PLAYBACK)) < 0) - { - _errorString = "ALSA: snd_pcm_plugin_prepare failed."; - goto open_error; + + if (snd_pcm_hw_params_set_format (_audioHandle, hw_params, alsamode)) { + _errorString = "ERROR: could not set sample format"; + goto open_error; } - - memset (&setup, 0, sizeof (setup)); - setup.channel = SND_PCM_CHANNEL_PLAYBACK; - if ((rtn = snd_pcm_plugin_setup (_audioHandle, &setup)) < 0) - { - _errorString = "ALSA: snd_pcm_plugin_setup failed."; - goto open_error; + + if (snd_pcm_hw_params_set_channels (_audioHandle, hw_params, tmpCfg.channels)) { + _errorString = "ERROR: could not set channel count"; + goto open_error; } - tmpCfg.bufSize = setup.buf.block.frag_size; + if (snd_pcm_hw_params_set_rate_near (_audioHandle, hw_params, &rate, 0)) { + _errorString = "ERROR: could not set sample rate"; + goto open_error; + } + + _alsa_to_frames_divisor = tmpCfg.channels * tmpCfg.precision / 8; + buffer_frames = 4096; + snd_pcm_hw_params_set_period_size_near(_audioHandle, hw_params, &buffer_frames, 0); + + if (snd_pcm_hw_params (_audioHandle, hw_params)) { + _errorString = "ERROR: could not set hw parameters"; + goto open_error; + } + + snd_pcm_hw_params_free (hw_params); + + if (snd_pcm_prepare (_audioHandle)) { + _errorString = "ERROR: could not prepare audio interface for use"; + goto open_error; + } + + tmpCfg.bufSize = buffer_frames * _alsa_to_frames_divisor; #ifdef HAVE_EXCEPTIONS _sampleBuffer = new(std::nothrow) int_least8_t[tmpCfg.bufSize]; #else @@ -158,13 +160,11 @@ void *Audio_ALSA::open (AudioConfig &cfg return _sampleBuffer; open_error: + std::cerr << "ALSA open error: " << _errorString << std::endl; if (_audioHandle != NULL) - { close (); - } - perror ("ALSA"); -return NULL; + return NULL; } // Close an opened audio device, free any allocated buffers and @@ -174,7 +174,7 @@ void Audio_ALSA::close () if (_audioHandle != NULL ) { snd_pcm_close(_audioHandle); - delete [] _sampleBuffer; + delete [] ((int_least8_t *) _sampleBuffer); outOfOrder (); } } @@ -192,7 +192,7 @@ void *Audio_ALSA::write () return NULL; } - snd_pcm_plugin_write (_audioHandle, _sampleBuffer, _settings.bufSize); + snd_pcm_writei (_audioHandle, _sampleBuffer, _settings.bufSize / _alsa_to_frames_divisor); return (void *) _sampleBuffer; } diff -Nrup sidplay-2.0.9.orig/src/audio/alsa/audiodrv.h sidplay-2.0.9/src/audio/alsa/audiodrv.h --- sidplay-2.0.9.orig/src/audio/alsa/audiodrv.h 2009-09-06 00:26:21.373888163 -0400 +++ sidplay-2.0.9/src/audio/alsa/audiodrv.h 2009-09-06 00:26:38.634867533 -0400 @@ -35,8 +35,7 @@ #include <errno.h> #include <fcntl.h> #include <unistd.h> -#include <sys/ioctl.h> -#include <sys/asoundlib.h> +#include <alsa/asoundlib.h> #include "../AudioBase.h" @@ -44,6 +43,7 @@ class Audio_ALSA: public AudioBase { private: // ------------------------------------------------------- private snd_pcm_t * _audioHandle; + int _alsa_to_frames_divisor; void outOfOrder ();
Author: Bernie Innocenti <bernie@xxxxxxxxxxx> Fix the build harness for contemporary versions of the autoshite suite. We can't invoke libtool from within configure because it's not yet there; but we don't need libtool if we use pkg-config to detect libraries. This change opens the possibility to drop a bunch of macros from unix/sidplay2.m4 and simplify other things, but this patch doesn't bother to. --- sidplay-2.0.9.old/configure.ac 2009-09-06 16:11:38.362313298 -0400 +++ sidplay-2.0.9/configure.ac 2009-09-06 16:15:34.224189943 -0400 @@ -1,6 +1,7 @@ dnl Process this file with autoconf to produce a configure script. AC_INIT(Makefile.am) AC_CONFIG_AUX_DIR(unix) +AC_CONFIG_MACRO_DIR(unix) AM_CONFIG_HEADER(unix/config.h) dnl Setup library CURRENT, REVISION and AGE @@ -114,16 +115,15 @@ MY_CHECK_IOS_BIN MY_CHECK_IOS_OPENMODE dnl Check for libraries -SID2_LIB_CHECKS -SID2_FIND_LIBSIDPLAY2 -SID2_FIND_LIBSIDUTILS +PKG_CHECK_MODULES(LIBSIDPLAY2, libsidplay2) +PKG_CHECK_MODULES(LIBSIDUTILS, libsidutils) # Find sid builder emulations SID2_FIND_BUILDERS dnl Add absolute directory for header files CXXFLAGS="$CXXFLAGS -I\$(top_srcdir)/include \ -\$(LIBSIDPLAY2_CXXFLAGS) \$(LIBSIDUTILS_CXXFLAGS)" +\$(LIBSIDPLAY2_CFLAGS) \$(LIBSIDUTILS_CFLAGS)" ACLOCAL_AMFLAGS="-I unix" AC_SUBST(ACLOCAL_AMFLAGS) diff -rup sidplay-2.0.9.old/src/Makefile.am sidplay-2.0.9/src/Makefile.am --- sidplay-2.0.9.old/src/Makefile.am 2003-07-07 15:58:53.000000000 -0400 +++ sidplay-2.0.9/src/Makefile.am 2009-09-06 16:10:21.236220894 -0400 @@ -11,7 +11,7 @@ player.cpp player.h sidplay2_LDADD = ./audio/null/libnull.a ./audio/wav/libwav.a \ $(AUDIO_DRV) $(AUDIO_LDFLAGS) \ -$(LIBSIDPLAY2_LDFLAGS) $(LIBSIDUTILS_LDFLAGS) \ +$(LIBSIDPLAY2_LIBS) $(LIBSIDUTILS_LIBS) \ $(BUILDERS_LDFLAGS) # Remove bad default includes --- sidplay-2.0.9/unix/my_macros.m4 2009-09-07 08:48:22.441381197 -0400 +++ sidplay-2.0.9.bernie/unix/my_macros.m4 2009-09-06 11:51:18.198661349 -0400 @@ -163,7 +163,7 @@ AC_DEFUN([MY_TRY_COMPILE], CXXFLAGS="$CXXFLAGS $1" LDFLAGS="$LDFLAGS $2" - CXX="${SHELL-/bin/sh} ${srcdir}/libtool $CXX" + #CXX="${SHELL-/bin/sh} ${srcdir}/libtool $CXX" AC_TRY_LINK( [#include <$3>],
-- fedora-devel-list mailing list fedora-devel-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/fedora-devel-list