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

Reply via email to