2011-01-09 1 views
3

Согласно wiki записи,Почему «cabal sdist» не включает все «файлы, необходимые для сборки»?

Он упаковывает файлы, необходимые для создания проекта

У меня есть простой исполняемые файлы только .cabal проект, который в основном содержит

Executable myprog 
    hs-source-dirs: src 
    main-is: MyMain.hs 

и состоит из некоторых дополнительных .hs файлов ниже src/ за пределами src/MyMain.hs. Например, src/Utils.hs и некоторые другие.

cabal build не имеет проблем со сборкой myprog, и собирает необходимые дополнительные .hs файлов ниже src/, но cabal sdist не делает, таким образом, создавая дисфункциональный исходный тарболл. Что я делаю не так? Как сообщить cabal включить все исходные файлы ниже hs-source-dirs?

В качестве побочного примечания с GNU Autotools была цель make distcheck, которая сначала создала исходный архив, а затем попыталась бы скомпилировать проект через вновь созданный исходный архив, тем самым обеспечив все в порядке. Есть ли что-то подобное для cabal, чтобы убедиться, что мой источник-архив хорош?

ответ

4

Вы должны перечислить другие файлы Haskell в файле .cabal, внутри строфы Executable.

other-modules: Utils AFewOthers 

Дистрибутив включает только исходные файлы, которые перечислены в файле .cabal. У Cabal нет другого способа определить, какие исходные файлы находятся в вашем пакете. Вы все равно можете построить, потому что cabal build вызывает ghc --make, а ghc найдет и скомпилирует все необходимые ему исходные файлы.