From Fedora Project Wiki
Line 60: Line 60:
! Macro !! Value !! Description
! Macro !! Value !! Description
|-
|-
| <code>%drupal8_version</code> || ''8.x.y<sup>*</sup>'' || Drupal 8 version.<br />
| <code>%drupal8_version</code> || ''8.x.y <sup>*</sup>'' || Drupal 8 version.<br />
|-
|-
| <code>%drupal8</code> || <code>%{_datadir}/drupal8</code> || Drupal 8 base directory.
| <code>%drupal8</code> || <code>%{_datadir}/drupal8</code> || Drupal 8 base directory.
|-
|-
| <code>%drupal8_modules</code> || <code>%{drupal8}/modules/rpm</code><sup>**</sup> ||  Drupal 8 modules directory.
| <code>%drupal8_modules</code> || <code>%{drupal8}/modules/rpm</code> <sup>**</sup> ||  Drupal 8 modules directory.
|-
|-
| <code>%drupal8_profiles</code> || <code>%{drupal8}/profiles/rpm</code><sup>**</sup> ||  Drupal 8 profiles directory.
| <code>%drupal8_profiles</code> || <code>%{drupal8}/profiles/rpm</code> <sup>**</sup> ||  Drupal 8 profiles directory.
|-
|-
| <code>%drupal8_themes</code> || <code>%{drupal8}/themes/rpm</code><sup>**</sup> ||  Drupal 8 themes directory.
| <code>%drupal8_themes</code> || <code>%{drupal8}/themes/rpm</code> <sup>**</sup> ||  Drupal 8 themes directory.
|-
|-
| <code>%drupal8_libraries</code> || <code>%{drupal8}/libraries</code> || Drupal 8 library directory.
| <code>%drupal8_libraries</code> || <code>%{drupal8}/libraries</code> || Drupal 8 library directory.

Revision as of 16:45, 24 January 2016

Warning.png
This is only a DRAFT!

Different Kinds of Packages

  • Modules: Modules extend and customize Drupal functionality.
  • Themes: Themes allow users to change the look and feel of their Drupal site.
  • Distributions/Profiles: Distributions/profiles provide site features and functions for a specific type of site.

Naming Scheme

Every package MUST be named drupal8-<drupal_project>. Drupal itself enforces unique project names for each of its' projects and there is a single namespace for all modules, themes, and distributions/profiles. The <drupal_project> MUST match the drupal.org project name (i.e. drupal.org/project/<drupal_project>).

File Placement

  • Modules: A module package MUST be placed in the %drupal8_modules directory
  • Themes: A theme package MUST be placed in the %drupal8_themes directory
  • Distributions/Profiles: A distribution/profile package MUST be placed in the %drupal8_profiles directory
  • Libraries: A library package MUST be placed in the %drupal8_libraries directory

Requires and Provides

Every package MUST include the following in its' spec:

BuildRequires: drupal8-rpmbuild

The drupal8-rpmbuild package automatically scans files for requires and provides and automatically adds them to the package during build time. The use of virtual provides and requires helps alleviate the confusion of sub-projects and which projects actually provide those sub-modules. They also help simplify spec files.

Automatic Requires

  • drupal8(core) is always a requirement
  • drupal8(*) requires are only determined from the project's main <drupal_project>.info.yml file
    • "dependencies" property
  • composer.json files are not used for automatic requires because of dependency version formats and minimum Fedora/EPEL version for autoloaders
  • Also see Requiring a Minimum PHP Version section

Automatic Provides

  • drupal8(*) virtual provides are determined from all project's *.info.yml file names
  • php-composer(*) virtual provides are determined from all project's composer.json files
    • name property
    • replace property where version = self.version

Drupal Projects

Every package MUST use drupal8(*) dependencies for Drupal project dependencies.

Other Packages

See PHP packaging guidelines: Other Packages.

PHP Extensions

See PHP packaging guidelines: Extensions Requires.

Requiring a Minimum PHP Version

Since all packages require drupal8(core) which requires Drupal 8's minimum PHP version, most packages do not need to require a minimum PHP version. If packages require a minimum PHP version greater than Drupal 8's minimum version, the project maintainers should have the minimum version provided in the project's main *.info.yml file and drupal8-rpmbuild will automatically find and require the minimum PHP version.

Macros and Scriptlets

Macros provided by the drupal8-rpmbuild package:

Macro Value Description
%drupal8_version 8.x.y * Drupal 8 version.
%drupal8 %{_datadir}/drupal8 Drupal 8 base directory.
%drupal8_modules %{drupal8}/modules/rpm ** Drupal 8 modules directory.
%drupal8_profiles %{drupal8}/profiles/rpm ** Drupal 8 profiles directory.
%drupal8_themes %{drupal8}/themes/rpm ** Drupal 8 themes directory.
%drupal8_libraries %{drupal8}/libraries Drupal 8 library directory.
%drupal8_var %{_localstatedir}/lib/drupal8 Drupal 8 var directory.
Note.png
  • Files are located in %{drupal8_var}/files/[public,private]/[site]
  • %{drupal8_conf}/sites/default/files symlinks to %{drupal8_var}/files/public/default

%drupal8_conf %{_sysconfdir}/drupal8 Drupal 8 conf directory.
Note.png
  • %{drupal8}/sites symlinks to %{drupal8_conf}/sites
  • Site configurations are located in %{drupal8_conf}/sites/[site]

* Value is dynamically updated by the Drupal 8 core package.

** rpm sub-directory so RPM-installed Drupal projects are separated from manually installed Drupal projects.

Template

Note.png
Replace %{__TYPE_MACRO__} in the template below with the actual macro name matching the project type:
  • %{drupal8_modules} for modules
  • %{drupal8_profiles} for profiles
  • %{drupal8_themes} for themes
%global drupal_project __DRUPAL_PROJECT__

Name:          drupal8-%{drupal_project}
Version:       __VERSION__
Release:       1%{?dist}
Summary:       __SUMMARY__

Group:         Applications/Publishing
License:       GPLv2+
URL:           https://www.drupal.org/project/%{drupal_project}
Source0:       https://ftp.drupal.org/files/projects/%{drupal_project}-8.x-%{version}.tar.gz

BuildArch:     noarch
BuildRequires: drupal8-rpmbuild

%description
__DESCRIPTION__

This package provides the following Drupal project(s):
* %{drupal_project}


%prep
%setup -qn %{drupal_project}

: Licenses and docs
mkdir -p .rpm/{licenses,docs}
mv LICENSE.txt .rpm/licenses/
mv composer.json .rpm/docs/


%build
# Empty build section, nothing to build


%install
mkdir -p %{buildroot}%{__TYPE_MACRO__}/%{drupal_project}
cp -pr * %{buildroot}%{__TYPE_MACRO__}/%{drupal_project}/


%files
%license .rpm/licenses/*
%doc .rpm/docs/*
%{__TYPE_MACRO__}/%{drupal_project}


%changelog
* ddd MMM DD YYYY __NAME__ <__EMAIL__> __VERSION__-1
- Initial package