packages feed

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