62 building
casey langen edited this page 2022-12-06 23:18:48 -08:00

overview

this document describes to how compile musikcube on all supported platforms

windows

  • grab the Visual Studio 2019 Community Edition and install the c++ compiler; you can select 32-bit, 64-bit, or both.
  • clone the musikcube sources: git clone https://github.com/clangen/musikcube.git --recursive
  • open musikcube.sln and build/run.

mac

you'll need homebrew to install the required dependencies.

  • brew install cmake openssl libogg libvorbis ffmpeg libmicrohttpd lame libev taglib
  • git clone https://github.com/clangen/musikcube.git --recursive
  • cd musikcube
  • cmake .
  • make
  • cd bin
  • ./musikcube

linux and bsd

install dependencies

  • install the following libraries and their development packages: cmake libogg vorbis ffmpeg ncurses zlib asound pulse libcurl libmicrohttpd libmp3lame libev4 taglib libopenmpt.

note, debian-based distributions use libtag1-dev instead of taglib.

  • ubuntu
    • cosmic, disco and eoan: sudo apt-get install build-essential clang cmake libogg-dev libvorbis-dev libavutil-dev libavformat-dev libswresample-dev libncursesw5-dev libasound2-dev libpulse-dev pulseaudio libmicrohttpd-dev libmp3lame-dev libcurl4-openssl-dev libev-dev libssl-dev libtag1-dev libopenmpt-dev
    • bionic: sudo apt-get install build-essential clang cmake libogg-dev libvorbis-dev libavutil-dev libavformat-dev libswresample-dev libncursesw5-dev libasound2-dev libpulse-dev pulseaudio libmicrohttpd-dev libmp3lame-dev libcurl4-openssl-dev libev-dev libssl-dev libtag1-dev libopenmpt-dev
    • artful: sudo apt-get install build-essential clang cmake libogg-dev libvorbis-dev libavutil-dev libavformat-dev libswresample-dev libncursesw5-dev libasound2-dev libpulse-dev pulseaudio libmicrohttpd-dev libmp3lame-dev libcurl4-openssl-dev libev-dev libssl-dev libopenmpt-dev
    • zesty: sudo apt-get install build-essential clang cmake libogg-dev libvorbis-dev libavutil-dev libavformat-dev libswresample-dev libncursesw5-dev libasound2-dev libpulse-dev pulseaudio libmicrohttpd-dev libmp3lame-dev libcurl4-openssl-dev libev-dev libssl-dev libopenmpt-dev
  • opensuse: sudo zypper install libcurl-devel libmicrohttpd-devel cmake ncurses5-devel libogg-devel libvorbis-devel ffmpeg-3-libavcodec-devel ffmpeg-3-libswresample-devel ffmpeg-3-libavformat-devel ffmpeg-3-libavutil-devel libmp3lame-devel pulseaudio libpulse-devel alsa-devel zlib-devel libressl-devel libev-devel libtag-devel libopenmpt-devel
  • fedora: sudo dnf install gcc-c++ make cmake libogg-devel libvorbis-devel ffmpeg-devel ncurses-devel zlib-devel alsa-lib-devel pulseaudio-libs-devel libcurl-devel libmicrohttpd-devel lame-devel libev-devel taglib-devel openssl-devel libopenmpt-devel
  • arch: sudo pacman -S libogg libvorbis libmicrohttpd ffmpeg lame cmake ncurses pulseaudio libpulse alsa-lib curl libev taglib libopenmpt pkg-config
  • freebsd
    • pkg install ncurses curl libvorbis libogg libmicrohttpd ffmpeg alsa-lib cmake sndio libev taglib libopenmpt bash pkgconf
    • portsnap fetch
    • portsnap extract (if first time using ports)
    • cd /usr/ports/audio/lame
    • make reinstall
  • openbsd
    • pkg_add git cmake ffmpeg sndio libev libmicrohttpd taglib libopenmpt

obtain musikcube sources

you can either get the latest version from git, as follows...

  • git clone https://github.com/clangen/musikcube.git --recursive

...or you can download a pre-packaged source release:

  • navigate to the appropriate release page and download the source tar.gz file
  • tar xvfz musikcube-0.96.10.tar.gz

build musikcube

  • cd musikcube
  • cmake -G "Unix Makefiles" .
  • make
  • sudo make install
  • musikcube

troubleshooting

compiler cannot find <ncursesw/curses.h>

there are two versions of the ncurses headers, one which has "wide character" support, and one that doesn't. musikcube requires the wide version. in many cases (Debian/Ubuntu), Linux distributions have both. The non-wide version is usually in /usr/include, and the wide-version is is /usr/include/ncursesw.

ArchLinux (and variants like Manjaro) seem to only ship the "wide" version. But it exists in in /usr/include, and not /usr/include/ncursesw as it does it other distros. see comments here: https://bugs.archlinux.org/task/17590

the CMake build script explicitly detects a few distributions where this is the case. However, it generally assumes that the curses.h lives in /usr/include/ncursesw. implicitly falling back to /usr/include is dangerous -- it may allow compiles to succeed, but there will almost certainly crash at runtime.

if you are using a distribution that only supplies the "wide-character" variant of ncurses, and you know those headers are in /usr/include and not /usr/include/ncursesw, you should invoke CMake with the -DNO_NCURSESW flag as follows:

cmake -DNO_NCURSESW . instead of the more standard cmake .