PatchHowto: различия между версиями

Материал из ALT Linux Wiki
м (так лучше?)
мНет описания правки
 
(не показаны 2 промежуточные версии 1 участника)
Строка 1: Строка 1:
[[Категория:Devel]]
[[Категория:Devel]]
[[Категория:RPM spec]]
[[Категория:RPM spec]]
{{Stub}}
{{викифицировать}}
== Как делать патчи ==
== Как делать патчи ==
Краткая инструкция для «начинающих».
Краткая инструкция для «начинающих».
Строка 37: Строка 35:
Первое из них — это запись о патче. Рекомендую положить ее рядом с тегом <tt>Source</tt>. Перед патчем желательно поместить какой-нибудь комментарий — для чего этот патч.
Первое из них — это запись о патче. Рекомендую положить ее рядом с тегом <tt>Source</tt>. Перед патчем желательно поместить какой-нибудь комментарий — для чего этот патч.


  # Name's upsteam doesn't want my patch, so I'll place it here.
  # Name's upstream doesn't want my patch, so I'll place it here.
  # It makes all plugins properly linked.
  # It makes all plugins properly linked.
  Patch0: name-1.0-alt-link-fixes.patch
  Patch0: name-1.0-alt-link-fixes.patch
Строка 45: Строка 43:
Для патча, созданного через {{cmd|gendiff}} — надо написать следующее:
Для патча, созданного через {{cmd|gendiff}} — надо написать следующее:


  # Name's upsteam doesn't want my patch, so I'll place it here.
  # Name's upstream doesn't want my patch, so I'll place it here.
  # It makes all plugins properly linked.
  # It makes all plugins properly linked.
  %patch0 -p1 -b .link-fixes
  %patch0 -p1 -b .link-fixes

Текущая версия от 14:54, 30 июня 2017

Как делать патчи

Краткая инструкция для «начинающих».

Распаковать апстримные исходники. Допустим, что они распакованы в каталог name-1.0/

Далее надо туда зайти. Перед изменением каждого файла надо создать его копию с расширением .orig.

То есть если собираешься менять Makefile.am — надо скопировать его как Makefile.am.orig, например, командой cp -a src/Makefile.am{,.orig}

Если масштаб вторжения заранее неизвестен, лучше скопировать сразу весь каталог: cp -a name-1.0{,.orig}

После чего надо внести необходимые изменения. Можно даже собирать из этой директории, вносить дополнительные изменения по результатам пересборки и т.д., если вы не против отслеживать вручную список всех затронутых файлов[1].

Когда изменения будут готовы — наступает самое тяжелое. Надо придумать имя для патча.

ALT Packaging HOWTO рекомендует давать патчам имена, состоящие из имени пакета, версии, «происхождения» и причины патча.

Например, имя патча для нашего гипотетического пакета может быть name-1.0-alt-link-fixes.patch

Тогда надо выйти в «родительскую» директорию (где находится каталог с исходниками name-1.0/) и сказать gendiff name-1.0 .orig; на экран будет выведен патч, сгенерированный как разница между сохраненными ранее файлами .orig и измененными файлами без .orig.

Если нравится, что получилось — надо сохранить этот патч как отдельный файл:

gendiff name-1.0 .orig > ~/RPM/SOURCES/name-1.0-alt-link-fixes.patch

Для варианта с полной копией соответственно:

diff -Naur name-1.0 name-1.0.orig > ~/RPM/SOURCES/name-1.0-alt-link-fixes.patch

Затем в спеке надо будет подключить этот патч в двух местах.

Первое из них — это запись о патче. Рекомендую положить ее рядом с тегом Source. Перед патчем желательно поместить какой-нибудь комментарий — для чего этот патч.

# Name's upstream doesn't want my patch, so I'll place it here.
# It makes all plugins properly linked.
Patch0: name-1.0-alt-link-fixes.patch

Вторая часть — собственно применение патча. Это надо делать в секции %prep после макроса %setup. Желательно использовать ключик -b ради той же понятности, он же будет использоваться для резервных копий исходных (непатченых) файлов при наложении.

Для патча, созданного через gendiff — надо написать следующее:

# Name's upstream doesn't want my patch, so I'll place it here.
# It makes all plugins properly linked.
%patch0 -p1 -b .link-fixes

Где номер 0 соответствует патчу номер 0.

Вот собственно и все. Если надо отключить патч, просто замените символ процента в %patch0 на символ решетки (#). Тогда он станет комментарием.

Надеюсь, это маленькое хауту поможет в благородном деле уменьшения количества обработанных напильником программ в вашем многострадальном /usr/local.

Ссылки

Примечания

  1. ...для чего вообще-то придуман git.