Skip to content
  • Rodrigo Mesquita's avatar
    073ccc84
    Per-component multi-package builds with coverage enabled · 073ccc84
    Rodrigo Mesquita authored and Andrea Bedini's avatar Andrea Bedini committed
    This commits re-enables per-component builds when coverage checking is
    enabled. This restriction was previously added in #5004 to fix #4798.
    
    - #4798 was subsequently fixed "again" with the fix for #5213, in #7493 by
    fixing the paths of the testsuite `.mix` files to the same location as
    that of the main library component.
    
    Therefore the restriction to treat testsuites per-package
    (legacy-fallback) is no longer needed.
    
    We went further and fixed coverage for internal sublibraries, packages
    with backpack (but without generating coverage information for
    indefinite and instantiated units -- it is not clear what it would mean
    for HPC to support this), and coverage for multi-package projects.
    
    1. We allow hpc in per-component builds
    
    2. To generate hpc files in the appropriate component directories in the
    distribution tree, we remove the hack from #7493 and instead determine
    the `.mix` directories that are included in the call to `hpc markup` by
    passing the list of components in the project from the cabal-install
    invocation of test.
    We also drop an unnecessary directory in the hpc file hierarchy.
    
    3. To account for internal (non-backpack) libraries, we include the mix
       dirs and modules of all (non-indefinite and non-instantiations)
       libraries in the project
    
       Indefinite libraries and instantiations are ignored as it is not
       obvious what it means for HPC to support backpack, e.g. covering a
       library function that two different instantiations
    
    4. We now only reject coverage if there are no libraries at all in the
       project, rather than if there are no libraries in the package.
    
    This allows us to drop the coverage masking logic in
    cabal.project.coverage while still having coverage of cabal-install
    (i.e. cabal test --enable-coverage cabal-install now works without the
    workaround)
    
    Even though we allow multi-package project coverage, we still cover each
    package independently -- the tix files resulting from all packages are
    not combined for the time being.
    
    Multi-package project coverage is fixed in Cabal, however, the
    paths to the source files listed in the `.mix` files will be incorrect
    because package sources will no longer be in the root of the project
    tree, but rather under the subdir with the package. We add an error for
    multi-package projects when coverage is enabled, and track lifting this
    error in #9493.
    
    Includes tests for #6440, #6397, #8609, and #4798 (the test for #5213 already exists)
    
    Fixes #6440 (internal libs coverage), #6397 (backpack breaks coverage)
    , doesn't yet fix #8609 (multi-package coverage report) and fixes in a new way the
    previously fixed #4798, #5213.
    073ccc84
    Per-component multi-package builds with coverage enabled
    Rodrigo Mesquita authored and Andrea Bedini's avatar Andrea Bedini committed
    This commits re-enables per-component builds when coverage checking is
    enabled. This restriction was previously added in #5004 to fix #4798.
    
    - #4798 was subsequently fixed "again" with the fix for #5213, in #7493 by
    fixing the paths of the testsuite `.mix` files to the same location as
    that of the main library component.
    
    Therefore the restriction to treat testsuites per-package
    (legacy-fallback) is no longer needed.
    
    We went further and fixed coverage for internal sublibraries, packages
    with backpack (but without generating coverage information for
    indefinite and instantiated units -- it is not clear what it would mean
    for HPC to support this), and coverage for multi-package projects.
    
    1. We allow hpc in per-component builds
    
    2. To generate hpc files in the appropriate component directories in the
    distribution tree, we remove the hack from #7493 and instead determine
    the `.mix` directories that are included in the call to `hpc markup` by
    passing the list of components in the project from the cabal-install
    invocation of test.
    We also drop an unnecessary directory in the hpc file hierarchy.
    
    3. To account for internal (non-backpack) libraries, we include the mix
       dirs and modules of all (non-indefinite and non-instantiations)
       libraries in the project
    
       Indefinite libraries and instantiations are ignored as it is not
       obvious what it means for HPC to support backpack, e.g. covering a
       library function that two different instantiations
    
    4. We now only reject coverage if there are no libraries at all in the
       project, rather than if there are no libraries in the package.
    
    This allows us to drop the coverage masking logic in
    cabal.project.coverage while still having coverage of cabal-install
    (i.e. cabal test --enable-coverage cabal-install now works without the
    workaround)
    
    Even though we allow multi-package project coverage, we still cover each
    package independently -- the tix files resulting from all packages are
    not combined for the time being.
    
    Multi-package project coverage is fixed in Cabal, however, the
    paths to the source files listed in the `.mix` files will be incorrect
    because package sources will no longer be in the root of the project
    tree, but rather under the subdir with the package. We add an error for
    multi-package projects when coverage is enabled, and track lifting this
    error in #9493.
    
    Includes tests for #6440, #6397, #8609, and #4798 (the test for #5213 already exists)
    
    Fixes #6440 (internal libs coverage), #6397 (backpack breaks coverage)
    , doesn't yet fix #8609 (multi-package coverage report) and fixes in a new way the
    previously fixed #4798, #5213.
Loading