db729a08c8
git-svn-id: https://pandoc.googlecode.com/svn/trunk@1386 788f1e2b-df1e-0410-8736-df70ead52e1b
48 lines
1.9 KiB
Haskell
48 lines
1.9 KiB
Haskell
import Distribution.Simple
|
|
import Distribution.PackageDescription ( emptyHookedBuildInfo )
|
|
import Control.Exception ( bracket_ )
|
|
import System.Process ( runCommand, waitForProcess )
|
|
import System.FilePath ( (</>) )
|
|
import System.Directory ( getCurrentDirectory, setCurrentDirectory, findExecutable, doesFileExist )
|
|
import System.IO ( stderr )
|
|
import System.Exit
|
|
import Data.Maybe ( fromJust )
|
|
|
|
main = defaultMainWithHooks (simpleUserHooks {runTests = runTestSuite, preConf = checkReferenceODT})
|
|
|
|
-- | Run test suite.
|
|
runTestSuite _ _ _ _ = do
|
|
inDirectory "tests" $ runCommand "runhaskell RunTests.hs" >>= waitForProcess
|
|
return ()
|
|
|
|
-- | If reference.odt does not exist, build it.
|
|
checkReferenceODT _ _ = do
|
|
refODTexists <- doesFileExist ("odt-styles" </> "reference.odt")
|
|
if refODTexists
|
|
then return ()
|
|
else makeReferenceODT
|
|
return emptyHookedBuildInfo
|
|
|
|
-- | Create reference.odt by zipping up sources in odt-styles directory.
|
|
makeReferenceODT :: IO ()
|
|
makeReferenceODT = do
|
|
zipPathMaybe <- findExecutable "zip"
|
|
if zipPathMaybe == Nothing
|
|
then error $ "The 'zip' command, which is needed to build reference.odt\n" ++
|
|
"from sources in the odt-styles directory, was not found.\n" ++
|
|
"Try again after installing zip (http://www.info-zip.org/Zip.html).\n" ++
|
|
"Or use the pandoc source tarball, which contains a prebuilt reference.odt."
|
|
else do
|
|
putStrLn "Creating reference.odt:"
|
|
inDirectory "odt-styles" $ do
|
|
ec <- runCommand "zip -9 -r reference.odt *" >>= waitForProcess
|
|
case ec of
|
|
ExitSuccess -> putStrLn "Done."
|
|
_ -> error "Error creating ODT."
|
|
|
|
-- | Perform an IO action in a directory.
|
|
inDirectory :: FilePath -> IO a -> IO a
|
|
inDirectory dir action = do
|
|
oldDir <- getCurrentDirectory
|
|
bracket_ (setCurrentDirectory dir) (setCurrentDirectory oldDir) action
|
|
|