@@ -1,5 +1,19 @@
1\begin{code}
1\begin{code}
2{-# LANGUAGE CPP #-}
2{-# LANGUAGE CPP #-}
3+{-# LANGUAGE OverloadedStrings #-}
4+module Main (main) where
6+#ifndef MIN_VERSION_cabal_doctest
7+#define MIN_VERSION_cabal_doctest(x,y,z) 0
11+#if MIN_VERSION_cabal_doctest(1,0,0)
12+import Distribution.Extra.Doctest ( defaultMainWithDoctests )
15+-- Otherwise we provide a shim
3#ifndef MIN_VERSION_Cabal
17#ifndef MIN_VERSION_Cabal
4#define MIN_VERSION_Cabal(x,y,z) 0
18#define MIN_VERSION_Cabal(x,y,z) 0
@@ -9,10 +23,10 @@
9#if MIN_VERSION_Cabal(1,24,0)
23#if MIN_VERSION_Cabal(1,24,0)
10#define InstalledPackageId UnitId
24#define InstalledPackageId UnitId
12−module Main (main) where
14import Control.Monad ( when )
27import Control.Monad ( when )
15import Data.List ( nub )
28import Data.List ( nub )
29+import Data.String ( fromString )
16import Distribution.Package ( InstalledPackageId )
30import Distribution.Package ( InstalledPackageId )
17import Distribution.Package ( PackageId, Package (..), packageVersion )
31import Distribution.Package ( PackageId, Package (..), packageVersion )
18import Distribution.PackageDescription ( PackageDescription(), TestSuite(..) , Library (..), BuildInfo (..))
32import Distribution.PackageDescription ( PackageDescription(), TestSuite(..) , Library (..), BuildInfo (..))
@@ -42,15 +56,8 @@ makeAbsolute p | isAbsolute p = return p
42 return $ cwd </> p
56 return $ cwd </> p
46−main = defaultMainWithHooks simpleUserHooks
47− { buildHook = \pkg lbi hooks flags -> do
48− generateBuildModule flags pkg lbi
49− buildHook simpleUserHooks pkg lbi hooks flags
52−generateBuildModule :: BuildFlags -> PackageDescription -> LocalBuildInfo -> IO ()
59+generateBuildModule :: String -> BuildFlags -> PackageDescription -> LocalBuildInfo -> IO ()
53−generateBuildModule flags pkg lbi = do
60+generateBuildModule testsuiteName flags pkg lbi = do
54 let verbosity = fromFlag (buildVerbosity flags)
61 let verbosity = fromFlag (buildVerbosity flags)
55 let distPref = fromFlag (buildDistPref flags)
62 let distPref = fromFlag (buildDistPref flags)
@@ -74,7 +81,7 @@ generateBuildModule flags pkg lbi = do
76 -- Lib sources and includes
83 -- Lib sources and includes
77− iArgs <- mapM (fmap ("-i"++) . makeAbsolute) $ "test" : libAutogenDir : hsSourceDirs libBI
84+ iArgs <- mapM (fmap ("-i"++) . makeAbsolute) $ libAutogenDir : hsSourceDirs libBI
78 includeArgs <- mapM (fmap ("-I"++) . makeAbsolute) $ includeDirs libBI
85 includeArgs <- mapM (fmap ("-I"++) . makeAbsolute) $ includeDirs libBI
80 -- CPP includes, i.e. include cabal_macros.h
87 -- CPP includes, i.e. include cabal_macros.h
@@ -82,9 +89,7 @@ generateBuildModule flags pkg lbi = do
82 [ "-include", libAutogenDir ++ "/cabal_macros.h" ]
89 [ "-include", libAutogenDir ++ "/cabal_macros.h" ]
83 ++ cppOptions libBI
90 ++ cppOptions libBI
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
89 -- get and create autogen dir
94 -- get and create autogen dir
90#if MIN_VERSION_Cabal(1,25,0)
95#if MIN_VERSION_Cabal(1,25,0)
@@ -106,7 +111,7 @@ generateBuildModule flags pkg lbi = do
106 , "flags = " ++ show (iArgs ++ includeArgs ++ dbFlags ++ cppFlags)
111 , "flags = " ++ show (iArgs ++ includeArgs ++ dbFlags ++ cppFlags)
108 , "module_sources :: [String]"
113 , "module_sources :: [String]"
109− , "module_sources = " ++ show ("Servant.Utils.LinksSpec" : map display module_sources)
114+ , "module_sources = " ++ show (map display module_sources)
112 -- we do this check in Setup, as then doctests don't need to depend on Cabal
117 -- 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
162testDeps :: ComponentLocalBuildInfo -> ComponentLocalBuildInfo -> [(InstalledPackageId, PackageId)]
167testDeps :: ComponentLocalBuildInfo -> ComponentLocalBuildInfo -> [(InstalledPackageId, PackageId)]
163testDeps xs ys = nub $ componentPackageDeps xs ++ componentPackageDeps ys
168testDeps xs ys = nub $ componentPackageDeps xs ++ componentPackageDeps ys
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
180+main = defaultMainWithDoctests "doctests"
165\end{code}
182\end{code}