[Haskell-cafe] Maintaining test-suite dependencies with cabal

Erik Hesselink hesselink at gmail.com
Sat Sep 6 10:58:53 UTC 2014


You shoud list 'Process' in the 'other-modules' section of your
library. Every module should be either in the exposed or other modules
list. Ideally cabal would check this for you, see
https://github.com/haskell/cabal/pull/1455

Regards,

Erik

On Sat, Sep 6, 2014 at 12:19 PM, Bram Neijt <bneijt at gmail.com> wrote:
> I have split up my dependencies and placed them in separate
> directories. This was all pretty easy to do, however I do have one
> thing I don't understand.
>
> My Main.hs[1] includes: import After (afterPartialCmdline, afterPid)
> And my after.cabal[2] has a library exposing the After module.
>
> It looks like me that Main.hs only uses functions from After, however
> if I don't list "Process" in the "exposed-modules:" I get a linker
> error:
>
> Linking dist/build/after/after ...
> /home/bram/program/after/dist/build/libHSafter-0.1.2.0.a(After.o):(.text+0x90a):
> undefined reference to `afterzm0zi1zi2zi0_Process_psCmdLine4_closure'
> /home/bram/program/after/dist/build/libHSafter-0.1.2.0.a(After.o):(.text+0x945):
> undefined reference to `afterzm0zi1zi2zi0_Process_psListing2_closure'
> /home/bram/program/after/dist/build/libHSafter-0.1.2.0.a(After.o):(.text+0x4a3):
> undefined reference to `afterzm0zi1zi2zi0_Process_psCmdLine1_info'
> /home/bram/program/after/dist/build/libHSafter-0.1.2.0.a(After.o):(.text+0x6ca):
> undefined reference to `afterzm0zi1zi2zi0_Process_psCmdLine1_info'
> /home/bram/program/after/dist/build/libHSafter-0.1.2.0.a(After.o):(.data+0xf0):
> undefined reference to `afterzm0zi1zi2zi0_Process_psCmdLine1_closure'
> /home/bram/program/after/dist/build/libHSafter-0.1.2.0.a(After.o):(.data+0x108):
> undefined reference to `afterzm0zi1zi2zi0_Process_psListing2_closure'
> /home/bram/program/after/dist/build/libHSafter-0.1.2.0.a(After.o):(.data+0x118):
> undefined reference to `afterzm0zi1zi2zi0_Process_psCmdLine4_closure'
> collect2: error: ld returned 1 exit status
>
> Why do I have to mention "Process" in the exposed modules list?
>
> Doesn't this mean that I eventuall have to mention all my modules in
> the exposed modules list, and then what is the point of having to
> mention them in the first place?
>
> Greetings,
>
> Bram
>
> [1] https://github.com/bneijt/after/blob/master/src/main/Main.hs
> [2] https://github.com/bneijt/after/blob/master/after.cabal
>
> On Thu, Sep 4, 2014 at 10:36 PM, Rogan Creswick <creswick at gmail.com> wrote:
>>
>> On Fri, Aug 22, 2014 at 10:22 AM, Omari Norman <omari at smileystation.com>
>> wrote:
>>>
>>>
>>> But a tool like Cartel does nothing about compile times.  If compile times
>>> are really a concern, I would just put the library in a completely separate
>>> package and package the executables and tests separately.
>>
>>
>> One way to help reduce compile times (a bit anyway) is to separate the
>> executables and tests into parallel source directories from your library
>> code.  I generally use a layout like this:
>>
>> <project dir>/
>>      - project.cabal
>>      - src/
>>      - apps/
>>      - tests/resources/
>>      - tests/src/
>>
>> Library code goes in src, application Main's go in apps/, test source goes
>> in tests/src/ and any necessary data files go in tests/resources.
>>
>> Then tests and apps defined in the cabal file depend on the library, and the
>> source for the library is not rebuilt for each executable/test declaration
>> in the cabal file (generally speaking; with flags and custom builds you can
>> cause just about anything...)
>>
>> --Rogan
>>
> _______________________________________________
> Haskell-Cafe mailing list
> Haskell-Cafe at haskell.org
> http://www.haskell.org/mailman/listinfo/haskell-cafe


More information about the Haskell-Cafe mailing list