summaryrefslogtreecommitdiffstats
path: root/.github/workflows/mac.yml
blob: 72440c24f9410091d2fa9413cf2f793b1446d480 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
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: ${{ secrets.cloudmac }}
      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: ${{ secrets.cloudmac }}
      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