Package: synaesthesia Severity: important Tags: patch Hi,
The current version of synaesthesia fails to build on GNU/kFreeBSD, because machine/soundcard.h has been moved to sys/soundcard.h on BSD systems for a long time (since version 5.0 for FreeBSD). Also the code to access the CDROM drive needs some tweaks in the #ifdef tests. Please find attached a patch to fix that. It would be nice if you could include it in the next upload. Thanks in advance, Aurelien -- System Information: Debian Release: testing/unstable Architecture: kfreebsd-i386 (i686) Shell: /bin/sh linked to /bin/bash Kernel: GNU/kFreeBSD 5.4-1-686 Locale: LANG=fr_FR.UTF-8, LC_CTYPE=fr_FR.UTF-8 (charmap=UTF-8)
Author: aurel32 Status: in BTS --- synaesthesia-2.3.orig/sound.cc +++ synaesthesia-2.3/sound.cc @@ -34,12 +34,12 @@ #include <fcntl.h> #include <unistd.h> #include <signal.h> -#ifndef __FreeBSD__ +#if !defined (__FreeBSD__) && !defined(__FreeBSD_kernel__) #include <linux/soundcard.h> #include <linux/cdrom.h> //#include <linux/ucdrom.h> #else -#include <machine/soundcard.h> +#include <sys/soundcard.h> #include <sys/cdio.h> #define CDROM_LEADOUT 0xAA #define CD_FRAMES 75 /* frames per second */ @@ -88,7 +88,7 @@ trackFrame = 0; trackCount = 0; -#ifndef __FreeBSD__ +#if !defined (__FreeBSD__) && !defined(__FreeBSD_kernel__) cdrom_tochdr cdTochdr; if (-1 == ioctl(cdDevice, CDROMREADTOCHDR, &cdTochdr)) #else @@ -96,7 +96,7 @@ if (-1 == ioctl(cdDevice, CDIOREADTOCHEADER, (char *)&cdTochdr)) #endif return; -#ifndef __FreeBSD__ +#if !defined (__FreeBSD__) && !defined(__FreeBSD_kernel__) trackCount = cdTochdr.cdth_trk1; #else trackCount = cdTochdr.ending_track - cdTochdr.starting_track + 1; @@ -105,7 +105,7 @@ int i; trackFrame = new int[trackCount+1]; for(i=trackCount;i>=0;i--) { -#ifndef __FreeBSD__ +#if !defined (__FreeBSD__) && !defined(__FreeBSD_kernel__) cdrom_tocentry cdTocentry; cdTocentry.cdte_format = CDROM_MSF; cdTocentry.cdte_track = (i == trackCount ? CDROM_LEADOUT : i+1); @@ -121,7 +121,7 @@ //Bug fix: thanks to Ben Gertzfield (9/7/98) //Leadout track is sometimes reported as data. //Added check for this. -#ifndef __FreeBSD__ +#if !defined (__FreeBSD__) && !defined(__FreeBSD_kernel__) if (-1 == ioctl(cdDevice, CDROMREADTOCENTRY, & cdTocentry) || (i != trackCount && (cdTocentry.cdte_ctrl & CDROM_DATA_TRACK))) trackFrame[i] = (i==trackCount?0:trackFrame[i+1]); @@ -154,7 +154,7 @@ } void cdPlay(int frame, int endFrame) { -#ifndef __FreeBSD__ +#if !defined (__FreeBSD__) && !defined(__FreeBSD_kernel__) cdrom_msf msf; #else struct ioc_play_msf msf; @@ -169,7 +169,7 @@ // (Sybren Stuvel) cdStop(); -#ifndef __FreeBSD__ +#if !defined (__FreeBSD__) && !defined(__FreeBSD_kernel__) msf.cdmsf_min0 = frame / (60*CD_FRAMES); msf.cdmsf_sec0 = frame / CD_FRAMES % 60; msf.cdmsf_frame0 = frame % CD_FRAMES; @@ -182,7 +182,7 @@ //Bug fix: thanks to Martin Mitchell //An out by one error that affects some CD players. //Have to use endFrame-1 rather than endFrame (9/7/98) -#ifndef __FreeBSD__ +#if !defined (__FreeBSD__) && !defined(__FreeBSD_kernel__) msf.cdmsf_min1 = (endFrame-1) / (60*CD_FRAMES); msf.cdmsf_sec1 = (endFrame-1) / CD_FRAMES % 60; msf.cdmsf_frame1 = (endFrame-1) % CD_FRAMES; @@ -196,7 +196,7 @@ } void cdGetStatus(int &track, int &frames, SymbolID &state) { -#ifndef __FreeBSD__ +#if !defined (__FreeBSD__) && !defined(__FreeBSD_kernel__) cdrom_subchnl subchnl; subchnl.cdsc_format = CDROM_MSF; if (-1 == ioctl(cdDevice, CDROMSUBCHNL, &subchnl)) { @@ -216,7 +216,7 @@ state = (state == Open ? Open : NoCD); /* ? */ return; } -#ifndef __FreeBSD__ +#if !defined (__FreeBSD__) && !defined(__FreeBSD_kernel__) track = subchnl.cdsc_trk; frames = subchnl.cdsc_reladdr.msf.minute*60*CD_FRAMES+ subchnl.cdsc_reladdr.msf.second*CD_FRAMES+ @@ -229,7 +229,7 @@ #endif SymbolID oldState = state; -#ifndef __FreeBSD__ +#if !defined (__FreeBSD__) && !defined(__FreeBSD_kernel__) switch(subchnl.cdsc_audiostatus) { case CDROM_AUDIO_PAUSED : state = Pause; break; case CDROM_AUDIO_PLAY : state = Play; break; @@ -260,35 +260,35 @@ void cdStop(void) { //attemptNoDie(ioctl(cdDevice, CDROMSTOP),"stopping CD"); -#ifndef __FreeBSD__ +#if !defined (__FreeBSD__) && !defined(__FreeBSD_kernel__) ioctl(cdDevice, CDROMSTOP); #else ioctl(cdDevice, CDIOCSTOP); #endif } void cdPause(void) { -#ifndef __FreeBSD__ +#if !defined (__FreeBSD__) && !defined(__FreeBSD_kernel__) attemptNoDie(ioctl(cdDevice, CDROMPAUSE),"pausing CD",true); #else attemptNoDie(ioctl(cdDevice, CDIOCPAUSE),"pausing CD",true); #endif } void cdResume(void) { -#ifndef __FreeBSD__ +#if !defined (__FreeBSD__) && !defined(__FreeBSD_kernel__) attemptNoDie(ioctl(cdDevice, CDROMRESUME),"resuming CD",true); #else attemptNoDie(ioctl(cdDevice, CDIOCRESUME),"resuming CD",true); #endif } void cdEject(void) { -#ifndef __FreeBSD__ +#if !defined (__FreeBSD__) && !defined(__FreeBSD_kernel__) attemptNoDie(ioctl(cdDevice, CDROMEJECT),"ejecting CD",true); #else attemptNoDie(ioctl(cdDevice, CDIOCEJECT),"ejecting CD",true); #endif } void cdCloseTray(void) { -#ifndef __FreeBSD__ +#if !defined (__FreeBSD__) && !defined(__FreeBSD_kernel__) attemptNoDie(ioctl(cdDevice, CDROMCLOSETRAY),"ejecting CD",true); #else attemptNoDie(ioctl(cdDevice, CDIOCCLOSE),"ejecting CD",true); @@ -489,7 +489,7 @@ int format, stereo, fragment, fqc; -#ifdef __FreeBSD__ +#if defined(__FreeBSD__) || defined(_FreeBSD_kernel__) attempt(device = open(dspName,O_WRONLY),"opening dsp device",true); format = SOUNDFORMAT; attempt(ioctl(device,SNDCTL_DSP_SETFMT,&format),"setting format",true); @@ -515,7 +515,7 @@ fragment = 0x0003000e; attemptNoDie(ioctl(device,SNDCTL_DSP_SETFRAGMENT,&fragment),"setting fragment",true); -#ifndef __FreeBSD__ +#if !defined (__FreeBSD__) && !defined(__FreeBSD_kernel__) attempt(ioctl(device,SNDCTL_DSP_SETFMT,&format),"setting format",true); if (format != SOUNDFORMAT) error("setting format (2)"); #endif