patchの当て方が分かった!

1年前の話になるが、synergyという素晴らしいソフトウェアに出会った。(その詳細については、当時の日記を)その時、MacBookで利用するには、ソースをダウンロードして、Bus errorを解消するためのパッチを当てる必要があった。正しいパッチの当て方を知らなかったので、試行錯誤しながら、Xcodeを起動して、手作業でコピーして、編集していた...。1年前の自分に「お疲れさま」と言ってあげたい。そして、「patch < OSX_BusError.patch」でいいんだよと。

synergyにパッチを当ててみる。

synergyは素晴らしいソフトウェアでありながら、地味だ。あまり話題に上がって来ないような気がする。OSX_BusError.patchも、多くのパッチに埋もれて見つけ難くなっていた...。(パッチの検索ページでStatus:をAnyにしてBrowseボタンを押すと表示された。 1541747 MAC OSX synergec BUS error patch)

デスクトップで解凍して...
  • synergy-1.3.1フォルダとOSX_BusError.patchファイルが現れる。
  • OSX_BusError.patchを開くと以下のようになっている。
Index: COSXKeyState.cpp
===================================================================
RCS file: /cvsroot/synergy2/synergy/lib/platform/COSXKeyState.cpp,v
retrieving revision 1.11
diff -u -p -r1.11 COSXKeyState.cpp
--- COSXKeyState.cpp	23 Mar 2006 06:03:20 -0000	1.11
+++ COSXKeyState.cpp	17 Aug 2006 05:02:39 -0000
@@ -790,6 +790,12 @@ COSXKeyState::CKeyResource::getKeyID(UIn
 							str, GetScriptManagerVariable(smKeyScript),
 							kCFAllocatorNull);
 
+		// sometimes CFStringCreate returns NULL, (e.g., Apple Korean encoding with char 
+		// value 214 when start up.) if so, make it no key. otherwise, that NULL is given to 
+		// CFStringCreateMutableCopy down Below, which makes a BUS ERROR.
+		if (cfString == 0x0) 
+		  return kKeyNone; 
+
 		// convert to precomposed
 		CFMutableStringRef mcfString =
 			CFStringCreateMutableCopy(kCFAllocatorDefault, 0, cfString);
  • 3行目を確認して、synergy-1.3.1/lib/platform/COSXKeyState.cppに対するパッチだと予想。
パッチを当てる。
  • OSX_BusError.patchを上記修正ファイルと同じ階層に移動した。
  • ターミナルを起動して、ディレクトリを同じ階層に移動。そしてパッチを当てる。
cd ~/Desktop/synergy-1.3.1/lib/platform
patch < OSX_BusError.patch

以上で、パッチ完了。

あとはXcodeを起動して、アクティブなビルド構成:Deployment、ビルド対象アーキテクチャ:Intel、の環境でビルド。(詳細は以前の日記を)

参考

素晴らしい情報に感謝です!