add a filelist for cabal sdist

I hate hard-coded 40 kilobyte lone file lists, and just once would like to
see a build system that does not assume it's a good idea to have a file
list, or a hardcoded file list, or a file list that can only be generated
with a crippled form of globs. But not today, thank you cabal.
This commit is contained in:
Joey Hess 2011-06-30 15:37:35 -04:00
parent 20565027cc
commit b3ab44f8bb
3 changed files with 28 additions and 13 deletions

View file

@ -84,7 +84,7 @@ docs: $(mans)
clean:
rm -rf build $(bins) $(mans) test configure *.tix .hpc \
StatFS.hs Touch.hs SysConfig.hs Remote/S3.hs
rm -rf doc/.ikiwiki html
rm -rf doc/.ikiwiki html dist
find . \( -name \*.o -or -name \*.hi \) -exec rm {} \;
.PHONY: $(bins) test install

View file

@ -2,6 +2,8 @@
import System.Directory
import Data.List
import Data.String.Utils
import System.Cmd.Utils
import TestConfig
@ -56,24 +58,36 @@ unicodeFilePath = do
{- Pulls package version out of the changelog. -}
getVersion :: Test
getVersion = do
version <- getVersionString
return $ Config "packageversion" (StringConfig version)
getVersionString :: IO String
getVersionString = do
changelog <- readFile "CHANGELOG"
let verline = head $ lines changelog
let version = middle (words verline !! 1)
-- Replace Version field in cabal file, so I don't have to maintain
-- the version there too.
cabal <- readFile cabalfile
writeFile tmpcabalfile $ unlines $ map (setversion version) $ lines cabal
renameFile tmpcabalfile cabalfile
return $ Config "packageversion" (StringConfig version)
return $ middle (words verline !! 1)
where
middle s = drop 1 $ take (length s - 1) s
{- Set up cabal file with version. -}
cabalSetup :: IO ()
cabalSetup = do
version <- getVersionString
(_, filelist) <- pipeLinesFrom "find" (words ". -name .git -prune -o -name dist -prune -o -not -name *.hi -not -name *.o -not -name configure -not -name *.tmp -type f -print")
cabal <- readFile cabalfile
writeFile tmpcabalfile $ unlines $
map (setfield "Version" version) $
map (setfield "Extra-Source-Files" $ join ", " $ sort filelist) $
lines cabal
renameFile tmpcabalfile cabalfile
where
cabalfile = "git-annex.cabal"
tmpcabalfile = cabalfile++".tmp"
setversion version s
| "Version:" `isPrefixOf` s = "Version: " ++ version
setfield field value s
| fullfield `isPrefixOf` s = fullfield ++ value
| otherwise = s
where
fullfield = field ++ ": "
setup :: IO ()
setup = do
@ -90,3 +104,4 @@ main = do
config <- runTests tests
writeSysConfig config
cleanup
cabalSetup

File diff suppressed because one or more lines are too long