From dd4d4af848f8ce5890e5eda484dbe049fc3248e1 Mon Sep 17 00:00:00 2001 From: Duncan Coutts Date: Thu, 19 Feb 2009 02:06:56 +0000 Subject: [PATCH] Fix sdist so that it preserves executable permissions Needed for ./configure scripts etc. --- Distribution/Simple/SrcDist.hs | 14 +++++++++++--- Distribution/Simple/Utils.hs | 6 ++++-- 2 files changed, 15 insertions(+), 5 deletions(-) diff --git a/Distribution/Simple/SrcDist.hs b/Distribution/Simple/SrcDist.hs index a7bd1eb8e5c..5f4aa7068b3 100644 --- a/Distribution/Simple/SrcDist.hs +++ b/Distribution/Simple/SrcDist.hs @@ -78,10 +78,10 @@ import Distribution.Version ( Version(versionBranch), VersionRange(AnyVersion) ) import Distribution.Simple.Utils ( createDirectoryIfMissingVerbose, withUTF8FileContents, writeUTF8File - , copyFiles, copyFileVerbose + , copyFiles , findFile, findFileWithExtension, matchFileGlob , withTempDirectory, defaultPackageDesc - , die, warn, notice, setupMessage ) + , die, warn, notice, setupMessage, info ) import Distribution.Simple.Setup (SDistFlags(..), fromFlag) import Distribution.Simple.PreProcess (PPSuffixHandler, ppSuffixes, preprocessSources) import Distribution.Simple.LocalBuildInfo ( LocalBuildInfo(..) ) @@ -96,7 +96,7 @@ import Data.Char (toLower) import Data.List (partition, isPrefixOf) import Data.Maybe (isNothing, catMaybes) import System.Time (getClockTime, toCalendarTime, CalendarTime(..)) -import System.Directory (doesFileExist, doesDirectoryExist) +import System.Directory (doesFileExist, doesDirectoryExist, copyFile) import Distribution.Verbosity (Verbosity) import System.FilePath ( (), (<.>), takeDirectory, dropExtension, isAbsolute ) @@ -342,6 +342,14 @@ copyFileTo verbosity dir file = do createDirectoryIfMissingVerbose verbosity True (takeDirectory targetFile) copyFileVerbose verbosity file targetFile +copyFileVerbose :: Verbosity -> FilePath -> FilePath -> IO () +copyFileVerbose verbosity src dest = do + info verbosity ("copy " ++ src ++ " to " ++ dest) + --Note: This is the standard copyFile that *does* copy file permissions. + -- In particular it will copy executable permissions which we need + -- eg to copy ./configure scripts into the tarball src tree. + copyFile src dest + printPackageProblems :: Verbosity -> PackageDescription -> IO () printPackageProblems verbosity pkg_descr = do ioChecks <- checkPackageFiles pkg_descr "." diff --git a/Distribution/Simple/Utils.hs b/Distribution/Simple/Utils.hs index 8e1f86166f7..ac64e6b2e0d 100644 --- a/Distribution/Simple/Utils.hs +++ b/Distribution/Simple/Utils.hs @@ -127,7 +127,8 @@ import Data.Bits ( Bits((.|.), (.&.), shiftL, shiftR) ) import System.Directory - ( getDirectoryContents, doesDirectoryExist, doesFileExist, removeFile ) + ( getDirectoryContents, doesDirectoryExist, doesFileExist, removeFile + , copyFile ) import System.Environment ( getProgName ) import System.Cmd @@ -531,7 +532,8 @@ copyFiles verbosity targetDir srcFiles = do -- Copy all the files sequence_ [ let src = srcBase srcFile dest = targetDir srcFile - in copyFileVerbose verbosity src dest + in info verbosity ("copy " ++ src ++ " to " ++ dest) + >> copyFile src dest | (srcBase, srcFile) <- srcFiles ] -- adaptation of removeDirectoryRecursive