{-# LANGUAGE OverloadedStrings #-} module BNFC.Backend.Txt2Tags.Makefile where import BNFC.Backend.CommonInterface.Backend import BNFC.Backend.Txt2Tags.Options import BNFC.Backend.Txt2Tags.State import BNFC.CF import BNFC.Options.GlobalOptions import BNFC.Prelude import Control.Monad.State import Data.String (fromString) import System.FilePath (takeBaseName) import Prettyprinter import Prettyprinter.Render.String txt2tagsmakefile :: LBNF -> State Txt2TagsBackendState Result txt2tagsmakefile _ = do st <- get let cfName = takeBaseName $ optInput $ globalOpt st t = target $ txtOpts st return [("Makefile", makefileString cfName t)] makefileString :: String -> String -> String makefileString cfName target = renderString . layoutSmart defaultLayoutOptions $ makefileDoc cfName target makefileDoc :: String -> String -> Doc () makefileDoc cfName t = vsep [ "TARGET=" <> target , emptyDoc , grammar <> dot <> "$(TARGET)" <> colon <+> grammar <> dot <> "t2t" , "\ttxt2tags -t" <+> "$(TARGET)" <+> grammar <> dot <> "t2t" , emptyDoc , ".PHONY: clean" , "clean:" , "\t-rm" <+> grammar <> dot <> "$(TARGET)" , emptyDoc , "cleanall : clean" , "\t-rm" <+> "Makefile" <+> grammar <> dot <> "t2t" ] where grammar = fromString cfName target = fromString t