Hunk #1 FAILED at 1. What's that mean?
MakefileCross CompilingVlcMakefile Problem Overview
I get the following error when running make
, and I have no idea what it means or what to do about it. Can anyone illuminate me or point me in the right direction?
(cd libdvdnav-git && patch -p1) < ../../contrib/src/dvdnav/dvdnav.patch
patching file Makefile.am
Hunk #1 FAILED at 1.
1 out of 1 hunk FAILED -- saving rejects to file Makefile.am.rej
make: *** [dvdnav] Error 1
I'm trying to cross compile VLC for win32 (using linux).
Makefile Solutions
Solution 1 - Makefile
It is an error generated by patch
. If you would open the .patch
file, you'd see that it's organized in a bunch of segments, so-called "hunks". Every hunk identifies corresponding pieces of code (by line numbers) in the old and new version, the differences between those pieces of code, and similarities between them (the "context").
A hunk might fail if the similarities of a hunk don't match what's in the original file. When you see this error, it is almost always because you're using a patch for the wrong version of the code you're patching. There are a few ways to work around this:
- Get an updated version of
libdvdnav
that already includes the patch (best option). - Get a
.patch
file for the version oflibdvdnav
you're patching. - Patch manually. For every hunk in the patch, try to locate the corresponding file and lines in
libdvdnav
, and correct them according to the instructions in the patch. - Take the version of
libdvdnav
that's closer to whatever version the.patch
file was intended for (probably a bad idea).
Solution 2 - Makefile
In some cases, there is no difference in file versions, but only in indentation, spacing, line ending or line numbers.
To patch despite those differences, it's possible to use the following two arguments :
--ignore-whitespace : It ignores whitespace differences (indentation, etc).
--fuzz 3 : the "--fuzz X" option sets the maximum fuzz factor to lines. This option only applies to context and unified diffs; it ignores up to X lines while looking for the place to install a hunk. Note that a larger fuzz factor increases the odds of making a faulty patch. The default fuzz factor is 2; there is no point to setting it to more than the number of lines of context in the diff, ordinarily 3.
Don't forget to user "--dry-run" : It'll try the patch without applying it.
Example :
patch --verbose --dry-run --ignore-whitespace --fuzz 3 < /path/to/patch.patch
More informations about Fuzz :
https://www.gnu.org/software/diffutils/manual/html_node/Inexact.html
Solution 3 - Makefile
Debugging Tips
- Add crlf to the end of the patch file and test if it works
- try the --ignore-whitespace command like in:
markus@ubuntu:~$ patch -Np1 --ignore-whitespace -d software-1.0 < fix-bug.patch
see tutorial by markus
Solution 4 - Makefile
It happened for me when I was generating my patch file with git diff
and pasting the output:
git diff branch-1 branch-2 # and then copy the output
This inserts or changes the nature of whitespaces.
I directed the output to a file instead:
git diff branch-1 branch-2 > my-patch.patch
This fixed the issue.
Solution 5 - Makefile
I got the "hunks failed" message when I wasn't applying the patch in the top directory of the associated git project. I was applying the patch (where I created it) in a subdirectory.
It seems patches can be created from subdirectories within a git project, but not applied.
Solution 6 - Makefile
Follow the instructions here, it solved my problem.
you have to run the command like as follow; patch -p0 --dry-run < path/to/your/patchFile/yourPatch.patch
Solution 7 - Makefile
In my case, the patch was generated perfectly fine by IDEA, however, I edited the patch and saved it which changed CRLF to LF and then the patch stopped working. Curiously, converting it back to CRLF did not work. I noticed in VI editor, that even after setting to DOS format, the '^M' were not added to the end of lines. This forced me to only make changes in VI, so that the EOLs were preserved.
This may apply to you, if you make changes in a non-Windows environment to a patch covering changes between two versions both coming from Windows environment. You want to be careful how you edit such files.
BTW ignore-whitespace
did not help.
Solution 8 - Makefile
Hunk #1 FAILED at 1. 1 out of 1 hunk FAILED -- saving rejects to file Makefile.am.rej
Same error which i found when i apply changes through patch then searched completely on stackoverflow but i didn't get the answer .
Then i had searched small parts like reason behind patch error then i found that
Hunk #n FAILED at nnn. n out of n hunks FAILED - saving rejects to file file.rej
This means that one or more changes, called hunks, could not be introduced into the file. Occasionally this could be because the patch was emailed or copied into a file and whitespace was either added or removed. Try adding --ignore-whitespace to the command line to work around this.
step 2
then i searched about different end of file ,the i found that there are two types of fomat systems LF ,CF
then i check my files i what format by using
Now if this file was made in *NIX systems, it would display
$ cat -A file hello$
hello$ But if this file was made in Windows, it would display
$ cat -A file hello^M$
hello^M
represents CR and $ represents LF. Notice that Windows did not save the last line with CRLF
this i found from stackoverflow
then i check my original file format and .patch/diff i get that patch file have both LF and Cf
then i convert these files before apply patch to either of windows or unix format by using
dos2unix filename.extension or unix2dos filename.extension
this converts file
then apply patch get the result
command promt commands
creating file touch filename.txt
for creating patch/ diff file
diff -u originalfile.txt editedfile.txt > originalfile.diff or diff -u originalfile.txt editedfile.txt > originalfile.patch
before apply change check file formats
cat -A originalfile.txt
cat -A originalfile.diff
now converts doc2unix or unix2dos unix2dos originalfile.txt unix2dos originalfile.diff
apply changes patch originalfile.txt < originalfile.diff
Done !!
I hope this will helps you !