hmatrix-gsl-stats 0.1.2.9 → 0.1.2.10
raw patch · 8 files changed
+166/−156 lines, 8 filesdep ~hmatrixsetup-changedPVP ok
version bump matches the API change (PVP)
Dependency ranges changed: hmatrix
API changes (from Hackage documentation)
Files
- CHANGES +3/−0
- Config.hs +141/−0
- Setup.lhs +13/−1
- configure +0/−3
- configure.hs +0/−145
- hmatrix-gsl-stats.cabal +7/−5
- lib/Numeric/GSL/Histogram.hs +1/−1
- lib/Numeric/GSL/Histogram2D.hs +1/−1
CHANGES view
@@ -48,3 +48,6 @@ 0.1.2.8: changed base to >= 4++0.1.2.10:+ hmatrix now has find, fix Histogram(2D)
+ Config.hs view
@@ -0,0 +1,141 @@+{-+ GSL and LAPACK may require auxiliary libraries which depend on OS,+ distribution, and implementation. This script tries to to find out+ the correct link command for your system.+ Suggestions and contributions are welcome.++ By default we try to link -lgsl -llapack. This works in ubuntu/debian,+ both with and without ATLAS.+ If this fails we try different sets of additional libraries which are+ known to work in some systems.++ The desired libraries can also be explicitly given by the user using cabal+ flags (e.g., -fmkl, -faccelerate) or --configure-option=link:lib1,lib2,lib3,...++-}++module Config(config) where++import System.Process+import System.Exit+import System.Environment+import System.Directory(createDirectoryIfMissing)+import Data.List(isPrefixOf, intercalate)+import Distribution.Simple.LocalBuildInfo+import Distribution.Simple.Configure+import Distribution.PackageDescription++-- possible additional dependencies for the desired libs (by default gsl lapack)++opts = [ "" -- Ubuntu/Debian+ , "blas"+ , "blas cblas"+ , "cblas"+ , "gslcblas"+ , "blas gslcblas"+ , "f77blas"+ , "f77blas cblas atlas gcc_s" -- Arch Linux (older version of atlas-lapack)+ , "blas gslcblas gfortran" -- Arch Linux with normal blas and lapack+ ]++-- compile a simple program with symbols from GSL and LAPACK with the given libs+testprog bInfo buildInfo libs fmks =+ "echo \"#include <gsl/gsl_sf_gamma.h>\nint main(){zgesvd_(); gsl_sf_gamma(5);}\""+ ++" > " ++ (buildDir bInfo) ++ "/dummy.c; gcc "+ ++ (join $ ccOptions buildInfo) ++ " "+ ++ (join $ cppOptions buildInfo) ++ " "+ ++ (join $ map ("-I"++) $ includeDirs buildInfo) ++ " " + ++ (buildDir bInfo) ++ "/dummy.c -o "+ ++ (buildDir bInfo) ++ "/dummy "+ ++ (join $ map ("-L"++) $ extraLibDirs buildInfo) ++ " "+ ++ (prepend "-l" $ libs) ++ " "+ ++ (prepend "-framework " fmks) ++ " > /dev/null 2> /dev/null"++join = intercalate " "+prepend x = unwords . map (x++) . words++check bInfo buildInfo libs fmks = (ExitSuccess ==) `fmap` system (testprog bInfo buildInfo libs fmks)++-- simple test for GSL+gsl bInfo buildInfo = "echo \"#include <gsl/gsl_sf_gamma.h>\nint main(){gsl_sf_gamma(5);}\""+ ++" > " ++ (buildDir bInfo) ++ "/dummy.c; gcc "+ ++ (join $ ccOptions buildInfo) ++ " "+ ++ (join $ cppOptions buildInfo) ++ " "+ ++ (join $ map ("-I"++) $ includeDirs buildInfo) ++ " " + ++ (buildDir bInfo) ++ "/dummy.c -o "+ ++ (buildDir bInfo) ++ "/dummy "+ ++ (join $ map ("-L"++) $ extraLibDirs buildInfo) ++ " -lgsl -lgslcblas"+ ++ " > /dev/null 2> /dev/null"++-- test for gsl >= 1.12+gsl112 bInfo buildInfo =+ "echo \"#include <gsl/gsl_sf_exp.h>\nint main(){gsl_sf_exprel_n_CF_e(1,1,0);}\""+ ++" > " ++ (buildDir bInfo) ++ "/dummy.c; gcc " + ++ (buildDir bInfo) ++ "/dummy.c "+ ++ (join $ ccOptions buildInfo) ++ " "+ ++ (join $ cppOptions buildInfo) ++ " "+ ++ (join $ map ("-I"++) $ includeDirs buildInfo)+ ++" -o " ++ (buildDir bInfo) ++ "/dummy "+ ++ (join $ map ("-L"++) $ extraLibDirs buildInfo) ++ " -lgsl -lgslcblas"+ ++ " > /dev/null 2> /dev/null"+++checkCommand c = (ExitSuccess ==) `fmap` system c++-- test different configurations until the first one works+try _ _ _ _ [] = return Nothing+try l i b f (opt:rest) = do+ ok <- check l i (b ++ " " ++ opt) f+ if ok then return (Just opt)+ else try l i b f rest++-- read --configure-option=link:lib1,lib2,lib3,etc+linkop = "link:"+getUserLink = concatMap (g . drop (length linkop)) . filter (isPrefixOf linkop)+ where g = map cs+ cs ',' = ' '+ cs x = x++config :: LocalBuildInfo -> IO HookedBuildInfo+ +config bInfo = do+ putStr "Checking foreign libraries..."+ args <- getArgs++ let Just lib = library . localPkgDescr $ bInfo+ buildInfo = libBuildInfo lib+ base = unwords . extraLibs $ buildInfo+ fwks = unwords . frameworks $ buildInfo+ auxpref = getUserLink args++ -- We extract the desired libs from hmatrix-gsl-stats.cabal (using a cabal flags)+ -- and from a posible --configure-option=link:lib1,lib2,lib3+ -- by default the desired libs are gsl lapack.++ let pref = if null (words (base ++ " " ++ auxpref)) then "gsl lapack" else auxpref+ fullOpts = map ((pref++" ")++) opts++ -- create the build directory (used for tmp files) if necessary+ createDirectoryIfMissing True $ buildDir bInfo+ + r <- try bInfo buildInfo base fwks fullOpts++ case r of+ Nothing -> do+ putStrLn " FAIL"+ g <- checkCommand $ gsl bInfo buildInfo+ if g+ then putStrLn " *** Sorry, I can't link LAPACK."+ else putStrLn " *** Sorry, I can't link GSL."+ putStrLn " *** Please make sure that the appropriate -dev packages are installed."+ putStrLn " *** You can also specify the required libraries using"+ putStrLn " *** cabal install hmatrix-gsl-stats --configure-option=link:lib1,lib2,lib3,etc." + return (Just emptyBuildInfo { buildable = False }, [])+ Just ops -> do+ putStrLn $ " OK " ++ ops+ g <- checkCommand $ gsl112 bInfo buildInfo+ let hbi = if g+ then emptyBuildInfo { extraLibs = words ops}+ else emptyBuildInfo { extraLibs = words ops, ccOptions = ["-DGSL110"]}+ return (Just hbi, [])+
Setup.lhs view
@@ -1,5 +1,17 @@ #! /usr/bin/env runhaskell > import Distribution.Simple+> import Distribution.Simple.Setup+> import Distribution.PackageDescription+> import Distribution.Simple.LocalBuildInfo -> main = defaultMainWithHooks autoconfUserHooks+> import Config(config)++> main = defaultMainWithHooks simpleUserHooks { confHook = c }++> c x y = do+> binfo <- confHook simpleUserHooks x y+> pbi <- config binfo+> let pkg_descr = localPkgDescr binfo+> return $ binfo { localPkgDescr = updatePackageDescription pbi pkg_descr }+
− configure
@@ -1,3 +0,0 @@-#! /bin/sh--runhaskell configure.hs $*
− configure.hs
@@ -1,145 +0,0 @@-#! /usr/bin/env runhaskell-{- configure.hs for hmatrix-gsl-stats, copied from hmatrix- -------------------------- GSL and LAPACK may require auxiliary libraries which depend on OS,- distribution, and implementation. This script tries to to find out- the correct link command for your system.- Suggestions and contributions are welcome.-- By default we try to link -lgsl -llapack. This works in ubuntu/debian,- both with and without ATLAS.- If this fails we try different sets of additional libraries which are- known to work in some systems.-- The desired libraries can also be explicitly given by the user using cabal- flags (e.g., -fmkl, -faccelerate) or --configure-option=link:lib1,lib2,lib3,...---}--import System-import System.Directory(createDirectoryIfMissing,getCurrentDirectory,getDirectoryContents)-import Data.List(isPrefixOf, intercalate)-import Distribution.Simple.LocalBuildInfo-import Distribution.Simple.Configure-import Distribution.PackageDescription---- possible additional dependencies for the desired libs (by default gsl lapack)--opts = [ "" -- Ubuntu/Debian- , "blas"- , "blas cblas"- , "cblas"- , "gslcblas"- , "blas gslcblas"- , "f77blas"- , "f77blas cblas atlas gcc_s" -- Arch Linux (older version of atlas-lapack)- , "blas gslcblas gfortran" -- Arch Linux with normal blas and lapack- ]---- compile a simple program with symbols from GSL and LAPACK with the given libs-testprog bInfo buildInfo libs fmks =- "echo \"#include <gsl/gsl_sf_gamma.h>\nint main(){zgesvd_(); gsl_sf_gamma(5);}\""- ++" > " ++ (buildDir bInfo) ++ "/dummy.c; gcc "- ++ (join $ ccOptions buildInfo) ++ " "- ++ (join $ cppOptions buildInfo) ++ " "- ++ (join $ map ("-I"++) $ includeDirs buildInfo) ++ " " - ++ (buildDir bInfo) ++ "/dummy.c -o "- ++ (buildDir bInfo) ++ "/dummy "- ++ (join $ map ("-L"++) $ extraLibDirs buildInfo) ++ " "- ++ (prepend "-l" $ libs) ++ " "- ++ (prepend "-framework " fmks) ++ " > /dev/null 2> /dev/null"--join = intercalate " "-prepend x = unwords . map (x++) . words--check bInfo buildInfo libs fmks = (ExitSuccess ==) `fmap` system (testprog bInfo buildInfo libs fmks)---- simple test for GSL-gsl bInfo buildInfo = "echo \"#include <gsl/gsl_sf_gamma.h>\nint main(){gsl_sf_gamma(5);}\""- ++" > " ++ (buildDir bInfo) ++ "/dummy.c; gcc "- ++ (join $ ccOptions buildInfo) ++ " "- ++ (join $ cppOptions buildInfo) ++ " "- ++ (join $ map ("-I"++) $ includeDirs buildInfo) ++ " " - ++ (buildDir bInfo) ++ "/dummy.c -o "- ++ (buildDir bInfo) ++ "/dummy "- ++ (join $ map ("-L"++) $ extraLibDirs buildInfo) ++ " -lgsl -lgslcblas"- ++ " > /dev/null 2> /dev/null"---- test for gsl >= 1.12-gsl112 bInfo buildInfo =- "echo \"#include <gsl/gsl_sf_exp.h>\nint main(){gsl_sf_exprel_n_CF_e(1,1,0);}\""- ++" > " ++ (buildDir bInfo) ++ "/dummy.c; gcc " - ++ (buildDir bInfo) ++ "/dummy.c "- ++ (join $ ccOptions buildInfo) ++ " "- ++ (join $ cppOptions buildInfo) ++ " "- ++ (join $ map ("-I"++) $ includeDirs buildInfo)- ++" -o " ++ (buildDir bInfo) ++ "/dummy "- ++ (join $ map ("-L"++) $ extraLibDirs buildInfo) ++ " -lgsl -lgslcblas"- ++ " > /dev/null 2> /dev/null"---checkCommand c = (ExitSuccess ==) `fmap` system c---- test different configurations until the first one works-try _ _ _ _ [] = return Nothing-try l i b f (opt:rest) = do- ok <- check l i (b ++ " " ++ opt) f- if ok then return (Just opt)- else try l i b f rest---- read --configure-option=link:lib1,lib2,lib3,etc-linkop = "link:"-getUserLink = concatMap (g . drop (length linkop)) . filter (isPrefixOf linkop)- where g = map cs- cs ',' = ' '- cs x = x--main = do- dir <- getCurrentDirectory- putStrLn $ "Current directory: " ++ dir---- files <- getDirectoryContents dir--- mapM_ putStrLn files-- putStr "Checking foreign libraries..."-- args <- getArgs- Just bInfo <- maybeGetPersistBuildConfig "dist"-- let Just lib = library . localPkgDescr $ bInfo- buildInfo = libBuildInfo lib- base = unwords . extraLibs $ buildInfo- fwks = unwords . frameworks $ buildInfo- auxpref = getUserLink args-- -- We extract the desired libs from hmatrix-gsl-stats.cabal (using a cabal flags)- -- and from a posible --configure-option=link:lib1,lib2,lib3- -- by default the desired libs are gsl lapack.-- let pref = if null (words (base ++ " " ++ auxpref)) then "gsl lapack" else auxpref- fullOpts = map ((pref++" ")++) opts-- -- create the build directory (used for tmp files) if necessary- createDirectoryIfMissing True $ buildDir bInfo- - r <- try bInfo buildInfo base fwks fullOpts- case r of- Nothing -> do- putStrLn " FAIL"- g <- checkCommand $ gsl bInfo buildInfo- if g- then putStrLn " *** Sorry, I can't link LAPACK."- else putStrLn " *** Sorry, I can't link GSL."- putStrLn " *** Please make sure that the appropriate -dev packages are installed."- putStrLn " *** You can also specify the required libraries using"- putStrLn " *** cabal install hmatrix-gsl-stats --configure-option=link:lib1,lib2,lib3,etc."- writeFile "hmatrix-gsl-stats.buildinfo" ("buildable: False\n")- Just ops -> do- putStrLn " OK"- g <- checkCommand $ gsl112 bInfo buildInfo- writeFile "hmatrix-gsl-stats.buildinfo" $ "extra-libraries: " ++- ops ++ "\n" ++- if g- then ""- else "cc-options: -DGSL110\n"
hmatrix-gsl-stats.cabal view
@@ -1,5 +1,5 @@ Name: hmatrix-gsl-stats-Version: 0.1.2.9+Version: 0.1.2.10 License: GPL License-file: LICENSE Copyright: (c) A.V.H. McPhail 2010, 2011@@ -20,11 +20,11 @@ Category: Math, Statistics, FFI tested-with: GHC ==7.0.1 -cabal-version: >=1.8+cabal-version: >=1.10.1.0 build-type: Custom -extra-source-files: configure configure.hs README INSTALL CHANGES+extra-source-files: Config.hs README INSTALL CHANGES extra-tmp-files: hmatrix-gsl-stats.buildinfo flag mkl@@ -33,11 +33,13 @@ library + Default-language: Haskell2010+ Build-Depends: base >= 4 && < 5, binary, storable-complex,- hmatrix >= 0.10.0.0+ hmatrix >= 0.11.0.4 - Extensions: ForeignFunctionInterface+ Default-Extensions: ForeignFunctionInterface hs-source-dirs: lib Exposed-modules: Numeric.GSL.Sort
lib/Numeric/GSL/Histogram.hs view
@@ -52,7 +52,7 @@ import Data.Packed.Development --import Numeric.LinearAlgebra.Algorithms hiding (multiply)-import Numeric.LinearAlgebra hiding (multiply,add,divide,scale)+import Numeric.LinearAlgebra hiding (multiply,add,divide,scale,find) --import Numeric.Container --import Control.Monad
lib/Numeric/GSL/Histogram2D.hs view
@@ -55,7 +55,7 @@ --import Numeric.LinearAlgebra.Algorithms hiding (multiply) --import Numeric.LinearAlgebra.Linear hiding (multiply,add,divide,scale)-import Numeric.LinearAlgebra hiding (multiply,add,divide,scale)+import Numeric.LinearAlgebra hiding (multiply,add,divide,scale,find) --import Numeric.Container --import Control.Monad