きりかノート 3冊め

おあそびプログラミング

コマンドラインツールで Rosetta を強制する

RubyCocoa の bool がなんたらの件で考えてみた。Xcodegcc いっぱつでユニバーサルバイナリをつくることができるのは便利なんだけど、動作検証するには結局 ppcintel の両方の環境が必要だよね。でも、とりあえず intel 上で Rosetta でテスト実行したいよな。

アプリケーション(.app)では Finder の操作で強制的に Rosetta で動作させることができるのだから、コマンドラインツールでできない理由もないはず。どうせ環境変数になんか設定するだけでしょ?と軽いノリで調べてみた。

ADC の "Forcing an Application to Run Translated"(日本語)に書いてあるくらいしかないなあ。

  • Finder から「Rosetta を使って開く」
  • LSPrefersPPC を Info.plist で指定

の2つはアプリケーションバンドルである必要があるのでダメ(Launch Serivce 経由で開始させりゃいいのかも?)。すると残りの選択肢は、

  • ppc のみのファイルを(dittoなどで)生成し、それを実行する
  • sysctlbyname() を利用して sysctl.proc_exec_affinity を指定し、子プロセスとして実行する

のどちらかになる。

簡単さから言えば前者なんだけど、sysctlbyname() を経由させて引数に与えられたコマンドを実行するツールがひとつあればそれで済む。とーぜん誰か作ってるでしょ!と探してみるものの見つからず。むー、作るの?

(2007/07/09 追記)中川さんがツールを作ってくれた!。だけど intel Mac には /usr/libexec/oah/translate が用意されてたのだった。ちなみに translate に intel のみのバイナリを渡すと、ちゃんとエラーになった。