关于 ebuild 脚本的一系列问题。给出 devrel 的原始段落和问题

关于 ebuild 脚本的一系列问题。给出 devrel 的原始段落和问题

范围

每当获取 ebuild 时,脚本解释器就会将其中的函数和变量加载到内存中。然而,只有不属于函数一部分的变量和指令才会被解释——诸如 src_compile() 这样的函数只有在 ebuild 到达编译阶段时才会被 Portage 执行。

这些函数内的代码被认为在“本地范围”内,而函数之外的所有内容都在“全局范围”内,这意味着它们在每次 ebuild 被获取时都会执行。

出于性能原因,不应在全局范围内调用外部应用程序(例如 grep、sed 或 awk),而应使用诸如使用内置 bash 替换之类的替代方法。有用的替代方案可以在高级 Bash 脚本指南中找到。

此外,不能保证可以在全局范围内调用的任何外部应用程序存在于系统上。如果命令放置在本地范围内(例如,在pkg_setup()函数中),我们可以通过将其放置在 ebuild 的${DEPEND}.

  1. ebuild 被采购意味着什么?它可以是源命令吗(顺便说一句,我不明白它,它来自书籍,并且没有“man source”。

  2. 好的,变量 - 如何解释它们?我以某种方式理解函数是如何做到的。函数可能是某种类型的编程。它是编译型的或解释型的。如果ebuild语言是脚本语言(可能是bash) - 就像Gentoo Portage中广泛使用的pearl或python一样,ebuild如何包含编译功能(我记得学校的pascal中的一些)。

  3. 因此什么是src_compile()功能 - revdel 中没有提到它。

  4. “编译阶段”——这个术语说明了什么?这些 ebuild 阶段或 ebuild 阶段是什么?

  5. 本地/全局范围也是如此。我完全不明白,连同一些内部应用程序 - 无法理解也提到了相反的想法(awk..)。

  6. pkg_setup()函数,$DEPEND- 这些只是示例还是暗示隐含含义?

答案1

Ebuild 是 shell 脚本(实际上是 bash 脚本)。因此它们的工作方式类似于 shell 脚本,具有变量并定义函数。但 ebuild 并不直接运行 - 您通过emerge(或ebuild有时直接)运行它们,通过按所需顺序从 ebuild 调用适当的函数来驱动准备、构建和安装过程。

Q1: ebuild 被采购意味着什么?
Q2:变量 - 如何解释它们?
Q5:范围

与 shell 脚本相同,使用source内置命令(请参阅man bash参考资料)。这意味着脚本(在本例中为 ebuild)由当前 shell(由 驱动emerge)读取并进行处理,就好像它是调用脚本的一部分一样。
这会处理所有变量定义,将它们添加到调用脚本的环境中,并解析 ebuild 中定义的所有函数 - 但不运行这些函数。
变量可以非常简单,例如:

DEPEND=">=dev-foo/bar-42"

它不需要解释,或者可以包含对其他变量的引用,例如:

DEPEND=">=some-cat/related-${PV}"

它需要变量插值,或者可以使用更复杂的定义,需要运行 bash 内置命令或外部程序来解释。这并不是 ebuild 特有的,而是普通的脚本。

ebuilds 中的作用域没有什么具体的内容,它与普通脚本中的作用域相同。

第四季度:阶段
第三季度&第六季度: src_compile, pkg_setup,${DEPEND}

从源安装包的过程分为多个步骤,大致是准备(下载、解压和配置源)、编译、安装和安装后任务。 Ebuild 维护者可以提供在每个不同阶段执行的函数来定制构建。您可以在中找到阶段列表EAPI 用法和说明开发人员的。手动的。
预定义变量和 ebuild 变量在变量同一手册的部分。${DEPEND}是其中之一。

src_compile如果需要在安装包之前编译源代码,则 ebuild 必须提供(直接或间接)的功能之一。并非所有 ebuild 都需要这个(例如,可以仅安装不需要编译的图标/主题/图像),但它们通常需要。 ebuild 维护者的工作是创建该函数,以便它正确构建源包。
pkg_setup是在安装的早期阶段将调用的函数之一。

相关内容