content: {-# LANGUAGE CPP #-}
  -- Source: https://github.com/haskell/cabal/issues/6726#issuecomment-918663262
  
  -- | Custom Setup that runs bnfc to generate the language sub-libraries
  -- for the parsers included in Ogma.
  module Main (main) where
  
  import           Distribution.Simple         (defaultMainWithHooks,
                                                hookedPrograms, postConf,
                                                preBuild, simpleUserHooks)
  import           Distribution.Simple.Program (Program (..), findProgramVersion,
                                                simpleProgram)
  import           System.Process              (system)
  
  -- | Run BNFC on the grammar before the actual build step.
  --
  -- All options for bnfc are hard-coded here.
  main :: IO ()
  main = defaultMainWithHooks $ simpleUserHooks
    { hookedPrograms = [ bnfcProgram ]
    , postConf       = \args flags packageDesc localBuildInfo -> do
  #ifndef mingw32_HOST_OS
        _ <- system "bnfc -d -p Language.Rzk --generic --functor -o src/ grammar/Syntax.cf"
  #endif
        postConf simpleUserHooks args flags packageDesc localBuildInfo
    }
  
  -- | TODO: This should be in Cabal.Distribution.Simple.Program.Builtin.
  bnfcProgram :: Program
  bnfcProgram = (simpleProgram "bnfc")
    { programFindVersion = findProgramVersion "--version" id
    }
  