diff options
author | Nikolay Yakimov <root@livid.pp.ru> | 2015-03-18 22:33:16 +0300 |
---|---|---|
committer | John MacFarlane <jgm@berkeley.edu> | 2015-03-28 10:36:53 -0700 |
commit | d744b83b61bc635419339b73b687b9280ee757fc (patch) | |
tree | ef1def7314f5ce87e4a11a18aaf2172a254935e6 | |
parent | 1710c4bd8bc66dcd755029dc8ed05a9eb35d71f6 (diff) | |
download | pandoc-d744b83b61bc635419339b73b687b9280ee757fc.tar.gz |
Create reference files from unpacked archives with helper program
-rw-r--r-- | Setup.hs | 26 | ||||
-rw-r--r-- | data/make-reference-files.hs | 26 | ||||
-rw-r--r-- | pandoc.cabal | 9 |
3 files changed, 56 insertions, 5 deletions
@@ -22,7 +22,10 @@ import Distribution.PackageDescription (PackageDescription(..), Executable(..)) import System.Process ( rawSystem ) import System.FilePath ( (</>) ) import System.Directory ( findExecutable ) -import Distribution.Simple.Utils (info) +import Distribution.Simple.Utils (info, rawSystemExit) +import Distribution.Simple.Setup +import Distribution.Simple.LocalBuildInfo +import Distribution.Verbosity main :: IO () main = defaultMainWithHooks $ simpleUserHooks { @@ -30,12 +33,15 @@ main = defaultMainWithHooks $ simpleUserHooks { hookedPreProcessors = [ppBlobSuffixHandler] -- ensure that make-pandoc-man-pages doesn't get installed to bindir , copyHook = \pkgdescr -> - (copyHook simpleUserHooks) pkgdescr{ executables = - [x | x <- executables pkgdescr, exeName x /= "make-pandoc-man-pages"] } + copyHook simpleUserHooks pkgdescr{ executables = + [x | x <- executables pkgdescr, exeName x `notElem` noInstall] } , instHook = \pkgdescr -> - (instHook simpleUserHooks) pkgdescr{ executables = - [x | x <- executables pkgdescr, exeName x /= "make-pandoc-man-pages"] } + instHook simpleUserHooks pkgdescr{ executables = + [x | x <- executables pkgdescr, exeName x `notElem` noInstall] } + , postBuild = makeReferenceFiles } + where + noInstall = ["make-pandoc-man-pages","make-reference-files"] ppBlobSuffixHandler :: PPSuffixHandler ppBlobSuffixHandler = ("hsb", \_ _ -> @@ -49,3 +55,13 @@ ppBlobSuffixHandler = ("hsb", \_ _ -> Nothing -> error "hsb2hs is needed to build this program: cabal install hsb2hs" return () }) + +makeReferenceFiles :: Args -> BuildFlags -> PackageDescription -> LocalBuildInfo -> IO () +makeReferenceFiles _ bf _ LocalBuildInfo{buildDir=buildDir} + = mapM_ + (rawSystemExit verbosity progPath . return) + referenceFormats + where + verbosity = fromFlagOrDefault normal $ buildVerbosity bf + progPath = buildDir </> "make-reference-files" </> "make-reference-files" + referenceFormats = ["docx", "odt"] diff --git a/data/make-reference-files.hs b/data/make-reference-files.hs new file mode 100644 index 000000000..2e64dc51f --- /dev/null +++ b/data/make-reference-files.hs @@ -0,0 +1,26 @@ +import System.Environment +import System.Directory +import Codec.Archive.Zip +import qualified Data.ByteString.Lazy as BS +import qualified Control.Exception as E +import System.IO.Error (isDoesNotExistError) + +mkzip :: String -> IO () +mkzip fmt = do + let dir = "data/"++fmt + output = "data/reference."++fmt + cd <- getCurrentDirectory + setCurrentDirectory dir + archive <- addFilesToArchive [OptRecursive] emptyArchive ["."] + setCurrentDirectory cd + removeIfExists output + BS.writeFile output $ fromArchive archive + +removeIfExists :: FilePath -> IO () +removeIfExists fileName = removeFile fileName `E.catch` handleExists + where handleExists e + | isDoesNotExistError e = return () + | otherwise = E.throwIO e + +main :: IO () +main = getArgs >>= mkzip . (!!0) diff --git a/pandoc.cabal b/pandoc.cabal index 6e06ce34b..d699eb83b 100644 --- a/pandoc.cabal +++ b/pandoc.cabal @@ -418,6 +418,15 @@ Executable make-pandoc-man-pages else Buildable: False +Executable make-reference-files + Main-Is: make-reference-files.hs + Hs-Source-Dirs: data + Build-Depends: zip-archive >= 0.2.3.4 && < 0.3, + base >= 4.2 && < 5, + directory >= 1 && < 1.3, + bytestring >= 0.9 && < 0.11 + Default-Language: Haskell2010 + Test-Suite test-pandoc Type: exitcode-stdio-1.0 Main-Is: test-pandoc.hs |