Installation instructions for forked-daapd
------------------------------------------

There are two ways to install forked-daapd: from a tarball or from the git
tree. The tarball contains a working build system and pre-generated ANTLR3
parsers; the git tree doesn't and requires more tools to generate the build
system and the ANTLR3 parsers.

In both cases the installation procedure is the traditional ./configure;
make; make install. Please read this file carefully before proceeding.


System-specific requirements:
 - Linux:
   + glibc 2.13+ (bugfix: process-wide setgroups(), glibc BZ#10563)
   + libasound (ALSA sound support - or you can use OSS4)
 - FreeBSD:
   + OSS4 sound support
   + libiconv

Tools:
 - The clang C compiler from the LLVM project. forked-daapd uses Blocks,
   an extension to the C language that is not supported by gcc. Along with
   clang, you'll also need the Blocks runtime, libblocksruntime.

 - pkg-config
 - gperf 3.x
        from <http://www.gnu.org/software/gperf/>

Libraries:
 - libantlr3c (ANTLR3 C runtime, version 3.2 for tarball builds)
        from <http://www.antlr.org/download/C>
 - Avahi client libraries (avahi-client), 0.6.24 minimum
        from <http://avahi.org/>
 - sqlite3 3.5.0+ with unlock notify API enabled (read below)
        from <http://sqlite.org/download.html>
 - libav 0.6+/0.7+ (or ffmpeg 0.5.1+)
        from <http://libav.org/releases/>
 - libconfuse
        from <http://www.nongnu.org/confuse/>
 - libdispatch
        /!\ Read below
 - libtre
        from <http://laurikari.net/tre/download/>
 - libavl
        /!\ Read below
 - MiniXML (aka mxml or libmxml)
        from <http://minixml.org/software.php>
 - gcrypt 1.2.0+
        from <http://gnupg.org/download/index.en.html#libgcrypt>
 - zlib
        from <http://zlib.net/>
 - libunistring 0.9.3+
        from <http://www.gnu.org/software/libunistring/#downloading>
 - libflac (optional - FLAC support)
        from <http://flac.sourceforge.net/download.html>
 - taglib (optional - Musepack support)
        from <http://developer.kde.org/~wheeler/taglib.html>
 - libplist 0.16+ (optional - iTunes XML support)
        from <http://github.com/JonathanBeck/libplist/downloads>

If using binary packages, remember that you need the development packages to
build forked-daapd (usually named -dev or -devel).

libdispatch for Linux and its dependencies can be found in the Debian archive;
you need at least libdispatch from SVN rev 197 + Debian patches (Linux support),
libkqueue 0.9.2 and libpthread_workqueue 0.7. At this time, it's probably
easiest to use whatever versions happen to be in Debian unstable.

libavl is not the GNU libavl. There doesn't seem to be an upstream website
anymore, but you'll find the source tarball alongside the forked-daapd
release tarballs (see below for the URL). Alternatively, you can fetch it from
any Debian mirror, too (it'll be in /debian/pool/main/liba/libavl).

sqlite3 needs to be built with support for the unlock notify API; this isn't
always the case in binary packages, so you may need to rebuild sqlite3 to
enable the unlock notify API (you can check for the presence of the
sqlite3_unlock_notify symbol in the sqlite3 library). Refer to the sqlite3
documentation, look for SQLITE_ENABLE_UNLOCK_NOTIFY.


Note about libav (ffmpeg)
-------------------------

libav (ffmpeg) is a central piece of forked-daapd and most other FLOSS
multimedia applications. The version of libav you use will potentially have a
great influence on your experience with forked-daapd.

The following versions of libav (ffmpeg) are supported and known to work:
 - ffmpeg 0.5.x: has issues with metadata (tags) extraction, notably with
   MP3 files and ID3 tags in general;
 - libav 0.6.x: known to work better with regard to metadata extraction;
 - libav 0.7.x: better yet

Note that forked-daapd uses libav since the ffmpeg/libav fork during the
0.6.x series.


Building from the git tree
--------------------------

Gitweb: <http://git.debian.org/?p=users/jblache/forked-daapd.git>
Git tree: <git://git.debian.org/users/jblache/forked-daapd.git>

Required tools:
 - ANTLR v3 is required to build forked-daapd, along with its C runtime
   (libantlr3c). Use at least version 3.1.3 of ANTLR v3 and the matching
   C runtime version.

 - Java runtime: ANTLR is written in Java and as such a JRE is required to
   run the tool. The JRE is enough, you don't need a full JDK.

 - autotools: autoconf 2.63+, automake 1.10+, libtool 2.2. Run autoreconf -i
   at the top of the source tree to generate the build system.

 - gettext: libunistring requires iconv and gettext provides the autotools
   macro definitions for iconv.

Start by generating the build system by running autoreconf -i. This will
generate the configure script and Makefile.in.

The configure script will look for a wrapper called antlr3 in the PATH to
invoke ANTLR3. If your installation of ANTLR3 does not come with such a
wrapper, create one as follows:

  #!/bin/sh
  CLASSPATH=...
  exec /path/to/java -cp $CLASSPATH org.antlr.Tool "@"

Adjust the CLASSPATH as needed so that Java will find all the jars needed
by ANTLR3.

The parsers will be generated during the build, no manual intervention is
needed.


Building from the tarball
-------------------------

Download URL: <http://alioth.debian.org/~jblache/forked-daapd/>

When building forked-daapd from a release tarball, the usual ./configure;
make; make install procedure applies.

FLAC and Musepack support are optional. If not enabled, metadata extraction
will fail on these files.

Support for iTunes Music Library XML format is optional. Use --enable-itunes
to enable this feature.

Recommended build settings:
 ./configure --prefix=/usr --sysconfdir=/etc --localstatedir=/var --enable-flac --enable-musepack

After installation, edit the configuration file, /etc/forked-daapd.conf and
adjust the values at your convenience.

forked-daapd will drop privileges to any user you'll specify in the
configuration file if it's started as root. It's recommended to create a
dedicated user without login privileges.

This user must have read permission on your library (you can create a group for
this and make the user a member of the group, for instance) and read/write
permissions on the database location ($localstatedir/cache/forked-daapd by
default).

You'll need an init script if you want to start forked-daapd at boot. A simple
init script will do, forked-daapd daemonizes all by itself and creates a
pidfile under /var/run. Different distributions have different standards for
init scripts and some do not use init scripts anymore; check the documentation
for your distribution.

For dependency-based boot systems, here are the forked-daapd dependencies:
 - local filesystems
 - network filesystems, if needed in your setup (library on NFS, ...)
 - networking
 - NTP
 - Avahi daemon

The LSB header below sums it up:

### BEGIN INIT INFO
# Provides:          forked-daapd
# Required-Start:    $local_fs $remote_fs $network $time avahi
# Required-Stop:     $local_fs $remote_fs $network $time
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: media server with support for RSP, DAAP, DACP and AirTunes
# Description:       forked-daapd is an iTunes-compatible media server for
#                    sharing your music library over the local network with RSP
#                    clients like the SoundBridge from Roku and DAAP clients like
#                    iTunes. It can also stream music to AirTunes devices.
### END INIT INFO
