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

Материал из ALT Linux Wiki
(Замена URL у ALT Packaging policy (старый отсутствует).)
мНет описания правки
 
(не показано 10 промежуточных версий 4 участников)
Строка 1: Строка 1:
[[Category:Devel]]
[[Категория:Devel]]
{{MovedFromFreesourceInfo|AltLinux/Sisyphus/devel/PatchHowto}}
[[Категория:RPM spec]]
== Как делать патчи ==
Краткая инструкция для «начинающих».
 
Распаковать апстримные исходники. Допустим, что они распакованы в каталог {{path|name-1.0/}}
 
Далее надо туда зайти. Перед изменением каждого файла надо создать его копию с расширением {{path|.orig}}.


== Как делать патчи ==
То есть если собираешься менять {{path|Makefile.am}} — надо скопировать его как {{path|Makefile.am.orig}}, например, командой {{cmd|cp -a src/Makefile.am{,.orig}<i></i>}}
''lost@ [http://lists.altlinux.org/pipermail/community/2007-February/189295.html обстоятельно ответил] в community@''
 
&gt; Что лучше почитать перед тем как заниматься изготовлением &gt; собственных патчей?
Если масштаб вторжения заранее неизвестен, лучше скопировать сразу весь каталог: {{cmd|cp -a name-1.0{,.orig}<i></i>}}
Краткая инструкция для "начинающих".


Распаковать апстримные сырцы. Допустим что они распакованы в папку name-1.0/
После чего надо внести необходимые изменения. Можно даже собирать из этой директории, вносить дополнительные изменения по результатам пересборки и т.д., если вы не против отслеживать вручную список всех затронутых файлов<ref>...для чего вообще-то придуман [http://lists.altlinux.org/pipermail/devel/2012-October/195554.html git].</ref>.


Далее надо зайти в эту директорию. Перед изменением каждого файла надо
Когда изменения будут готовы — наступает самое тяжелое. Надо придумать имя для патча.
создать его копию с с расширением .orig


То есть например если собираешься менять [[Makefile.am|Makefile.am]] - надо
[[ALT_Packaging_HOWTO#Наименование патчей.|ALT Packaging HOWTO]] рекомендует давать патчам имена, состоящие из имени пакета, версии, «происхождения» и причины патча.
скопировать его как [[Makefile.am|Makefile.am]].orig
Я обычно делаю это командой
cp src/Makefile.am{,.orig}
После чего надо внести во все файлы необходимые изменения.
Можно даже собирать из этой директории, вносить дополнительные
изменения по результатам пересборки, и т.д.


Когда изменения будут готовы - наступает самое тяжелое.
Например, имя патча для нашего гипотетического пакета может быть {{path|name-1.0-alt-link-fixes.patch}}
Надо придумать имя для патча.


ALT Packaging policy
Тогда надо выйти в «родительскую» директорию (где находится каталог с исходниками {{path|name-1.0/}}) и сказать {{cmd|gendiff name-1.0 .orig}}; на экран будет выведен патч, сгенерированный как разница между
([http://docs.altlinux.org/archive/2.4/master/alt-docs-devel/ch04.html#devel.sisyphus.conventions http://docs.altlinux.org/archive/2.4/master/alt-docs-devel/ch04.html#devel.sisyphus.conventions]) рекомендует
сохраненными ранее файлами {{path|.orig}} и измененными файлами без {{path|.orig}}.
давать патчам имена, состоящие из имени пакета, версии,
"происхождения" и причины патча.


Например, имя патча для нашего гипотетического пакета может быть
Если нравится, что получилось — надо сохранить этот патч как отдельный файл:
name-1.0-alt-link-fixes.patch


Тогда надо выйти в "родительскую" директорию (где находится каталог с
gendiff name-1.0 .orig > ~/RPM/SOURCES/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


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


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


# Name's upsteam don't want my patch, so I place it here. This make
# Name's upstream doesn't want my patch, so I'll place it here.
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


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


это надо делать в секции %prep после макроса %setup
Для патча, созданного через {{cmd|gendiff}} — надо написать следующее:
Желательно скопировать комментарий для патча из верхней части, чтобы
было понятно что патч делает и было легко его отключать.


Для патча, созданного через 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


# Name's upsteam don't want my patch, so I place it here. This make
all plugins properly linked.
%patch0 -p1
Где номер 0 соответствует патчу номер 0.
Где номер 0 соответствует патчу номер 0.


Вот собственно и все. Если надо отключить патч, просто замените символ
Вот собственно и все. Если надо отключить патч, просто замените символ процента в <tt>%patch0</tt> на символ решетки (<tt>#</tt>). [[TypicalPackagingErrors/StrikeOutMacro|Тогда]] он станет комментарием.
процента в %patch0 на символ решетки(#). Тогда он станет
 
комментарием.
Надеюсь, это маленькое хауту поможет в благородном деле уменьшения количества обработанных напильником программ в вашем многострадальном {{path|/usr/local}}.
 
=== Ссылки ===
* [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]
* [[ALT Packaging HOWTO]]


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

Текущая версия от 11: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.