Gentoo Forums
Gentoo Forums
Gentoo Forums
Quick Search: in
[ebuild] epatch vs. patch
View unanswered posts
View posts from last 24 hours
View posts from last 7 days

 
Reply to topic    Gentoo Forums Forum Index Deutsches Forum (German)
View previous topic :: View next topic  
Author Message
V10lator
Apprentice
Apprentice


Joined: 11 Jul 2004
Posts: 207

PostPosted: Thu Jun 09, 2011 4:57 am    Post subject: [ebuild] epatch vs. patch Reply with quote

Dank eines Bugs in qemu-kvm war ich gezwungen ein ebuild in mein lokales Overlay zu kopieren um einen patch einspielen zu können. Das ebuild war fix angepasst doch funktionieren wollte es _nicht_.
Nach zig Tests war ich am verzweifeln: Patch per Hand einspielen funktionierte, per ebuild nicht. In meiner Verzweiflung änderte ich die Zeile
epatch "${FILESDIR}/mein.patch"
in
patch -p1 < "${FILESDIR}/mein.patch"
und siehe da: Es funktioniert! 8O

Worin liegt also der Unterschied zwischen epatch und patch?
Back to top
View user's profile Send private message
franzf
Advocate
Advocate


Joined: 29 Mar 2005
Posts: 4565

PostPosted: Thu Jun 09, 2011 6:22 am    Post subject: Reply with quote

"epatch" gibts über "inherit eutils", was aber bei den ganzen qemu-kvm schon der Fall ist. Demnach musst du irgendwo anders einen Fehler machen.
Deshalb wäre es gut, du würdest dein angepasstes ebuild posten (vielleicht auch sagen, Welche qemu-kvm-Version du da anpasst).
Verwendest du portage oder einen anderen Paketmanager? (paludis, pkgcore)
Wie hast du das Overlay eingerichtet? Sieh mal hier: http://en.gentoo-wiki.com/wiki/Overlay#Local_Overlays
Back to top
View user's profile Send private message
V10lator
Apprentice
Apprentice


Joined: 11 Jul 2004
Posts: 207

PostPosted: Thu Jun 09, 2011 6:33 am    Post subject: Reply with quote

Code:
--- /usr/portage/app-emulation/qemu-kvm/qemu-kvm-0.14.1-r1.ebuild   2011-05-31 17:53:45.000000000 +0200
+++ /usr/local/portage/app-emulation/qemu-kvm/qemu-kvm-0.14.1-r1.ebuild   2011-06-09 06:51:39.841602137 +0200
@@ -128,6 +128,9 @@
    # to the qemu-devel ml - bug 337988
    epatch "${FILESDIR}/qemu-0.11.0-mips64-user-fix.patch"
 
+   einfo "Applying qxl.patch"
+   patch -p1 <"${FILESDIR}/qxl.patch"
+
    [[ -n ${BACKPORTS} ]] && \
       EPATCH_FORCE=yes EPATCH_SUFFIX="patch" EPATCH_SOURCE="${S}/patches" \
          epatch
