[Haskell-cafe] How to throw an error if using "cabal-install" < version XYZ?

Ryan Newton rrnewton at gmail.com
Thu May 23 17:30:54 CEST 2013


Great!  Thanks.  I adapted that trick and it worked fine:

https://github.com/rrnewton/haskell-lockfree-queue/blob/cb8ca1a5d8b4c02e45eeca54fbc66f0c58aeff56/AtomicPrimops/Setup.hs



On Wed, May 22, 2013 at 11:53 PM, Carter Schonwald <
carter.schonwald at gmail.com> wrote:

> Hey Ryan,
> I ran into a related issue, heres a a way you can do this safe IN the
> cabal file (or at least you can modify my hack for your purposes)
>
> heres a link to the workaround I did for making LLVM-hs work across >=
> 1.17 and < 1.17 cabal, but you could abuse it to make sure setup.hs barfs
> on old cabal
> https://github.com/bos/llvm/blob/master/base/Setup.hs#L89-L116
>
> heres a quick one off gist that takes my trick and does something helpful
> for you variant + makes sure the tool can't build otherwise
>
> https://gist.github.com/cartazio/5632636
>
> I just wrote a snippet that you can just add to your setup.hs and it
> should guarantee the setup.hs will barf with a helpful error message on
> cabal < 1.17.0
>
>
> On Wed, May 22, 2013 at 10:50 PM, Ryan Newton <rrnewton at gmail.com> wrote:
>
>> A cabal-install bug <https://github.com/haskell/cabal/issues/1284> was
>> fixed recently that pertains to building C libraries with profiling.
>>
>> As a result, I want a certain package<http://hackage.haskell.org/package/atomic-primops-0.1.0.2>to test if cabal-install < 0.17.0 is used, and throw a preemptive error.
>>  Otherwise this package fails in weird ways at runtime (it's a nasty one).
>>
>> I noticed with some surprise the following sequence:
>>
>> *   $ cabal --version*
>> *   cabal-install version 1.16.0.2*
>> *   using version 1.16.0.3 of the Cabal library*
>> *   $ cabal clean*
>> *   $ cabal install*
>> *   $ cat dist/build/autogen/cabal_macros.h  | grep VERSION_Cabal*
>> *   #define VERSION_Cabal "1.17.0"*
>>
>> Alright, so that, in retrospect, makes sense.  The version is which *my*
>> library is linked with is the relevant one, not the one cabal-install was
>> linked with [1].
>>
>> So the natural next thought is to move the MIN_VERSION_Cabal test into
>> Setup.hs, and force cabal to use it by setting the build type to Custom.
>>  But... I just learned from this ticket that the cabal macros are not
>> available in Setup.hs:
>>
>>    http://hackage.haskell.org/trac/hackage/ticket/326
>>
>> Uh oh, what's left?
>>
>>  -Ryan
>>
>> [1] P.S. Personally I'm now using a bash function like below, to force
>> the two versions to be the same:
>>
>> function safe_cabal_install () {
>>   VER=`cabal --version | tail -n1 | awk '{ print $3 }'`
>>   cabal install --constraint="Cabal==$VER" $*
>> }
>>
>>
>> _______________________________________________
>> Haskell-Cafe mailing list
>> Haskell-Cafe at haskell.org
>> http://www.haskell.org/mailman/listinfo/haskell-cafe
>>
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.haskell.org/pipermail/haskell-cafe/attachments/20130523/98ab8522/attachment.htm>


More information about the Haskell-Cafe mailing list