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 provided by the drupal7-rpmbuild
package:
Macro Value Description
%drupal7
%{_datadir}/drupal7
Drupal 7 base directory
%drupal7_modules
%{drupal7}/modules
Drupal 7 modules directory
%drupal7_themes
%{drupal7}/themes
Drupal 7 themes directory
%drupal7_libraries
%{_sysconfdir}/drupal7/all/libraries
Drupal 7 libraries directory
%drupal7_find_provides_and_requires
Fedora: | Fedora:
%{nil}
\ No-op macro to allow spec compatibility with RPM < 4.9 (no fileattrs)\
\ \
EPEL 5/6:\ EPEL 5/6:\
%{expand:
\
\ Macro to allow spec compatibility with RPM < 4.9 (no fileattrs)
%global
_use_internal_dependency_generator
0
\
%global
__find_provides
%{_rpmconfigdir}/drupal7.prov
%{version}
\
%global
__find_requires
%{_rpmconfigdir}/drupal7.req
\
}
%drupal7_modules
directory%drupal7_themes
directory%drupal7_libraries
directorydrupal7(
)
" virtual resources instead of "drupal7-
Every package MUST include the following in its' spec:
The drupal7-rpmbuild
package automatically requires drupal7(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): %{?drupal7findprovidesandrequires}
drupal7
" or "drupal7(core)
" (unless a specific core version is required) because drupal7-rpmbuild
auro-requires "drupal7(core)
"drupal7(
)
" virtual resources because drupal7-rpmbuild
auto-provides theseTo 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
".
See PHP packaging guidelines but note that this should not normally be required by most packages (see 1).
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 "<?php
" 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
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
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.
%{?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
%{?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