diff options
-rw-r--r-- | bootstrap/src/BuildModel.hs | 27 | ||||
-rw-r--r-- | bootstrap/unit_test/SourceConstructionTest.hs | 14 |
2 files changed, 37 insertions, 4 deletions
diff --git a/bootstrap/src/BuildModel.hs b/bootstrap/src/BuildModel.hs index 711f977..b8bc122 100644 --- a/bootstrap/src/BuildModel.hs +++ b/bootstrap/src/BuildModel.hs @@ -1,11 +1,34 @@ module BuildModel where +import Data.List ( intercalate ) +import System.FilePath ( (</>) + , (<.>) + , splitDirectories + ) + data RawSource = RawSource { rawSourceFilename :: FilePath , rawSourceContents :: String } -data Source = Program { programSourceFileName :: String} +data Source = Program { + programSourceFileName :: FilePath + , programObjectFileName :: FilePath -> FilePath +} processRawSource :: RawSource -> Source -processRawSource rawSource = Program $ rawSourceFilename rawSource +processRawSource rawSource = + let sourceFileName = rawSourceFilename rawSource + in Program + { programSourceFileName = sourceFileName + , programObjectFileName = \buildDirectory -> + buildDirectory + </> (pathSeparatorsToUnderscores + sourceFileName + ) + <.> "o" + } + +pathSeparatorsToUnderscores :: FilePath -> FilePath +pathSeparatorsToUnderscores fileName = + intercalate "_" (splitDirectories fileName) diff --git a/bootstrap/unit_test/SourceConstructionTest.hs b/bootstrap/unit_test/SourceConstructionTest.hs index 18a66de..2cee008 100644 --- a/bootstrap/unit_test/SourceConstructionTest.hs +++ b/bootstrap/unit_test/SourceConstructionTest.hs @@ -7,6 +7,7 @@ import BuildModel ( RawSource(..) , Source(..) , processRawSource ) +import System.FilePath ( (</>) ) import Hedge ( Result , Test , assertEquals @@ -27,6 +28,9 @@ test = return $ givenInput [ then' "it is a Program" checkIsProgram , then' "its source file name is the same as the original" checkProgramSourceFileName + , then' + "its object file name is the 'flattened' path of the source file with '.o' appended" + checkProgramObjectFileName ] ] @@ -39,15 +43,21 @@ exampleProgram = RawSource programSourceFileName' $ unlines ] programSourceFileName' :: String -programSourceFileName' = "some/file/somewhere.f90" +programSourceFileName' = "some" </> "file" </> "somewhere.f90" checkIsProgram :: Source -> Result checkIsProgram s = assertThat $ case s of Program{} -> True - _ -> False + _ -> False checkProgramSourceFileName :: Source -> Result checkProgramSourceFileName s = case s of p@(Program{}) -> assertEquals programSourceFileName' $ programSourceFileName p _ -> fail' "wasn't a Program" + +checkProgramObjectFileName :: Source -> Result +checkProgramObjectFileName s = case s of + p@(Program{}) -> assertEquals ("." </> "some_file_somewhere.f90.o") + $ (programObjectFileName p) "." + _ -> fail' "wasn't a Program" |