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