summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNikolay Yakimov <root@livid.pp.ru>2015-03-18 22:33:16 +0300
committerJohn MacFarlane <jgm@berkeley.edu>2015-03-28 10:36:53 -0700
commitd744b83b61bc635419339b73b687b9280ee757fc (patch)
treeef1def7314f5ce87e4a11a18aaf2172a254935e6
parent1710c4bd8bc66dcd755029dc8ed05a9eb35d71f6 (diff)
Create reference files from unpacked archives with helper program
-rw-r--r--Setup.hs26
-rw-r--r--data/make-reference-files.hs26
-rw-r--r--pandoc.cabal9
3 files changed, 56 insertions, 5 deletions
diff --git a/Setup.hs b/Setup.hs
index 7777a5133..868fe901e 100644
--- a/Setup.hs
+++ b/Setup.hs
@@ -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