name: Mac
on:
  push:
    branches:
    - master
  pull_request:
    branches:
    - master

jobs:
  desktopBuild:
    runs-on: macOS-latest
    steps:
    - name: checkout sources
      uses: actions/checkout@v1
    - name: setup Homebrew
      run: brew install autoconf automake libtool xz hidapi libusb libxml2 libxslt libzip openssl pkg-config libgit2 libssh2 libjpg libpng
    - name: set our Qt build
      run: |
        mkdir -p Qt/5.13.0
        curl --output Qt-5.13.0-mac.tar.xz https://f002.backblazeb2.com/file/Subsurface-Travis/Qt-5.13.0-mac.tar.xz
        tar -xJ -C Qt/5.13.0 -f Qt-5.13.0-mac.tar.xz
    - name: build Subsurface-mobile
      run: |
        cd ${GITHUB_WORKSPACE}/..
        export QT_ROOT=${GITHUB_WORKSPACE}/Qt/5.13.0/clang_64
        export QT_QPA_PLATFORM_PLUGIN_PATH=$QT_ROOT/plugins
        export PATH=$QT_ROOT/bin:$PATH
        export CMAKE_PREFIX_PATH=$QT_ROOT/lib/cmake
        DIR=$(pwd)

        # first build Subsurface-mobile to ensure this didn't get broken
        bash -e -x ./subsurface/scripts/build.sh -mobile

    - name: test mobile build
      env:
        SSRF_USER_EMAIL: ssrftest-mac@hohndel.org
        SSRF_USER_PASSWORD: geheim-mac
      run: |
        echo "------------------------------------"
        echo "run tests for mobile build"
        export QT_ROOT=${GITHUB_WORKSPACE}/Qt/5.13.0/clang_64
        export QT_QPA_PLATFORM_PLUGIN_PATH=$QT_ROOT/plugins
        cd ${GITHUB_WORKSPACE}/build-mobile/tests
        make check

    - name: build Subsurface
      run: |
        cd ${GITHUB_WORKSPACE}/..
        export QT_ROOT=${GITHUB_WORKSPACE}/Qt/5.13.0/clang_64
        export QT_QPA_PLATFORM_PLUGIN_PATH=$QT_ROOT/plugins
        export PATH=$QT_ROOT/bin:$PATH
        export CMAKE_PREFIX_PATH=$QT_ROOT/lib/cmake
        DIR=$(pwd)

        # now Subsurface with WebKit
        bash -e -x ./subsurface/scripts/build.sh -desktop -build-with-webkit -release

        cd ${GITHUB_WORKSPACE}/build

        # build export-html to make sure that didn't get broken
        make export-html

    - name: test desktop build
      env:
        SSRF_USER_EMAIL: ssrftest-mac@hohndel.org
        SSRF_USER_PASSWORD: geheim-mac
      run: |
        echo "------------------------------------"
        echo "run tests for desktop build"
        export QT_ROOT=${GITHUB_WORKSPACE}/Qt/5.13.0/clang_64
        export QT_QPA_PLATFORM_PLUGIN_PATH=$QT_ROOT/plugins
        cd ${GITHUB_WORKSPACE}/build/tests
        make check

    - name: package Subsurface
      run: |
        cd ${GITHUB_WORKSPACE}/build
        # next build and install Subsurface and then clean up the staging area
        LIBRARY_PATH=${DIR}/install-root/lib make -j2 install

        # now adjust a few references that macdeployqt appears to miss
        EXECUTABLE=Subsurface.app/Contents/MacOS/Subsurface
        for i in libgit2 libGrantlee_TextDocument.dylib libGrantlee_Templates.dylib; do
                OLD=$(otool -L ${EXECUTABLE} | grep $i | cut -d\  -f1 | tr -d "\t")
                if [[ ! -z ${OLD} && ! -f Subsurface.app/Contents/Frameworks/$(basename ${OLD}) ]] ; then
                        # copy the library into the bundle and make sure its id and the reference to it are correct
                        cp ${DIR}/install-root/lib/$(basename ${OLD}) Subsurface.app/Contents/Frameworks
                        SONAME=$(basename $OLD)
                        install_name_tool -change ${OLD} @executable_path/../Frameworks/${SONAME} ${EXECUTABLE}
                        install_name_tool -id @executable_path/../Frameworks/${SONAME} Subsurface.app/Contents/Frameworks/${SONAME}
                fi
        done

        # next, replace @rpath references with @executable_path references in Subsurface
        RPATH=$(otool -L ${EXECUTABLE} | grep rpath  | cut -d\  -f1 | tr -d "\t" | cut -b 8- )
        for i in ${RPATH}; do
                install_name_tool -change @rpath/$i @executable_path/../Frameworks/$i ${EXECUTABLE}
        done

        # next deal with libGrantlee
        LIBG=$(ls Subsurface.app/Contents/Frameworks/libGrantlee_Templates*dylib)
        for i in QtScript.framework/Versions/5/QtScript QtCore.framework/Versions/5/QtCore ; do
                install_name_tool -change @rpath/$i @executable_path/../Frameworks/$i ${LIBG}
        done

        # clean up shared library dependency in the Grantlee plugins
        GRANTLEE_VERSION=$(basename Subsurface.app/Contents/PlugIns/grantlee/5.*)
        for i in Subsurface.app/Contents/PlugIns/grantlee/${GRANTLEE_VERSION}/*.so; do
                OLD=$(otool -L $i | grep libGrantlee_Templates | cut -d\  -f1 | tr -d "\t")
                SONAME=$(basename $OLD )
                install_name_tool -change ${OLD} @executable_path/../Frameworks/${SONAME} $i;
                OLD=$(otool -L $i | grep QtCore | cut -d\  -f1 | tr -d "\t")
                install_name_tool -change ${OLD} @executable_path/../Frameworks/QtCore.framework/QtCore $i;
                pushd Subsurface.app/Contents/PlugIns/grantlee
                ln -s ${GRANTLEE_VERSION}/$(basename $i) .
                popd
        done
    - name: store artifact
      uses: actions/upload-artifact@master
      with:
        name: Subsurface.app
        path: build/Subsurface.app
