1212jobs :
1313 build_and_test :
1414 name : Build and test
15- runs-on : ubuntu-latest
15+ strategy :
16+ matrix :
17+ include :
18+ - name : Native Linux
19+ cmake_args : >-
20+ -DCMAKE_C_COMPILER=clang-13
21+ -DCMAKE_CXX_COMPILER=clang++-13
22+ cflags : >-
23+ -fsanitize=address,undefined,leak
24+ -fno-sanitize-recover=all
25+ -fno-omit-frame-pointer
26+ ldflags : >-
27+ -fsanitize=address
28+ - name : MingGW on Linux
29+ cmake_args : >-
30+ -DCMAKE_C_COMPILER=i686-w64-mingw32-gcc
31+ -DCMAKE_CXX_COMPILER=i686-w64-mingw32-g++
32+ -DCMAKE_SYSTEM_NAME=Windows
33+ -DWIN32=ON
34+ -DMINGW=ON
35+ runs-on : ubuntu-20.04
1636 steps :
17- - uses : actions/checkout@v2.3.4
37+ - uses : actions/checkout@v2.4.0
1838
19- - name : Add Clang/LLVM repositories
39+ - name : Add Clang/LLVM repositories (Non-MinGW)
40+ if : " ${{ ! contains(matrix.cmake_args, 'mingw') }}"
2041 run : |-
2142 wget -O - https://apt.llvm.org/llvm-snapshot.gpg.key | sudo apt-key add -
22- sudo add-apt-repository 'deb http://apt.llvm.org/focal/ llvm-toolchain-focal-11 main'
43+ sudo add-apt-repository 'deb http://apt.llvm.org/focal/ llvm-toolchain-focal-13 main'
2344
2445 - name : Install build dependencies
2546 run : |-
47+ sudo apt-get update
2648 sudo apt-get install --yes --no-install-recommends -V \
27- clang-11 \
2849 cmake \
2950 doxygen \
3051 graphviz \
31- llvm-11 \
3252 lzip \
3353 qhelpgenerator-qt5 \
3454 qtchooser
3555
56+ - name : Install build dependencies (MinGW)
57+ if : " ${{ contains(matrix.cmake_args, 'mingw') }}"
58+ run : |-
59+ sudo dpkg --add-architecture i386 # for wine32
60+ sudo apt-add-repository ppa:ondrej/php -y # due to libwine:i386 conflicts
61+ sudo apt-get update # again, due to new architecture
62+ sudo apt-get install --yes --no-install-recommends -V \
63+ mingw-w64 \
64+ wine-stable \
65+ wine32
66+
67+ - name : Install build dependencies (Non-MinGW)
68+ if : " ${{ ! contains(matrix.cmake_args, 'mingw') }}"
69+ run : |-
70+ sudo apt-get install --yes --no-install-recommends -V \
71+ clang-13 \
72+ llvm-13
73+
3674 - name : Build, test and install
3775 run : |-
76+ set -x
3877 sed 's,:,\n,g' <<<"${PATH}"
39- clang --version
78+ cmake --version
4079
4180 GTEST_VERSION=1.8.1
4281 GTEST_PREFIX=~/.local/
@@ -45,10 +84,15 @@ jobs:
4584 tar xf release-${GTEST_VERSION}.tar.gz
4685 (
4786 cd googletest-release-${GTEST_VERSION}/
87+
88+ # Silence warning "Compatibility with CMake < 2.8.12 will be removed"
89+ find -name CMakeLists.txt -print -exec sed 's/cmake_minimum_required.*/cmake_minimum_required(VERSION 3.0.2)/' -i {} \;
90+
4891 cmake \
4992 -DBUILD_SHARED_LIBS=ON \
5093 -DCVF_VERSION=${GTEST_VERSION} \
5194 -DCMAKE_INSTALL_PREFIX:PATH=${GTEST_PREFIX} \
95+ ${{ matrix.cmake_args }} \
5296 .
5397 make
5498 make install
@@ -61,17 +105,15 @@ jobs:
61105
62106 -O1
63107 -g
64- -fsanitize=address,undefined,leak
65- -fno-sanitize-recover=all
66- -fno-omit-frame-pointer
108+ ${{ matrix.cflags }}
67109
68110 -Wall
69111 -Wextra
70112 -pedantic
71113 )
72114 CFLAGS="${compile_flags[*]} -std=c89"
73115 CXXFLAGS="${compile_flags[*]} -std=c++98"
74- LDFLAGS='-g -fsanitize=address '
116+ LDFLAGS='-g ${{ matrix.ldflags }} '
75117 cmake_args=(
76118 -DCMAKE_INSTALL_PREFIX:PATH=${GTEST_PREFIX}
77119
@@ -80,20 +122,29 @@ jobs:
80122 -Wdeprecated
81123 -Werror=deprecated
82124
83- -DCMAKE_C_COMPILER=clang-11
84- -DCMAKE_CXX_COMPILER=clang++-11
85125 -DCMAKE_C_FLAGS="${CFLAGS}"
86126 -DCMAKE_CXX_FLAGS="${CXXFLAGS}"
87127 -DCMAKE_EXE_LINKER_FLAGS="${LDFLAGS}"
88128 -DCMAKE_MODULE_LINKER_FLAGS="${LDFLAGS}"
89129 -DCMAKE_SHARED_LINKER_FLAGS="${LDFLAGS}"
90130
131+ ${{ matrix.cmake_args }}
132+
91133 -DURIPARSER_WARNINGS_AS_ERRORS=ON
92134 )
93135 cmake "${cmake_args[@]}" -DCMAKE_INSTALL_INCLUDEDIR=include123 ..
94136
95137 make VERBOSE=1 all
96138
139+ # NOTE: We need to copy some .dll files next to the
140+ # Windows binaries so that they are ready to be executed
141+ if [[ "${{ matrix.cmake_args }}" == *mingw* ]]; then
142+ cp /usr/lib/gcc/i686-w64-mingw32/*-posix/libgcc_s_sjlj-1.dll ./
143+ cp /usr/lib/gcc/i686-w64-mingw32/*-posix/libstdc++-6.dll ./
144+ cp /usr/i686-w64-mingw32/lib/libwinpthread-1.dll ./
145+ cp "${GTEST_PREFIX}"/bin/libgtest.dll ./
146+ fi
147+
97148 make VERBOSE=1 test ARGS=--verbose
98149 cat Testing/Temporary/LastTest.log
99150
@@ -106,11 +157,19 @@ jobs:
106157 pushd cmake/test_find_package
107158 cmake "${cmake_args[@]}" .
108159 make VERBOSE=1
109- ./hello
160+ if [[ "${{ matrix.cmake_args }}" == *mingw* ]]; then
161+ cp "${GTEST_PREFIX}"/bin/liburiparser-1.dll ./
162+ wine ./hello.exe
163+ else
164+ ./hello
165+ fi
110166 popd
111167
112168 git fetch --tags --unshallow origin # for "git describe" in make-distcheck.sh
113169
114- ./make-distcheck.sh -DCMAKE_INSTALL_PREFIX:PATH=${GTEST_PREFIX} # without AddressSanitizer
170+ GTEST_PREFIX="${GTEST_PREFIX}" \
171+ ./make-distcheck.sh \
172+ -DCMAKE_INSTALL_PREFIX:PATH=${GTEST_PREFIX} \
173+ ${{ matrix.cmake_args }}
115174
116175 ! git status | fgrep -A100 'Untracked files:' # works best at the very end
0 commit comments