Skip to content

Commit ee857e1

Browse files
authored
Merge pull request #30 from konsumlamm/paths
Fix installing `data-files`
2 parents 075bc88 + fa69223 commit ee857e1

File tree

2 files changed

+43
-46
lines changed

2 files changed

+43
-46
lines changed

src/MicroCabal/Main.hs

Lines changed: 35 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -266,28 +266,30 @@ getGlobal :: Cabal -> Section
266266
getGlobal (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

292294
build :: Env -> IO ()
293295
build env = do
@@ -319,7 +321,7 @@ isBuildable (Section _ _ flds) = getFieldBool True flds "buildable"
319321
buildExe :: Env -> Section -> Section -> [Name] -> IO FilePath
320322
buildExe 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) =
345347
buildLib :: Env -> Section -> Section -> IO (Maybe Name)
346348
buildLib 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
354356
buildForeignLib :: Env -> Section -> Section -> IO (Maybe Name)
355357
buildForeignLib 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

414417
installExe :: Env -> Section -> Section -> IO ()
415418
installExe 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

422424
installLib :: Env -> Section -> Section -> IO ()
423425
installLib 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

445445
installIncludeFiles :: 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

461459
installCFiles :: 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

src/MicroCabal/Parse.hs

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -418,29 +418,29 @@ parsers =
418418
--- library fields
419419
, "visibility" # (VItem <$> pItem)
420420
--- foreign-library fields
421-
, "type" # pFreeText
421+
, "type" # (VItem <$> pItem)
422422
--- package fields
423423
, "author" # pFreeText
424-
, "bug-reports" # pFreeText
424+
, "bug-reports" # (VItem <$> pItem)
425425
, "build-type" # (VItem <$> pItem)
426426
, "cabal-version" # pFreeText -- (VRange <$> pVersionRange)
427427
, "category" # pFreeText
428428
, "copyright" # pFreeText
429-
, "data-dir" # pVSpace
429+
, "data-dir" # (VItem <$> pItem)
430430
, "data-files" # pVOptComma
431431
, "description" # pFreeText
432432
, "extra-doc-files" # pVOptComma
433433
, "extra-source-files" # pVOptComma
434434
, "extra-tmp-files" # pVOptComma
435-
, "homepage" # pFreeText
436-
, "license" # pFreeText
435+
, "homepage" # (VItem <$> pItem)
436+
, "license" # (VItem <$> pItem)
437437
, "license-file" # pVOptComma
438438
, "license-files" # pVOptComma
439439
, "maintainer" # pFreeText
440440
, "name" # (VItem <$> pItem)
441-
, "package-url" # pFreeText
441+
, "package-url" # (VItem <$> pItem)
442442
, "stability" # pFreeText
443-
, "subdir" # pFreeText
443+
, "subdir" # (VItem <$> pItem)
444444
, "synopsis" # pFreeTextX
445445
, "tested-with" # pVLibs
446446
, "version" # (VVersion <$> pVersion)
@@ -449,7 +449,7 @@ parsers =
449449
, "test-module" # (VItem <$> pItem)
450450
, "type" # (VItem <$> pItem)
451451
-- source-repository fields
452-
, "location" # pFreeText
452+
, "location" # (VItem <$> pItem)
453453
-- flag fields
454454
, "manual" # (VBool <$> pBoolNL)
455455
, "default" # (VBool <$> pBoolNL)

0 commit comments

Comments
 (0)