name: MacOS on: push: branches: - master paths-ignore: - 'docs/**' - 'htdocs/**' - 'web-src/**' pull_request: branches: - master paths-ignore: - 'docs/**' - 'htdocs/**' - 'web-src/**' workflow_dispatch: jobs: build: runs-on: macos-latest steps: - uses: actions/checkout@v4 - name: Install build tools run: brew install automake autoconf libtool pkg-config - name: Install gperf, bison and flex # MacOS comes with an ancient bison, we need a newer version. Homebrew's # bison and flex are keg-only, which means they are not symlinked into # /usr/local because macOS already provides this software. Homebrew tells # you to adjust the $PATH, but I couldn't make that work, and I think # symlinking is a better solution for simple binaries. run: | brew install gperf bison flex sudo ln -s /usr/local/opt/bison/bin/bison /usr/local/bin/bison sudo ln -s /usr/local/opt/flex/bin/flex /usr/local/bin/flex - name: Install libmxml # Homebrew by default comes with libmxml 4, but it isn't compatible with mxml 3 which we need run: | wget https://raw.githubusercontent.com/Homebrew/homebrew-core/71bfcd3624ee88eee1e2ea6653753dafd48e7fcf/Formula/lib/libmxml.rb brew install --build-from-source libmxml.rb - name: Install libinotify-kqueue # brew does not have libinotify package run: | git clone https://github.com/libinotify-kqueue/libinotify-kqueue cd libinotify-kqueue autoreconf -fvi ./configure make sudo make install cd .. - name: Install ffmpeg # The libbluray ffmpeg dependency fails without the chown (source: stackoverflow) run: | sudo chown -R $(whoami) $(brew --prefix)/* brew install ffmpeg - name: Install other dependencies run: | brew install sqlite libunistring confuse libplist libwebsockets libevent libgcrypt json-c protobuf-c libsodium gnutls pulseaudio openssl - name: Configure # We configure a non-privileged setup, since how to add a "owntone" system # user in MacOS isn't clear to me (useradd etc. isn't available) run: | autoreconf -fi ./configure --prefix=$HOME/owntone_data/usr --sysconfdir=$HOME/owntone_data/etc --localstatedir=$HOME/owntone_data/var --enable-chromecast --with-pulseaudio - name: Build run: | # Without setting these env vars the build fails with e.g. "fatal error: 'openssl/ssl.h' file not found" # (Solution taken from https://github.com/libimobiledevice/libimobiledevice/issues/389#issuecomment-289284190) export LD_LIBRARY_PATH=$(brew --prefix openssl)/lib export CPATH=$(brew --prefix openssl)/include export PKG_CONFIG_PATH=$(brew --prefix openssl)/lib/pkgconfig make - name: Install run: | make install - name: Prepare test run run: | mkdir -p $HOME/owntone_data/media sed -i '' 's/uid = "owntone"/uid = ${USER}/g' $HOME/owntone_data/etc/owntone.conf sed -i '' 's/loglevel = log/loglevel = debug/g' $HOME/owntone_data/etc/owntone.conf sed -i '' 's/directories = { "\/srv\/music" }/directories = { "${HOME}\/owntone_data\/media" }/g' $HOME/owntone_data/etc/owntone.conf - name: Test run run: | $HOME/owntone_data/usr/sbin/owntone -f -t