4.4. 扩展 rh-perl524 Software Collection
本节论述了通过构建您自己的依赖软件集合来扩展 rh-perl524 Software Collection。
重要
本节中描述的示例只适用于使用以下软件包扩展 rh-perl524 Software Collection 时按预期工作:
- 不要提供任何 Perl 模块,以及
- 仅依赖于 rh-perl524 Software Collection 提供的 Perl 模块。
4.4.1. h2m144 Software Collection
本节包含依赖 Software Collection 的 metapackage 的注释示例。依赖软件包名为 h2m144,包含 help2man Perl 软件包版本 1.44.1。h2m144 Software Collection 依赖于 rh-perl524 Software Collection。
请注意,h2m144 Software Collection metapackage 中的以下内容:
- h2m144 Software Collection metapackage 设置了以下构建依赖项:
BuildRequires: %{scl_prefix_perl}scldevel
这会扩展到 rh-perl524-scldevel。rh-perl524-scldevel 子软件包包含两个重要的宏%scl_perl
和%scl_prefix_perl
,并提供 Perl 依赖项生成器。请注意,宏在 metapackage spec 文件的顶部定义。虽然定义不是必需的,但它们提供了一个可视化提示,但 h2m144 Software Collection 已设计为基于 rh-perl524 Software Collection 构建。它们也充当回退值。 - h2m144-build 子软件包设置了以下依赖项:
Requires: %{scl_prefix_perl}scldevel
这会扩展到 rh-perl524-scldevel。此依赖项的目的是确保在为 h2m144 软件集合构建软件包时始终存在宏和依赖项生成器。 - h2m144 Software Collection 的
enable
scriptlet 包含以下行:. scl_source enable %{scl_perl}
请注意行开头的点。当 h2m144 Software Collection 启动时,此行使 Perl Software Collection 会隐式启动,以便用户只能键入 scl enable h2m144 命令而不是 scl enable rh-perl524 h2m144 命令在 Software Collection 环境中运行命令。 - 宏文件
macros.h2m144-config
调用 Perl 依赖项生成器,以及其它软件包规格文件中使用的特定于 Perl 的宏。
%global scl h2m144 %scl_package %scl # Default values for the rh-perl524 Software Collection. These # will be used when rh-perl524-scldevel is not in the build root. %{!?scl_perl:%global scl_perl rh-perl524} %{!?scl_prefix_perl:%global scl_prefix_perl %{scl_perl}-} # Only for this build, override __perl_requires for the automatic dependency # generator. %global __perl_requires /usr/lib/rpm/perl.req.stack Summary: Package that installs %scl Name: %scl_name Version: 1 Release: 1%{?dist} License: GPLv2+ BuildRequires: scl-utils-build # Always make sure that there is the rh-perl524-scldevel # package in the build root. BuildRequires: %{scl_prefix_perl}scldevel # Require rh-perl524-perl-macros; you will need macros from that package. BuildRequires: %{scl_prefix_perl}perl-macros Requires: %{scl_prefix}help2man %description This is the main package for %scl Software Collection. %package runtime Summary: Package that handles %scl Software Collection. Requires: scl-utils Requires: %{scl_prefix_perl}runtime %description runtime Package shipping essential scripts to work with %scl Software Collection. %package build Summary: Package shipping basic build configuration Requires: scl-utils-build # Require rh-perl524-scldevel so that there is always access to the %%scl_perl # and %%scl_prefix_perl macros in builds for this Software Collection. Requires: %{scl_prefix_perl}scldevel %description build Package shipping essential configuration macros to build %scl Software Collection. %prep %setup -c -T %build %install %scl_install # Create the enable scriptlet that: # - Adds an additional load path for the Perl interpreter. # - Runs scl_source so that you can run: # scl enable h2m144 'bash' # instead of: # scl enable rh-perl524 h2m144 'bash' cat >> %{buildroot}%{_scl_scripts}/enable << EOF . scl_source enable %{scl_perl} export PATH="%{_bindir}:%{_sbindir}\${PATH:+:\${PATH}}" export MANPATH="%{_mandir}:\${MANPATH:-}" EOF cat >> %{buildroot}%{_root_sysconfdir}/rpm/macros.%{scl}-config << EOF %%scl_package_override() %%{expand:%%global __perl_requires /usr/lib/rpm/perl.req.stack %%global __perl_provides /usr/lib/rpm/perl.prov.stack %%global __perl %{_scl_prefix}/%{scl_perl}/root/usr/bin/perl } EOF %files %files runtime -f filelist %scl_files %files build %{_root_sysconfdir}/rpm/macros.%{scl}-config %changelog * Tue Apr 22 2014 John Doe <jdoe@example.com> - 1-1 - Initial package.
4.4.2. help2man 软件包
以下是 help2man 软件包 spec 文件的注释示例。在 spec 文件中记录以下内容:
BuildRequires
标签前缀为%{?scl_prefix_perl}
而不是%{scl_prefix}
。
%{?scl:%scl_package help2man} %{!?scl:%global pkg_name %{name}} # Supported build option: # # --with nls ... build this package with --enable-nls %bcond_with nls Name: %{?scl_prefix}help2man Summary: Create simple man pages from --help output Version: 1.44.1 Release: 1%{?dist} Group: Development/Tools License: GPLv3+ URL: http://www.gnu.org/software/help2man Source: ftp://ftp.gnu.org/gnu/help2man/help2man-%{version}.tar.xz %{!?with_nls:BuildArch: noarch} BuildRequires: %{?scl_prefix_perl}perl(Getopt::Long) BuildRequires: %{?scl_prefix_perl}perl(POSIX) BuildRequires: %{?scl_prefix_perl}perl(Text::ParseWords) BuildRequires: %{?scl_prefix_perl}perl(Text::Tabs) BuildRequires: %{?scl_prefix_perl}perl(strict) %{?with_nls:BuildRequires: %{?scl_prefix_perl}perl(Locale::gettext) /usr/bin/msgfmt} %{?with_nls:BuildRequires: %{?scl_prefix_perl}perl(Encode)} %{?with_nls:BuildRequires: %{?scl_prefix_perl}perl(I18N::Langinfo)} Requires: %{?scl_prefix_perl}perl(:MODULE_COMPAT_%(%{?scl:scl enable %{scl_perl} '}eval "`perl -V:version`"; echo $version%{?scl:'})) Requires(post): /sbin/install-info Requires(preun): /sbin/install-info %description help2man is a script to create simple man pages from the --help and --version output of programs. Since most GNU documentation is now in info format, this provides a way to generate a placeholder man page pointing to that resource while still providing some useful information. %prep %setup -q -n help2man-%{version} %build %configure --%{!?with_nls:disable}%{?with_nls:enable}-nls --libdir=%{_libdir}/help2man %{?scl:scl enable %{scl} "} make %{?_smp_mflags} %{?scl:"} %install %{?scl:scl enable %{scl} "} make install_l10n DESTDIR=$RPM_BUILD_ROOT %{?scl:"} %{?scl:scl enable %{scl} "} make install DESTDIR=$RPM_BUILD_ROOT %{?scl:"} %find_lang %pkg_name --with-man %post /sbin/install-info %{_infodir}/help2man.info %{_infodir}/dir 2>/dev/null || : %preun if [ $1 -eq 0 ]; then /sbin/install-info --delete %{_infodir}/help2man.info \ %{_infodir}/dir 2>/dev/null || : fi %files -f %pkg_name.lang %doc README NEWS THANKS COPYING %{_bindir}/help2man %{_infodir}/* %{_mandir}/man1/* %if %{with nls} %{_libdir}/help2man %endif %changelog * Tue Apr 22 2014 John Doe <jdoe@example.com> - 1.44.1-1 - Built for h2m144 SCL.
4.4.3. 构建 h2m144 Software Collection
构建 h2m144 Software Collection:
- 安装作为 perl524 Software Collection 一部分的 rh-perl524-scldevel 和 rh-perl524-perl-macros 软件包。
- 构建 h2m144.spec 并安装 h2m144-runtime 和 h2m144-build 软件包。
- 安装 rh-perl524-perl,rh-perl524-perl-Text-ParseWords 和 rh-perl524-perl-Getopt-Long 软件包,这是 help2man 的构建要求。
- 构建
help2man.spec
。
4.4.4. 测试 h2m144 Software Collection
测试 h2m144 Software Collection:
- 安装 h2m144-help2man 软件包。
- 运行以下命令:
$
scl enable h2m144 'help2man bash'
- 验证输出是否类似于以下行:
.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.44.1. .TH BASH, "1" "April 2014" "bash, version 4.1.2(1)-release (x86_64-redhat-linux-gnu)" "User Commands" .SH NAME bash, \- manual page for bash, version 4.1.2(1)-release (x86_64-redhat-linux-gnu) .SH SYNOPSIS .B bash [\fIGNU long option\fR] [\fIoption\fR] ... .SH DESCRIPTION GNU bash, version 4.1.2(1)\-release\-(x86_64\-redhat\-linux\-gnu) .IP bash [GNU long option] [option] script\-file ... .SS "GNU long options:" .HP \fB\-\-debug\fR