content: module Main where
  
  import Build_doctests (Component (..), Name (..), components)
  import Test.DocTest (doctest)
  import Data.Foldable (for_)
  import GHC.IO.Encoding (setLocaleEncoding)
  import System.Directory (getCurrentDirectory, makeAbsolute)
  import System.Environment.Compat (unsetEnv)
  import System.FilePath.Glob (glob)
  import System.FilePath.Posix ((</>))
  import System.IO (utf8)
  
  main :: IO ()
  main = do
      setLocaleEncoding utf8
      unsetEnv "GHC_ENVIRONMENT"
      pwd    <- getCurrentDirectory
      prefix <- makeAbsolute pwd
  
      for_ components $ \(Component name pkgs flags _) -> do
          putStrLn "----------"
          print name
  
          maybeSources <- case name of
              NameLib (Just "hackport-internal") -> Just <$> glob (prefix </> "src" </> "**/*.hs")
              NameExe "hackport"                 -> Just <$> glob (prefix </> "exe" </> "**/*.hs")
              _                                  -> fail $
                  "Unexpected component: " ++ show name ++ "\n" ++
                  "Please edit tests/doctests.hs to add sources for this component."
  
          for_ maybeSources $ \sources -> do
              let noWarnFlags = ["-Wwarn", "-Wno-default"]
              let args = flags ++ noWarnFlags ++ pkgs ++ sources
              putStrLn "Flags passed:"
              for_ args $ \a -> putStr "    " *> print a
              doctest args
  