summaryrefslogtreecommitdiff
path: root/compiler/ghci
diff options
context:
space:
mode:
authorAlec Theriault <alec.theriault@gmail.com>2019-01-07 12:59:36 -0800
committerAlec Theriault <alec.theriault@gmail.com>2019-01-07 13:58:59 -0800
commit6b5ec08a4a64525bae87a8c2202688ffc6f86aa8 (patch)
treed5c19f8bbb7f117c1fd7c7e4eb075797a6d37f45 /compiler/ghci
parent1c9dab22f010352884d6f7e5b62251bc4b0cca7c (diff)
downloadhaskell-6b5ec08a4a64525bae87a8c2202688ffc6f86aa8.tar.gz
Check that libs found by GCC aren't folders
Summary: We use 'gcc -B<base-location> --print-file-name mylib.a' as a way of checking if 'gcc' can discover 'mylib.a' at the given location. However, this can break down if there is a folder caller 'mylib.a' that 'gcc' can discover. We can guard against this by explicitly checking that the path returned by 'gcc' is a file. This may seem like a far-fetched scenario, but since 3d17f1f10fc00540ac052f2fd03182906aa47e35, we look for libraries without any prefix or suffix (ie. 'extra-libraries: softfloat', we look for just 'softfloat' as well as 'softloat.a', 'softfloat.dll.a', etc.) which means that there might actusally be a folder of that name in one of the base locations. Reviewers: Phyx, bgamari, hvr, angerman Reviewed By: Phyx, angerman Subscribers: angerman, rwbarton, carter GHC Trac Issues: #16063 Differential Revision: https://phabricator.haskell.org/D5462
Diffstat (limited to 'compiler/ghci')
-rw-r--r--compiler/ghci/Linker.hs3
1 files changed, 2 insertions, 1 deletions
diff --git a/compiler/ghci/Linker.hs b/compiler/ghci/Linker.hs
index 3f4264cf48..dad13b7bbb 100644
--- a/compiler/ghci/Linker.hs
+++ b/compiler/ghci/Linker.hs
@@ -1556,7 +1556,8 @@ searchForLibUsingGcc dflags so dirs = do
l:_ -> l
if (file == so)
then return Nothing
- else return (Just file)
+ else do b <- doesFileExist file -- file could be a folder (see #16063)
+ return (if b then Just file else Nothing)
-- | Retrieve the list of search directory GCC and the System use to find
-- libraries and components. See Note [Fork/Exec Windows].