Создаем свой make файл

Создаем свой make файл

Согласитесь, помнить нужные версии контрибных модулей, выкачивать их и применять патчи вручную - довольно утомительная и трудоемкая задача. На помощь при решении этой проблемы и приходит makefile.
Makefile - файл, позволяющий вам специфицировать версии ядра и модулей, которые будут скачаны для установки в проекте. Это очень полезный и нужный инструмент, избавляющий от рутины и ускоряющий разработку.

Содержание

Создание makefile

Имя makefile может быть любым (важно, чтобы расширение было .make), но обычно название дают по имени проекта, по имени инсталяционного профиля или по имени модуля (MYPROJECT.make, MYINSTALLATIONPROFILE.make, MYMODULE.make). Создать файл можно вручную, собрав необходимое количество версий модулей и записав их, но лучше для этих целей использовать drush.
Наиболее часто используемые Drush команды:

  • drush make-generate - сгенерирует makefile и выведет его в командную строку.
  • drush make-generate MYMPROJECT.make - сгенерирует makefile в MYPROJECT.make.

Помимо этого у данной драш-команды есть еще 4 опции: --exclude-versions, --include-versions, --source, --dev. Более подробную информацию о drush make-generate и об этих опциях можно получить по ссылке [1], приведенной в конце статьи в разделе "Дополнительная информация по статье".

Указание версий модулей

Для указания версии модуля, идем на страницу проекта, например, для views https://www.drupal.org/project/views
views releases
Допустим, нас интересует стабильная версия для друпала 7. На изображении это 7.х-3.11, т.е. версия 3.11, 7.х в патче указывать не нужно.

1
2
projects[views][version] = 3.11
projects[views][subdir] = "contrib"

Эта запись означает, что будет скачан модуль views версии 3.11 и положен в папку contrib. Если папка отсутствует, она будет создана.
Что делать когда нужно скачать конкретную ревизию?
Для получения конкретной ревизии модуля запишем следующее:

1
2
3
projects[views][version] = 3.11
projects[views][subdir] = "contrib"
projects[views][download][revision] = "28d92baa758adce7329cdbd5a5b178c1d17aac22"

Как быть с дев версиями модулей?
С дев версиями нужно быть очень осторожными. Не исключено, что они привнесут много веселого в виде багов. Тем не менее дев версии модулей также могут быть включены в makefile.

1
2
3
4
projects[views][version] = "3.x-dev"
projects[views][download][type] = "git"
projects[views][download][url] = "http://git.drupal.org/project/views.git"
projects[views][download][revision] = "10e71bd493b8b36adc90ae139ec95a40d9bb8e0b"

Применение патчей

Если вам необходимо прицепить патч, то нужно добавить в makefile к релизу вот такую строчку.

1
projects[views][patch][] = "http://drupal.org/files/2059555-reduce-formatter-form-state.patch"

Сложнее дело обстоит, если нужного патча просто нет. Тогда создаем патч, создаем issue на drupal.org и выкатываем свой патч, копируем ссылку на него и вставляем в свой makefile.
Если нет желания делать все через друпал.орг или необходимо внести изменения, специфические для вашего проекта, которые не понадобятся сообществу, то придерживаемся следующей последовательности:

  • создаем патч
  • создаем папку для патчей, если еще не создана (обычно по пути sites/all/modules/patches)
  • кладем туда свой патч
  • указываем путь к патчу в makefile относительно (!) той директории, где лежит makefile.

Например, если патч находится по пути sites/all/modules/patches/my-super-patch.patch, а makefile - в корне сайта, то запись (для того же модуля views) будет следующая:

1
projects[views][patch][] = "sites/all/modules/patches/my-super-patch.patch"

Обращаю внимание на то, что если патч находится не в дочерних папках относительно makefile, то запись вида

1
projects[views][patch][] = "../../patches/my-super-patch.patch"

работать не будет.

Пример makefile

Ниже приведен пример makefile.
Рекомендуется также создавать для версии ядра и патчей для него отдельный файл, например MYPROJECT-core.make.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
api = 2
core = 7.x
projects[drupal][version] = 7.26
 
; Core patches
projects[drupal][patch][] = "http://drupal.org/files/issues/install-redirect-on-empty-database-728702-36.patch"
projects[drupal][patch][] = "http://drupal.org/files/drupal-1470656-14.patch"
projects[drupal][patch][] = "http://drupal.org/files/drupal-865536-204.patch"
projects[drupal][patch][] = "http://drupal.org/files/1275902-15-entity_uri_callback-D7.patch"
 
; Basic contributed modules.
projects[admin_menu][version] = 3.0-rc4
projects[admin_menu][subdir] = "contrib"
 
projects[ctools][version] = 1.4
projects[ctools][subdir] = "contrib"
 
projects[entity][version] = 1.3
projects[entity][subdir] = "contrib"
 
projects[libraries][version] = 2.2
projects[libraries][subdir] = "contrib"
 
projects[metatag][version] = 1.0-beta9
projects[metatag][subdir] = "contrib"
 
projects[module_filter][version] = 2.0-alpha2
projects[module_filter][subdir] = "contrib"
 
projects[navigation404][version] = 1.0
projects[navigation404][subdir] = "contrib"
 
projects[path_breadcrumbs][version] = 3.0-rc2
projects[path_breadcrumbs][subdir] = "contrib"
 
projects[pathauto][version] = 1.2
projects[pathauto][subdir] = "contrib"
 
projects[token][version] = 1.5
projects[token][subdir] = "contrib"
 
projects[transliteration][version] = 3.1
projects[transliteration][subdir] = "contrib"
 
projects[views][version] = 3.7
projects[views][subdir] = "contrib"
projects[views][patch][] = "http://drupal.org/files/2059555-reduce-formatter-form-state.patch"
 
projects[xmlsitemap][version] = 2.0-rc2
projects[xmlsitemap][subdir] = "contrib"
 
projects[colorbox][version] = 2.5
projects[colorbox][subdir] = "contrib"
 
; Libraries.
libraries[colorbox][type] = "libraries"
libraries[colorbox][download][type] = "file"
libraries[colorbox][download][url] = "https://github.com/jackmoore/colorbox/archive/master.zip" 
 
; Theme
projects[adaptivetheme][version] = 3.1

Как использовать makefile

Для запуска makefile используется все тот же драш

1
drush make MYPROJECT.make

Также есть дополнительные опции, их довольное много. Лучше с ними ознакомиться на сайте по драш командам [2] или на официальном сайте [3].

Дополнительная информация по статье

  1. http://www.drushcommands.com/drush-7x/make/make-generate - подробное описание команды drush make-genarate
  2. http://www.drushcommands.com/drush-7x/make/make - подробное описание команды drush make
  3. http://www.drush.org - официальный сайт drush