Я считаю, что это действительно плохая идея, так как это неожиданное, неканоническое поведение, которое нарушает кросс-компиляцию, но вы, вероятно, можете взломать его вместе с типом сборки Custom
.
Вот пример mypackage.cabal
:
cabal-version: >=2.0
name: mypackage
version: 0.1.0.0
author: None
maintainer: none@example.com
build-type: Custom
custom-setup
setup-depends:
base >= 4.5,
Cabal >= 2.0
executable mypackage
main-is: Main.hs
build-depends: base >= 4
default-language: Haskell2010
test-suite test
type: exitcode-stdio-1.0
build-depends: base >= 4
main-is: Test.hs
и соответствующий Setup.hs
:
import Control.Monad
import Distribution.Simple
import Distribution.Simple.Setup
import Distribution.Simple.Test
import Distribution.Simple.Build
main = defaultMainWithHooks simpleUserHooks {
postBuild = myPostBuild
}
myPostBuild args flags desc info =
when ("exe:mypackage" `elem` buildArgs flags) $ do
build desc info defaultBuildFlags { buildDistPref = buildDistPref flags } []
test ["test"] desc info defaultTestFlags {
testDistPref = buildDistPref flags
}
В результате получается проект, в котором cabal build
также строит и запускает тесты на моей системе Cabal 3.0.0.0, но я не знаю, какие дополнительные предостережения это имеет.