2.12. 构建 Software Collection
如果您正确地转换了软件集合的传统 spec 文件,如 第 2.10 节 “转换一个一致的 Spec 文件” 所述,您将能够在 Software Collection 和传统的构建根目录中构建生成的软件包。在传统构建 root 中构建转换的软件包将生成传统的基础系统 RPM 软件包,而构建包含 %{scl}-build 的 Software Collection 构建 root 将生成一个 Software Collection 软件包。
要在您的系统中构建 Software Collection,请运行以下命令:
rpmbuild -ba package.spec --define 'scl name'
上面显示的命令和用于构建传统软件包的标准命令(rpmbuild -ba package.spec)的区别在于,在构建 Software Collection 时必须将
--define
选项附加到 rpmbuild 命令中。
--define
选项定义 scl
宏,它使用 Software Collection spec 文件中配置的软件集合(软件包.spec
)。
另外,要使用标准命令 rpmbuild -ba package.spec 来构建 Software Collection,请在
package.spec
文件中指定以下内容:
BuildRequires: software_collection-build
其中 software_collection 是 Software Collection 的名称。
2.12.1. 在没有构建子软件包的情况下重建 Software Collection
当您要重建没有构建子软件包(software_collection-build)的软件集合时,您可以通过重建 Software Collection metapackage 来创建构建子软件包,从而避免使用 rpmbuild -ba package.spec --define 'scl name' 命令。
请注意,您需要在您的系统上安装了 scl-utils-build 软件包,否则使用 rpmbuild 命令重建 Software Collection metapackage 将失败。
有关 scl-utils-build 软件包的更多信息,请参阅 第 1.3 节 “启用对 Software Collections 的支持”。
2.12.2. 避免 debuginfo 文件冲突
当您构建指定了同一
Source
标签的两个 Software Collection 软件包(或传统的 RPM 软件包和 Software Collection 软件包),因此将源文件解包到 %_builddir
目录下的同一目录中,它们的 debuginfo
软件包将存在文件冲突。由于这些冲突,用户无法同时在同一系统中安装这两个软件包。
为避免这些文件冲突,必须更改其中一个软件包的 spec 文件,将其上游源解包到唯一的命名的根目录中。这会在
%_builddir
目录下的构建树中添加更多目录级别。这样,debuginfo
软件包生成脚本会生成 debuginfo
文件,该文件与其他 debuginfo
软件包中的文件不冲突。
要查看 diff 文件将原始 spec 文件与更改的 spec 文件进行比较,请参考以下示例:
--- a/tbb.spec +++ b/tbb.spec @@ -66,11 +66,13 @@ PDF documentation for the user of the Threading Building Block (TBB) C++ library. %prep -%setup -q -n %{sourcebasename} +%setup -q -c -n %{name} +cd %{sourcebasename} %patch1 -p1 %patch2 -p1 %build +cd %{sourcebasename} %{?scl:scl enable %{scl} - << \EOF} make %{?_smp_mflags} CXXFLAGS="$RPM_OPT_FLAGS" tbb_build_prefix=obj %{?scl:EOF} @@ -81,6 +83,7 @@ done %install rm -rf $RPM_BUILD_ROOT +cd %{sourcebasename} mkdir -p $RPM_BUILD_ROOT/%{_libdir} mkdir -p $RPM_BUILD_ROOT/%{_includedir} @@ -108,20 +111,20 @@ done %files %defattr(-,root,root,-) -%doc COPYING doc/Release_Notes.txt +%doc %{sourcebasename}/COPYING %{sourcebasename}/doc/Release_Notes.txt %{_libdir}/*.so.2 %files devel %defattr(-,root,root,-) -%doc CHANGES +%doc %{sourcebasename}/CHANGES %{_includedir}/tbb %{_libdir}/*.so %{_libdir}/pkgconfig/*.pc %files doc %defattr(-,root,root,-) -%doc doc/Release_Notes.txt -%doc doc/html +%doc %{sourcebasename}/doc/Release_Notes.txt +%doc %{sourcebasename}/doc/html %changelog * Wed Nov 13 2013 John Doe <jdoe@example.com> - 4.1-5.20130314