{-# LANGUAGE OverloadedStrings #-} module Data.Makefile.Render.Internal where import Data.Makefile import Data.Monoid import qualified Data.ByteString.Lazy as B import Data.ByteString.Builder import qualified Data.ByteString.Lazy.Char8 as BL writeMakefile :: FilePath -> Makefile -> IO () writeMakefile f m = do let s = encodeMakefile m BL.writeFile f s encodeMakefile :: Makefile -> B.ByteString encodeMakefile = toLazyByteString . renderMakefile renderMakefile :: Makefile -> Builder renderMakefile (Makefile es ) = mconcat [renderEntry e <> charUtf8 '\n' | e <- es] renderEntry :: Entry -> Builder renderEntry (Assignment key value ) = byteString key <> charUtf8 '=' <> byteString value renderEntry (Rule (Target t) ds cmds) = byteString t <> charUtf8 ':' <> mconcat [charUtf8 ' ' <> renderDep d | d <- ds] <> charUtf8 '\n' <> mconcat [renderCmd cmd <> charUtf8 '\n' | cmd <- cmds] renderDep :: Dependency -> Builder renderDep (Dependency dep ) = byteString dep renderCmd :: Command -> Builder renderCmd (Command cmd ) = charUtf8 '\t' <> byteString cmd