• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1name: C/C++ CI
2
3on: [push, pull_request]
4
5jobs:
6  build:
7    strategy:
8      fail-fast: false
9      matrix:
10        name: [
11          ubuntu-gcc-autotools,
12          ubuntu-clang-autotools,
13          ubuntu-gcc-ossfuzz,
14          macos-autotools,
15          ubuntu-gcc-cmake,
16          ubuntu-gcc-cmake-shared,
17          ubuntu-clang-cmake,
18          ubuntu-clang-cmake-shared,
19          macos-cmake,
20          macos-cmake-shared,
21          windows-vs2022-x64,
22          windows-vs2022-x64-shared,
23          windows-vs2022-Win32,
24          windows-vs2022-Win32-shared
25        ]
26        include:
27          - name: ubuntu-gcc-autotools
28            os: ubuntu-latest
29            cc: gcc
30            cxx: g++
31            autotools-options: --enable-werror
32            build-system: autotools
33
34          - name: ubuntu-clang-autotools
35            os: ubuntu-latest
36            cc: clang
37            cxx: clang++
38            autotools-options: --enable-werror
39            build-system: autotools
40
41          - name: ubuntu-gcc-ossfuzz
42            os: ubuntu-latest
43            cc: gcc
44            cxx: g++
45            autotools-options: --enable-werror
46            build-system: ossfuzz
47
48          - name: macos-autotools
49            os: macos-latest
50            cc: clang
51            cxx: clang++
52            autotools-options: --enable-werror
53            build-system: autotools
54
55          - name: ubuntu-gcc-cmake
56            os: ubuntu-latest
57            cc: gcc
58            cxx: g++
59            build-system: cmake
60            cmake-generator: 'Ninja'
61            cmake-options: >-
62              -DCMAKE_BUILD_TYPE=Release
63              -DCMAKE_C_FLAGS="-Wall -Wextra"
64              -DCMAKE_VERBOSE_MAKEFILE=ON
65
66          - name: ubuntu-gcc-cmake-shared
67            os: ubuntu-latest
68            cc: gcc
69            cxx: g++
70            build-system: cmake
71            cmake-generator: 'Ninja'
72            cmake-options: >-
73              -DCMAKE_BUILD_TYPE=Release
74              -DBUILD_SHARED_LIBS=ON
75              -DCMAKE_C_FLAGS="-Wall -Wextra"
76              -DCMAKE_VERBOSE_MAKEFILE=ON
77
78          - name: ubuntu-clang-cmake
79            os: ubuntu-latest
80            cc: clang
81            cxx: clang++
82            build-system: cmake
83            cmake-generator: 'Ninja'
84            cmake-options: >-
85              -DCMAKE_BUILD_TYPE=Release
86              -DCMAKE_C_FLAGS="-Wall -Wextra"
87              -DCMAKE_VERBOSE_MAKEFILE=ON
88
89          - name: ubuntu-clang-cmake-shared
90            os: ubuntu-latest
91            cc: clang
92            cxx: clang++
93            build-system: cmake
94            cmake-generator: 'Ninja'
95            cmake-options: >-
96              -DCMAKE_BUILD_TYPE=Release
97              -DBUILD_SHARED_LIBS=ON
98              -DCMAKE_C_FLAGS="-Wall -Wextra"
99              -DCMAKE_VERBOSE_MAKEFILE=ON
100
101          - name: macos-cmake
102            os: macos-latest
103            cc: clang
104            cxx: clang++
105            build-system: cmake
106            cmake-generator: 'Unix Makefiles'
107            cmake-options: >-
108              -DCMAKE_BUILD_TYPE=Release
109              -DCMAKE_C_FLAGS="-Wall -Wextra"
110              -DCMAKE_VERBOSE_MAKEFILE=ON
111
112          - name: macos-cmake-shared
113            os: macos-latest
114            cc: clang
115            cxx: clang++
116            build-system: cmake
117            cmake-generator: 'Unix Makefiles'
118            cmake-options: >-
119              -DCMAKE_BUILD_TYPE=Release
120              -DBUILD_SHARED_LIBS=ON
121              -DCMAKE_C_FLAGS="-Wall -Wextra"
122              -DCMAKE_VERBOSE_MAKEFILE=ON
123
124          - name: windows-vs2022-x64
125            os: windows-latest
126            triplet: 'x64-windows-static'
127            build-system: cmake
128            cmake-generator: 'Visual Studio 17 2022'
129            cmake-options: >-
130              -DCMAKE_MSVC_RUNTIME_LIBRARY=MultiThreaded$<$<CONFIG:Debug>:Debug>
131              -DCMAKE_BUILD_TYPE=Release
132              -DVCPKG_TARGET_TRIPLET=x64-windows-static
133              -DCMAKE_TOOLCHAIN_FILE=c:/vcpkg/scripts/buildsystems/vcpkg.cmake
134
135          - name: windows-vs2022-x64-shared
136            os: windows-latest
137            triplet: 'x64-windows-static'
138            build-system: cmake
139            cmake-generator: 'Visual Studio 17 2022'
140            cmake-options: >-
141              -DCMAKE_MSVC_RUNTIME_LIBRARY=MultiThreaded$<$<CONFIG:Debug>:Debug>
142              -DBUILD_SHARED_LIBS=ON
143              -DBUILD_REGTEST=OFF
144              -DBUILD_EXAMPLES=OFF
145              -DINSTALL_PKGCONFIG_MODULE=OFF
146              -DCMAKE_BUILD_TYPE=Release
147              -DVCPKG_TARGET_TRIPLET=x64-windows-static
148              -DCMAKE_TOOLCHAIN_FILE=c:/vcpkg/scripts/buildsystems/vcpkg.cmake
149
150          - name: windows-vs2022-Win32
151            os: windows-latest
152            triplet: 'x86-windows-static'
153            build-system: cmake
154            cmake-generator: 'Visual Studio 17 2022'
155            cmake-options: >-
156              -DCMAKE_MSVC_RUNTIME_LIBRARY=MultiThreaded$<$<CONFIG:Debug>:Debug>
157              -DCMAKE_GENERATOR_PLATFORM=Win32
158              -DCMAKE_BUILD_TYPE=Release
159              -DVCPKG_TARGET_TRIPLET=x86-windows-static
160              -DCMAKE_TOOLCHAIN_FILE=c:/vcpkg/scripts/buildsystems/vcpkg.cmake
161
162          - name: windows-vs2022-Win32-shared
163            os: windows-latest
164            triplet: 'x86-windows-static'
165            build-system: cmake
166            cmake-generator: 'Visual Studio 17 2022'
167            cmake-options: >-
168              -DCMAKE_MSVC_RUNTIME_LIBRARY=MultiThreaded$<$<CONFIG:Debug>:Debug>
169              -DCMAKE_GENERATOR_PLATFORM=Win32
170              -DBUILD_SHARED_LIBS=ON
171              -DBUILD_REGTEST=OFF
172              -DBUILD_EXAMPLES=OFF
173              -DINSTALL_PKGCONFIG_MODULE=OFF
174              -DCPACK_PACKAGE_NAME=libsndfile
175              -DCMAKE_BUILD_TYPE=Release
176              -DVCPKG_TARGET_TRIPLET=x86-windows-static
177              -DCMAKE_TOOLCHAIN_FILE=c:/vcpkg/scripts/buildsystems/vcpkg.cmake
178
179    runs-on: ${{ matrix.os }}
180    steps:
181      - uses: actions/checkout@v2
182
183      - name: Install MacOS dependencies
184        if: startsWith(matrix.os,'macos')
185        run: |
186          brew install automake autogen speex mpg123
187
188      - name: Install Linux dependencies
189        if: startsWith(matrix.os,'ubuntu')
190        run: sudo apt-get update -y && sudo apt-get install -y autogen ninja-build libogg-dev libvorbis-dev libflac-dev libopus-dev libasound2-dev libsqlite3-dev libspeex-dev libmp3lame-dev libmpg123-dev
191
192      - name: Setup NuGet Credentials
193        env:
194          VCPKG_BINARY_SOURCES: 'clear;nuget,GitHub,readwrite'
195        if: startsWith(matrix.os,'windows')
196        shell: 'bash'
197        run: >
198          `vcpkg fetch nuget | tail -n 1`
199          sources add
200          -source "https://nuget.pkg.github.com/libsndfile/index.json"
201          -storepasswordincleartext
202          -name "GitHub"
203          -username "evpobr"
204          -password "${{ secrets.GITHUB_TOKEN }}"
205
206      - name: Configure, build and test with Autotools
207        env:
208          CC: ${{ matrix.cc }}
209          CXX: ${{ matrix.cxx }}
210        if: startsWith(matrix.build-system,'autotools')
211        run: |
212          autoreconf -vif
213          if [[ "${CC}" == "clang" ]]; then
214            ./configure --enable-werror && make distcheck
215          else
216            Scripts/asan-configure.sh --enable-werror && make distcheck
217          fi
218
219      - name: Configure, build and test with CMake
220        env:
221          CC: ${{ matrix.cc }}
222          CXX: ${{ matrix.cxx }}
223          VCPKG_BINARY_SOURCES: 'clear;nuget,GitHub,readwrite'
224        if: startsWith(matrix.build-system,'cmake')
225        run: |
226          mkdir build
227          cd build
228          cmake .. -G "${{matrix.cmake-generator}}" ${{matrix.cmake-options}}
229          cmake --build . --config Release
230          ctest
231
232      - name: Configure, build and test with OSSFuzz
233        env:
234          CC: ${{ matrix.cc }}
235          CXX: ${{ matrix.cxx }}
236        if: startsWith(matrix.build-system,'ossfuzz')
237        run: |
238          ./ossfuzz/ci_oss.sh
239