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 to perl516-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 type scl enable h2m144 command instead of scl 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.