content: {-
   - Copyright 2014 Tycho Andersen
   -
   - Licensed under the Apache License, Version 2.0 (the "License");
   - you may not use this file except in compliance with the License.
   - You may obtain a copy of the License at
   -
   -   http://www.apache.org/licenses/LICENSE-2.0
   -
   - Unless required by applicable law or agreed to in writing, software
   - distributed under the License is distributed on an "AS IS" BASIS,
   - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   - See the License for the specific language governing permissions and
   - limitations under the License.
   -}
  module Main where
  
  import Data.XCB.Python.Parse
  
  import Options.Applicative
  
  import System.Directory
  import System.FilePath
  
  data Xcffibgen = Xcffibgen { input :: String
                             , output :: String
                             }
  
  options :: Parser Xcffibgen
  options = Xcffibgen
      <$> strOption
          ( long "input"
         <> metavar "DIR"
         <> help "Input directory containing xcb xml files.")
      <*> strOption
          ( long "output"
         <> metavar "DIR"
         <> help "Output directory for generated python.")
  
  run :: Xcffibgen -> IO ()
  run (Xcffibgen inp out) = do
    headers <- parseXHeaders inp
    createDirectoryIfMissing True out
    sequence_ $ map processFile $ xform headers
    where
      processFile (fname, suite) = do
        putStrLn fname
        let fname' = out </> fname ++ ".py"
            contents = renderPy suite
        writeFile fname' contents
  
  main :: IO ()
  main = execParser opts >>= run
    where
      opts = info (helper <*> options)
        ( fullDesc
       <> progDesc "Generate XCB bindings for python."
       <> header "xcffib - the cffi-based XCB generator")
  