-- C -> Haskell Compiler: management of switches -- -- Author : Manuel M T Chakravarty -- Created: 6 March 99 -- -- Version $Revision: 1.3 $ from $Date: 2005/06/22 16:01:21 $ -- -- Copyright (c) [1999..2004] Manuel M T Chakravarty -- -- This file is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by -- the Free Software Foundation; either version 2 of the License, or -- (at your option) any later version. -- -- This file is distributed in the hope that it will be useful, -- but WITHOUT ANY WARRANTY; without even the implied warranty of -- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- GNU General Public License for more details. -- --- DESCRIPTION --------------------------------------------------------------- -- -- This module manages C2HS's compiler switches. It exports the data types -- used to store the switches and operations on them. -- --- DOCU ---------------------------------------------------------------------- -- -- language: Haskell 98 -- -- Overview over the switches: -- -- * The cpp options specify the options passed to the C preprocessor. -- -- * The cpp filename gives the name of the executable of the C preprocessor. -- -- * The `hpaths' switch lists all directories that should be considered when -- searching for a header file. -- -- * The `keep' flag says whether the intermediate file produced by the C -- pre-processor should be retained or not. -- -- * Traces specify which trace information should be output by the compiler. -- Currently the following trace information is supported: -- -- - information about phase activation and phase completion -- -- * After processing the compiler options, `outputSB' contains the base name -- for the generated Haskell, C header, and .chi files. However, during -- processing compiler options, `outputSB' contains arguments to the -- `--output' option and `outDirSB' contains arguments to the -- `--output-dir' option. -- -- * The pre-compiled header switch is unset if no pre-compiled header should -- be read or generated. If the option is set and a header file is given -- a concise version of the header will be written to the FilePath. If -- a binding file is given, the pre-compiled header is used to expand the -- module unless the binding file contains itself C declarations. -- --- TODO ---------------------------------------------------------------------- -- module Switches ( SwitchBoard(..), Traces(..), initialSwitchBoard ) where -- the switch board contains all toolkit switches -- ---------------------------------------------- -- all switches of the toolkit (EXPORTED) -- data SwitchBoard = SwitchBoard { SwitchBoard -> [String] cppOptsSB :: [String], -- cpp options SwitchBoard -> String cppSB :: FilePath, -- cpp executable SwitchBoard -> [String] hpathsSB :: [FilePath], -- header file directories -- since 0.11.1 `hpathsSB' isn't really needed anymore.. -- ..remove from 0.12 series SwitchBoard -> Bool keepSB :: Bool, -- keep intermediate file SwitchBoard -> Traces tracesSB :: Traces, -- trace flags SwitchBoard -> String outputSB :: FilePath, -- basename of generated files SwitchBoard -> String outDirSB :: FilePath, -- dir where generated files go SwitchBoard -> String headerSB :: FilePath, -- generated header file SwitchBoard -> Maybe String preCompSB :: Maybe FilePath,-- optional binary header r/w SwitchBoard -> Bool oldFFI :: Bool, -- GHC 4.XX compatible code SwitchBoard -> [String] chiPathSB :: [FilePath], -- .chi file directories SwitchBoard -> Maybe String lockFunSB :: Maybe String -- a function to wrap each call } -- switch states on startup (EXPORTED) -- initialSwitchBoard :: SwitchBoard initialSwitchBoard :: SwitchBoard initialSwitchBoard = SwitchBoard { cppOptsSB :: [String] cppOptsSB = [], cppSB :: String cppSB = String "cpp", hpathsSB :: [String] hpathsSB = [], keepSB :: Bool keepSB = Bool False, tracesSB :: Traces tracesSB = Traces initialTraces, outputSB :: String outputSB = String "", outDirSB :: String outDirSB = String "", headerSB :: String headerSB = String "", preCompSB :: Maybe String preCompSB = forall a. Maybe a Nothing, oldFFI :: Bool oldFFI = Bool False, chiPathSB :: [String] chiPathSB = [String "."], lockFunSB :: Maybe String lockFunSB = forall a. Maybe a Nothing } -- traces -- ------ -- different kinds of traces possible (EXPORTED) -- data Traces = Traces { Traces -> Bool tracePhasesSW :: Bool, Traces -> Bool traceGenBindSW :: Bool, Traces -> Bool traceCTravSW :: Bool, Traces -> Bool dumpCHSSW :: Bool } -- trace setting on startup -- -- * all traces are initially off -- initialTraces :: Traces initialTraces :: Traces initialTraces = Traces { tracePhasesSW :: Bool tracePhasesSW = Bool False, traceGenBindSW :: Bool traceGenBindSW = Bool False, traceCTravSW :: Bool traceCTravSW = Bool False, dumpCHSSW :: Bool dumpCHSSW = Bool False }