4.4. Extending the perl516 Software Collection
This section describes extending the perl516 Software Collection by building your own dependent Software Collection.
Important
Examples described in this section only work as expected when extending the perl516 Software Collection with packages that:
- do not provide any Perl modules, and
- only depend on Perl modules provided by the perl516 Software Collection.
4.4.1. The h2m144 Software Collection
This section contains a commented example of a dependent Software Collection's metapackage. The dependent Software Collection is named h2m144 and contains the help2man Perl package version 1.44.1. The h2m144 Software Collection depends on the perl516 Software Collection.
Note the following in the h2m144 Software Collection spec file:
- The h2m144 Software Collection spec file has the following build dependency set:
BuildRequires: %{scl_prefix_perl}scldevel
This expands toperl516-scldevel
.The perl516-scldevel subpackage contains two important macros,%scl_perl
and%scl_prefix_perl
, and also provides Perl dependency generators. Note that the macros are defined at the top of the spec file. Although the definitions are not required, they provide a visual hint that the h2m144 Software Collection has been designed to be built on top of the perl516 Software Collection. They also serve as a fallback value. - The h2m144-build subpackage has the following dependency set:
Requires: %{scl_prefix_perl}scldevel
This expands to perl516-scldevel. The purpose of this dependency is to ensure that the macros and dependency generators are always present when building packages for the h2m144 Software Collection. - The
enable
scriptlet for the h2m144 Software Collection contains the following line:. scl_source enable %{scl_perl}
Note the dot at the beginning of the line. This line makes the Perl Software Collection start implicitly when the h2m144 Software Collection is started so that the user can only typescl enable h2m144 command
instead ofscl enable perl516 h2m144 command
to run command in the Software Collection environment. - The macro file
macros.h2m144-config
calls the Perl dependency generators, and certain Perl-specific macros used in other packages' spec files.
%global scl h2m144 %scl_package %scl # Default values for the perl516 Software Collection. These # will be used when perl516-scldevel is not in the build root. %{!?scl_perl:%global scl_perl perl516} %{!?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 perl516-scldevel # package in the build root. BuildRequires: %{scl_prefix_perl}scldevel # Require perl516-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 perl516-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 perl516 h2m144 'bash' cat >> %{buildroot}%{_scl_scripts}/enable << EOF . scl_source enable %{scl_perl} export PATH=%{_bindir}\${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 %scl_files %files build %{_root_sysconfdir}/rpm/macros.%{scl}-config %changelog * Tue Apr 22 2014 John Doe <jdoe@example.com> - 1-1 - Initial package.