Подтвердить что ты не робот

Haskell Coverage - HPC не может найти главную

У меня есть программа, которая создана из многих файлов С++ и Haskell. Я компилирую весь Haskell с флагом -fhpc, чтобы я мог запускать на нем тесты покрытия.

После завершения компиляции я запускаю программу и генерируются несколько файлов .tix.

Проблема: я пытаюсь запустить hpc markup build/Server --srcdir=., например. Затем он сгенерирует некоторые файлы, но преждевременно сработает:

Writing: file1.hs.html
Writing: file2.hs.html
Writing: file3.hs.html
hpc: can not find Main in ["./.hpc"]

Каталог .hpc существует, и он содержит файл под названием Main.mix, а также другие файлы .mix.

Я заметил, что некоторые люди сообщают о тех же проблемах в журналах чатов IRC, но нигде я не нашел для этого решения. Кто-нибудь имеет этот опыт с hpc?

Изменить: как я компилирую У меня довольно сложная схема компиляции. Я на самом деле просто записал это в другом вопросе.

Я использую очень специфичную библиотеку пакетов, которую я указываю явно, используя --no-user-package-db и --package-db=/usr/local/ghc-7.6.3-200814. Это списки каталогов доступны здесь

4b9b3361

Ответ 1

Наконец-то я получил его сегодня. Я изменил свою компиляцию, чтобы вообще не иметь оптимизаций. Я запустил свой сервер из базового каталога проекта, запустив ./build/Server ...

Я создал список всех моих модулей, которые будут включены с помощью sed внутри Make.

(Моя структура каталогов совпадает с именами модулей. Например, имя файла haskell/Database/Module/Server/Server.lhs станет Database.Module.Server.Server.)

includify = $(foreach pkg,$(1), --include=$(pkg))
MODULES = $(shell find haskell -name "*.lhs" | sed -e "s/\.lhs\$$//g" | sed -e "s/^haskell\///g" | sed -e "s/\//\./g")
INCLUDES = $(call includify,$(MODULES))

а затем создал цель (внутри Make снова)

@echo "WRITING coverage/result.xml"
@hpc report Server srcdir=build $(INCLUDES) --xml-output > build/coverage/result.xml
@echo "WRITING coverage HTML FILES"
@hpc markup Server srcdir=build $(INCLUDES) --destdir=build/coverage

И вот как я решил свои проблемы.