@@ -32,7 +32,7 @@ import Distribution.Verbosity
32
32
import Distribution.Version
33
33
34
34
import System.Directory (getDirectoryContents , doesFileExist )
35
- import System.FilePath (joinPath , splitExtensions , splitDirectories , takeExtensions , (</>) )
35
+ import System.FilePath (joinPath , splitExtensions , splitDirectories , takeFileName , (</>) )
36
36
37
37
-- Note throughout that we use splitDirectories, not splitPath. On
38
38
-- Posix, this makes no difference, but, because Windows accepts both
@@ -108,9 +108,11 @@ fileGlobMatchesSegments pat (seg : segs) = case pat of
108
108
dir == seg && fileGlobMatchesSegments pat' segs
109
109
GlobFinal final -> case final of
110
110
FinalMatch Recursive ext ->
111
- ext == takeExtensions (last $ seg: segs)
111
+ let (candidateBase, candidateExts) = splitExtensions (last $ seg: segs)
112
+ in ext == candidateExts && not (null candidateBase)
112
113
FinalMatch NonRecursive ext ->
113
- null segs && ext == takeExtensions seg
114
+ let (candidateBase, candidateExts) = splitExtensions seg
115
+ in null segs && ext == candidateExts && not (null candidateBase)
114
116
FinalLit filename ->
115
117
null segs && filename == seg
116
118
@@ -189,7 +191,10 @@ matchDirFileGlob' verbosity version rawDir filepath = case parseFileGlob version
189
191
candidates <- case recursive of
190
192
Recursive -> getDirectoryContentsRecursive prefix
191
193
NonRecursive -> filterM (doesFileExist . (prefix </> )) =<< getDirectoryContents prefix
192
- return $ filter ((==) exts . takeExtensions) candidates
194
+ let checkName candidate =
195
+ let (candidateBase, candidateExts) = splitExtensions $ takeFileName candidate
196
+ in not (null candidateBase) && exts == candidateExts
197
+ return $ filter checkName candidates
193
198
FinalLit fn -> do
194
199
exists <- doesFileExist (dir </> joinedPrefix </> fn)
195
200
return [ fn | exists ]
0 commit comments