打包 - 2. 软件包描述文件
2.1 文件树结构
软件包描述文件保存在 /opt/sw/fink/dists
目录树内的 finkinfo
目录中。
/opt/sw/etc/fink.conf
中的 "Trees" 设置控制会控制应该读取那个目录。
软件包描述文件的名字必须要软件包全名加上 ".info" 扩展名组成。
从 fink 0.13.0 开始,为了简化软件包的升级,也可以允许简单地使用软件包加 ".info" 来组成。
As of fink 0.26.0, there are several different ways to specify the
filename: it is recommended to use the shortest version which is
consistent with other needed package files. The filename takes
the form: the invariant packagename, optionally
followed by the architecture, optionally followed by the
distribution,
optionally followed by either version or version-revision, each delimited by
hyphens, concluding with ".info".
The "architecture" and "distribution" components are only allowed
if the corresponding field is present in the package, and if it specifies
exactly one value.
到软件包描述文件的目录树由几层目录组成。 自上而下顺序为:
dists
是目录的起点。dists
对 Debian 工具来说是必须的。 In recent versions of fink, this is a symlink to a directory with a distribution-inspired name.- 发布类型。可以是
stable
,unstable
和local
。local
目录由本机的管理员/用户控制。stable
和unstable
目录则是 Fink 的一部分。 - 目录树。
The
main
tree contains the bulk of the packages. Prior to July 1, 2010, the Cryptographic software was kept in a separate tree,crypto
, but this is now a section of themain
tree. finkinfo
及binary-darwin-powerpc
。finkinfo
目录中包含了 Fink 软件包描述文件和补丁,而binary-darwin-powerpc
则包含了.deb
二进制软件包。- 分组。
main
目录树按类别被分成几组以方便管理。
2.2 文件格式
描述文件只是键-值对的简单列表,一个键-值对有时也称为一个“字段”。 每一行由一个以冒号(:)为结束的键开始,然后跟着是相对应的值,就象这样:
Key: Value
当你需要把一个分成几行书写的时候,可以有两种标记办法。
推荐的方式是通常用于在 shell 脚本 here-document 语法。这种方法第一行是键,然后跟着以 <<
为它的取值。
在这之后,在下一个 <<
之前的所有行会被视作实际的取值。
下面是一个例子:
InstallScript: << mkdir -p %i/share/man make install prefix=%i mandir=%i/share/man mkdir -p %i/share/doc/%n install -m 644 COPYING %i/share/doc/%n <<
在这种格式下,缩进是可选的,但它可以改进可阅读性。
这种 here-document 语法格式可以嵌套使用。这通常使用于 SplitOff
或 SplitOffN
字段。
这些字段包含其它字段(多行),因此通过这种语法可以使得子字段也可以具有多行。在子的 here-document 块中同样使用的 <<
作为终结符。
下面是一个例子:
SplitOff: << Package: %N-shlibs InstallScript: << ln -s %p/lib/libfoo.2.dylib %i/lib/libfoo.%v.dylib << <<
另外一种旧的,已经过时的标记方法是参照 RFC 822 数据包头的分行方式。 以空白字符开始的行会被当作上一行的继续。 例子:
InstallScript: mkdir -p %i/share/man make install prefix=%i mandir=%i/share/man mkdir -p %i/share/doc/%n install -m 644 COPYING %i/share/doc/%n
注意上面续行中强制要求的缩进格式。
在两种格式中,空行或以井号(#)打头的行都会被忽略。
键(字段名)在 Fink 中是区分大小写的,你可以随便使用
InstallScript
,installscript
或
INSTALLSCRIPT
。
不过,建议使用首字母大写的方式以方便阅读。
对于那些使用布尔值的字段-"true","yes","on","1"(不区分大小写),都会被认为是真值,而其它的值则会被认为是假值。
2.3 百分号展开
为了简化一些书写,Fink 在一些字段中支持一套展开(替换)规则。
为了避免含混,你可以使用大括号来指明确切是那些字母需要作为百分号展开。
例如,%{n}
与 %n
的含义是一样的。
目前支持的展开包括:
%n |
当前软件包的名字(name) |
%N |
父软件包的名字(Name),除非在
注意:如果父 |
%e |
软件包的额外版本标识(epoch)。它主要用于强行替代版本号的顺序,比方说你现在已经有一个 2.0Beta1 版,然后现在 2.0 版出来了,显然 2.0 版应该是一个更新的版本。但是 字符串比较的结果却是 2.0Beta1 < 2.0。所以,要么你只能把 2.0 命名为 2.0Final,要么你使用 epoch 来强行制定版本的先后顺序。比方说:epcho 1, version 1.0 是一个比 epcho 0, version 2.0 更新的版本。 |
%v |
软件包的版本号(version) |
%V |
the full package Version, which automatically includes the Epoch
if present. Note that this percent expansion is only available for
packages whose |
%r |
软件包的修订版号(revision) |
%f |
完整的(full)软件包名,即 %n-%v-%r.
Note that the Epoch is not part of |
%p, %P |
the prefix where Fink is installed, e.g. |
%d |
要打包的全套文件将被构建于的目标(destination)目录,例如:
|
%D |
父文件包的目标(Destination)目录(除非是在 |
%i |
安装态(install-phase)的完整路径前缀,等于 %d%p。安装态是指从源代码编译安装到临时位置后的状态,然后我们需要把它封装成 .deb 包。 |
%I |
父软件包的安装(Install)态路径前缀,等于 %D%P(除非是 |
%a |
补丁(patches)程序所在的路径 |
%b |
构建(build)过程所在的目录,例如: 注意:仅在没有其它选择的情况下才使用它。构建目录是脚本运行的当前目录;在命令中你应该使用相对路径。 |
%c |
configure 命令将使用的参数: |
%m |
机器(machine)体系架构类型字符串,这和
|
%% |
百分号字符(它部分展开后面跟着它的东西)。展开严格按照从左到右的顺序进行,所以 %%n 和软件包名没有关系,而只是字符串 %n。(从 fink-0.18.0 开始引入) |
%type_raw[类型], %type_pkg[类型], %type_num[类型] |
对给定类型返回的代表子类型的伪哈希值。
查阅本文档后面关于 |
%{ni}, %{Ni} |
软件包的固定名称(name invariant)部分。 它们和 %n 和 %N 类似,除了所有 %type_pkg[] 和 %type_raw[] 被去掉。 (在 fink 的 CVS 0.19.2 后版本中引入)。 你应该使用 %{ni} 和 %{Ni} 以避免与 %n 和 %N 扩展相混淆。 |
%{default_script} |
Valid only in |
%{PatchFile} |
The full path to the file given in the |
%lib |
If Note that |
Next: 3. 打包相关规则