From d16cbbf604171092cb4eb5549d275966196f0b8d Mon Sep 17 00:00:00 2001 From: Brad Richardson Date: Sat, 5 Dec 2020 00:08:12 -0600 Subject: fix(hfpm): dependence on library mod files --- bootstrap/src/Build.hs | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) (limited to 'bootstrap/src/Build.hs') diff --git a/bootstrap/src/Build.hs b/bootstrap/src/Build.hs index e4f9992..32d1979 100644 --- a/bootstrap/src/Build.hs +++ b/bootstrap/src/Build.hs @@ -7,7 +7,8 @@ module Build ) where -import BuildModel ( CompileTimeInfo(..) +import BuildModel ( AvailableModule(..) + , CompileTimeInfo(..) , RawSource(..) , Source(..) , constructCompileTimeInfo @@ -45,6 +46,7 @@ import Development.Shake.FilePath ( exe , (<.>) ) import System.Environment ( setEnv ) +import System.FilePath ( takeBaseName ) import System.Process ( system ) import System.Directory ( createDirectoryIfMissing , makeAbsolute @@ -70,6 +72,7 @@ buildProgram -> IO () buildProgram programDirectory' libraryDirectories sourceExtensions buildDirectory' (CompilerSettings { compilerSettingsCompiler = compiler, compilerSettingsFlags = flags, compilerSettingsModuleFlag = moduleFlag, compilerSettingsIncludeFlag = includeFlag }) programName programSource archives = do + libraryModules <- findAvailableModules libraryDirectories let programDirectory = foldl1 () (splitDirectories programDirectory') let buildDirectory = foldl1 () (splitDirectories buildDirectory') let includeFlags = map (includeFlag ++) libraryDirectories @@ -80,7 +83,7 @@ buildProgram programDirectory' libraryDirectories sourceExtensions buildDirector programSourceFileName p == programDirectory programSource isThisProgramOrNotProgram _ = True let sources = filter isThisProgramOrNotProgram sources' - let availableModules = getAvailableModules sources + let availableModules = (getAvailableModules sources buildDirectory) ++ libraryModules let compileTimeInfo = map (\s -> constructCompileTimeInfo s availableModules buildDirectory) sources @@ -126,11 +129,12 @@ buildLibrary -> IO (FilePath) buildLibrary libraryDirectory sourceExtensions buildDirectory (CompilerSettings { compilerSettingsCompiler = compiler, compilerSettingsFlags = flags, compilerSettingsModuleFlag = moduleFlag, compilerSettingsIncludeFlag = includeFlag }) libraryName otherLibraryDirectories = do + otherModules <- findAvailableModules otherLibraryDirectories let includeFlags = map (includeFlag ++) otherLibraryDirectories sourceFiles <- getDirectoriesFiles [libraryDirectory] sourceExtensions rawSources <- mapM sourceFileToRawSource sourceFiles let sources = map processRawSource rawSources - let availableModules = getAvailableModules sources + let availableModules = (getAvailableModules sources buildDirectory) ++ otherModules let compileTimeInfo = map (\s -> constructCompileTimeInfo s availableModules buildDirectory) sources @@ -227,3 +231,9 @@ removeDriveLetter path | ':' `elem` path = (tail . dropWhile (/= ':')) path changeSeparators :: String -> String changeSeparators = replace "\\" "/" + +findAvailableModules :: [FilePath] -> IO [AvailableModule] +findAvailableModules directories = do + moduleFiles <- getDirectoriesFiles directories ["*.mod"] + let availableModules = map (\mf -> AvailableModule { availableModuleName = takeBaseName mf, availableModuleFile = mf }) moduleFiles + return availableModules -- cgit v1.2.3