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
137 | record PostSession where
138 | constructor MkPostSession
140 | outputFile : Maybe String
141 | execExpr : List String
142 | runRepl : Maybe String
145 | defaultPost : PostSession
146 | defaultPost = MkPostSession
147 | { checkOnly = False
148 | , outputFile = Nothing
150 | , runRepl = Nothing
155 | data PostS : Type where
158 | record Session where
159 | constructor MkSessionOpts
161 | totalReq : TotalReq
165 | directives : List String
166 | searchTimeout : Integer
168 | ignoreMissingPkg : Bool
175 | logLevel : LogLevels
176 | logTimings : Maybe Nat
177 | debugElabCheck : Bool
178 | dumpcases : Maybe String
179 | dumplifted : Maybe String
180 | dumpanf : Maybe String
181 | dumpvmcode : Maybe String
183 | logErrorCount : Nat
188 | warningsAsErrors : Bool
189 | showShadowingWarning : Bool
192 | checkHashesInsteadOfModTime : Bool
193 | incrementalCGs : List CG
194 | wholeProgram : Bool
198 | caseTreeHeuristics : Bool
201 | record PPrinter where
202 | constructor MkPPOpts
203 | showImplicits : Bool
204 | showMachineNames : Bool
206 | fullNamespace : Bool
209 | record Options where
210 | constructor MkOptions
212 | printing : PPrinter
214 | elabDirectives : ElabDirectives
215 | pairnames : Maybe PairNames
216 | rewritenames : Maybe RewriteNames
217 | primnames : PrimNames
218 | extensions : List LangExt
219 | additionalCGs : List (String, CG)
220 | hashFn : Maybe String
222 | foreignImpl : List (Name, String)
225 | availableCGs : Options -> List (String, CG)
228 | ("chez-sep", ChezSep),
229 | ("racket", Racket),
231 | ("javascript", Javascript),
233 | ("gambit", Gambit),
234 | ("vmcode-interp", VMCodeInterp)] ++ additionalCGs o
237 | getCG : Options -> String -> Maybe CG
238 | getCG o cg = lookup (toLower cg) (availableCGs o)
241 | defaultDirs = MkDirs "." Nothing "build" "depends" Nothing
242 | "/usr/local" ["."] [] [] [] []
244 | defaultPPrint : PPrinter
245 | defaultPPrint = MkPPOpts
246 | { showImplicits = False
247 | , showMachineNames = False
248 | , showFullEnv = True
249 | , fullNamespace = False
253 | docsPPrint : PPrinter
254 | docsPPrint = MkPPOpts
255 | { showImplicits = False
256 | , showMachineNames = True
257 | , showFullEnv = False
258 | , fullNamespace = False
262 | defaultSession : Session
263 | defaultSession = MkSessionOpts False CoveringOnly False False Chez [] 1000 False False
264 | defaultLogLevel Nothing False Nothing Nothing
265 | Nothing Nothing False 1 False False True
266 | False [] False False
269 | defaultElab : ElabDirectives
270 | defaultElab = MkElabDirectives True True CoveringOnly 3 50 25 5 True
277 | defaultHashFn : Core (Maybe String)
279 | = do Nothing <- coreLift $
pathLookup ["sha256sum", "gsha256sum"]
280 | | Just p => pure $
Just $
p ++ " --tag"
281 | Nothing <- coreLift $
pathLookup ["sha256"]
282 | | Just p => pure $
Just p
283 | Nothing <- coreLift $
pathLookup ["openssl"]
284 | | Just p => pure $
Just $
p ++ " sha256"
288 | defaults : Core Options
295 | defaultDirs defaultPPrint defaultSession defaultElab Nothing Nothing
296 | (MkPrimNs Nothing Nothing Nothing Nothing Nothing Nothing Nothing) [] [] Nothing []
300 | clearNames : Options -> Options
301 | clearNames = { pairnames := Nothing,
302 | rewritenames := Nothing,
303 | primnames := MkPrimNs Nothing Nothing Nothing Nothing Nothing Nothing Nothing,
309 | addForeignImpl : (fullName : Name) -> (def : String) -> Options -> Options
310 | addForeignImpl fullName def = { foreignImpl $= ((fullName, def) ::) }
313 | setPair : (pairType : Name) -> (fstn : Name) -> (sndn : Name) ->
315 | setPair ty f s = { pairnames := Just (MkPairNs ty f s) }
318 | setRewrite : (eq : Name) -> (rwlemma : Name) -> Options -> Options
319 | setRewrite eq rw = { rewritenames := Just (MkRewriteNs eq rw) }
322 | setFromInteger : Name -> Options -> Options
323 | setFromInteger n = { primnames->fromIntegerName := Just n }
326 | setFromString : Name -> Options -> Options
327 | setFromString n = { primnames->fromStringName := Just n }
330 | setFromChar : Name -> Options -> Options
331 | setFromChar n = { primnames->fromCharName := Just n }
334 | setFromDouble : Name -> Options -> Options
335 | setFromDouble n = { primnames->fromDoubleName := Just n }
338 | setFromTTImp : Name -> Options -> Options
339 | setFromTTImp n = { primnames->fromTTImpName := Just n }
342 | setFromName : Name -> Options -> Options
343 | setFromName n = { primnames->fromNameName := Just n }
346 | setFromDecls : Name -> Options -> Options
347 | setFromDecls n = { primnames->fromDeclsName := Just n }
350 | setExtension : LangExt -> Options -> Options
351 | setExtension e = { extensions $= (e ::) }
354 | isExtension : LangExt -> Options -> Bool
355 | isExtension e opts = e `elem` extensions opts
358 | addCG : (String, CG) -> Options -> Options
359 | addCG cg = { additionalCGs $= (cg::) }