diff --git a/.github/workflows/test.yaml b/.github/workflows/test.yaml new file mode 100644 index 0000000..5221da0 --- /dev/null +++ b/.github/workflows/test.yaml @@ -0,0 +1,80 @@ +name: Run Tests (on push and pull request) + +on: + pull_request: + branches: ['master'] + + push: + branches: ['master'] + +jobs: + generate-matrix: + name: "Generate matrix from cabal file" + outputs: + matrix: ${{ steps.set-matrix.outputs.matrix }} + runs-on: ubuntu-latest + steps: + - name: Extract the tested GHC versions + id: set-matrix + uses: kleidukos/get-tested@v0.1.7.1 + with: + cabal-file: opus.cabal + ubuntu-version: "latest" + macos-version: "latest" + windows-version: "latest" + version: 0.1.7.1 + tests: + name: ${{ matrix.ghc }} on ${{ matrix.os }} + needs: generate-matrix + runs-on: ${{ matrix.os }} + strategy: + matrix: ${{ fromJSON(needs.generate-matrix.outputs.matrix) }} + steps: + - name: Checkout the repository + uses: actions/checkout@v4 + + - name: Set up Haskell + id: setup-haskell + uses: haskell-actions/setup@v2 + with: + ghc-version: ${{ matrix.ghc }} + cabal-version: "latest" + + - name: Install libopus (Linux only) + if: runner.os == 'Linux' + run: sudo apt-get install libopus-dev + + - name: Install libopus (macOS only) + if: runner.os == 'macOS' + run: brew install opus + + - name: Install libopus (Windows only) + if: runner.os == 'Windows' + shell: pwsh + run: | + $env:PATH = "C:\msys64\usr\bin;$env:PATH" + pacman --noconfirm -S mingw64/mingw-w64-x86_64-opus mingw64/mingw-w64-x86_64-pkg-config + + # Add the mingw64 bin directory to the PATH so cabal can find pkg-config & opus + echo "C:\msys64\mingw64\bin" | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 -Append + + - name: Update cabal store + run: cabal update + + - name: Create a freeze file for the cache + run: cabal freeze --enable-tests + + - uses: actions/cache@v4 + with: + path: | + ${{ steps.setup-haskell.outputs.cabal-store }} + dist-newstyle + key: ${{ runner.os }}-${{ matrix.ghc }}-${{ hashFiles('cabal.project.freeze') }} + restore-keys: | + ${{ runner.os }}-${{ matrix.ghc }}- + + - name: Run the tests + # Use --enable-tests until https://github.com/haskell/cabal/issues/7883 + # is fixed, as otherwise cabal test can sometimes reach a local maxima + # of dependencies that bizarrely doesn't (!) include the test suite. + run: cabal test --enable-tests diff --git a/opus.cabal b/opus.cabal index f824914..74aee23 100644 --- a/opus.cabal +++ b/opus.cabal @@ -14,7 +14,7 @@ description: system. . - On Debian-based systems, you can install it with @sudo apt-get install - libopus0@. + libopus-dev@. - On MacOS, you can install it with @brew install opus@ using Homebrew. - On Windows (MinGW-based, e.g. GHCup toolchain), you can install it with @cabal exec -- pacman -S mingw64/mingw-w64-x86_64-opus@ (for x64). @@ -35,7 +35,8 @@ maintainer: Yuto Takano copyright: Markus Barenhoff , Yuto Takano , Haskell Opus Library Contributors category: Codec build-type: Simple -cabal-version: >=1.10 +cabal-version: >=1.12 +tested-with: GHC ==9.4.8 extra-source-files: README.md ChangeLog.md @@ -54,13 +55,7 @@ library Codec.Audio.Opus.Internal.Opus default-language: Haskell2010 build-tools: hsc2hs - includes: - opus/opus.h - opus/opus_types.h - opus/opus_defines.h - extra-libraries: opus - if !os(windows) - pkgconfig-depends: opus + pkgconfig-depends: opus ghc-options: -Wall build-depends: base >= 4.7 && < 5, exceptions, diff --git a/src/Codec/Audio/Opus/Internal/Opus.hsc b/src/Codec/Audio/Opus/Internal/Opus.hsc index cde83ec..29722ea 100644 --- a/src/Codec/Audio/Opus/Internal/Opus.hsc +++ b/src/Codec/Audio/Opus/Internal/Opus.hsc @@ -7,7 +7,7 @@ import Foreign import Foreign.C.Types import Foreign.C.String -#include +#include newtype ErrorCode = ErrorCode { unErrorCode :: CInt } deriving (Eq,Show)