diff --git a/Distribution/Simple/SrcDist.hs b/Distribution/Simple/SrcDist.hs
index a7bd1eb8e5cd39432eca11c5c46f214894dd4e11..5f4aa7068b33e0e706e3a576a634d029f5483ee5 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 8e1f86166f75b33c9def5abae6595b2178fea457..ac64e6b2e0ddfa8fdd573f93cbb5dc7ee151b9fe 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