1
1
{-# LANGUAGE MultiWayIf #-}
2
2
module Build
3
- ( buildLibrary
3
+ ( CompilerSettings (.. )
4
+ , buildLibrary
4
5
, buildProgram
5
6
, buildWithScript
6
7
)
@@ -50,22 +51,28 @@ import System.Directory ( createDirectoryIfMissing
50
51
, withCurrentDirectory
51
52
)
52
53
54
+ data CompilerSettings = CompilerSettings {
55
+ compilerSettingsCompiler :: FilePath
56
+ , compilerSettingsFlags :: [String ]
57
+ , compilerSettingsModuleFlag :: String
58
+ , compilerSettingsIncludeFlag :: String
59
+ }
60
+
53
61
buildProgram
54
62
:: FilePath
55
63
-> [FilePath ]
56
64
-> [FilePattern ]
57
65
-> FilePath
58
- -> FilePath
59
- -> [String ]
66
+ -> CompilerSettings
60
67
-> String
61
68
-> FilePath
62
69
-> [FilePath ]
63
70
-> IO ()
64
- buildProgram programDirectory' libraryDirectories sourceExtensions buildDirectory' compiler flags programName programSource archives
71
+ buildProgram programDirectory' libraryDirectories sourceExtensions buildDirectory' ( CompilerSettings { compilerSettingsCompiler = compiler, compilerSettingsFlags = flags, compilerSettingsModuleFlag = moduleFlag, compilerSettingsIncludeFlag = includeFlag }) programName programSource archives
65
72
= do
66
73
let programDirectory = foldl1 (</>) (splitDirectories programDirectory')
67
- let buildDirectory = foldl1 (</>) (splitDirectories buildDirectory')
68
- let includeFlags = map (" -I " ++ ) libraryDirectories
74
+ let buildDirectory = foldl1 (</>) (splitDirectories buildDirectory')
75
+ let includeFlags = map (includeFlag ++ ) libraryDirectories
69
76
sourceFiles <- getDirectoriesFiles [programDirectory] sourceExtensions
70
77
rawSources <- mapM sourceFileToRawSource sourceFiles
71
78
let sources' = map processRawSource rawSources
@@ -98,7 +105,7 @@ buildProgram programDirectory' libraryDirectories sourceExtensions buildDirector
98
105
in fileMatcher &?> \ (objectFile : _) -> do
99
106
need (sourceFile : directDependencies)
100
107
cmd compiler
101
- [" -c" , " -J " ++ buildDirectory]
108
+ [" -c" , moduleFlag ++ buildDirectory]
102
109
includeFlags
103
110
flags
104
111
[" -o" , objectFile, sourceFile]
@@ -113,14 +120,13 @@ buildLibrary
113
120
:: FilePath
114
121
-> [FilePattern ]
115
122
-> FilePath
116
- -> FilePath
117
- -> [String ]
123
+ -> CompilerSettings
118
124
-> String
119
125
-> [FilePath ]
120
126
-> IO (FilePath )
121
- buildLibrary libraryDirectory sourceExtensions buildDirectory compiler flags libraryName otherLibraryDirectories
127
+ buildLibrary libraryDirectory sourceExtensions buildDirectory ( CompilerSettings { compilerSettingsCompiler = compiler, compilerSettingsFlags = flags, compilerSettingsModuleFlag = moduleFlag, compilerSettingsIncludeFlag = includeFlag }) libraryName otherLibraryDirectories
122
128
= do
123
- let includeFlags = map (" -I " ++ ) otherLibraryDirectories
129
+ let includeFlags = map (includeFlag ++ ) otherLibraryDirectories
124
130
sourceFiles <- getDirectoriesFiles [libraryDirectory] sourceExtensions
125
131
rawSources <- mapM sourceFileToRawSource sourceFiles
126
132
let sources = map processRawSource rawSources
@@ -150,7 +156,7 @@ buildLibrary libraryDirectory sourceExtensions buildDirectory compiler flags lib
150
156
in fileMatcher &?> \ (objectFile : _) -> do
151
157
need (sourceFile : directDependencies)
152
158
cmd compiler
153
- [" -c" , " -J " ++ buildDirectory]
159
+ [" -c" , moduleFlag ++ buildDirectory]
154
160
includeFlags
155
161
flags
156
162
[" -o" , objectFile, sourceFile]
@@ -165,18 +171,19 @@ buildWithScript
165
171
:: String
166
172
-> FilePath
167
173
-> FilePath
168
- -> FilePath
169
- -> [String ]
174
+ -> CompilerSettings
170
175
-> String
171
176
-> [FilePath ]
172
177
-> IO (FilePath )
173
- buildWithScript script projectDirectory buildDirectory compiler flags libraryName otherLibraryDirectories
178
+ buildWithScript script projectDirectory buildDirectory ( CompilerSettings { compilerSettingsCompiler = compiler, compilerSettingsFlags = flags, compilerSettingsModuleFlag = moduleFlag, compilerSettingsIncludeFlag = includeFlag }) libraryName otherLibraryDirectories
174
179
= do
175
180
absoluteBuildDirectory <- makeAbsolute buildDirectory
176
181
createDirectoryIfMissing True absoluteBuildDirectory
177
182
absoluteLibraryDirectories <- mapM makeAbsolute otherLibraryDirectories
178
- setEnv " FC" compiler
179
- setEnv " FFLAGS" (intercalate " " flags)
183
+ setEnv " FC" compiler
184
+ setEnv " FFLAGS" (intercalate " " flags)
185
+ setEnv " FINCLUDEFLAG" includeFlag
186
+ setEnv " FMODUELFLAG" moduleFlag
180
187
setEnv " BUILD_DIR" $ unWindowsPath absoluteBuildDirectory
181
188
setEnv " INCLUDE_DIRS"
182
189
(intercalate " " (map unWindowsPath absoluteLibraryDirectories))
0 commit comments