@@ -62,6 +62,7 @@ import Distribution.Compat.Semigroup (Last' (..), Option' (..))
62
62
import Distribution.Compat.Stack
63
63
64
64
import Distribution.Simple.Setup.Common
65
+ import Distribution.Types.AllowNewer (AllowNewer (.. ), AllowOlder (.. ), RelaxDeps (.. ), isRelaxDeps )
65
66
66
67
-- ------------------------------------------------------------
67
68
@@ -220,6 +221,10 @@ data ConfigFlags = ConfigFlags
220
221
-- ^ Allow depending on private sublibraries. This is used by external
221
222
-- tools (like cabal-install) so they can add multiple-public-libraries
222
223
-- compatibility to older ghcs by checking visibility externally.
224
+ , configAllowNewer :: AllowNewer
225
+ -- ^ Ignore upper bounds on all or some dependencies.
226
+ , configAllowOlder :: AllowOlder
227
+ -- ^ Ignore lower bounds on all or some dependencies.
223
228
}
224
229
deriving (Generic , Read , Show , Typeable )
225
230
@@ -288,6 +293,8 @@ instance Eq ConfigFlags where
288
293
&& equal configDebugInfo
289
294
&& equal configDumpBuildInfo
290
295
&& equal configUseResponseFiles
296
+ && equal configAllowNewer
297
+ && equal configAllowOlder
291
298
where
292
299
equal f = on (==) f a b
293
300
@@ -342,6 +349,8 @@ defaultConfigFlags progDb =
342
349
, configDebugInfo = Flag NoDebugInfo
343
350
, configDumpBuildInfo = NoFlag
344
351
, configUseResponseFiles = NoFlag
352
+ , configAllowNewer = AllowNewer mempty
353
+ , configAllowOlder = AllowOlder mempty
345
354
}
346
355
{- FOURMOLU_ENABLE -}
347
356
@@ -828,8 +837,40 @@ configureOptions showOrParseArgs =
828
837
configAllowDependingOnPrivateLibs
829
838
(\ v flags -> flags{configAllowDependingOnPrivateLibs = v})
830
839
trueArg
840
+ , option
841
+ " "
842
+ [" allow-older" ]
843
+ " Allow older dependencies."
844
+ configAllowOlder
845
+ (\ v flags -> flags{configAllowOlder = v})
846
+ ( optArg
847
+ " PKG1:DEP1,PKG2:DEP2,..."
848
+ (fmap AllowOlder parseRelaxDeps)
849
+ (AllowOlder RelaxDepsAll )
850
+ ((: [] ) . Just . show . isRelaxDeps . unAllowOlder)
851
+ )
852
+ , option
853
+ " "
854
+ [" allow-newer" ]
855
+ " Allow newer dependencies."
856
+ configAllowNewer
857
+ (\ v flags -> flags{configAllowNewer = v})
858
+ ( optArg
859
+ " PKG1:DEP1,PKG2:DEP2,..."
860
+ (fmap AllowNewer parseRelaxDeps)
861
+ (AllowNewer RelaxDepsAll )
862
+ ((: [] ) . Just . show . isRelaxDeps . unAllowNewer)
863
+ )
831
864
]
832
865
where
866
+ toRelaxDeps True = RelaxDepsAll
867
+ toRelaxDeps False = mempty
868
+
869
+ parseRelaxDeps =
870
+ parsecToReadE (" Not a valid list of dependencies: " ++ ) $
871
+ fmap toRelaxDeps parsec
872
+ <|> fmap RelaxDepsSome (parsecOptCommaList parsec)
873
+
833
874
liftInstallDirs =
834
875
liftOption configInstallDirs (\ v flags -> flags{configInstallDirs = v})
835
876
0 commit comments