HROOT 0.9 → 0.9.0.1
raw patch · 2 files changed
+87/−1 lines, 2 files
Files
- Config.hs +85/−0
- HROOT.cabal +2/−1
+ Config.hs view
@@ -0,0 +1,85 @@+{-# LANGUAGE ScopedTypeVariables #-}++module Config where+ +import Distribution.Simple+import Distribution.Simple.Setup+import Distribution.PackageDescription+import Distribution.Simple.LocalBuildInfo++import System.Exit+import System.Process++config :: LocalBuildInfo -> IO (Maybe HookedBuildInfo)+config bInfo = do + (excode, out, err) <- readProcessWithExitCode "root-config" ["--glibs"] ""+ liboptset' <- case excode of + ExitSuccess -> do + return . Just . mkLibraryOptionSet . words $ out+ _ -> do + putStrLn $ "root-config failure but I am installing HROOT without ROOT. It will not work. This is only for documentation." + return Nothing + (excode2,out2,err2) <- readProcessWithExitCode "root-config" ["--incdir"] ""+ incdir' <- case excode2 of + ExitSuccess -> do + return . Just . head . words $ out2+ _ -> do + putStrLn $ "root-config failure but I am installing HROOT without ROOT. It will not work. This is only for documentation." + return Nothing+ let Just lib = library . localPkgDescr $ bInfo+ buildinfo = libBuildInfo lib+ let (r :: Maybe HookedBuildInfo) = case liboptset' of + Nothing -> Nothing+ Just liboptset -> + case incdir' of + Nothing -> Nothing + Just incdir -> + let hbi = emptyBuildInfo { extraLibs = extraLibs buildinfo + ++ libs liboptset+ , extraLibDirs = libdirs liboptset + , includeDirs = incdir : includeDirs buildinfo+ }+ in Just (Just hbi, []) + return r +++data LibraryOptionSet = LibraryOptionSet { + libs :: [String], + libdirs :: [String], + libopts :: [String]+} deriving Show++data LibraryOption = Lib String + | Dir String+ | Opt String + deriving Show++mkLibraryOptionSet :: [String] -> LibraryOptionSet+mkLibraryOptionSet strs = let opts = libraryOptions strs+ in foldr f (LibraryOptionSet [] [] []) opts + where f x (LibraryOptionSet l d o) = case x of+ Lib st -> LibraryOptionSet (st:l) d o + Dir st -> LibraryOptionSet l (st:d) o + Opt st -> LibraryOptionSet l d (st:o) ++libraryOptions :: [String] -> [LibraryOption] -- LibraryOptionSet +libraryOptions = map f + where f x = let r = parseLibraryOptionClassifier x+ in case r of + Left msg -> error (show msg)+ Right result -> result+++parseLibraryOptionClassifier :: String -> Either String LibraryOption +parseLibraryOptionClassifier [] = Left "empty option"+parseLibraryOptionClassifier str@(x:xs) = + case x of+ '-' -> if null xs + then Left "parse error"+ else let (y:ys) = xs+ in case y of+ 'L' -> Right (Dir ys)+ 'l' -> Right (Lib ys)+ _ -> Right (Opt str)+ _ -> Right (Opt str) +
HROOT.cabal view
@@ -1,5 +1,5 @@ Name: HROOT-Version: 0.9+Version: 0.9.0.1 Synopsis: Haskell binding to the ROOT data analysis framework Description: HROOT is a haskell Foreign Function Interface (FFI) binding to ROOT. ROOT(http://root.cern.ch) is an object-oriented program and library developed by CERN for physics data analysis. Homepage: http://ianwookim.org/HROOT@@ -12,6 +12,7 @@ Build-Type: Custom cabal-version: >=1.10 Extra-source-files:+ Config.hs