-- 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 {
cppOptsSB :: String, -- cpp options
cppSB :: FilePath, -- cpp executable
hpathsSB :: [FilePath], -- header file directories
-- since 0.11.1 `hpathsSB' isn't really needed anymore..
-- ..remove from 0.12 series
keepSB :: Bool, -- keep intermediate file
tracesSB :: Traces, -- trace flags
outputSB :: FilePath, -- basename of generated files
outDirSB :: FilePath, -- dir where generated files go
headerSB :: FilePath, -- generated header file
preCompSB :: Maybe FilePath,-- optional binary header r/w
oldFFI :: Bool, -- GHC 4.XX compatible code
chiPathSB :: [FilePath], -- .chi file directories
lockFunSB :: Maybe String -- a function to wrap each call
}
-- switch states on startup (EXPORTED)
--
initialSwitchBoard :: SwitchBoard
initialSwitchBoard = SwitchBoard {
cppOptsSB = "",
cppSB = "cpp",
hpathsSB = [],
keepSB = False,
tracesSB = initialTraces,
outputSB = "",
outDirSB = "",
headerSB = "",
preCompSB = Nothing,
oldFFI = False,
chiPathSB = ["."],
lockFunSB = Nothing
}
-- traces
-- ------
-- different kinds of traces possible (EXPORTED)
--
data Traces = Traces {
tracePhasesSW :: Bool,
traceGenBindSW :: Bool,
traceCTravSW :: Bool,
dumpCHSSW :: Bool
}
-- trace setting on startup
--
-- * all traces are initially off
--
initialTraces :: Traces
initialTraces = Traces {
tracePhasesSW = False,
traceGenBindSW = False,
traceCTravSW = False,
dumpCHSSW = False
}