diff options
author | Thomas Vander Stichele <thomas@apestaart.org> | 2004-03-12 10:18:31 +0000 |
---|---|---|
committer | Thomas Vander Stichele <thomas@apestaart.org> | 2004-03-12 10:18:31 +0000 |
commit | b51bb8f3412ee861266ece605817c6d747a06b29 (patch) | |
tree | ef622de231193359812fe6693d8021c642e982e4 /HACKING | |
parent | 87324f82f0a259a4067a61f03ce1dafc619a7a5b (diff) |
add hacking notes
Original commit message from CVS:
add hacking notes
Diffstat (limited to 'HACKING')
-rw-r--r-- | HACKING | 75 |
1 files changed, 54 insertions, 21 deletions
@@ -1,3 +1,5 @@ +THE GOAL +-------- What we are trying to achieve: satisfy: @@ -8,32 +10,63 @@ satisfy: make distcheck non-srcdir build (ie, mkdir build; cd build; ../configure; make) -How it works: +THE SETUP +--------- +There is a "mirror" root CVS module that contains "ffmpeg". +This directory contains a vendor-branch checkout of upstream FFmpeg CVS +of a given day. -* configure checks whether or not it should update ffmpeg from CVS by looking - at the nano version number - - if it's 1, we're in cvs mode, and it should check it out - - if it's not 1, we're in prerel or rel mode, and the code should already - be on disk - FIXME: we could change this to really check out the source code if some - required files aren't there just in case someone checks out from CVS - but CVS is not at nano 1 +On head, the following things have been commited on top of this: +* patches/, which is a directory with a set of patches, and a series file + listing the order, as generated by quilt +* .pc/, which is a tree of files that quilt uses to keep control of its state. + It contains a list of applied patches, and one directory per patch, + containing a tree of hardlinked files that were added to the patchset, and + a .pc file listing all files part of the patchset. +* the result of having all these patches commited (ie, quilt push -a) to the + ffmpeg tree. -* patching of the checked-out copy happens at +Both the actually patched CVS ffmpeg code as well as the .pc dir need to be +commited to CVS so the state of quilt wrt. the source is in sync. -Axioms under which we work: -- the dist tarball needs to include either - - the pristine ffmpeg checkout + our patches + a patch mechanism on make - or - - the ffmpeg checkout with patches already applied +THE WAY +------- -- configure/make is not allowed to touch files that already live in the source - tree; if they need to then they need to be copied first and cleaned - afterward - -- it would be very nice if, on update of either the Tag file or the patch set, - make would know exactly what to do with it. +- If you want to hack on our copy of the FFmpeg code, there are some basic + rules you need to respect: + - you need to use quilt. If you don't use quilt, you can't hack on it. + - we separate patches based on the functionality they patch, and whether + or not we want to send stuff upstream. Make sure you work in the right + patch. use "quilt applied" to check which patches are applied. + - before starting to hack, run cvs diff. There should be NO diffs, and + NO files listed with question mark. If there are, somebody before you + probably made a mistake. To manage the state correctly, it is vital that + none of the files are unknown to CVS. + - if you want to add a file to a patchset, you need to: + - be in the right patchset + - quilt add (file) + - cvs add .pc/(patchsetname)/(file) + - cvs commit .pc/(patchsetname) (to update the state of quilt in cvs) + - edit the file + - quilt refresh + - quilt push -a (This one is IMPORTANT, otherwise you'll have a huge diff) + - cvs commit + - if you want to add a patchset, you need to: + - go over the procedure with thomas to check it's correct + - decide where in the stack to put it. ask for help if you don't know. + - go there in the patch stack (use quilt pop/push) + - quilt new (patchsetname).patch (don't forget .patch !) + - quilt add (files) + - cvs add .pc/(patchsetname) the whole tree + - cvs commit .pc/(patchsetname) + - quilt refresh + - quilt push -a + - cvs commit + - cvs diff (to check if any of the files are unknown to CVS; if they are, + you need to add them to CVS) +THE PLUGIN +---------- Some notes on how ffmpeg wrapping inside GStreamer currently works: * gstffmpeg{dec,enc,demux,mux}.c are wrappers for specific element types from their ffmpeg counterpart. If you want to wrap a new type of element in |