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

Материал из ALT Linux Wiki
Перейти к: навигация, поиск
м (Ссылка на ALT Packaging policy заменини ссылкой на ALT Packaging HOWTO)
Строка 15: Строка 15:
 
Когда изменения будут готовы — наступает самое тяжелое. Надо придумать имя для патча.
 
Когда изменения будут готовы — наступает самое тяжелое. Надо придумать имя для патча.
  
[[ALT Packaging HOWTO]] рекомендует давать патчам имена, состоящие из имени пакета, версии, «происхождения» и причины патча.
+
[[SpecfileConventions#Наименование патчей]] рекомендует давать патчам имена, состоящие из имени пакета, версии, «происхождения» и причины патча.
  
 
Например, имя патча для нашего гипотетического пакета может быть {{path|name-1.0-alt-link-fixes.patch}}
 
Например, имя патча для нашего гипотетического пакета может быть {{path|name-1.0-alt-link-fixes.patch}}
Строка 51: Строка 51:
 
* [http://lists.altlinux.org/pipermail/community/2007-February/189295.html lost@ в community@]
 
* [http://lists.altlinux.org/pipermail/community/2007-February/189295.html lost@ в community@]
 
* [http://docs.altlinux.org/archive/2.4/master/alt-docs-devel/ch04.html#id2513071 ALT Packaging policy в документации Master 2.4]
 
* [http://docs.altlinux.org/archive/2.4/master/alt-docs-devel/ch04.html#id2513071 ALT Packaging policy в документации Master 2.4]
 +
* [[ALT Packaging HOWTO]]
  
 
<references />
 
<references />

Версия 13:42, 13 января 2011


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

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

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

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

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

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

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

SpecfileConventions#Наименование патчей рекомендует давать патчам имена, состоящие из имени пакета, версии, «происхождения» и причины патча.

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

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

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

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

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

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

# Name's upsteam 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. Желательно скопировать комментарий для патча из верхней части, чтобы было понятно, что патч делает и было легко его отключать.

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

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

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

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

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

Ссылки

  1. Вторым вариантом является заранее создать копию исходного дерева в каталоге, скажем, name-1.0-orig/ — и не создавать после этого копий исходных файлов в исправляемом дереве.
  2. Для второго варианта — соответственно diff -Naur name-1.0-orig/ name-1.0/