how to make a patch
Giorgos Keramidas
keramida at ceid.upatras.gr
Wed Oct 17 11:14:32 PDT 2007
On 2007-10-16 15:10, "Aryeh M. Friedman" <aryeh.friedman at gmail.com> wrote:
> I found and fixed a bug in one of the ports how do I make a patch file
> (I only changed one line in one file) and who do I send it to?
If you know precisely the file, you can use diff(1) to generate the
patch file.
Note that patch files for ports have to be constructed in a "special"
way, so that the "make patch" target can find them and apply them
correctly.
1. Keep a copy of the patched file around, i.e. at `/tmp/foo.c'
2. Clean-up the "work" subdirectory of the port, and extract a clean
version of the port's patched source:
# cd /usr/ports/editors/foobar
# rm -fr work
# make patch
3. Enter the work/foobar-1.0 build directory of the port, and save the
original, unpatched file you want to modify at port-build-time:
# cd work/foobar-1.0
# cp src/foo.c src/foo.c.orig
4. Now overwrite the build-tree copy of `foo.c' with the saved copy
from step 1.
# cp /tmp/foo.c src/foo.c
5. Use the diff utility from within the `work/foobar-1.0' tree to
generate a ports-based patch:
# pwd
/usr/ports/editors/foobar/work/foobar-1.0
# diff -u src/foo.c.orig src/foo.c > /tmp/patch-src-foo.c
6. Now that you have the 'fix' as a patch in /tmp/patch-src-foo.c, you
can remove the temporary `work' directory of the port, and install
the patch in `files' as a normal ports-based-patch:
# cd /usr/ports/editors/foobar
# rm -fr work
# cp -i /tmp/patch-src-foo.c files/
If there's already an existing `patch-src-foo.c' file in `files',
the last command will prompt you for overwriting the old patch.
Don't do it. Just pick a non-conflicting name for the second patch
which applies on top of `src/foo.c', i.e.:
# cp -i /tmp/patch-src-foo.c files/patch-src-foo.c-bugfixname
where `bugfixname' is a tag which can help the port maintainers
understand why this patchfile is needed.
After you have installed `patch-src-foo.c' in the `files' subdirectory
of the port, you should be able to run:
# cd /usr/ports/editors/foobar
# make patch
and your patchfile should be applied automatically.
More information about the freebsd-questions
mailing list