aboutsummaryrefslogtreecommitdiff
path: root/app/Main.hs
diff options
context:
space:
mode:
Diffstat (limited to 'app/Main.hs')
-rw-r--r--app/Main.hs89
1 files changed, 54 insertions, 35 deletions
diff --git a/app/Main.hs b/app/Main.hs
index 88bb302..eceb260 100644
--- a/app/Main.hs
+++ b/app/Main.hs
@@ -1,8 +1,14 @@
+{-# LANGUAGE OverloadedStrings #-}
+
module Main where
import Build ( buildLibrary
, buildPrograms
)
+import Data.Text ( Text
+ , unpack
+ )
+import qualified Data.Text.IO as TIO
import Development.Shake ( FilePattern
, (<//>)
, getDirectoryFilesIO
@@ -19,54 +25,64 @@ import Options.Applicative ( Parser
, progDesc
, subparser
)
+import Toml ( TomlCodec
+ , (.=)
+ )
+import qualified Toml
newtype Arguments = Arguments { command' :: Command }
+data Settings = Settings { compiler :: !Text }
+
data Command = Run | Test | Build
main :: IO ()
main = do
- args <- getArguments
- app args
+ args <- getArguments
+ fpmContents <- TIO.readFile "fpm.toml"
+ let settings = Toml.decode settingsCodec fpmContents
+ case settings of
+ Left err -> print err
+ Right settings -> app args settings
-app :: Arguments -> IO ()
-app args = case command' args of
- Run -> putStrLn "Run"
- Test -> putStrLn "Test"
- Build -> build
+app :: Arguments -> Settings -> IO ()
+app args settings = case command' args of
+ Run -> putStrLn "Run"
+ Test -> putStrLn "Test"
+ Build -> build settings
-build :: IO ()
-build = do
- putStrLn "Building"
- buildLibrary "src"
- [".f90", ".f", ".F", ".F90", ".f95", ".f03"]
- ("build" </> "library")
- "gfortran"
- ["-g", "-Wall", "-Wextra", "-Werror", "-pedantic"]
- "library"
- []
- buildPrograms "app"
- ["build" </> "library"]
- [".f90", ".f", ".F", ".F90", ".f95", ".f03"]
- ("build" </> "app")
- "gfortran"
- ["-g", "-Wall", "-Wextra", "-Werror", "-pedantic"]
+build :: Settings -> IO ()
+build settings = do
+ putStrLn "Building"
+ buildLibrary "src"
+ [".f90", ".f", ".F", ".F90", ".f95", ".f03"]
+ ("build" </> "library")
+ (unpack $ compiler settings)
+ ["-g", "-Wall", "-Wextra", "-Werror", "-pedantic"]
+ "library"
+ []
+ buildPrograms "app"
+ ["build" </> "library"]
+ [".f90", ".f", ".F", ".F90", ".f95", ".f03"]
+ ("build" </> "app")
+ (unpack $ compiler settings)
+ ["-g", "-Wall", "-Wextra", "-Werror", "-pedantic"]
getArguments :: IO Arguments
getArguments = execParser
- (info
- (arguments <**> helper)
- (fullDesc <> progDesc "Work with Fortran projects" <> header
- "fpm - A Fortran package manager and build system"
- )
+ (info
+ (arguments <**> helper)
+ (fullDesc <> progDesc "Work with Fortran projects" <> header
+ "fpm - A Fortran package manager and build system"
)
+ )
arguments :: Parser Arguments
arguments = subparser
- ( command "run" (info runArguments (progDesc "Run the executable"))
- <> command "test" (info testArguments (progDesc "Run the tests"))
- <> command "build" (info buildArguments (progDesc "Build the executable"))
- )
+ ( command "run" (info runArguments (progDesc "Run the executable"))
+ <> command "test" (info testArguments (progDesc "Run the tests"))
+ <> command "build" (info buildArguments (progDesc "Build the executable"))
+ )
runArguments :: Parser Arguments
runArguments = pure $ Arguments Run
@@ -79,6 +95,9 @@ buildArguments = pure $ Arguments Build
getDirectoriesFiles :: [FilePath] -> [FilePattern] -> IO [FilePath]
getDirectoriesFiles dirs exts = getDirectoryFilesIO "" newPatterns
- where
- newPatterns = concatMap appendExts dirs
- appendExts dir = map ((dir <//> "*") ++) exts
+ where
+ newPatterns = concatMap appendExts dirs
+ appendExts dir = map ((dir <//> "*") ++) exts
+
+settingsCodec :: TomlCodec Settings
+settingsCodec = Settings <$> Toml.text "compiler" .= compiler