问题
I get the same error relatively consistently when trying to install the stylish-haskell package off of hackage. The install went swimmingly until it got to installing conduit, which doesn't come anywhere near installing correctly.
The ending of the error message:
17 warnings and 2 errors generated.
Failed to install conduit-1.0.8
cabal: Error: some packages failed to install:
conduit-1.0.8 failed during the building phase. The exception was:
ExitFailure 1
stylish-haskell-0.5.8.0 depends on conduit-1.0.8 which failed to install.
yaml-0.8.5.1 depends on conduit-1.0.8 which failed to install.
The full terminal output I get is:
Configuring conduit-1.0.8...
/var/folders/cn/67wph78d62qc1v_lm7z2mb980000gn/T/32054.c:1:12:
warning: control reaches end of non-void function [-Wreturn-type]
int foo() {}
^
1 warning generated.
Building conduit-1.0.8...
Preprocessing library conduit-1.0.8...
Data/Conduit/Binary.hs:165:14:
warning: missing terminating ' character [-Winvalid-pp-token]
let c' = c - S.length bs
^
Data/Conduit/Binary.hs:166:18:
warning: missing terminating ' character [-Winvalid-pp-token]
assert (c' >= 0) $
^
Data/Conduit/Binary.hs:171:34:
warning: missing terminating ' character [-Winvalid-pp-token]
pullLimited c'
^
Data/Conduit/Binary.hs:281:62:
warning: missing terminating ' character [-Winvalid-pp-token]
await >>= maybe (return $ L.fromChunks $ front []) go'
^
Data/Conduit/Binary.hs:283:11:
warning: missing terminating ' character [-Winvalid-pp-token]
go' bs =
^
Data/Conduit/Binary.hs:299:39:
warning: missing terminating ' character [-Winvalid-pp-token]
await >>= maybe (return ()) go'
^
Data/Conduit/Binary.hs:301:11:
warning: missing terminating ' character [-Winvalid-pp-token]
go' bs =
^
7 warnings generated.
Data/Conduit/Internal.hs:79:47:
warning: missing terminating ' character [-Winvalid-pp-token]
-- * /i/ is the type of values for this @Pipe@'s input stream.
^
Data/Conduit/Internal.hs:81:47:
warning: missing terminating ' character [-Winvalid-pp-token]
-- * /o/ is the type of values for this @Pipe@'s output stream.
^
Data/Conduit/Internal.hs:152:64:
warning: \u used with no following hex digits; treating as '\' followed by identifier [-Wunicode]
local f (NeedInput p c) = NeedInput (\i -> local f (p i)) (\u -> local f (c u))
^
Data/Conduit/Internal.hs:170:62:
warning: \u used with no following hex digits; treating as '\' followed by identifier [-Wunicode]
listen (NeedInput p c) = NeedInput (\i -> listen (p i)) (\u -> listen (c u))
^
Data/Conduit/Internal.hs:175:26:
warning: missing terminating ' character [-Winvalid-pp-token]
return $ do (x,w') <- listen p
^
Data/Conduit/Internal.hs:176:46:
warning: missing terminating ' character [-Winvalid-pp-token]
return (x, w `mappend` w')
^
Data/Conduit/Internal.hs:180:58:
warning: \u used with no following hex digits; treating as '\' followed by identifier [-Wunicode]
pass (NeedInput p c) = NeedInput (\i -> pass (p i)) (\u -> pass (c u))
^
Data/Conduit/Internal.hs:197:74:
warning: \u used with no following hex digits; treating as '\' followed by identifier [-Wunicode]
catchError (NeedInput p c) f = NeedInput (\i -> catchError (p i) f) (\u -> catchError (c u) f)
^
Data/Conduit/Internal.hs:306:50:
warning: missing terminating ' character [-Winvalid-pp-token]
awaitForever :: Monad m => (i -> Pipe l i o r m r') -> Pipe l i o r m r
^
Data/Conduit/Internal.hs:338:4:
error: invalid preprocessing directive
#-}
^
Data/Conduit/Internal.hs:543:13:
warning: missing terminating ' character [-Winvalid-pp-token]
pipe' <- mpipe
^
Data/Conduit/Internal.hs:544:18:
warning: missing terminating ' character [-Winvalid-pp-token]
case pipe' of
^
Data/Conduit/Internal.hs:546:29:
warning: missing terminating ' character [-Winvalid-pp-token]
_ -> return pipe'
^
Data/Conduit/Internal.hs:581:83:
warning: missing terminating ' character [-Winvalid-pp-token]
mapInput f f' (NeedInput p c) = NeedInput (mapInput f f' . p . f) (mapInput f f' . c)
^
Data/Conduit/Internal.hs:584:82:
warning: missing terminating ' character [-Winvalid-pp-token]
mapInput f f' (Leftover p i) = maybe id (flip Leftover) (f' i) $ mapInput f f' p
^
Data/Conduit/Internal.hs:605:4:
error: invalid preprocessing directive
#-}
^
Data/Conduit/Internal.hs:650:35:
warning: \u used with no following hex digits; treating as '\' followed by identifier [-Wunicode]
loop = awaitE >>= either (\u -> return (u, r)) (\_ -> loop)
^
Data/Conduit/Internal.hs:671:14:
warning: missing terminating ' character [-Winvalid-pp-token]
let final' = do
^
Data/Conduit/Internal.hs:674:58:
warning: missing terminating ' character [-Winvalid-pp-token]
return (liftIO (I.writeIORef ref False) >> src, final')
^
17 warnings and 2 errors generated.
Failed to install conduit-1.0.8
cabal: Error: some packages failed to install:
conduit-1.0.8 failed during the building phase. The exception was:
ExitFailure 1
stylish-haskell-0.5.8.0 depends on conduit-1.0.8 which failed to install.
yaml-0.8.5.1 depends on conduit-1.0.8 which failed to install.
回答1:
I'm not an expert here, but I think this is caused by Mavericks replacing the standard gcc
with a version of clang
wrapped with a gcc
-semi-compatible wrapper. It make GHC choke from time to time. You can fix it by editing /usr/local/lib/ghc-7.6.3/settings
so that the "C compiler command"
entry points to a valid gcc
.
For instance, I installed gcc
4.8 from Homebrew and then changed the settings line to
("C compiler command", "/usr/local/bin/gcc-4.9")
回答2:
As mentioned in some of the other answers this is due to gcc being replaced by Clang starting with at least Xcode 5.
GHC leans on GCC's preprocessor in order to support c++ like #something
macros and it looks like Clang behaves slightly differently which causes compilation of haskell sources containing such macros to fail.
The fix is actually displayed prominently on the Haskell Platform's Mac page: https://www.haskell.org/platform/mac.html
It consists of a simple bash script which acts as a wrapper around Clang.
To install it:
- Go to https://www.haskell.org/platform/ghc-clang-wrapper.
- Press command-s to save the script in your download folder.
Install it by running the following instructions in a terminal:
cd ~/Downloads chmod +x ghc-clang-wrapper ./ghc-clang-wrapper
- Then follow the simple instructions it prints.
Once that's done, simply relaunch the cabal install command and it will run fine.
回答3:
This issue can fix work by following workaround.
https://github.com/snoyberg/conduit/issues/147
来源:https://stackoverflow.com/questions/19851315/error-installing-stylish-haskell-on-mac-os-x-on-haskell-platform-2013-2-0-0