2.7.2. Creating a Metapackage
When creating a new metapackage:
- You are advised to add
Requires: scl-utils-build
to the build subpackage. - Add any macros you need to use to the
macros.%{scl}-config
file in the build subpackage. - You are not required to use conditionals for Software Collection-specific macros in the metapackage.
- Consider specifying all packages in your Software Collection that are essential for the Software Collection run time as dependencies of the metapackage. That way you can ensure that the packages are installed with the Software Collection metapackage.
- Include any path redefinition that the packages in your Software Collection may require in the
enable
scriptlet.For example, to run Software Collection binary files, addPATH=%{_bindir}\${PATH:+:\${PATH}}
to theenable
scriptlet. - Always make sure that the metapackage contains the
%setup
macro in the%prep
section, otherwise building the Software Collection will fail. If you do not need to use a particular option with the%setup
macro, add the%setup -c -T
command to the%prep
section.This is because the%setup
macro defines and creates the%buildsubdir
directory, which is normally used for storing temporary files at build time. If you do not define%setup
in your Software Collection packages, files in the%buildsubdir
directory will be overwritten, causing the build to fail.
Example of the Metapackage
To get an idea of what a typical metapackage for a Software Collection named ruby193 looks like, see the following example:
%global scl_name_base ruby %global scl_name_version 193 %global scl %{scl_name_base}%{scl_name_version} %scl_package %scl %global _scl_prefix /opt/myorganization Summary: Package that installs %scl Name: %scl_name Version: 1 Release: 1%{?dist} License: GPLv2+ Requires: %{scl_prefix}less BuildRequires: scl-utils-build %description This is the main package for %scl Software Collection. %package runtime Summary: Package that handles %scl Software Collection. Requires: scl-utils %description runtime Package shipping essential scripts to work with %scl Software Collection. %package build Summary: Package shipping basic build configuration Requires: scl-utils-build %description build Package shipping essential configuration macros to build %scl Software Collection. # This is only needed when you want to provide an optional scldevel subpackage %package scldevel Summary: Package shipping development files for %scl %description scldevel Package shipping development files, especially useful for development of packages depending on %scl Software Collection. %prep %setup -c -T %install %scl_install cat >> %{buildroot}%{_scl_scripts}/enable << EOF export PATH=%{_bindir}\${PATH:+:\${PATH}} export LD_LIBRARY_PATH=%{_libdir}\${LD_LIBRARY_PATH:+:\${LD_LIBRARY_PATH}} export MANPATH=%{_mandir}:\$MANPATH export PKG_CONFIG_PATH=%{_libdir}/pkgconfig\${PKG_CONFIG_PATH:+:\${PKG_CONFIG_PATH}} EOF # This is only needed when you want to provide an optional scldevel subpackage cat >> %{buildroot}%{_root_sysconfdir}/rpm/macros.%{scl_name_base}-scldevel << EOF %%scl_%{scl_name_base} %{scl} %%scl_prefix_%{scl_name_base} %{scl_prefix} EOF # Install the generated man page mkdir -p %{buildroot}%{_mandir}/man7/ install -p -m 644 %{scl_name}.7 %{buildroot}%{_mandir}/man7/ %files %files runtime %scl_files %files build %{_root_sysconfdir}/rpm/macros.%{scl}-config %files scldevel %{_root_sysconfdir}/rpm/macros.%{scl_name_base}-scldevel %changelog * Fri Aug 30 2013 John Doe <jdoe@example.com> 1-1 - Initial package