cabal2ebuild-0.0.15.9: src-exec/hackage2ebuild.hs
import Gentoo.Cabal2Ebuild
import Network.Curl
import System.Environment
import System.Console.GetOpt
import System.Exit
main :: IO ()
main = do
args <- getArgs
let (os, as, errs) = getOpt Permute descrs args
(pn, pv) <- case (as, errs) of
([n, v], []) -> return (n, readV v)
_ -> do putStrLn "Usage: hackage2ebuild [package name] [package version]"
mapM_ putStr errs
exitFailure
(rsp, cnt) <- withCurlDo $ curlGetString (mkURL pn pv) []
case cabal2ebuild cnt of
Just (fn, eb) -> writeFile (getDir os ++ "/" ++ fn) eb
_ -> putStrLn "cabal2ebuild: error"
putStrLn $ mkURL pn pv
print rsp
print os
mkURL :: String -> Version -> URLString
mkURL pn pv =
"http://hackage.haskell.org/package/" ++ pn ++ "-" ++ showV pv ++ "/" ++
pn ++ ".cabal"
type Version = [Int]
readV :: String -> [Int]
readV str = case span (/= '.') str of
(n, "") -> [read n]
(n, '.' : ns) -> read n : readV ns
_ -> error "never occur"
showV :: [Int] -> String
showV [n] = show n
showV (n : ns) = show n ++ "." ++ showV ns
showV _ = error "bad version"
descrs :: [OptDescr Option]
descrs = [
Option "d" [] (ReqArg Directory "directory") "directory"
]
data Option = Directory FilePath deriving Show
getDir :: [Option] -> FilePath
getDir [] = "."
getDir (Directory fp : _) = fp
-- getDir (_ : os) = getDir os