Paul Spencer
Paul Spencer

Reputation: 870

linking rather than building in stack/cabal

question:

What do I have to do in the .cabal file in order to cause the libraries to link rather than build?

background:

I am trying to get coverage details from the command stack test --coverage

when I run this build I get the error message

Error: The coverage report for xmonad's test-suite "properties" did not consider any code. One possible cause of this is if your test-suite builds the library code (see stack issue #1008). It may also indicate a bug in stack or the hpc program. Please report this issue if you think your coverage report should have meaningful results.
Only one tix file found in /home/paul/temp/xmonad_coverage/.stack-work/install/x86_64-linux/09c83ca90bc1875ad3d1b5ea4a2a0c369c6367f3ad989533e627c073ee9962e0/8.0.1/hpc/, so not generating a unified coverage report.

on the stack documentation site, https://docs.haskellstack.org/en/stable/coverage/, it says that in order to run coverage I must have :

  1. These test-suites link against your library, rather than building the library directly. Coverage information is only given for libraries, ignoring the modules which get compiled directly into your executable. A common case where this doesn't happen is when your test-suite and library both have something like hs-source-dirs: src/. In this case, when building your test- suite you may also be compiling your library, instead of just linking against it.

when I look in my .cabal file for the library there is

 hs-source-dirs:  src

and for test there is.

  hs-source-dirs: tests

I don't understand the purpose of these and whether these are causing the library to build rather than be linked to.

could this be the reason that stack test --coverage is failing? or am I looking in the wrong place?

Upvotes: 1

Views: 108

Answers (1)

Paul Spencer
Paul Spencer

Reputation: 870

Turns out that I could fix this by doing the following:

 stack clean; stack build; stack test --coverage --ghc-options "-fforce-recomp" 

as described by Michael Sloan at https://github.com/commercialhaskell/stack/issues/1305 his explanation for a similar problem was:

Looks like what's happening is that the library isn't getting rebuilt, despite reconfiguring with --ghc-options -fhpc and building the package. As a result, the .tix file generated by the test only includes coverage info for the test itself

Upvotes: 1

Related Questions