308e2aa
--- cabal-install-2.4.1.0/Distribution/Client/CmdSdist.hs.orig	1970-01-01 07:30:00.000000000 +0730
308e2aa
+++ cabal-install-2.4.1.0/Distribution/Client/CmdSdist.hs	2020-04-14 13:08:58.730089942 +0800
308e2aa
@@ -84,7 +84,8 @@
308e2aa
 import qualified Data.Set as Set
308e2aa
 import System.Directory
308e2aa
     ( getCurrentDirectory, setCurrentDirectory
308e2aa
-    , createDirectoryIfMissing, makeAbsolute )
308e2aa
+    , createDirectoryIfMissing, makeAbsolute
308e2aa
+    , getPermissions, executable )
308e2aa
 import System.FilePath
308e2aa
     ( (), (<.>), makeRelative, normalise, takeDirectory )
308e2aa
308e2aa
@@ -269,10 +270,11 @@
308e2aa
                             Right path -> tell [Tar.directoryEntry path]
308e2aa
308e2aa
                         forM_ files $ \(perm, file) -> do
308e2aa
+                            realPerm <- liftIO $ getPermissions file
308e2aa
                             let fileDir = takeDirectory (prefix  file)
308e2aa
                                 perm' = case perm of
308e2aa
-                                    Exec -> Tar.executableFilePermissions
308e2aa
-                                    NoExec -> Tar.ordinaryFilePermissions
308e2aa
+                                    Exec | executable realPerm -> Tar.executableFilePermissions
308e2aa
+                                    _                          -> Tar.ordinaryFilePermissions
308e2aa
                             needsEntry <- gets (Set.notMember fileDir)
308e2aa
308e2aa
                             when needsEntry $ do