jasonmc / forked-daapd

A re-write of the firefly media server (mt-daapd). It's released under GPLv2+. Please note that this git repository is a mirror of the official one at git://git.debian.org/~jblache/forked-daapd.git
http://blog.technologeek.org/2009/06/12/217
GNU General Public License v2.0
328 stars 45 forks source link

Three FreeBSD compilation issues #30

Closed freultwah closed 13 years ago

freultwah commented 13 years ago

Disclaimer: I am not a programmer, I just tinker with a bunch of FreeBSD boxes and have developed very rudimentary code reading skills that enable me to fix an odd syntax bug here and there, provided it's very easy, and also use /* and */ if something does not compile.

Now, I've been toying around with forked-daapd since almost the beginning. I even maintain a small patch set for my own use, since I run a patched copy of ffmpeg (basically a modified mov.c to extract tracknumber and tracktotal correctly from m4a files) and wanted my copy of forked-daapd to use the added functionality. Introducing the changes to ffmpeg has proved impossible.

Ever since AirPlay was introduced, I have not been able to compile the software. (The functionality should be more modular, as in "./configure --without-airplay" or something, but that's another story.) Today I messed around with it some more and finally managed.

System: FreeBSD 8.2 PRE, everything compiled with base system gcc, binutils are from the ports, ANTLR 3.2, libavl, libplist and libunistring installed by hand.

Problem #1:

player.c: In function 'device_activate_cb': player.c:1644: error: 'cmd' undeclared (first use in this function) player.c:1644: error: (Each undeclared identifier is reported only once player.c:1644: error: for each function it appears in.)

Relevant section in file:

elif defined(FreeBSD) || defined(FreeBSD_kernel)

      if (cmd.ret != -2)
        cmd.ret = -1;
      goto out;

endif

I think it should read instead:

elif defined(FreeBSD) || defined(FreeBSD_kernel)

      if (cur_cmd->ret != -2)
        cur_cmd->ret = -1;
      goto out;

endif

Problem #2:

raop.c:49:20: error: endian.h: No such file or directory

Relevant section in file:

include

I think it should read instead:

if defined(linux)

include

elif defined(FreeBSD) || defined(FreeBSD_kernel)

include <sys/endian.h>

endif

Problem #3:

IPv6 support as implemented in raop.c just plain does not work on FreeBSD, I am unable to fix it (but I bet someone can who is not me) and I just commented it out on both occasions:

raop.c: In function 'raop_v2_timing_cb': raop.c:1954: error: 'struct in6_addr' has no member named 's6_addr32' raop.c:1954: error: 'struct in6_addr' has no member named 's6_addr32' raop.c: In function 'raop_v2_control_cb': raop.c:2316: error: 'struct in6_addr' has no member named 's6_addr32' raop.c:2316: error: 'struct in6_addr' has no member named 's6_addr32'

Having made those three minor adjustments, stuff compiles and works on FreeBSD without a glitch.

Does somebody care or am I clapping with one hand here?

freultwah commented 13 years ago

Sorry for the awkward formatting, first post and all, but it should not deter anybody.