BuildSystem

1、组成

MagicInstaller 选用 scons 而不是 autoconf + automake + libtools + make 是因为 scons 能够比较容易、清晰而准确地控制依赖关系。目前 scons 对文件安装的 支持还很不够,所以在 MagcInstaller 的 BuildSystem 增加了一些函数以进行弥补。 由于本人对 scons 的了解尚不深入,这些必要的弥补还不够完善。

BuildSystem 能够使创建过程尽可能地自动化,从而提高创建效率、减少手工操作 引入错误的机会。这是引入 BuildSystem 的主要理由。在比较复杂的项目中, BuildSystem 是必不可少的。

MagicInstaller 的 BuildSystem 由 MagicInstaller/SConstruct、所有子目录中的 SConscript、MagicInstaller 和 MagicInstaller/scripts 目录中的 .py 脚本组成。 MagicInstaller/scripts 目录是专门用来保存 BuildSystem 需要的脚本的。其中:

各目录中的 SConscript 在相应的页面中根据情况进行介绍。

2、MagicInstaller 源代码目录结构

3、创建参数和创建目标

3.1、scons 参数

BuildSystem 的使用者,是 MagicInstaller 的开发者和 MagicLinux 的发行者。在 本文以后的部分以“使用者”表示开发者和发行者。

为了简化使用者获得目标文件的工作,BuildSystem 允许使用者提供参数以控制 BuildSystem 的行为。在 MagicInstaller 中,可以运行 scons -h 以获得关于创建参数 的求助信息。目前支持的创建参数有:

除了直接在调用 scons 的时候给出命令行参数以外,使用者还可以通过编辑 MagicInstaller/pkgarrangement.py 这个文件以控制各光盘的容量、软件包在不同光盘 内的分布,并对软件包之间的依赖关系进行微调。详情请参见 这里

3.2、创建目标

BuildSystem 的默认创建目标是 allisos,也就是创建发行版的所有光盘 .iso 文件。 为了完成此目标,它依赖于一些其它目标。下面给出各个创建目标之间的依赖层次关系 (名称后接(V)的表示虚拟目标):

4、源代码说明

此处只说明比较复杂的几个 SConstruct、SConscript。

4.1、MagicInstaller/SConstruct

此脚本是主创建脚本,除了组成了所有 3.2 节中说明的目标及相互的依赖关系之外, 还完成了以下功能:

4.2、MagicInstaller/MagicBooter/SConscript

此脚本分三种模式创建 MagicBooter。三种创建模式共享实际运行模式负责创建的 busybox-0.60.5/init.o、busybox-0.60.5/libbb.a、mxml-1.0/libmxml.a。不同的创建 模式,定义不同的宏来编译 MagicBooter.c。

4.3、MagicInstaller/src/magic.installer/SConscript

此脚本的内容如下:

4.4、MagicInstaller/src/magic.installer/po/SConscript

此脚本主要完成: