Naming Scheme
Every package MUST be named drupal7-`<drupal_machine_name>. Drupal itself enforces unique machine names for each of its projects and there is a single namespace for all modules, themes, and distributions/profiles. The <drupal_machine_name>` MUST match the drupal.org project name (i.e. drupal.org/project/`<drupal_machine_name>`).
Macros and Scriptlets
Macros provided by the drupal7-rpmbuild package:
| Macro | Value | Description |
|---|---|---|
|
|
Drupal 7 base directory |
|
|
Drupal 7 modules directory |
|
|
Drupal 7 themes directory |
|
|
Drupal 7 libraries directory |
|
Fedora:
|
Fedora:
No-op macro to allow spec compatibility with RPM < 4.9 (no fileattrs) |
File Placement
-
Modules: A module package MUST be placed in the
%drupal7_modulesdirectory -
Themes: A theme package MUST be placed in the
%drupal7_themesdirectory -
Libraries: A library package MUST be placed in the
%drupal7_librariesdirectory
Requires and Provides
-
Every package MUST require “drupal7(``)” virtual resources instead of “drupal7-” packages.
-
Every package MUST include the following in its' spec:
-
The
drupal7-rpmbuildpackage automatically requiresdrupal7(core)and scans files for provides (from *.info files) and automatically adds them to the package during build time as “drupal7(``)” virtual resources. Hidden projects are ignored. The use of virtual provides and requires helps alleviate the confusion of sub-modules and which modules actually provide those sub-modules.BuildRequires: drupal7-rpmbuild >= 7.23-3
-
For compatibility with RPM < 4.9 (i.e. EPEL 5/6):
%{?drupal7_find_provides_and_requires}
-
-
Every package MUST NOT:
-
explicitly require “drupal7” or “drupal7(core)” (unless a specific core version is required) because
drupal7-rpmbuildauro-requires “drupal7(core)” -
explicitly provide “drupal7(
`)” virtual resources because `drupal7-rpmbuildauto-provides these
-
PHP Extensions
To get a list of required PHP extensions, use PHP_CompatInfo (phpcompatinfo):
phpcompatinfo print --recursive --report=extension unpacked_package_source_directory
To install PHP_CompatInfo (phpcompatinfo), run “yum install php-bartlett-PHP-CompatInfo”.
Requiring a Minimum PHP Version
See PHP packaging guidelines but note that this should not normally be required by most packages (see 1).
Common Issues
-
On RHEL 5/6 there is an issue with the standard auto-requires script (
/usr/lib/rpm/find-requires). When there is no “#!” (she-bang) line at the beginning of an executable PHP file, the script tries to add an invalid "+ " as a dependency. Rpmbuild then errors out with something similar to the following:
RPM build errors:
line 53: Dependency tokens must begin with alpha-numeric, '_' or '/': -
+
To fix this issue, find the files that incorrectly have their executable bit set and remove the executable bit in the spec’s %prep section. If there should be no executable files in the package then the following could be added to the spec’s %prep section:
+
find . -type f -executable -print0 | xargs -0 chmod -x
+
Additional Hints
-
Every module package SHOULD list the Drupal modules it provides in its description:
This package provides the following Drupal module(s): * %{module}For example, the
drupal7-domainpackage contains the following in its description:This package provides the following Drupal modules: * %{module} * %{module}_alias * %{module}_conf * %{module}_content * %{module}_nav * %{module}_settings * %{module}_source * %{module}_strict * %{module}_theme== Templates
RPM README
After installation, you must enable this module from the Drupal administration page. If upgrading this module separately from the core Drupal package, be sure to run the https://hostname/drupal7/upgrade.php script after this RPM is upgraded.
Module
%{?drupal7_find_provides_and_requires}
%global module __MODULE__
Name: drupal7-%{module}
Version: __VERSION__
Release: 1%{?dist}
Summary: __SUMMARY__
Group: Applications/Publishing
License: GPL-2.0-or-later
URL: https://drupal.org/project/%{module}
Source: https://ftp.drupal.org/files/projects/%{module}-7.x-%{version}.tar.gz
Source1: %{name}-RPM-README.txt
BuildArch: noarch
BuildRequires: drupal7-rpmbuild >= 7.23-3
# phpcompatinfo (computed from version __VERSION__)
#Requires: php-
%description
__DESCRIPTION__
This package provides the following Drupal module(s):
* %{module}
%prep
%setup -qn %{module}
cp -p %{SOURCE1} .
%build
# Empty build section, nothing to build
%install
mkdir -pm 0755 %{buildroot}%{drupal7_modules}/%{module}
cp -pr * %{buildroot}%{drupal7_modules}/%{module}/
%files
%doc *.txt
%{drupal7_modules}/%{module}
%exclude %{drupal7_modules}/%{module}/*.txt
%changelog
* ddd MMM DD YYYY __NAME__ <__EMAIL__> __VERSION__-1
- Initial package
Theme
%{?drupal7_find_provides_and_requires}
%global theme __THEME__
Name: drupal7-%{theme}
Version: __VERSION__
Release: 1%{?dist}
Summary: __SUMMARY__
Group: Applications/Publishing
License: GPL-2.0-or-later
URL: https://drupal.org/project/%{theme}
Source: https://ftp.drupal.org/files/projects/%{theme}-7.x-%{version}.tar.gz
Source1: %{name}-RPM-README.txt
BuildArch: noarch
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
BuildRequires: drupal7-rpmbuild >= 7.23-3
# phpcompatinfo (computed from version __VERSION__)
#Requires: php-
%description
__DESCRIPTION__
%prep
%setup -qn %{theme}
cp -p %{SOURCE1} .
%build
# Empty build section, nothing to build
%install
mkdir -pm 0755 %{buildroot}%{drupal7_themes}/%{theme}
cp -pr * %{buildroot}%{drupal7_themes}/%{theme}/
%files
%doc *.txt
%{drupal7_themes}/%{theme}
%exclude %{drupal7_themes}/%{theme}/*.txt
%changelog
* ddd MMM DD YYYY __NAME__ <__EMAIL__> __VERSION__-1
- Initial package
Want to help? Learn how to contribute to Fedora Docs ›