38
39
, "blas gslcblas gfortran" -- Arch Linux with normal blas and lapack
42
-- location of test program
43
testProgLoc bInfo = buildDir bInfo </> "dummy.c"
44
testOutLoc bInfo = buildDir bInfo </> "dummy"
47
writeTestProg bInfo contents = writeFile (testProgLoc bInfo) contents
49
-- compile, discarding error messages
51
let processRecord = (shell $ join cmd) { std_out = CreatePipe
52
, std_err = CreatePipe }
53
( _, _, _, h) <- createProcess processRecord
56
-- command to compile the test program
57
compileCmd bInfo buildInfo = [ "gcc "
58
, (join $ ccOptions buildInfo)
59
, (join $ cppOptions buildInfo)
60
, (join $ map ("-I"++) $ includeDirs buildInfo)
64
, (join $ map ("-L"++) $ extraLibDirs buildInfo)
41
67
-- compile a simple program with symbols from GSL and LAPACK with the given libs
42
testprog bInfo buildInfo libs fmks =
43
"echo \"#include <gsl/gsl_sf_gamma.h>\nint main(){dgemm_(); zgesvd_(); gsl_sf_gamma(5);}\""
44
++" > " ++ (buildDir bInfo) ++ "/dummy.c; gcc "
45
++ (join $ ccOptions buildInfo) ++ " "
46
++ (join $ cppOptions buildInfo) ++ " "
47
++ (join $ map ("-I"++) $ includeDirs buildInfo) ++ " "
48
++ (buildDir bInfo) ++ "/dummy.c -o "
49
++ (buildDir bInfo) ++ "/dummy "
50
++ (join $ map ("-L"++) $ extraLibDirs buildInfo) ++ " "
51
++ (prepend "-l" $ libs) ++ " "
52
++ (prepend "-framework " fmks) ++ " > /dev/null 2> /dev/null"
68
testprog bInfo buildInfo libs fmks = do
69
writeTestProg bInfo "#include <gsl/gsl_sf_gamma.h>\nint main(){dgemm_(); zgesvd_(); gsl_sf_gamma(5);}"
70
compile $ compileCmd bInfo
72
++ [ (prepend "-l" $ libs)
73
, (prepend "-framework " fmks) ]
54
75
join = intercalate " "
55
76
prepend x = unwords . map (x++) . words
57
check bInfo buildInfo libs fmks = (ExitSuccess ==) `fmap` system (testprog bInfo buildInfo libs fmks)
78
check bInfo buildInfo libs fmks = (ExitSuccess ==) `fmap` testprog bInfo buildInfo libs fmks
59
80
-- simple test for GSL
60
gsl bInfo buildInfo = "echo \"#include <gsl/gsl_sf_gamma.h>\nint main(){gsl_sf_gamma(5);}\""
61
++" > " ++ (buildDir bInfo) ++ "/dummy.c; gcc "
62
++ (join $ ccOptions buildInfo) ++ " "
63
++ (join $ cppOptions buildInfo) ++ " "
64
++ (join $ map ("-I"++) $ includeDirs buildInfo) ++ " "
65
++ (buildDir bInfo) ++ "/dummy.c -o "
66
++ (buildDir bInfo) ++ "/dummy "
67
++ (join $ map ("-L"++) $ extraLibDirs buildInfo) ++ " -lgsl -lgslcblas"
68
++ " > /dev/null 2> /dev/null"
81
gsl bInfo buildInfo = do
82
writeTestProg bInfo "#include <gsl/gsl_sf_gamma.h>\nint main(){gsl_sf_gamma(5);}"
83
compile $ compileCmd bInfo buildInfo ++ ["-lgsl", "-lgslcblas"]
70
85
-- test for gsl >= 1.12
71
gsl112 bInfo buildInfo =
72
"echo \"#include <gsl/gsl_sf_exp.h>\nint main(){gsl_sf_exprel_n_CF_e(1,1,0);}\""
73
++" > " ++ (buildDir bInfo) ++ "/dummy.c; gcc "
74
++ (buildDir bInfo) ++ "/dummy.c "
75
++ (join $ ccOptions buildInfo) ++ " "
76
++ (join $ cppOptions buildInfo) ++ " "
77
++ (join $ map ("-I"++) $ includeDirs buildInfo)
78
++" -o " ++ (buildDir bInfo) ++ "/dummy "
79
++ (join $ map ("-L"++) $ extraLibDirs buildInfo) ++ " -lgsl -lgslcblas"
80
++ " > /dev/null 2> /dev/null"
86
gsl112 bInfo buildInfo = do
87
writeTestProg bInfo "#include <gsl/gsl_sf_exp.h>\nint main(){gsl_sf_exprel_n_CF_e(1,1,0);}"
88
compile $ compileCmd bInfo buildInfo ++ ["-lgsl", "-lgslcblas"]
83
gslodeiv2 bInfo buildInfo =
84
"echo \"#include <gsl/gsl_odeiv2.h>\nint main(){return 0;}\""
85
++" > " ++ (buildDir bInfo) ++ "/dummy.c; gcc "
86
++ (buildDir bInfo) ++ "/dummy.c "
87
++ (join $ ccOptions buildInfo) ++ " "
88
++ (join $ cppOptions buildInfo) ++ " "
89
++ (join $ map ("-I"++) $ includeDirs buildInfo)
90
++" -o " ++ (buildDir bInfo) ++ "/dummy "
91
++ (join $ map ("-L"++) $ extraLibDirs buildInfo) ++ " -lgsl -lgslcblas"
92
++ " > /dev/null 2> /dev/null"
95
checkCommand c = (ExitSuccess ==) `fmap` system c
91
gslodeiv2 bInfo buildInfo = do
92
writeTestProg bInfo "#include <gsl/gsl_odeiv2.h>\nint main(){return 0;}"
93
compile $ compileCmd bInfo buildInfo ++ ["-lgsl", "-lgslcblas"]
95
checkCommand c = (ExitSuccess ==) `fmap` c
97
97
-- test different configurations until the first one works
98
98
try _ _ _ _ [] = return Nothing