shake-0.12: Build system library, like Make, but more accurate dependencies.

Safe HaskellNone



A module for parsing and using config files in a Shake build system. Config files consist of variable bindings, for example:

 # This is my Config file
 HEADERS_DIR = /path/to/dir
 include extra/file.cfg

This defines the variable HEADERS_DIR (equal to /path/to/dir), and CFLAGS (equal to -g -I/path/to/dir -O2), and also includes the configuration statements in the file extra/file.cfg. The full lexical syntax for configuration files is defined here:

To use the configuration file either use readConfigFile to parse the configuration file and use the values directly, or usingConfigFile and getConfig to track the configuration values, so they become build dependencies.



readConfigFile :: FilePath -> IO (HashMap String String)Source

Read a config file, returning a list of the variables and their bindings. Config files use the Ninja lexical syntax:

usingConfigFile :: FilePath -> Rules ()Source

Specify the file to use with getConfig.

usingConfig :: HashMap String String -> Rules ()Source

Specify the values to use with getConfig, generally prefer usingConfigFile unless you also need access to the values of variables outside Action.

getConfig :: String -> Action (Maybe String)Source

Obtain the value of a configuration variable, returns Nothing to indicate the variable has no binding. Any build system using getConfig must call either usingConfigFile or usingConfig. The getConfig function will introduce a dependency on the configuration variable (but not the whole configuration file), and if the configuration variable changes, the rule will be rerun. As an example:

 usingConfigFile "myconfiguration.cfg"
 "*.o" *> \out -> do
     cflags <- getConfig "CFLAGS"
     cmd "gcc" [out -<.> "c"] (fromMaybe "" cflags)