PatchHowto
Материал из ALT Linux Wiki
м (fix link) |
(wikification) |
||
Строка 1: | Строка 1: | ||
- | [[ | + | [[Категория:Devel]] |
- | + | [[Категория:RPM spec]] | |
== Как делать патчи == | == Как делать патчи == | ||
- | + | Краткая инструкция для «начинающих». | |
- | + | ||
- | Краткая инструкция для | + | |
- | Распаковать апстримные | + | Распаковать апстримные исходники. Допустим, что они распакованы в каталог name-1.0/ |
- | Далее надо зайти в эту директорию. Перед изменением каждого файла надо | + | Далее надо зайти в эту директорию. Перед изменением каждого файла надо создать его копию с расширением .orig<ref>Вторым вариантом является ''заранее'' создать копию исходного дерева в каталоге, скажем, name-1.0-orig/ — и ''не'' создавать после этого копий исходных файлов в исправляемом дереве.</ref>. |
- | создать его копию | + | |
- | То есть | + | То есть если собираешься менять Makefile.am — надо скопировать его как Makefile.am.orig, например, командой {{cmd|cp -a src/Makefile.am{,.orig}<i></i>}} |
- | скопировать его как | + | |
- | + | ||
- | cp src/Makefile.am{,.orig} | + | |
- | + | ||
- | + | ||
- | + | ||
- | + | После чего надо внести во все файлы необходимые изменения. Можно даже собирать из этой директории, вносить дополнительные изменения по результатам пересборки, и т. д. | |
- | + | ||
- | + | Когда изменения будут готовы — наступает самое тяжелое. Надо придумать имя для патча. | |
- | + | ||
- | + | ||
- | + | [http://docs.altlinux.org/archive/2.4/master/alt-docs-devel/ch04.html#id2513071 ALT Packaging policy] рекомендует давать патчам имена, состоящие из имени пакета, версии, «происхождения» и причины патча. | |
- | + | ||
- | Тогда надо выйти в | + | Например, имя патча для нашего гипотетического пакета может быть {{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 | + | # 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. Желательно скопировать комментарий для патча из верхней части, чтобы было понятно, что патч делает и было легко его отключать. |
- | + | Для патча, созданного через 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. | Где номер 0 соответствует патчу номер 0. | ||
- | Вот собственно и все. Если надо отключить патч, просто замените символ | + | Вот собственно и все. Если надо отключить патч, просто замените символ процента в %patch0 на символ решетки(#). Тогда он станет комментарием. |
- | процента в %patch0 | + | |
- | комментарием. | + | Надеюсь, это маленькое хауту поможет в благородном деле уменьшения количества обработанных напильником программ в вашем многострадальном /usr/local. |
+ | |||
+ | === Ссылки === | ||
+ | * [http://lists.altlinux.org/pipermail/community/2007-February/189295.html lost@ в community@] | ||
- | + | <references /> | |
- | + | ||
- | / | + |
Версия 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.