Reputation: 11
first of all thanks for the help you can bring me to solve my disaster with cabal xD...
I'm working with OS X El Capitan 10.11.3, 64 bits.
I installed Haskell platform from https://www.haskell.org/platform/prior.html of 2013.2.0.0, May 2013, specially because i need to work with ghc 7.6.3
Then when I execute cabal update... my headache starts...
Resolving dependencies...
Configuring binary-0.8.2.0...
/var/folders/3l/wflf71t55t92rrvt8lhx_8700000gn/T/10157.c:1:12:
warning: control reaches end of non-void function [-Wreturn-type]
int foo() {}
^
1 warning generated.
Building binary-0.8.2.0...
Preprocessing library binary-0.8.2.0...
src/Data/Binary.hs:198:43:
warning: missing terminating ' character [-Winvalid-pp-token]
-- This is just a convenience function, it's defined simply as:
^
src/Data/Binary.hs:253:35:
warning: missing terminating ' character [-Winvalid-pp-token]
-- This mechanism makes use of GHC's efficient built-in generics
^
2 warnings generated.
src/Data/Binary/Put.hs:110:26:
warning: missing terminating ' character [-Winvalid-pp-token]
PairS x w' = unPut k
^
src/Data/Binary/Put.hs:111:42:
warning: missing terminating ' character [-Winvalid-pp-token]
in PairS (f x) (w `mappend` w')
^
src/Data/Binary/Put.hs:115:26:
warning: missing terminating ' character [-Winvalid-pp-token]
PairS b w' = unPut k
^
src/Data/Binary/Put.hs:116:38:
warning: missing terminating ' character [-Winvalid-pp-token]
in PairS b (w `mappend` w')
^
src/Data/Binary/Put.hs:123:22:
warning: missing terminating ' character [-Winvalid-pp-token]
PairS b w' = unPut (k a)
^
src/Data/Binary/Put.hs:124:34:
warning: missing terminating ' character [-Winvalid-pp-token]
in PairS b (w `mappend` w')
^
src/Data/Binary/Put.hs:257:64:
warning: missing terminating ' character [-Winvalid-pp-token]
-- written in host order, host endian form, for the machine you're on.
^
src/Data/Binary/Put.hs:286:64:
warning: missing terminating ' character [-Winvalid-pp-token]
-- written in host order, host endian form, for the machine you're on.
^
8 warnings generated.
src/Data/Binary/Get.hs:26:7:
warning: missing terminating ' character [-Winvalid-pp-token]
-- Let's decode binary data representing illustrated here.
^
src/Data/Binary/Get.hs:43:71:
warning: missing terminating ' character [-Winvalid-pp-token]
-- The fields in @Trade@ are marked as strict (using @!@) since we don't need
^
src/Data/Binary/Get.hs:48:12:
warning: missing terminating ' character [-Winvalid-pp-token]
-- Now, let's have a look at a decoder for this format.
^
src/Data/Binary/Get.hs:62:20:
warning: missing terminating ' character [-Winvalid-pp-token]
--getTrade' :: 'Get' Trade
^
src/Data/Binary/Get.hs:63:79:
warning: missing terminating ' character [-Winvalid-pp-token]
--getTrade' = Trade '<$>' 'getWord32le' '<*>' 'getWord32le' '<*>' 'getWord16le'
^
src/Data/Binary/Get.hs:70:7:
warning: missing terminating ' character [-Winvalid-pp-token]
-- Let's first define a function that decodes many @Trade@s.
^
src/Data/Binary/Get.hs:88:27:
warning: missing terminating '"' character [-Winvalid-pp-token]
-- input <- BL.readFile \"trades.bin\"
^
src/Data/Binary/Get.hs:235:64:
warning: missing terminating ' character [-Winvalid-pp-token]
-- The lazy interface consumes a single lazy 'L.ByteString'. It's the easiest
^
src/Data/Binary/Get.hs:236:47:
warning: missing terminating ' character [-Winvalid-pp-token]
-- interface to get started with, but it doesn't support interleaving I\/O and
^
src/Data/Binary/Get.hs:298:23:
warning: missing terminating ' character [-Winvalid-pp-token]
runGetState g lbs0 pos' = go (runGetIncremental g) lbs0
^
src/Data/Binary/Get.hs:300:53:
warning: missing terminating ' character [-Winvalid-pp-token]
go (Done s pos a) lbs = (a, L.chunk s lbs, pos+pos')
^
src/Data/Binary/Get.hs:570:53:
warning: missing terminating ' character [-Winvalid-pp-token]
-- host order, host endian form, for the machine you're on. On a 64 bit
^
12 warnings generated.
src/Data/Binary/Get/Internal.hs:157:22:
warning: missing terminating ' character [-Winvalid-pp-token]
-- | Make sure we don't have to pass Nothing to a Partial twice.
^
src/Data/Binary/Get/Internal.hs:158:19:
warning: missing terminating ' character [-Winvalid-pp-token]
-- This way we don't need to pass around an EOF value in the Get monad, it
^
src/Data/Binary/Get/Internal.hs:180:63:
warning: missing terminating ' character [-Winvalid-pp-token]
prompt inp kf ks = prompt' kf (\inp' -> ks (inp `B.append` inp'))
^
src/Data/Binary/Get/Internal.hs:182:7:
warning: missing terminating ' character [-Winvalid-pp-token]
prompt' :: Decoder a -> (B.ByteString -> Decoder a) -> Decoder a
^
src/Data/Binary/Get/Internal.hs:183:7:
warning: missing terminating ' character [-Winvalid-pp-token]
prompt' kf ks =
^
src/Data/Binary/Get/Internal.hs:221:21:
warning: missing terminating ' character [-Winvalid-pp-token]
let (inp', out) = B.splitAt n str
^
src/Data/Binary/Get/Internal.hs:222:31:
warning: missing terminating ' character [-Winvalid-pp-token]
in k out (Just inp')
^
src/Data/Binary/Get/Internal.hs:240:17:
warning: missing terminating ' character [-Winvalid-pp-token]
Left state' -> do
^
src/Data/Binary/Get/Internal.hs:241:16:
warning: missing terminating ' character [-Winvalid-pp-token]
let acc' = inp : acc
^
src/Data/Binary/Get/Internal.hs:242:15:
warning: missing terminating ' character [-Winvalid-pp-token]
prompt'
^
src/Data/Binary/Get/Internal.hs:243:40:
warning: missing terminating ' character [-Winvalid-pp-token]
(runCont (onFail (reverse acc')) B.empty ks)
^
src/Data/Binary/Get/Internal.hs:284:72:
warning: missing terminating ' character [-Winvalid-pp-token]
-- Once it's finished, return the final decoder (always 'Done' or 'Fail'),
^
src/Data/Binary/Get/Internal.hs:327:8:
warning: missing terminating ' character [-Winvalid-pp-token]
let g' = maybe (Left ()) Right <$> g
^
src/Data/Binary/Get/Internal.hs:328:47:
warning: missing terminating ' character [-Winvalid-pp-token]
either (const Nothing) Just <$> lookAheadE g'
^
src/Data/Binary/Get/Internal.hs:403:3:
error: invalid preprocessing directive
#-}
^
src/Data/Binary/Get/Internal.hs:412:64:
warning: missing terminating ' character [-Winvalid-pp-token]
where -- might look a bit funny, but plays very well with GHC's inliner.
^
src/Data/Binary/Get/Internal.hs:413:19:
warning: missing terminating ' character [-Winvalid-pp-token]
-- GHC won't inline recursive functions, so we make ensureN non-recursive
^
16 warnings and 1 error generated.
Failed to install binary-0.8.2.0
cabal: Error: some packages failed to install:
Cabal-1.22.7.0 depends on binary-0.8.2.0 which failed to install.
binary-0.8.2.0 failed during the building phase. The exception was:
ExitFailure 1
cabal-install-1.22.8.0 depends on binary-0.8.2.0 which failed to install.
and then... I try install binary and...
Resolving dependencies...
Configuring binary-0.8.2.0...
/var/folders/3l/wflf71t55t92rrvt8lhx_8700000gn/T/10204.c:1:12:
warning: control reaches end of non-void function [-Wreturn-type]
int foo() {}
^
1 warning generated.
Building binary-0.8.2.0...
Preprocessing library binary-0.8.2.0...
src/Data/Binary.hs:198:43:
warning: missing terminating ' character [-Winvalid-pp-token]
-- This is just a convenience function, it's defined simply as:
^
src/Data/Binary.hs:253:35:
warning: missing terminating ' character [-Winvalid-pp-token]
-- This mechanism makes use of GHC's efficient built-in generics
^
2 warnings generated.
src/Data/Binary/Put.hs:110:26:
warning: missing terminating ' character [-Winvalid-pp-token]
PairS x w' = unPut k
^
src/Data/Binary/Put.hs:111:42:
warning: missing terminating ' character [-Winvalid-pp-token]
in PairS (f x) (w `mappend` w')
^
src/Data/Binary/Put.hs:115:26:
warning: missing terminating ' character [-Winvalid-pp-token]
PairS b w' = unPut k
^
src/Data/Binary/Put.hs:116:38:
warning: missing terminating ' character [-Winvalid-pp-token]
in PairS b (w `mappend` w')
^
src/Data/Binary/Put.hs:123:22:
warning: missing terminating ' character [-Winvalid-pp-token]
PairS b w' = unPut (k a)
^
src/Data/Binary/Put.hs:124:34:
warning: missing terminating ' character [-Winvalid-pp-token]
in PairS b (w `mappend` w')
^
src/Data/Binary/Put.hs:257:64:
warning: missing terminating ' character [-Winvalid-pp-token]
-- written in host order, host endian form, for the machine you're on.
^
src/Data/Binary/Put.hs:286:64:
warning: missing terminating ' character [-Winvalid-pp-token]
-- written in host order, host endian form, for the machine you're on.
^
8 warnings generated.
src/Data/Binary/Get.hs:26:7:
warning: missing terminating ' character [-Winvalid-pp-token]
-- Let's decode binary data representing illustrated here.
^
src/Data/Binary/Get.hs:43:71:
warning: missing terminating ' character [-Winvalid-pp-token]
-- The fields in @Trade@ are marked as strict (using @!@) since we don't need
^
src/Data/Binary/Get.hs:48:12:
warning: missing terminating ' character [-Winvalid-pp-token]
-- Now, let's have a look at a decoder for this format.
^
src/Data/Binary/Get.hs:62:20:
warning: missing terminating ' character [-Winvalid-pp-token]
--getTrade' :: 'Get' Trade
^
src/Data/Binary/Get.hs:63:79:
warning: missing terminating ' character [-Winvalid-pp-token]
--getTrade' = Trade '<$>' 'getWord32le' '<*>' 'getWord32le' '<*>' 'getWord16le'
^
src/Data/Binary/Get.hs:70:7:
warning: missing terminating ' character [-Winvalid-pp-token]
-- Let's first define a function that decodes many @Trade@s.
^
src/Data/Binary/Get.hs:88:27:
warning: missing terminating '"' character [-Winvalid-pp-token]
-- input <- BL.readFile \"trades.bin\"
^
src/Data/Binary/Get.hs:235:64:
warning: missing terminating ' character [-Winvalid-pp-token]
-- The lazy interface consumes a single lazy 'L.ByteString'. It's the easiest
^
src/Data/Binary/Get.hs:236:47:
warning: missing terminating ' character [-Winvalid-pp-token]
-- interface to get started with, but it doesn't support interleaving I\/O and
^
src/Data/Binary/Get.hs:298:23:
warning: missing terminating ' character [-Winvalid-pp-token]
runGetState g lbs0 pos' = go (runGetIncremental g) lbs0
^
src/Data/Binary/Get.hs:300:53:
warning: missing terminating ' character [-Winvalid-pp-token]
go (Done s pos a) lbs = (a, L.chunk s lbs, pos+pos')
^
src/Data/Binary/Get.hs:570:53:
warning: missing terminating ' character [-Winvalid-pp-token]
-- host order, host endian form, for the machine you're on. On a 64 bit
^
12 warnings generated.
src/Data/Binary/Get/Internal.hs:157:22:
warning: missing terminating ' character [-Winvalid-pp-token]
-- | Make sure we don't have to pass Nothing to a Partial twice.
^
src/Data/Binary/Get/Internal.hs:158:19:
warning: missing terminating ' character [-Winvalid-pp-token]
-- This way we don't need to pass around an EOF value in the Get monad, it
^
src/Data/Binary/Get/Internal.hs:180:63:
warning: missing terminating ' character [-Winvalid-pp-token]
prompt inp kf ks = prompt' kf (\inp' -> ks (inp `B.append` inp'))
^
src/Data/Binary/Get/Internal.hs:182:7:
warning: missing terminating ' character [-Winvalid-pp-token]
prompt' :: Decoder a -> (B.ByteString -> Decoder a) -> Decoder a
^
src/Data/Binary/Get/Internal.hs:183:7:
warning: missing terminating ' character [-Winvalid-pp-token]
prompt' kf ks =
^
src/Data/Binary/Get/Internal.hs:221:21:
warning: missing terminating ' character [-Winvalid-pp-token]
let (inp', out) = B.splitAt n str
^
src/Data/Binary/Get/Internal.hs:222:31:
warning: missing terminating ' character [-Winvalid-pp-token]
in k out (Just inp')
^
src/Data/Binary/Get/Internal.hs:240:17:
warning: missing terminating ' character [-Winvalid-pp-token]
Left state' -> do
^
src/Data/Binary/Get/Internal.hs:241:16:
warning: missing terminating ' character [-Winvalid-pp-token]
let acc' = inp : acc
^
src/Data/Binary/Get/Internal.hs:242:15:
warning: missing terminating ' character [-Winvalid-pp-token]
prompt'
^
src/Data/Binary/Get/Internal.hs:243:40:
warning: missing terminating ' character [-Winvalid-pp-token]
(runCont (onFail (reverse acc')) B.empty ks)
^
src/Data/Binary/Get/Internal.hs:284:72:
warning: missing terminating ' character [-Winvalid-pp-token]
-- Once it's finished, return the final decoder (always 'Done' or 'Fail'),
^
src/Data/Binary/Get/Internal.hs:327:8:
warning: missing terminating ' character [-Winvalid-pp-token]
let g' = maybe (Left ()) Right <$> g
^
src/Data/Binary/Get/Internal.hs:328:47:
warning: missing terminating ' character [-Winvalid-pp-token]
either (const Nothing) Just <$> lookAheadE g'
^
src/Data/Binary/Get/Internal.hs:403:3:
error: invalid preprocessing directive
#-}
^
src/Data/Binary/Get/Internal.hs:412:64:
warning: missing terminating ' character [-Winvalid-pp-token]
where -- might look a bit funny, but plays very well with GHC's inliner.
^
src/Data/Binary/Get/Internal.hs:413:19:
warning: missing terminating ' character [-Winvalid-pp-token]
-- GHC won't inline recursive functions, so we make ensureN non-recursive
^
16 warnings and 1 error generated.
Failed to install binary-0.8.2.0
cabal: Error: some packages failed to install:
binary-0.8.2.0 failed during the building phase. The exception was:
ExitFailure 1
my ghc --version is The Glorious Glasgow Haskell Compilation System, version 7.6.3
my cabal --version is cabal-install version 1.16.0.2 using version 1.16.0 of the Cabal library
Thanks for the attention.
Upvotes: 1
Views: 271
Reputation: 11
In conclusion, it can not use the latest version of cabal 1.22.07 with an older version of GHC 7.6.3,because
It's just a bug in binary-0.8.2.0.
src/Data/Binary/Get/Internal.hs:403:3:
error: invalid preprocessing directive
#-}
^
src/Data/Binary/Get/Internal.hs has a line that starts with #, which clang's C preprocessor doesn't like. gcc is fine with it, but on a Mac Apple's gcc is really clang.
by Reid Barton
and important to know...
GHC uses clang for CPP, and clang is not very understanding about its input. Newer GHCs don't have this issue, which explains why it hasn't been found and fixed until now.
The issue was reported on github.
by L. Kolmodin
Thanks for every answer.
PD: I could install GHC 7.6.3 and Cabal 1.22.07 using Debian... >.<
Upvotes: 0
Reputation: 476
It's the result of using an old GHC version with modern clang (which comes with your modern Mac OS X). GHC uses clang for CPP, and clang is not very understanding about its input.
Newer GHCs don't have this issue, which explains why it hasn't been found and fixed until now.
The issue was reported on github. I've fixed it and pushed binary-0.8.2.1
. Run cabal update
and try again.
Let me know if you run into any other issues with binary
.
Upvotes: 0
Reputation: 14999
It's just a bug in binary-0.8.2.0.
src/Data/Binary/Get/Internal.hs:403:3:
error: invalid preprocessing directive
#-}
^
src/Data/Binary/Get/Internal.hs
has a line that starts with #
, which clang's C preprocessor doesn't like. gcc is fine with it, but on a Mac Apple's gcc is really clang.
That line is new in binary-0.8.0.0, which was released Dec 20. Still odd that apparently no one else encountered this yet.
I filed an issue.
Upvotes: 2