A package description consists of a number of field/value pairs. A field starts with the field name in the left-hand column followed by a “:”, and the value continues until the next line that begins in the left-hand column, or the end of file.
The syntax of the value depends on the field. The various field types are:
In addition, there are some fields with special syntax (e.g. package names, version, dependencies).
-
name
-
(string) Название пакета (без версии).
-
id
-
(string) Идентификатор установленного пакета. Вы выбираете его самостоятельно.
-
version
-
(string) Версия пакета, обычно в формате A.B (разрешено любое количество компонентов).
-
license
-
(string) Тип лицензии, по которой распространяется пакет. Это поле — значение типа Distribution.License.License.
-
license-file
-
(optional string) Название файла с подробной информацией о лицензии этого пакета.
-
copyright
-
(optional freeform) Строка авторского права.
-
maintainer
-
(optional freeform) Электронный адрес основного разработчика пакета.
-
stability
-
(optional freeform) Строка, описывающая стабильность пакета (например, stable, provisional или experimental).
-
homepage
-
(optional freeform) URL домашней страницы пакета.
-
package-url
-
(optional freeform) URL загружаемого дистрибутива этого пакета. Дистрибутив должен быть пакетом Cabal.
-
description
-
(optional freeform) Описание пакета.
-
category
-
(optional freeform) Категория, к которой принадлежит пакет. Это поле используется в сочетании с будущей централизованной системой распространения пакетов, предварительно названной Hackage.
-
author
-
(optional freeform) Автор пакета.
-
exposed
-
(bool) Пакет открыт или нет.
-
exposed-modules
-
(string list) Модули, экспортируемые этим пакетом.
-
hidden-modules
-
(string list) Модули, предоставляемые этим пакетом, но не экспортируемые программисту. Эти модули нельзя импортировать, но они по-прежнему подчиняются ограничению перекрытия: ни один другой пакет в той же программе не может предоставить модуль с тем же именем.
-
reexported-modules
-
Модули, повторно экспортируемые этим пакетом. Этот список имеет вид pkg:OldName as NewName (A@orig-pkg-0.1-HASH): первая часть строки — спецификация повторного экспорта, написанная пользователем (возможно, без квалификатора пакета и переименования), а скобка — оригинальный пакет, который экспортировал модуль под определенным именем. Для повторно экспортированных модулей ограничение перекрытия ослаблено: разрешается, чтобы два пакета повторно экспортировали один и тот же модуль под одним и тем же именем, если повторно экспортированный модуль идентичен.
-
trusted
-
(bool) Пакет доверенный или нет.
-
import-dirs
-
(string list) Список каталогов, содержащих файлы интерфейса (.hi файлы) для этого пакета.
Если пакет содержит библиотеки профилирования, то файлы интерфейса для этих модулей библиотек должны иметь суффикс .p_hi. Таким образом, пакет может содержать как обычные, так и профилирующие версии одной и той же библиотеки без конфликта (см. также library_dirs ниже).
-
library-dirs
-
(string list) Список каталогов, содержащих библиотеки для этого пакета.
-
hs-libraries
-
(string list) Список библиотек, содержащих код Haskell для этого пакета, с опущенными суффиксами .a или .dll. При построении пакетов как библиотек также опускается префикс lib.
Для использования с GHCi каждая библиотека должна иметь и файл объекта. Имя файла объекта не имеет префикса lib и имеет обычный суффикс объекта для вашей платформы.
Например, если мы зададим библиотеку Haskell как HSfoo в спецификации пакета, то различные типы библиотек, которые фактически использует GHC, будут называться:
-
libHSfoo.a
-
Имя библиотеки в системах Unix и Windows (mingw).
-
HSfoo.dll
-
Имя динамической библиотеки в системах Windows (необязательно).
-
HSfoo.o; HSfoo.obj
-
Объектная версия библиотеки, используемой GHCi.
-
extra-libraries
-
(string list) Список дополнительных библиотек для этого пакета. Разница между hs-libraries и extra-libraries в том, что hs-libraries обычно имеют несколько версий для поддержки профилирования, параллельного и других вариантов построения. Различные версии различаются суффиксами, например, профилирующая версия стандартной библиотеки предопределений называется libHSbase_p.a с суффиксом _p, указывающим, что это профилирующая версия. Суффикс добавляется автоматически GHC для hs-libraries только, для библиотек в extra-libraries суффикс не добавляется.
Библиотеки, перечисленные в extra-libraries, могут быть любыми библиотеками, поддерживаемыми линковщиком вашей системы, включая динамические библиотеки (.so на Unix, .DLL на Windows).
Также extra-libraries размещаются в командной строке линковщика после hs-libraries для того же пакета. Если ваш пакет имеет зависимости в обратном направлении (т. е. extra-libraries зависит от hs-libraries), и библиотеки статические, вам может потребоваться создать два отдельных пакета.
-
include-dirs
-
(string list) Список каталогов, содержащих C-включения для этого пакета.
-
includes
-
(string list) Список файлов для включения при компиляции через C с использованием этого пакета. Обычно файл(ы) включения содержат прототипы функций любого используемого в пакете C-функции, на случай, если они окажутся вызываемыми в результате того, что Haskell-функции из пакета будут вставлены.
-
depends
-
(package id list) Пакеты, от которых зависит этот пакет.
-
hugs-options
-
(string list) Параметры, передаваемые в Hugs для этого пакета.
-
cc-options
-
(string list) Дополнительные аргументы, добавляемые в командную строку gcc при использовании этого пакета (только для компиляции через C).
-
ld-options
-
(string list) Дополнительные аргументы, добавляемые в командную строку gcc (для линковки), когда используется этот пакет.
-
framework-dirs
-
(string list) В Darwin/MacOS X, список каталогов, содержащих фреймворки для этого пакета. Соответствует опции -framework-path. Игнорируется на всех остальных платформах.
-
frameworks
-
(string list) В Darwin/MacOS X, список фреймворков для линковки. Соответствует опции -framework. Обратитесь к документации разработчика Apple, чтобы узнать, что такое фреймворки. Этот элемент игнорируется на всех других платформах.
-
haddock-interfaces
-
(string list) Список имен файлов, содержащих файлы интерфейса Haddock (.haddock файлы) для этого пакета.
-
haddock-html
-
(optional string) Каталог, содержащий сгенерированный Haddock HTML для этого пакета.