(Wobei ich anstelle der Zeile
patch -p1 <"${FILESDIR}/qxl.patch"
wie bereits erwähnt eig. ein
epatch"${FILESDIR}/qxl.patch"
haben wollte.

Der Patch: http://paste.pocoo.org/show/403245/

Code:
# cat /usr/local/portage/profiles/repo_name
Local-Overlay
# cat /etc/make.conf | grep PORTDIR_OVERLAY
PORTDIR_OVERLAY="/usr/local/portage"
Ich nutze portage.
Back to top
View user's profile Send private message
franzf
Advocate
Advocate


Joined: 29 Mar 2005
Posts: 4565

PostPosted: Thu Jun 09, 2011 7:45 am    Post subject: Re: [ebuild] epatch vs. patch Reply with quote

V10lator wrote:
Worin liegt also der Unterschied zwischen epatch und patch?

Schau dir mal /usr/portage/eclass/eutils.eclass an, da findest du Beschreibung und Code von epatch - es macht einiges mehr als patch, verwendet es aber intern zum patchen.

Schaut aber eigentlich alles OK aus (Bis auf das fehlende Leerzeichen zwischen epatch und dem ", aber nehme an, das war nur ein Leertastenklemmer in deinem letzten Post). Kannst du vllt. noch die komplette Fehlermeldung posten, die portage ausspuckt?
Evtl. auch das build-log (in der Meldung von portage wird dir auch gesagt, wo das Teil liegt) und die Fehlermeldung des patch-cmd, wenn es nur da ein Problem gegeben haben sollte (portage sagt auch hier den Dateinamen).
Back to top
View user's profile Send private message
V10lator
Apprentice
Apprentice


Joined: 11 Jul 2004
Posts: 207

PostPosted: Thu Jun 09, 2011 7:59 am    Post subject: Re: [ebuild] epatch vs. patch Reply with quote

franzf wrote:
Bis auf das fehlende Leerzeichen zwischen epatch und dem ", aber nehme an, das war nur ein Leertastenklemmer in deinem letzten Post
Richtig. :)
Quote:
Kannst du vllt. noch die komplette Fehlermeldung posten, die portage ausspuckt?
Hier erstmal mit dem Workaround (direkter Aufruf von patch):
Code:
 * Applying qemu-0.11.0-mips64-user-fix.patch ...                         [ ok ]
 * Applying qxl.patch
patching file hw/qxl.c
patching file hw/qxl.h
patching file ui/spice-display.c
Hunk #1 succeeded at 78 (offset -1 lines).
Hunk #2 succeeded at 141 (offset -1 lines).
Hunk #3 succeeded at 300 (offset -1 lines).
patching file ui/spice-display.h
patching file hw/qxl.c
patching file hw/qxl.c
patching file ui/spice-display.h
patching file hw/qxl-render.c
patching file hw/qxl.c
patching file ui/spice-display.c
Hunk #1 succeeded at 186 (offset -1 lines).
Hunk #2 succeeded at 203 (offset -1 lines).
 * Applying various patches (bugfixes/updates) ...
Also alles OK!
Nun mit epatch:
Code:
 * Applying qemu-0.11.0-mips64-user-fix.patch ...                         [ ok ]
 * Applying qxl.patch
 * Applying qxl.patch ...

 * Failed Patch: qxl.patch !
 *  ( /usr/local/portage/app-emulation/qemu-kvm/files/qxl.patch )
 *
 * Include in your bugreport the contents of:
 *
 *   /var/tmp/portage/app-emulation/qemu-kvm-0.14.1-r1/temp/qxl.patch.out

 * ERROR: app-emulation/qemu-kvm-0.14.1-r1 failed (prepare phase):
 *   Failed Patch: qxl.patch!
 *
 * Call stack:
 *     ebuild.sh, line   56:  Called src_prepare
 *   environment, line 3576:  Called epatch '/usr/local/portage/app-emulation/qemu-kvm/files/qxl.patch'
 *   environment, line 1626:  Called die
 * The specific snippet of code:
 *               die "Failed Patch: ${patchname}!";
 *
 * If you need support, post the output of 'emerge --info =app-emulation/qemu-kvm-0.14.1-r1',
 * the complete build log and the output of 'emerge -pqv =app-emulation/qemu-kvm-0.14.1-r1'.
 * This ebuild is from an overlay named 'Local-Overlay': '/usr/local/portage/'
 * The complete build log is located at '/var/tmp/portage/app-emulation/qemu-kvm-0.14.1-r1/temp/build.log'.
 * The ebuild environment file is located at '/var/tmp/portage/app-emulation/qemu-kvm-0.14.1-r1/temp/environment'.
 * S: '/var/tmp/portage/app-emulation/qemu-kvm-0.14.1-r1/work/qemu-kvm-0.14.1'

>>> Failed to emerge app-emulation/qemu-kvm-0.14.1-r1, Log file:

>>>  '/var/tmp/portage/app-emulation/qemu-kvm-0.14.1-r1/temp/build.log'
Dazu noch die /var/tmp/portage/app-emulation/qemu-kvm-0.14.1-r1/temp/qxl.patch.out: http://paste.pocoo.org/show/403276/
bzw. der relevante Teil:
Code:
PATCH COMMAND:  patch -p1 -g0 -E --no-backup-if-mismatch < '/usr/local/portage/app-emulation/qemu-kvm/files/qxl.patch'

=====================
patching file hw/qxl.c
patching file hw/qxl.h
patching file ui/spice-display.c
Hunk #1 succeeded at 78 (offset -1 lines).
Hunk #2 succeeded at 141 (offset -1 lines).
Hunk #3 succeeded at 300 (offset -1 lines).
patching file ui/spice-display.h
patching file hw/qxl.c
Hunk #1 FAILED at 1083.
1 out of 1 hunk FAILED -- saving rejects to file hw/qxl.c.rej
patching file hw/qxl.c
Hunk #1 FAILED at 356.
Hunk #2 FAILED at 364.
Hunk #3 succeeded at 587 (offset -24 lines).
Hunk #4 FAILED at 1061.
Hunk #5 FAILED at 1069.
Hunk #6 FAILED at 1081.
Hunk #7 FAILED at 1129.
6 out of 7 hunks FAILED -- saving rejects to file hw/qxl.c.rej
patching file ui/spice-display.h
Hunk #1 FAILED at 48.
1 out of 1 hunk FAILED -- saving rejects to file ui/spice-display.h.rej
patching file hw/qxl-render.c
patching file hw/qxl.c
Hunk #1 succeeded at 662 (offset -25 lines).
Hunk #2 succeeded at 793 (offset -25 lines).
Hunk #3 succeeded at 862 (offset -25 lines).
Hunk #4 succeeded at 932 (offset -25 lines).
patching file ui/spice-display.c
Hunk #1 succeeded at 186 (offset -1 lines).
Hunk #2 succeeded at 203 (offset -1 lines).
Back to top
View user's profile Send private message
firefly
Watchman
Watchman


Joined: 31 Oct 2002
Posts: 5329

PostPosted: Thu Jun 09, 2011 8:09 am    Post subject: Reply with quote

funktioniert es auch nicht, wenn du den patch befehl von hand genauso ausführst wie portage?
_________________
Ein Ring, sie zu knechten, sie alle zu finden,
Ins Dunkel zu treiben und ewig zu binden
Im Lande Mordor, wo die Schatten drohn.
Back to top
View user's profile Send private message
V10lator
Apprentice
Apprentice


Joined: 11 Jul 2004
Posts: 207

PostPosted: Thu Jun 09, 2011 8:33 am    Post subject: Reply with quote

Ich habe gerade Testweise die patch Zeile im ebuild ersetzt durch:
Code:
patch -p1 -g0 -E --no-backup-if-mismatch < /usr/local/portage/app-emulation/qemu-kvm/files/qxl.patch
Also genau der Zeile die epatch benutzt. Doch anders als epatch funktioniert auch diese Zeile einwandfrei.

Zeit für einen Bug-Report?
Back to top
View user's profile Send private message
franzf
Advocate
Advocate


Joined: 29 Mar 2005
Posts: 4565

PostPosted: Thu Jun 09, 2011 9:01 am    Post subject: Reply with quote

Wie bist du an den Patch gekommen?
Hab mir den mal kurz angeschaut. Die selbe Stelle (z.B. in pipe_read) wird mehrmals umgepatcht, das könnte man mal ganz ordentlich und sauber neu machen.
Und diese Zeile ist ziemlicher Unsinn:
Code:
@@ -1058,16 +1082,27 @@ static void qxl_map(PCIDevice *pci, int region_num,
 static void pipe_read(void *opaque)
 {
     PCIQXLDevice *d = opaque;

Mitten in der Zeile wird bei den Funktionsparametern umgebrochen und eine neue Funktionsdefinition angefangen.
Das ist schonmal aus C-Sicht nicht möglich, der Original-Code wird das sicher nicht machen.
Da dieser Teil ganz weit oben kommt, kann daraus auch ein Folgefehler für die ganzen anderen Sachen resultieren.
Warum das mit patch (ohne epatch) funktioniert weiß ich nicht. Ich installier grad die ungepatchte Version, und werde in etwa 1,5-2h die mit dem Patch versuchen (sry, mein Rechner ist relativ alt, das dauert.... und ich muss jetzt erstmal weg).
Back to top
View user's profile Send private message
V10lator
Apprentice
Apprentice


Joined: 11 Jul 2004
Posts: 207

PostPosted: Thu Jun 09, 2011 9:15 am    Post subject: Reply with quote

Die genaue Quelle des Patches müsste ich nochmal suchen. Dieser patch sorgt dafür das man (wieder) zeitgleich KVM und QXL verwenden kann. ;)

Das er unsauber ist liegt daran das er aus einer Mailinglist entnommen wurde und eig. aus 6 Patches besteht, wovon der erste dafür da ist einen Patch rückgängig zu machen der in der gentoo Version auch noch nicht enthalten ist, es sind also 5 aneinandergereihte Patches. Sicher könnte man die Sources auch 2 mal entpacken, einmal die 5 Patches anwenden und dann per diff einen sauberen Patch ziehen, ich bin aber faul und der Patch scheint ja an und für sich zu funktionieren.

Ach ja, in der aktuellen git Version sollten diese Patches ebenso enthalten sein, das sie fehlerhaft geschrieben wurden wage ich also zu bezweifeln.

Aber all das ist nicht Kern der Frage: Wieso funktioniert es mit patch, nicht aber mit epatch? (Bug?)
//EDIT: Und da die Sources mit den Patches auch kompilieren und die resultierenden Binarys fehlerfrei laufen kann ich auch nicht glauben das das von dir genannte Konstrukt unmöglich ist, dann dürfte es dem Compiler doch nicht gefallen? ;)

//EDIT²: Ich habe die Patches zwar nicht genau von dieser Seite sondern aus einem anderen Archiv der selben Mailinglist, aber das sollte ja nichts machen: http://lists.fedoraproject.org/pipermail/virt/2011-March/002572.html - Wie gesagt wurde der erste Patch nicht verwendet da dieser nur diesen Patch rückgängig macht, welcher das Problem ursprünglich lösen sollte.
Back to top
View user's profile Send private message
Necoro
Veteran
Veteran


Joined: 18 Dec 2005
Posts: 1912
Location: Germany

PostPosted: Thu Jun 09, 2011 10:12 am    Post subject: Reply with quote

franzf wrote:
Code:
@@ -1058,16 +1082,27 @@ static void qxl_map(PCIDevice *pci, int region_num,
 static void pipe_read(void *opaque)
 {
     PCIQXLDevice *d = opaque;

Mitten in der Zeile wird bei den Funktionsparametern umgebrochen und eine neue Funktionsdefinition angefangen.

Das liest du falsch ...

in der @@... Zeile stehen nur Meta-Informationen drin -- halt unter anderem, in welcher Funktion man gerade ist (auch wenns an dieser Stelle keinen Sinn ergibt :)). Das dient nur um Patches, denen man nicht ansieht wo genau sie eine Änderung ausführen, zuordnen zu können.
_________________
Inter Deum Et Diabolum Semper Musica Est.
Back to top
View user's profile Send private message
Display posts from previous:   
Reply to topic    Gentoo Forums Forum Index Deutsches Forum (German) All times are GMT
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum