@@ -266,28 +266,30 @@ getGlobal :: Cabal -> Section
266266getGlobal (Cabal sects) =
267267 fromMaybe (error " no global section" ) $ listToMaybe [ s | s@ (Section " global" _ _) <- sects ]
268268
269- makeDataPrefix :: Env -> Section -> Section -> FilePath
270- makeDataPrefix env (Section _ _ glob) (Section _ name _) =
271- let vers = getVersion glob " version"
269+ makeDataPrefix :: Env -> Section -> FilePath
270+ makeDataPrefix env (Section _ _ glob) =
271+ let name = getFieldString glob " name"
272+ vers = getVersion glob " version"
272273 pkgVers = name ++ " -" ++ showVersion vers
273274 dataPrefix = cabalDir env </> compiler (backend env) </> " packages" </> pkgVers
274275 in dataPrefix
275276
276- createPathFile :: Env -> Section -> Section -> IO ()
277- createPathFile env gsect@ (Section _ _ glob) sect = do
277+ createPathFile :: Env -> Section -> IO ()
278+ createPathFile env gsect@ (Section _ _ glob) = do
278279 let vers = getVersion glob " version"
279280 name = getFieldString glob " name"
280281 mdlName = " Paths_" ++ map (\ c -> if c == ' -' then ' _' else c) name
281282 pathName = pathModuleDir env </> mdlName ++ " .hs"
282- dataPrefix = makeDataPrefix env gsect sect
283+ dataPrefix = makeDataPrefix env gsect
283284 dataDir = dataPrefix </> " data"
284285 message env 1 $ " Creating path module " ++ pathName
285286 mkdir env (pathModuleDir env)
286287 writeFile pathName $
287288 " module " ++ mdlName ++ " where\n " ++
288289 " import Data.Version\n " ++
289290 " version :: Version; version = makeVersion " ++ show (versionBranch vers) ++ " \n " ++
290- " getDataDir :: IO FilePath; getDataDir = return " ++ show dataDir ++ " \n "
291+ " getDataDir :: IO FilePath; getDataDir = return " ++ show dataDir ++ " \n " ++
292+ " getDataFileName :: FilePath -> IO FilePath; getDataFileName name = fmap (++ '/' : name) getDataDir\n "
291293
292294build :: Env -> IO ()
293295build env = do
@@ -319,7 +321,7 @@ isBuildable (Section _ _ flds) = getFieldBool True flds "buildable"
319321buildExe :: Env -> Section -> Section -> [Name ] -> IO FilePath
320322buildExe env glob@ (Section _ _ sglob) sect@ (Section _ name flds) localLibs = do
321323 message env 0 $ " Building executable " ++ name
322- createPathFile env glob sect
324+ createPathFile env glob
323325 let deps = getBuildDepends flds
324326 pkgs = [ p | (p, _, _) <- deps, p `notElem` localLibs ]
325327 vers = getVersion sglob " version"
@@ -345,7 +347,7 @@ hackLocalLibs env locals vers (Section stype sname flds) =
345347buildLib :: Env -> Section -> Section -> IO (Maybe Name )
346348buildLib env glob sect@ (Section _ name flds) = do
347349 message env 0 $ " Building library " ++ name
348- createPathFile env glob sect
350+ createPathFile env glob
349351 let pkgs = getBuildDependsPkg flds
350352 mapM_ (checkDep env) pkgs
351353 buildPkgLib (backend env) env glob sect
@@ -354,7 +356,7 @@ buildLib env glob sect@(Section _ name flds) = do
354356buildForeignLib :: Env -> Section -> Section -> IO (Maybe Name )
355357buildForeignLib env glob sect@ (Section _ name flds) = do
356358 message env 0 $ " Building foreign-library " ++ name
357- createPathFile env glob sect
359+ createPathFile env glob
358360 let pkgs = getBuildDependsPkg flds
359361 mapM_ (checkDep env) pkgs
360362 buildPkgForLib (backend env) env glob sect
@@ -409,62 +411,57 @@ install env = do
409411 sect _ = return ()
410412 message env 3 $ " Unnormalized Cabal file:\n " ++ show cbl
411413 message env 2 $ " Normalized Cabal file:\n " ++ show ncbl
414+ installDataFiles env glob
412415 mapM_ sect $ addMissing sects
413416
414417installExe :: Env -> Section -> Section -> IO ()
415418installExe env glob sect@ (Section _ name _) = do
416419 message env 0 $ " Installing executable " ++ name
417- installDataFiles env glob sect
418420 installIncludeFiles env glob sect
419421 installCFiles env glob sect
420422 installPkgExe (backend env) env glob sect
421423
422424installLib :: Env -> Section -> Section -> IO ()
423425installLib env glob sect@ (Section _ name _) = do
424426 message env 0 $ " Installing library " ++ name
425- installDataFiles env glob sect
426427 installIncludeFiles env glob sect
427428 installCFiles env glob sect
428429 installPkgLib (backend env) env glob sect
429430
430- installDataFiles :: Env -> Section -> Section -> IO ()
431- installDataFiles env glob@ (Section _ _ gflds) sect @ ( Section _ _ flds) = do
432- let gdatas = getFieldStrings gflds [] " data-files"
433- datas = getFieldStrings flds [] " data-files "
434- dataPrefix = makeDataPrefix env glob sect
435- dataDir = dataPrefix </> " data"
436- -- print ("installDataFiles", gdatas ++ datas, dataDir)
437- case gdatas ++ datas of
431+ installDataFiles :: Env -> Section -> IO ()
432+ installDataFiles env glob@ (Section _ _ flds) = do
433+ let datas = getFieldStrings flds [] " data-files"
434+ dataDir = fromMaybe " . " (getFieldStringM flds " data-dir " )
435+ installDataPrefix = makeDataPrefix env glob
436+ installDataDir = installDataPrefix </> " data"
437+ files <- matchFiles dataDir datas
438+ case files of
438439 [] -> return ()
439- pats -> do
440- files <- matchFiles " ." pats
440+ _ -> do
441441 message env 1 $ " Installing data files " ++ unwords files
442- mkdir env dataDir
443- copyFiles env " . " files dataDir
442+ mkdir env installDataDir
443+ copyFiles env dataDir files installDataDir
444444
445445installIncludeFiles :: Env -> Section -> Section -> IO ()
446- installIncludeFiles env glob@ (Section _ _ gflds) sect@ (Section _ _ flds) = do
447- let gincs = getFieldStrings gflds [] " install-includes"
448- incs = getFieldStrings flds [] " install-includes"
449- dataPrefix = makeDataPrefix env glob sect
446+ installIncludeFiles env glob (Section _ _ flds) = do
447+ let incs = getFieldStrings flds [] " install-includes"
448+ dataPrefix = makeDataPrefix env glob
450449 incDir = dataPrefix </> " include"
451- case gincs ++ incs of
450+ inc = head $ getFieldStrings flds [" ." ] " include-dirs" -- XXX search all dirs
451+ files <- matchFiles inc incs
452+ case files of
452453 [] -> return ()
453- pats -> do
454- let inc = head $ getFieldStrings flds [" ." ] " include-dirs"
455- files <- matchFiles inc pats
456- -- print (pats, files)
454+ _ -> do
457455 message env 1 $ " Installing include files " ++ unwords files
458456 mkdir env incDir
459457 copyFiles env inc files incDir
460458
461459installCFiles :: Env -> Section -> Section -> IO ()
462- installCFiles env glob@ (Section _ _ gflds) sect@ (Section _ _ flds) = do
463- let gcs = getFieldStrings gflds [] " c-sources"
464- cs = getFieldStrings flds [] " c-sources"
465- dataPrefix = makeDataPrefix env glob sect
460+ installCFiles env glob (Section _ _ flds) = do
461+ let cs = getFieldStrings flds [] " c-sources"
462+ dataPrefix = makeDataPrefix env glob
466463 cDir = dataPrefix </> " cbits"
467- case gcs ++ cs of
464+ case cs of
468465 [] -> return ()
469466 files -> do
470467 message env 1 $ " Installing C files " ++ unwords files
0 commit comments