LINUX.ORG.RU

Наложение своего патча при сборке rpm пакета


0

0

Собираю под fedora пакет cairo c наложением своего патча. Делаю все вот по этой статье.

В spec файл, полученный из src пакета я добавил только две строки, помеченные (*):

....
Patch0: cairo-1.8.6-repeat-modes.patch
Patch1: cairo-1.2.4-lcd-cleartype-like.diff  (*)
....
%prep
%setup -q
%patch0 -p1 -b .repeat-modes
%patch1 -p1 -b .repeat-modes                 (*)

%build
%configure --disable-static 	\
.........

В результате при сборке пакета имею:

[516][demas.localhost: rpmbuild]$ rpmbuild -bb SPECS/cairo.spec
Выполняется(%prep): /bin/sh -e /var/tmp/rpm-tmp.Ed0xCc
+ umask 022
+ cd /home/demas/rpmbuild/BUILD
+ cd /home/demas/rpmbuild/BUILD
+ rm -rf cairo-1.8.8
+ /usr/bin/gzip -dc /home/demas/rpmbuild/SOURCES/cairo-1.8.8.tar.gz
+ /bin/tar -xf -
+ STATUS=0
+ '[' 0 -ne 0 ']'
+ cd cairo-1.8.8
+ /bin/chmod -Rf a+rX,u+w,g-w,o-w .
+ echo 'Patch #0 (cairo-1.8.6-repeat-modes.patch):'
Patch #0 (cairo-1.8.6-repeat-modes.patch):
+ /bin/cat /home/demas/rpmbuild/SOURCES/cairo-1.8.6-repeat-modes.patch
+ /usr/bin/patch -s -p1 -b --suffix .repeat-modes --fuzz=0
+ echo 'Patch #1 (cairo-1.2.4-lcd-cleartype-like.diff):'
Patch #1 (cairo-1.2.4-lcd-cleartype-like.diff):
+ /bin/cat /home/demas/rpmbuild/SOURCES/cairo-1.2.4-lcd-cleartype-like.diff
+ /usr/bin/patch -s -p1 -b --suffix .repeat-modes --fuzz=0
1 out of 5 hunks FAILED -- saving rejects to file src/cairo-ft-font.c.rej
ошибка: Неверный код возврата из /var/tmp/rpm-tmp.Ed0xCc (%prep)

Как я понимаю, мой патч найден, но почему то не смог наложиться.

Если я распакую исходники в отдельную папку и ручками наложу патчи - то все пройдет успешно:

[521][demas.localhost: cairo-1.8.8]$ patch -p1 -i cairo-1.8.6-repeat-modes.patch 
patching file src/cairo-xlib-surface.c
[522][demas.localhost: cairo-1.8.8]$ patch -p1 -i cairo-1.2.4-lcd-cleartype-like.diff 
patching file src/cairo-ft-font.c
Hunk #1 succeeded at 57 (offset 4 lines).
Hunk #2 succeeded at 524 with fuzz 1 (offset 30 lines).
Hunk #3 succeeded at 817 (offset 34 lines).
Hunk #4 succeeded at 1123 (offset 35 lines).
Hunk #5 succeeded at 1240 (offset 36 lines).

Отсюда я делаю вывод, что я просто не так прописал строки в spec файле.

Пробовал вместо

%patch1 -p1 -b .repeat-modes                 

писать

%patch1 -p1 

- то же самое.

Как правильно добавить патч?

Я понимаю, что я ручками могу пропатчить исходники, запаковать их обратно и собрать пакет без патчей, но пока рассматриваю этот вариант, как неспортивный.

★★

Вы сначала покажите, что у вас патч накладывается с "--fuzz=0", и можно посмотреть, что там пишется в cairo-ft-font.c.rej. Не помню как, но можно было собирать пакет без удаления временного каталога.

mky ★★★★★
()
Ответ на: комментарий от mky

>> Вы сначала покажите, что у вас патч накладывается с "--fuzz=0"

Это как ?

lemas ★★
() автор топика
Ответ на: комментарий от mky

Ну, то есть, судя по моему первому сообщению fuzz как раз не равен 0:

Hunk #2 succeeded at 524 with fuzz 1 (offset 30 lines).

Но можно как то заставить rpmbuild собирать пакет даже с таким патчем ?

lemas ★★
() автор топика

если руками патч накладывается - то сделайте:

Source1: cairo-1.8.6-repeat-modes.patch
Source2: cairo-1.2.4-lcd-cleartype-like.diff

после чего наложите "ручками"

patch -p0 %{SOURCE1}
patch -p0 %{SOURCE2}

sda00 ★★★
()
Ответ на: комментарий от sda00

Спасибо. Помогло. Только вот так надо:

 patch -p0 -i %{SOURCE1} 
lemas ★★
() автор топика
Ответ на: комментарий от lemas

>Но можно как то заставить rpmbuild собирать пакет даже с таким патчем ?

ИМХО, это не правильно. Лучше распаковать исходник, наложить патч, убедиться, что он правильно наложился (знания ЯП), а потом с этого пропатченного исходника снять diff и этот diff засовывать в spec-файл.

mky ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.