diff --git a/.github/workflows/haskell-ci.yml b/.github/workflows/haskell-ci.yml index d0cbd61..3d957ca 100644 --- a/.github/workflows/haskell-ci.yml +++ b/.github/workflows/haskell-ci.yml @@ -8,9 +8,9 @@ # # For more information, see https://github.com/haskell-CI/haskell-ci # -# version: 0.19.20250506 +# version: 0.19.20250821 # -# REGENDATA ("0.19.20250506",["github","filelock.cabal"]) +# REGENDATA ("0.19.20250821",["github","filelock.cabal"]) # name: Haskell-CI on: @@ -32,6 +32,11 @@ jobs: strategy: matrix: include: + - compiler: ghc-9.14.0.20250819 + compilerKind: ghc + compilerVersion: 9.14.0.20250819 + setup-method: ghcup-prerelease + allow-failure: false - compiler: ghc-9.12.2 compilerKind: ghc compilerVersion: 9.12.2 @@ -110,8 +115,8 @@ jobs: chmod a+x "$HOME/.ghcup/bin/ghcup" - name: Install cabal-install run: | - "$HOME/.ghcup/bin/ghcup" install cabal 3.14.2.0 || (cat "$HOME"/.ghcup/logs/*.* && false) - echo "CABAL=$HOME/.ghcup/bin/cabal-3.14.2.0 -vnormal+nowrap" >> "$GITHUB_ENV" + "$HOME/.ghcup/bin/ghcup" install cabal 3.16.0.0 || (cat "$HOME"/.ghcup/logs/*.* && false) + echo "CABAL=$HOME/.ghcup/bin/cabal-3.16.0.0 -vnormal+nowrap" >> "$GITHUB_ENV" - name: Install GHC (GHCup) if: matrix.setup-method == 'ghcup' run: | @@ -126,6 +131,21 @@ jobs: HCKIND: ${{ matrix.compilerKind }} HCNAME: ${{ matrix.compiler }} HCVER: ${{ matrix.compilerVersion }} + - name: Install GHC (GHCup prerelease) + if: matrix.setup-method == 'ghcup-prerelease' + run: | + "$HOME/.ghcup/bin/ghcup" config add-release-channel prereleases + "$HOME/.ghcup/bin/ghcup" install ghc "$HCVER" || (cat "$HOME"/.ghcup/logs/*.* && false) + HC=$("$HOME/.ghcup/bin/ghcup" whereis ghc "$HCVER") + HCPKG=$(echo "$HC" | sed 's#ghc$#ghc-pkg#') + HADDOCK=$(echo "$HC" | sed 's#ghc$#haddock#') + echo "HC=$HC" >> "$GITHUB_ENV" + echo "HCPKG=$HCPKG" >> "$GITHUB_ENV" + echo "HADDOCK=$HADDOCK" >> "$GITHUB_ENV" + env: + HCKIND: ${{ matrix.compilerKind }} + HCNAME: ${{ matrix.compiler }} + HCVER: ${{ matrix.compilerVersion }} - name: Set PATH and environment variables run: | echo "$HOME/.cabal/bin" >> $GITHUB_PATH @@ -136,7 +156,7 @@ jobs: echo "HCNUMVER=$HCNUMVER" >> "$GITHUB_ENV" echo "ARG_TESTS=--enable-tests" >> "$GITHUB_ENV" echo "ARG_BENCH=--enable-benchmarks" >> "$GITHUB_ENV" - echo "HEADHACKAGE=false" >> "$GITHUB_ENV" + if [ $((HCNUMVER >= 91400)) -ne 0 ] ; then echo "HEADHACKAGE=true" >> "$GITHUB_ENV" ; else echo "HEADHACKAGE=false" >> "$GITHUB_ENV" ; fi echo "ARG_COMPILER=--$HCKIND --with-compiler=$HC" >> "$GITHUB_ENV" env: HCKIND: ${{ matrix.compilerKind }} @@ -164,6 +184,18 @@ jobs: repository hackage.haskell.org url: http://hackage.haskell.org/ EOF + if $HEADHACKAGE; then + cat >> $CABAL_CONFIG <> $CABAL_CONFIG <> cabal.project if [ $((HCNUMVER >= 80200)) -ne 0 ] ; then echo "package filelock" >> cabal.project ; fi - if [ $((HCNUMVER >= 80200)) -ne 0 ] ; then echo " ghc-options: -Werror=missing-methods" >> cabal.project ; fi + if [ $((HCNUMVER >= 80200)) -ne 0 ] ; then echo " ghc-options: -Werror=missing-methods -Werror=missing-fields" >> cabal.project ; fi + if [ $((HCNUMVER >= 90400)) -ne 0 ] ; then echo "package filelock" >> cabal.project ; fi + if [ $((HCNUMVER >= 90400)) -ne 0 ] ; then echo " ghc-options: -Werror=unused-packages" >> cabal.project ; fi + if [ $((HCNUMVER >= 90000)) -ne 0 ] ; then echo "package filelock" >> cabal.project ; fi + if [ $((HCNUMVER >= 90000)) -ne 0 ] ; then echo " ghc-options: -Werror=incomplete-patterns -Werror=incomplete-uni-patterns" >> cabal.project ; fi cat >> cabal.project <> cabal.project + fi $HCPKG list --simple-output --names-only | perl -ne 'for (split /\s+/) { print "constraints: any.$_ installed\n" unless /^(filelock)$/; }' >> cabal.project.local cat cabal.project cat cabal.project.local diff --git a/.github/workflows/mac-win.yml b/.github/workflows/mac-win.yml index 4897e4e..9e796be 100644 --- a/.github/workflows/mac-win.yml +++ b/.github/workflows/mac-win.yml @@ -19,7 +19,7 @@ jobs: steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v5 - uses: haskell-actions/setup@latest diff --git a/CHANGELOG.md b/CHANGELOG.md index 7baa70e..adccd1e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,14 @@ Changelog for filelock package +0.1.1.8 +------- + +_2025-08-27, Andreas Abel_ + +* Remove obsolete `deriving Typeable`. + +Tested with GHC 8.0 - 9.14.1-alpha1. + 0.1.1.7 ------- diff --git a/System/FileLock.hs b/System/FileLock.hs index fa13aa0..736bcbb 100644 --- a/System/FileLock.hs +++ b/System/FileLock.hs @@ -1,4 +1,3 @@ -{-# LANGUAGE DeriveDataTypeable #-} {-# LANGUAGE CPP #-} -- | This module provides a portable interface to file locks as a mechanism for @@ -38,7 +37,6 @@ import Control.Applicative import qualified Control.Exception as E import Control.Monad import Data.IORef -import Data.Typeable import Prelude #ifdef USE_FLOCK @@ -53,7 +51,6 @@ import qualified System.FileLock.Internal.LockFileEx as I data FileLock = Lock {-# UNPACk #-} !I.Lock {-# UNPACk #-} !(IORef Bool) -- alive? - deriving (Typeable) instance Eq FileLock where Lock _ x == Lock _ y = x == y @@ -65,7 +62,7 @@ newLock x = Lock x <$> newIORef True data SharedExclusive = Shared -- ^ Other process can hold a shared lock at the same time. | Exclusive -- ^ No other process can hold a lock, shared or exclusive. - deriving (Show, Eq, Typeable) + deriving (Show, Eq) -- | Take a lock. This function blocks until the lock is available. lockFile :: FilePath -> SharedExclusive -> IO FileLock diff --git a/filelock.cabal b/filelock.cabal index 8d14903..4a179f8 100644 --- a/filelock.cabal +++ b/filelock.cabal @@ -1,6 +1,6 @@ -cabal-version: >=1.10 +cabal-version: 1.18 name: filelock -version: 0.1.1.7 +version: 0.1.1.8 synopsis: Portable interface to file locking (flock / LockFileEx) description: This package provides an interface to Windows and Unix file locking functionalities. @@ -12,11 +12,13 @@ maintainer: Andreas Abel category: System build-type: Simple -extra-source-files: +extra-doc-files: CHANGELOG.md +extra-source-files: tests/lock.log.expected tested-with: + GHC == 9.14.1 GHC == 9.12.2 GHC == 9.10.2 GHC == 9.8.4 @@ -61,7 +63,7 @@ test-suite interrupt type: exitcode-stdio-1.0 hs-source-dirs: tests main-is: interrupt.hs - build-depends: filelock, process >= 1.2.1.0, base + build-depends: filelock, base ghc-options: -threaded default-language: Haskell2010 if os(windows)