@@ -1,5 +1,19 @@
11\begin{code}
22{-# LANGUAGE CPP #-}
3+{-# LANGUAGE OverloadedStrings #-}
4+module Main (main) where
5+
6+#ifndef MIN_VERSION_cabal_doctest
7+#define MIN_VERSION_cabal_doctest(x,y,z) 0
8+#endif
9+
10+
11+#if MIN_VERSION_cabal_doctest(1,0,0)
12+import Distribution.Extra.Doctest ( defaultMainWithDoctests )
13+#else
14+
15+-- Otherwise we provide a shim
16+
317#ifndef MIN_VERSION_Cabal
418#define MIN_VERSION_Cabal(x,y,z) 0
519#endif
@@ -9,10 +23,10 @@
923#if MIN_VERSION_Cabal(1,24,0)
1024#define InstalledPackageId UnitId
1125#endif
12−module Main (main) where
1326
1427import Control.Monad ( when )
1528import Data.List ( nub )
29+import Data.String ( fromString )
1630import Distribution.Package ( InstalledPackageId )
1731import Distribution.Package ( PackageId, Package (..), packageVersion )
1832import Distribution.PackageDescription ( PackageDescription(), TestSuite(..) , Library (..), BuildInfo (..))
@@ -42,15 +56,8 @@ makeAbsolute p | isAbsolute p = return p
4256 return $ cwd </> p
4357#endif
4458
45−main :: IO ()
46−main = defaultMainWithHooks simpleUserHooks
47− { buildHook = \pkg lbi hooks flags -> do
48− generateBuildModule flags pkg lbi
49− buildHook simpleUserHooks pkg lbi hooks flags
50− }
51−
52−generateBuildModule :: BuildFlags -> PackageDescription -> LocalBuildInfo -> IO ()
53−generateBuildModule flags pkg lbi = do
59+generateBuildModule :: String -> BuildFlags -> PackageDescription -> LocalBuildInfo -> IO ()
60+generateBuildModule testsuiteName flags pkg lbi = do
5461 let verbosity = fromFlag (buildVerbosity flags)
5562 let distPref = fromFlag (buildDistPref flags)
5663
@@ -74,7 +81,7 @@ generateBuildModule flags pkg lbi = do
7481#endif
7582
7683 -- Lib sources and includes
77− iArgs <- mapM (fmap ("-i"++) . makeAbsolute) $ "test" : libAutogenDir : hsSourceDirs libBI
84+ iArgs <- mapM (fmap ("-i"++) . makeAbsolute) $ libAutogenDir : hsSourceDirs libBI
7885 includeArgs <- mapM (fmap ("-I"++) . makeAbsolute) $ includeDirs libBI
7986
8087 -- CPP includes, i.e. include cabal_macros.h
@@ -82,9 +89,7 @@ generateBuildModule flags pkg lbi = do
8289 [ "-include", libAutogenDir ++ "/cabal_macros.h" ]
8390 ++ cppOptions libBI
8491
85− -- Actually we need to check whether testName suite == "doctests"
86− -- pending https://github.com/haskell/cabal/pull/4229 getting into GHC HEAD tree
87− withTestLBI pkg lbi $ \suite suitecfg -> when (testName suite == "doctests") $ do
92+ withTestLBI pkg lbi $ \suite suitecfg -> when (testName suite == fromString testsuiteName) $ do
8893
8994 -- get and create autogen dir
9095#if MIN_VERSION_Cabal(1,25,0)
@@ -106,7 +111,7 @@ generateBuildModule flags pkg lbi = do
106111 , "flags = " ++ show (iArgs ++ includeArgs ++ dbFlags ++ cppFlags)
107112 , ""
108113 , "module_sources :: [String]"
109− , "module_sources = " ++ show ("Servant.Utils.LinksSpec" : map display module_sources)
114+ , "module_sources = " ++ show (map display module_sources)
110115 ]
111116 where
112117 -- we do this check in Setup, as then doctests don't need to depend on Cabal
@@ -162,4 +167,16 @@ generateBuildModule flags pkg lbi = do
162167testDeps :: ComponentLocalBuildInfo -> ComponentLocalBuildInfo -> [(InstalledPackageId, PackageId)]
163168testDeps xs ys = nub $ componentPackageDeps xs ++ componentPackageDeps ys
164169
170+defaultMainWithDoctests :: String -> IO ()
171+defaultMainWithDoctests testSuiteName = defaultMainWithHooks simpleUserHooks
172+ { buildHook = \pkg lbi hooks flags -> do
173+ generateBuildModule testSuiteName flags pkg lbi
174+ buildHook simpleUserHooks pkg lbi hooks flags
175+ }
176+
177+#endif
178+
179+main :: IO ()
180+main = defaultMainWithDoctests "doctests"
181+
165182\end{code}