Skip to main content

Адъ меломана. NB mpd для Solaris

Database+files only mpd for installation on home NFS server.

Только база данных с поддержкой нужных файлов без вывода, ресемплеров, энкодеров.

Update: значительнее практичнее использовать ffmpeg вместо libmad, wavpack, flac.

Basic env and preparations

export DEV_ROOT=/develop/build
export DEV_SRC=/develop/source
PATH=/usr/gnu/bin:/usr/local/bin:/develop/build/bin/:/usr/opengrok/bin:$PATH
sudo pkg install gnu-* (alot of GNU staff like autoconf/automake/grep)
sudo pkg install codec/flac
sudo pkg install develop/icu
cd $DEV_SRC && mkdir mpd && cd mpd

Boost (about 2 hours)

git clone --recursive https://github.com/boostorg/boost.git
cd boost
./bootstrap.sh --without-libraries=python \
--without-libraries=stacktrace
./b2 -d 0 -q -j 8
cd ..

libfaad (aac, i have a huge collection in aac format)

git clone git@github.com:gypified/libfaad.git
cd libfaad
./configure --prefix $DEV_ROOT
gmake -j 8 install
cd ..

WavPack

wget http://www.wavpack.com/wavpack-5.1.0.tar.bz2
gtar cfj wavpack-5.1.0.tar.bz2
cd wavpack-5.1.10
./configure --prefix $DEV_ROOT
gmake -j 8 install
cd ..

libmad

wget ftp://ftp.mars.org/pub/mpeg/libmad-0.15.1b.tar.gz
gtar xfz libmad-0.15.1b.tar.gz
cd libmad
./configure --prefix $DEV_ROOT
gmake -j 8 install
cd ..

libid3tag

wget ftp://ftp.mars.org/pub/mpeg/libid3tag-0.15.1b.tar.gz
gtar xfz libid3tag-0.15.1b.tar.gz
tar xfz libid3tag-0.15.1b.tar.gz
cd libid3tag
./configure --prefix $DEV_ROOT
gmake -j 8 install
cd ..

mpd (10 minutes)

    git clone git@github.com:MusicPlayerDaemon/MPD.git
    cd MPD
    # pkg install codec/flac develop/icu
    ./configure \
     --with-boost=$DEV_SRC/mpd/boost \
     --with-boost-libdir=$DEV_SRC/mpd/boost/stage/lib \
     --prefix $DEV_ROOT \
     --sysconfdir=/etc \
     CPPFLAGS="-I/usr/include -I$DEV_ROOT/include" \
     LD_LIBRARY_PATH=$DEV_ROOT/lib \
     ID3TAG_LIBS=$DEV_ROOT/lib \
     MAD_LIBS=$DEV_ROOT/lib \
     PKG_CONFIG_PATH=$DEV_ROOT/lib/pkgconfig \
     --with-zeroconf=no \
     --disable-pulse \
     --disable-alsa \
     --disable-ipv6 \
     --disable-oss \
     --disable-solaris-output \
     --disable-iso9660 \
     --disable-ipv6 \
     --disable-nfs \
     --disable-smbclient \
     --disable-webdav \
     --disable-adplug \
     --disable-audiofile \
     --disable-ffmpeg \
     --disable-fluidsynth \
     --disable-gme \
     --disable-mikmod \
     --disable-modplug \
     --disable-mpc \
     --disable-mpg123 \
     --disable-sidplay \
     --disable-sndfile \
     --disable-vorbis \
     --disable-wildmidi \
     --disable-ao \
     --disable-alsa \
     --disable-fifo \
     --disable-haiku \
     --disable-httpd-output \
     --disable-jack \
     --disable-mms \
     --disable-openal \
     --disable-oss \
     --disable-osx \
     --disable-pipe-output \
     --disable-pulse \
     --disable-recorder-output \
     --disable-roar \
     --disable-shout \
     --disable-sndio \
     --disable-solaris-output \
     --disable-cdio-paranoia \
     --disable-soundcloud \
     --disable-lame-encoder \
     --disable-shine-encoder \
     --disable-twolame-encoder \
     --disable-vorbis-encoder \
     --disable-wave-encoder \
     --disable-lsr \
     --disable-soxr \
     --disable-neighbor-plugins \
     --disable-upnp \
     --disable-expat \
     --disable-libwrap \
     --disable-debug \
     --disable-test \
     --disable-documentation \
     --disable-inotify \
     --disable-libmpdclient \
     --disable-zzip \
     --disable-opus \
     --enable-database \
     --enable-daemon \
     --enable-sqlite \
     --enable-icu \
     --enable-un \
     --enable-id3 \
     --enable-mad \
     --enable-flac \
     --enable-bzip2 \
     --enable-cue \
     --enable-curl \
     --enable-tcp \
     --enable-largefile \
     --enable-dsd \
     --enable-zlib \
     --enable-wavpack \
     --enable-aac \
    gmake -j 8
PARTIALLY static build – this is VERY dirty shit but it works good
    g++ -std=c++14 -D_POSIX_PTHREAD_SEMANTICS -pthread -g -O2 \
     -fvisibility=hidden -fno-threadsafe-statics \
     -fmerge-all-constants -ffast-math -ftree-vectorize \
     -ffunction-sections -fdata-sections -Wall -Wextra \
     -Wmissing-declarations -Wshadow -Wpointer-arith \
     -Wcast-qual -Wwrite-strings -Wsign-compare \
     -Wno-noexcept-type -o src/mpd src/Main.o libdecoder.a \
     $DEV_ROOT/lib/libid3tag.a $DEV_ROOT/lib/libmad.a \
     $DEV_ROOT/lib/libwavpack.a $DEV_ROOT/lib/libfaad.a \
     libmpd.a  libdb_plugins.a   libstorage.a \
     -lcurl libplaylist_plugins.a -lFLAC -lm -lsqlite3 \
     libdecoder.a libxiph.a -lFLAC -lm -L/develop/build/lib \
     libinput.a -lcurl libarchive.a -lbz2 liboutput_plugins.a \
     libtag.a -lz libfilter_plugins.a libpcm.a libmixer_plugins.a \
     libconf.a libbasic.a libevent.a libthread.a libnet.a libfs.a \
     -lz libsystem.a libutil.a libicu.a -licui18n -licuuc \
     -licudata -lm -lnsl -lsocket
    strip src/mpd

Now we had mpd binary dynamically linked only with system-wide libs, and now it’s ready for deployment (as database only, there is no output plugins, encoders, so on).