diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,11 @@
+## 0.1.40.3
+
+_Nikola Hadžić, 2026-02-16_
+
+- Allow `Cabal ≥ 3.14` ([#28](https://github.com/haskell-hvr/hgettext/issues/28), contribution by Deepak)
+
+Tested with GHC 8.0.2 - 9.14.1.
+
 ## 0.1.40.2
 
 _Nikola Hadžić, 2025-01-13_
diff --git a/hgettext.cabal b/hgettext.cabal
--- a/hgettext.cabal
+++ b/hgettext.cabal
@@ -1,6 +1,6 @@
 cabal-version:       1.14
 name:                hgettext
-version:             0.1.40.2
+version:             0.1.40.3
 build-type:          Simple
 
 license:             BSD3
@@ -19,9 +19,11 @@
                      A user-contributed tutorial can be found in the [Haskell Wiki](https://wiki.haskell.org/Internationalization_of_Haskell_programs_using_gettext).
 
 tested-with:
-  GHC == 9.10.1
+  GHC == 9.14.1
+  GHC == 9.12.2
+  GHC == 9.10.3
   GHC == 9.8.4
-  GHC == 9.6.6
+  GHC == 9.6.7
   GHC == 9.4.8
   GHC == 9.2.8
   GHC == 9.0.2
@@ -51,9 +53,8 @@
   other-modules:     Internal
 
   hs-source-dirs:    src
-  build-depends:     base             >=4.5    && <4.22
-                   , Cabal            >=1.14   && <1.25 || >= 2.0 && < 2.5 || >=3.0 && <3.15
-                   , containers       >=0.4.2  && <0.8
+  build-depends:     base             >=4.5    && <4.23
+                   , Cabal            >=1.14   && <1.25 || >= 2.0 && < 2.5 || >=3.0 && <3.17
                    , directory        >=1.1    && <1.4
                    , filepath         >=1.3    && <1.6
                    , process          >=1.1    && <1.7
@@ -73,15 +74,10 @@
 
   hs-source-dirs:    src-exe
 
-  -- constraints inherited from lib:hgettext
-  build-depends:     hgettext
-                   , base
-                   , Cabal
-                   , containers
-                   , filepath
-
-  build-depends:     deepseq          >=1.1      && <1.6
-                   , cpphs            >=1.20.9.1 && <1.20.10
+  build-depends:     base             >=4.5      && <4.23
+                   , containers       >=0.4.2    && <0.9
+                   , deepseq          >=1.1      && <1.6
+                   , cpphs            >=1.20.9.1 && <1.20.11
                    , haskell-src-exts >=1.18     && <1.24
                    , uniplate         >=1.6.12   && <1.7
                    , split            >=0.2.3.4  && <0.3
diff --git a/src/Internal.hs b/src/Internal.hs
--- a/src/Internal.hs
+++ b/src/Internal.hs
@@ -3,6 +3,9 @@
 module Internal where
 
 import           Distribution.Simple
+#if MIN_VERSION_Cabal(3,14,0)
+import           Distribution.Utils.Path     (getSymbolicPath, makeSymbolicPath)
+#endif
 #if MIN_VERSION_Cabal(2,4,0)
 import           Distribution.Simple.Glob    (matchDirFileGlob)
 import           Distribution.Types.PackageDescription
@@ -20,7 +23,12 @@
 #endif
 
 matchFileGlob :: Verbosity -> PackageDescription -> FilePath -> IO [FilePath]
-#if MIN_VERSION_Cabal(2,4,0)
+#if MIN_VERSION_Cabal(3,14,0)
+-- | Modified to conform to newest cabal signature
+matchFileGlob verb descr = toFilePath . matchDirFileGlob verb (specVersion descr) (Just (makeSymbolicPath ".")) . makeSymbolicPath
+  where
+    toFilePath = fmap . fmap $ getSymbolicPath
+#elif MIN_VERSION_Cabal(2,4,0)
 -- | Newer versions of Cabal have removed this function in favour of more configurable implementation
 matchFileGlob verb descr = matchDirFileGlob verb (specVersion descr) "."
 #else
