LINUX.ORG.RU

[haskell][[cabal] Парсер файлов-спецификаций

 


0

1

Использую readPackageDescription из Distribution.PackageDescription.Parse. Прихожу к выводу, что полученный GenericPackageDescription содержит вызывающе неверную информацию. В частности в поле PackageDescription library всегда Nothing, а buildDepends - []. Возникают следующие вопросы: я чего-то непонимаю в этой жизни или парсер просто врёт? как в таком случае добыть информацию о зависимостях пакета?

ghc 6.12.3, Cabal 1.8.0.6.

★★★★★

Последнее исправление: KblCb (всего исправлений: 1)

Описания библиотек и бинарей лежат в полях condLibrary, condExecutables у GenericPackageDescription. Видимо у PackageDescription упомянутые поля по старой памяти остались. В тех же condLibrary, condExecutables лежат и зависимости.

balodja ★★★
()
Ответ на: комментарий от balodja

Странно. Нигде не видел что они deprecated. Кроме того, если я правильно понимаю в полях condLibrary и condExecutables могут лежать разные зависимости и извлечение их оттуда представляет собой какую-то мороку.

KblCb ★★★★★
() автор топика
Ответ на: комментарий от KblCb

Ну, есть Distribution.PackageDescription.Configuration.flattenPackageDescription.

> readPackageDescription normal "binary.cabal" >>= \d -> return (library . flattenPackageDescription $ d)
Just (Library {exposedModules = [ModuleName ["Data","Binary"],ModuleName ["Data","Binary","Put"],ModuleName ["Data","Binary","Get"],ModuleName ["Data","Binary","Builder"]], libExposed = True, libBuildInfo = BuildInfo {buildable = True, buildTools = [], cppOptions = ["-DBYTESTRING_IN_BASE","-DAPPLICATIVE_IN_BASE"], ccOptions = [], ldOptions = [], pkgconfigDepends = [], frameworks = [], cSources = [], hsSourceDirs = ["src"], otherModules = [], extensions = [CPP,FlexibleContexts], extraLibs = [], extraLibDirs = [], includeDirs = [], includes = [], installIncludes = [], options = [(GHC,["-O2","-Wall","-fliberate-case-threshold=1000"])], ghcProfOptions = [], ghcSharedOptions = [], customFieldsBI = [], targetBuildDepends = []}})

Но им пользоваться скорее всего не следует, о чем честно предупреждают по ссылке.

balodja ★★★
()
Ответ на: комментарий от KblCb

> Кроме того, если я правильно понимаю в полях condLibrary и condExecutables могут лежать разные зависимости...

build-depends уже давно указывают для различных библиотек и бинарей из пакета раздельно. Что, имхо, вполне разумно.

balodja ★★★
()
Ответ на: комментарий от balodja

Пардон, s/для различных библиотек и бинарей/для библиотек и различных бинарей/.

balodja ★★★
()
Ответ на: комментарий от balodja

Вот у меня есть Setup.hs. Как мне при помощи него собрать только один бинарь или одну битлотеку, чтобы вопользоваться мощным знанием о раздельных зависимостях?

KblCb ★★★★★
() автор топика
Ответ на: комментарий от balodja
readPackageDescription normal "binary.cabal" >>= \d -> return (library . flattenPackageDescription $ d)

ZOMG

anonymous
()
Ответ на: комментарий от KblCb

Не в курсе, но подозреваю, что со стандартным defaultMain этого не сделать.

balodja ★★★
()
Ответ на: комментарий от balodja

Блин, и уже не исправишь.

KblCb ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.