3 | import public Core.Options.Log
6 | import Libraries.Utils.Path
7 | import Idris.Syntax.Pragmas
18 | working_dir : String
19 | source_dir : Maybe String
21 | depends_dir : String
22 | output_dir : Maybe String
24 | extra_dirs : List String
25 | package_search_paths : List Path
26 | package_dirs : List String
27 | lib_dirs : List String
28 | data_dirs : List String
31 | execBuildDir : Dirs -> String
32 | execBuildDir d = build_dir d </> "exec"
35 | outputDirWithDefault : Dirs -> String
36 | outputDirWithDefault d = fromMaybe (build_dir d </> "exec") (output_dir d)
39 | toString : Dirs -> String
40 | toString d@(MkDirs wdir sdir bdir ldir odir dfix edirs ppaths pdirs ldirs ddirs) = """
41 | + Working Directory :: \{ show wdir }
42 | + Source Directory :: \{ show sdir }
43 | + Build Directory :: \{ show bdir }
44 | + Local Depend Directory :: \{ show ldir }
45 | + Output Directory :: \{ show $ outputDirWithDefault d }
46 | + Installation Prefix :: \{ show dfix }
47 | + Extra Directories :: \{ show edirs }
48 | + Package Search Paths :: \{ show ppaths }
49 | + Package Directories :: \{ show pdirs }
50 | + CG Library Directories :: \{ show ldirs }
51 | + Data Directories :: \{ show ddirs }
68 | ChezSep == ChezSep = True
69 | Racket == Racket = True
70 | Gambit == Gambit = True
72 | Javascript == Javascript = True
74 | VMCodeInterp == VMCodeInterp = True
75 | Other s == Other t = s == t
81 | show ChezSep = "chez-sep"
82 | show Racket = "racket"
83 | show Gambit = "gambit"
85 | show Javascript = "javascript"
87 | show VMCodeInterp = "vmcode-interp"
91 | record PairNames where
92 | constructor MkPairNs
98 | record RewriteNames where
99 | constructor MkRewriteNs
104 | record PrimNames where
105 | constructor MkPrimNs
106 | fromIntegerName : Maybe Name
107 | fromStringName : Maybe Name
108 | fromCharName : Maybe Name
109 | fromDoubleName : Maybe Name
110 | fromTTImpName : Maybe Name
111 | fromNameName : Maybe Name
112 | fromDeclsName : Maybe Name
115 | primNamesToList : PrimNames -> List Name
116 | primNamesToList (MkPrimNs i s c d t n dl) = catMaybes [i,s,c,d,t,n,dl]
120 | record ElabDirectives where
121 | constructor MkElabDirectives
123 | unboundImplicits : Bool
124 | totality : TotalReq
126 | autoImplicitLimit : Nat
133 | prefixRecordProjections : Bool
136 | record Session where
137 | constructor MkSessionOpts
139 | totalReq : TotalReq
143 | directives : List String
144 | searchTimeout : Integer
146 | ignoreMissingPkg : Bool
153 | logLevel : LogLevels
154 | logTimings : Maybe Nat
155 | debugElabCheck : Bool
156 | dumpcases : Maybe String
157 | dumplifted : Maybe String
158 | dumpanf : Maybe String
159 | dumpvmcode : Maybe String
161 | logErrorCount : Nat
166 | warningsAsErrors : Bool
167 | showShadowingWarning : Bool
170 | checkHashesInsteadOfModTime : Bool
171 | incrementalCGs : List CG
172 | wholeProgram : Bool
176 | caseTreeHeuristics : Bool
179 | record PPrinter where
180 | constructor MkPPOpts
181 | showImplicits : Bool
182 | showMachineNames : Bool
184 | fullNamespace : Bool
187 | record Options where
188 | constructor MkOptions
190 | printing : PPrinter
192 | elabDirectives : ElabDirectives
193 | pairnames : Maybe PairNames
194 | rewritenames : Maybe RewriteNames
195 | primnames : PrimNames
196 | extensions : List LangExt
197 | additionalCGs : List (String, CG)
198 | hashFn : Maybe String
200 | foreignImpl : List (Name, String)
203 | availableCGs : Options -> List (String, CG)
206 | ("chez-sep", ChezSep),
207 | ("racket", Racket),
209 | ("javascript", Javascript),
211 | ("gambit", Gambit),
212 | ("vmcode-interp", VMCodeInterp)] ++ additionalCGs o
215 | getCG : Options -> String -> Maybe CG
216 | getCG o cg = lookup (toLower cg) (availableCGs o)
219 | defaultDirs = MkDirs "." Nothing "build" "depends" Nothing
220 | "/usr/local" ["."] [] [] [] []
222 | defaultPPrint : PPrinter
223 | defaultPPrint = MkPPOpts
224 | { showImplicits = False
225 | , showMachineNames = False
226 | , showFullEnv = True
227 | , fullNamespace = False
231 | docsPPrint : PPrinter
232 | docsPPrint = MkPPOpts
233 | { showImplicits = False
234 | , showMachineNames = True
235 | , showFullEnv = False
236 | , fullNamespace = False
240 | defaultSession : Session
241 | defaultSession = MkSessionOpts False CoveringOnly False False Chez [] 1000 False False
242 | defaultLogLevel Nothing False Nothing Nothing
243 | Nothing Nothing False 1 False False True
244 | False [] False False
247 | defaultElab : ElabDirectives
248 | defaultElab = MkElabDirectives True True CoveringOnly 3 50 25 5 True
255 | defaultHashFn : Core (Maybe String)
257 | = do Nothing <- coreLift $
pathLookup ["sha256sum", "gsha256sum"]
258 | | Just p => pure $
Just $
p ++ " --tag"
259 | Nothing <- coreLift $
pathLookup ["sha256"]
260 | | Just p => pure $
Just p
261 | Nothing <- coreLift $
pathLookup ["openssl"]
262 | | Just p => pure $
Just $
p ++ " sha256"
266 | defaults : Core Options
273 | defaultDirs defaultPPrint defaultSession defaultElab Nothing Nothing
274 | (MkPrimNs Nothing Nothing Nothing Nothing Nothing Nothing Nothing) [] [] Nothing []
278 | clearNames : Options -> Options
279 | clearNames = { pairnames := Nothing,
280 | rewritenames := Nothing,
281 | primnames := MkPrimNs Nothing Nothing Nothing Nothing Nothing Nothing Nothing,
287 | addForeignImpl : (fullName : Name) -> (def : String) -> Options -> Options
288 | addForeignImpl fullName def = { foreignImpl $= ((fullName, def) ::) }
291 | setPair : (pairType : Name) -> (fstn : Name) -> (sndn : Name) ->
293 | setPair ty f s = { pairnames := Just (MkPairNs ty f s) }
296 | setRewrite : (eq : Name) -> (rwlemma : Name) -> Options -> Options
297 | setRewrite eq rw = { rewritenames := Just (MkRewriteNs eq rw) }
300 | setFromInteger : Name -> Options -> Options
301 | setFromInteger n = { primnames->fromIntegerName := Just n }
304 | setFromString : Name -> Options -> Options
305 | setFromString n = { primnames->fromStringName := Just n }
308 | setFromChar : Name -> Options -> Options
309 | setFromChar n = { primnames->fromCharName := Just n }
312 | setFromDouble : Name -> Options -> Options
313 | setFromDouble n = { primnames->fromDoubleName := Just n }
316 | setFromTTImp : Name -> Options -> Options
317 | setFromTTImp n = { primnames->fromTTImpName := Just n }
320 | setFromName : Name -> Options -> Options
321 | setFromName n = { primnames->fromNameName := Just n }
324 | setFromDecls : Name -> Options -> Options
325 | setFromDecls n = { primnames->fromDeclsName := Just n }
328 | setExtension : LangExt -> Options -> Options
329 | setExtension e = { extensions $= (e ::) }
332 | isExtension : LangExt -> Options -> Bool
333 | isExtension e opts = e `elem` extensions opts
336 | addCG : (String, CG) -> Options -> Options
337 | addCG cg = { additionalCGs $= (cg::) }