name: MacOS

on:
  push:
    branches: [ master ]
  pull_request:
    branches: [ master ]

jobs:
  build:
    runs-on: macos-latest

    steps:
    # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it
    - uses: actions/checkout@v2

    - 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 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 sqlite
      # Brew package does not have unlock-notify
      run: |
        wget https://www.sqlite.org/2020/sqlite-autoconf-3310100.tar.gz
        tar xzf sqlite-autoconf-3310100.tar.gz
        cd sqlite-autoconf-3310100
        export CFLAGS='-DSQLITE_ENABLE_UNLOCK_NOTIFY=1'
        ./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 libunistring libmxml confuse libplist sqlite libwebsockets libevent libgcrypt json-c protobuf-c libsodium gnutls pulseaudio openssl

    - name: Configure
      run: |
        autoreconf -fi
        ./configure --enable-chromecast --enable-lastfm --with-pulseaudio

    - name: Build
      run: |
        # Without setting these env vars the build fails with "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: sudo make install