PatchHowto

Материал из ALT Linux Wiki

(Различия между версиями)
Перейти к: навигация, поиск
м (fix link)
(wikification)
Строка 1: Строка 1:
-
[[Category:Devel]]
+
[[Категория:Devel]]
-
{{MovedFromFreesourceInfo|AltLinux/Sisyphus/devel/PatchHowto}}
+
[[Категория:RPM spec]]
== Как делать патчи ==
== Как делать патчи ==
-
''lost@ [http://lists.altlinux.org/pipermail/community/2007-February/189295.html обстоятельно ответил] в community@''
+
Краткая инструкция для «начинающих».
-
> Что лучше почитать перед тем как заниматься изготовлением > собственных патчей?
+
-
Краткая инструкция для "начинающих".
+
-
Распаковать апстримные сырцы. Допустим что они распакованы в папку name-1.0/
+
Распаковать апстримные исходники. Допустим, что они распакованы в каталог name-1.0/
-
Далее надо зайти в эту директорию. Перед изменением каждого файла надо
+
Далее надо зайти в эту директорию. Перед изменением каждого файла надо создать его копию с расширением .orig<ref>Вторым вариантом является ''заранее'' создать копию исходного дерева в каталоге, скажем, name-1.0-orig/ — и ''не'' создавать после этого копий исходных файлов в исправляемом дереве.</ref>.
-
создать его копию с с расширением .orig
+
-
То есть например если собираешься менять [[Makefile.am|Makefile.am]] - надо
+
То есть если собираешься менять Makefile.am — надо скопировать его как Makefile.am.orig, например, командой {{cmd|cp -a src/Makefile.am{,.orig}<i></i>}}
-
скопировать его как [[Makefile.am|Makefile.am]].orig
+
-
Я обычно делаю это командой
+
-
cp src/Makefile.am{,.orig}
+
-
После чего надо внести во все файлы необходимые изменения.
+
-
Можно даже собирать из этой директории, вносить дополнительные
+
-
изменения по результатам пересборки, и т.д.
+
-
Когда изменения будут готовы - наступает самое тяжелое.
+
После чего надо внести во все файлы необходимые изменения. Можно даже собирать из этой директории, вносить дополнительные изменения по результатам пересборки, и т. д.
-
Надо придумать имя для патча.
+
-
[http://docs.altlinux.org/archive/2.4/master/alt-docs-devel/ch04.html#id2513071 ALT Packaging policy] рекомендует
+
Когда изменения будут готовы — наступает самое тяжелое. Надо придумать имя для патча.
-
давать патчам имена, состоящие из имени пакета, версии,
+
-
"происхождения" и причины патча.
+
-
Например, имя патча для нашего гипотетического пакета может быть
+
[http://docs.altlinux.org/archive/2.4/master/alt-docs-devel/ch04.html#id2513071 ALT Packaging policy] рекомендует давать патчам имена, состоящие из имени пакета, версии, «происхождения» и причины патча.
-
name-1.0-alt-link-fixes.patch
+
-
Тогда надо выйти в "родительскую" директорию (где находится каталог с
+
Например, имя патча для нашего гипотетического пакета может быть {{path|name-1.0-alt-link-fixes.patch}}
-
исходниками name-1.0/) и сказать
+
 
-
gendiff name-1.0 .orig
+
Тогда надо выйти в «родительскую» директорию (где находится каталог с исходниками name-1.0/) и сказать {{cmd|gendiff name-1.0 .orig}}<ref>Для второго варианта — соответственно {{cmd|diff -Naur name-1.0-orig/ name-1.0/}}</ref>; на экран будет выведен патч, сгенерированный как разница между
-
На экран будет выведен патч, сгенерированный как разница между
+
сохраненными ранее файлами .orig и измененными файлами без .orig.
сохраненными ранее файлами .orig и измененными файлами без .orig.
-
Если нравится что получилось - надо сохранить этот патч как отдельный файл.
+
Если нравится, что получилось — надо сохранить этот патч как отдельный файл:
-
gendiff name-1.0 .orig > ~/RPM/SOURCES/name-1.0-alt-link-fixes.patch
+
gendiff name-1.0 .orig > ~/RPM/SOURCES/name-1.0-alt-link-fixes.patch
Затем в спеке надо будет подключить этот патч в двух местах.
Затем в спеке надо будет подключить этот патч в двух местах.
-
Первое из них - это запись о патче.
+
Первое из них — это запись о патче. Рекомендую положить ее рядом с тегом Source. Перед патчем желательно поместить какой-нибудь комментарий — для чего этот патч.
-
Рекомендую положить ее рядом с тегом Source.
+
-
Перед патчем желательно поместить какой-нибудь комментарий типа для
+
-
чего этот патч.
+
-
# Name's upsteam don't want my patch, so I place it here. This make
+
# Name's upsteam 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
-
Вторая часть - это собственно, применение патча.
+
Вторая часть — собственно применение патча. Это надо делать в секции %prep после макроса %setup. Желательно скопировать комментарий для патча из верхней части, чтобы было понятно, что патч делает и было легко его отключать.
-
это надо делать в секции %prep после макроса %setup
+
Для патча, созданного через gendiff — надо написать следующее:
-
Желательно скопировать комментарий для патча из верхней части, чтобы
+
-
было понятно что патч делает и было легко его отключать.
+
-
Для патча, созданного через gendiff - надо написать следующее:
+
# Name's upsteam doesn't want my patch, so I'll place it here.
 +
# It makes all plugins properly linked.
 +
%patch0 -p1
-
# 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.
-
Вот собственно и все. Если надо отключить патч, просто замените символ
+
Вот собственно и все. Если надо отключить патч, просто замените символ процента в %patch0 на символ решетки(#). Тогда он станет комментарием.
-
процента в %patch0 на символ решетки(#). Тогда он станет
+
 
-
комментарием.
+
Надеюсь, это маленькое хауту поможет в благородном деле уменьшения количества обработанных напильником программ в вашем многострадальном /usr/local.
 +
 
 +
=== Ссылки ===
 +
* [http://lists.altlinux.org/pipermail/community/2007-February/189295.html lost@ в community@]
-
Надеюсь, это маленькое хауту поможет в благородном деле уменьшения
+
<references />
-
количества обработанных напильником программ в вашем многострадальном
+
-
/usr/local.
+

Версия 20:26, 7 марта 2010


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

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

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

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

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

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

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

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

Например, имя патча для нашего гипотетического пакета может быть 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/
 
Личные инструменты