{-# LANGUAGE OverloadedStrings #-} module BNFC.Backend.Common.Makefile where import BNFC.Prelude import Data.String (fromString) import Prettyprinter -- | Creates a Makefile rule. -- -- >>> mkRule "main" ["file1","file2"] ["do something"] -- main : file1 file2 -- do something -- -- -- >>> mkRule "main" ["program.exe"] [] -- main : program.exe -- -- mkRule :: String -- ^ The target name. -> [String] -- ^ Dependencies. -> String -- ^ Recipe. -> Doc () mkRule target dependencies recipe = if null recipe then fromString target <+> colon <+> hsep (fromString <$> dependencies) else vsep [ fromString target <+> colon <+> hsep (fromString <$> dependencies) , "\t" <> fromString recipe ] -- | Variable assignment. -- -- >>> mkVar "FOO" "bar" -- FOO=bar -- mkVar :: String -> String -> Doc () mkVar n v = fromString n <> "=" <> fromString v -- UNUSED: -- -- | Variable referencing. -- -- -- -- >>> mkRefVar "FOO" -- -- ${FOO} -- -- -- mkRefVar :: String -> Doc -- mkRefVar m = case m of -- "" -> empty -- _ -> text $ refVar m -- | Variable referencing. -- -- >>> refVar "FOO" -- "${FOO}" -- refVar :: String -> Doc () refVar m = "${" <+> fromString m <+> "}"