patch 2.5.9 패치

hack 2009. 12. 2. 20:00
유닉스에서는 아주 유용하게 쓰는 GNU patch의 윈도우즈용 실행파일을 업데이트 하려고 이리저리 찾아보아도 마음에 드는 것이 없어서 결국 소스코드 수준에서 고쳐서 쓰기로 했다.

실행파일 제공하는 곳은 cygwin, mingw, gnuwin32 등등 여러군데 있는데, 하나같이 불필요한 DLL을 설치하기를 강요하거나, 패치파일이나 패치대상 파일의 개행문자가 자기들이 정한대로 따르지 않으면 그냥 자빠져 버리는 등, 사용성에 있어서 참 짜증스럽게 만들어 놓았다.

어차피 patch는 소스가 공개되어 있으니 좀 고치면 원하는대로 바꿀 수 있다. 목표는, 우선 개행문자의 제약을 없애고, 다음으로 유닉스에서처럼 --posix옵션이 주어지지 않으면 백업파일을 자동으로 만들게 하는 것이다. 어차피 patch를 이용해 패치하는 파일들은 소스코드들이니, 개행문자를 가지고 패치가 엉터리라고 까다롭게 구는 것은 별 의미가 없다고 생각된다.

이 패치를 제작하는 과정에서 컴파일러는 마이크로소프트에서 무료로 제공하는 것을 썼다. 곁다리: gcc를 쓸거면 어차피 cygwin이나 mingw을 설치해야 gcc를 쓸 수 있으니, 거기서 제공하는 patch실행파일을 쓰는게 여기의 것을 쓰는 것보다 일관성의 측면에서 낫다. 게다가 mingw용 patch는 reject파일도 unified diff로 만드는 옵션이 있다. context diff에 익숙하지 않으면 꽤 유용한 옵션이다.

소스는 ftp://ftp.gnu.org/gnu/patch/patch-2.5.9.tar.gz에서 받아오면 되고, 패치파일은 아래에서 받으면 된다.

명령행 요약: (패치파일 맨처음과 같은 내용. 현재 스킨에서는 마지막 줄의 일부만 보인다.)

tar xzf patch-2.5.9.tar.gz
cd patch-2.5.9
patch -p0 -b < patch.patch
cl /I. /DHAVE_CONFIG_H /Ded_PROGRAM=\"ed\" /Fepatch.exe error.c addext.c argmatch.c backupfile.c basename.c dirname.c getopt.c getopt1.c inp.c maketime.c partime.c patch.c pch.c quote.c quotearg.c quotesys.c util.c version.c xmalloc.c

---

@ 패치를 패치한다고 하니까 말이 꼬인다.

Posted by movsd
,