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:
|
File Placement
-
Modules: A module package MUST be placed in the
%drupal7_modules
directory -
Themes: A theme package MUST be placed in the
%drupal7_themes
directory -
Libraries: A library package MUST be placed in the
%drupal7_libraries
directory
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-rpmbuild
package 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-rpmbuild
auro-requires “drupal7(core)” -
explicitly provide “drupal7(
`)” virtual resources because `drupal7-rpmbuild
auto-provides these
-
PHP Extensions
See Packaging:PHP#Extensions_Requires[PHP packaging guidelines].
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 Packaging:PHP#Requiring_a_Minimum_PHP_version[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-domain
package 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 http://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: GPLv2+ URL: http://drupal.org/project/%{module} Source0: http://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: GPLv2+ URL: http://drupal.org/project/%{theme} Source0: http://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