2016-03-16 9 views
3

У меня есть тарболом src.tar.gz, содержимое которого распаковывается в SRC/и заплата этих источников генерируется с помощью этой команды:Bitbake рецепт не применяя патч, как ожидалось

$ diff -Nurp src/ src_mod/ > my.patch 

Заголовок патч начинается с этой три линии:

diff -Nurp src/path/to/file src_PATCHED/path/to/file 
--- src/path/to/file 2012-10-22 05:52:59.000000000 +0200 
+++ src_PATCHED/path/to/file 2016-03-14 12:27:52.892802283 +0100 

Мои BitBake рецепт ссылки как путь и тарболл файлы с помощью этого SRC_URI:

SRC_URI = " \ 
    file://my.patch \ 
    file://src.tar.gz \ 
" 

do_fetch и do_unpack задачи работы, как и ожидалось, в результате чего my.patch и SRC/внутри $ {S} каталога, то есть:

${S}/my.path 
${S}/src.tar.gz 

Но do_patch задача не удается с этим сообщением ERROR:

ERROR: Command Error: exit status: 1 Output: 
Applying patch my.patch 
can't find file to patch at input line 4 
Perhaps you used the wrong -p or --strip option? 

Я тестировал различные варианты, например установку «PATCHDIR» атрибут, как показано ниже:

SRC_URI = " \ 
    file://my.patch;patchdir=${S}/src \ 
    file://src.tar.gz \ 
" 

я ожидал «PATCHDIR» такой же, как с помощью «заплаты -d Dir». Но он работает не так, как ожидалось, он всегда возвращает одно и то же сообщение ERROR.

Что я делаю неправильно?

ответ

4

Хорошо, я нашел ответ еще. Мои переменные $ {S} был повторно определены в моем рецепте с этим содержанием:

S = "$ {Workdir}/$ {PN} - $ {PV}"

Но загрузка fetchers my.patch и SRC/внутри $ {WORKDIR}, а не в $ {S}, то так:

${WORKDIR}/my.path 
${WORKDIR}/src.tar.gz 

и тарболом экстрагируется также в $ {WORKDIR}

${WORKDIR}/src/ 

исправление садилось "PATCHDIR" атрибут правильно, заменив $ {S} на $ {WORKDIR}

SRC_URI = " \ 
    file://my.patch;patchdir=${WORKDIR}/src \ 
    file://src.tar.gz \ 
" 

Это уже работает! :)