サイログ。

~雑多な記事置き場~

Mac OS X対応化計画 Part2

早速id:waturaさんから情報を得ましたので、修正作業を行いました。
(id:watura さんThanks!)

MacOSXでの拡張ライブラリ

MacOSXでは、拡張ライブラリの名称が「.so」ではなく「.bundle」という名称で作成されているらしい。
どなたか教えてください・・・。

・・・ということをPart1に書こうと思って見逃していました。失礼をばいたしました・・・。

【追記】
waturaさんによると、やっぱり「.bundle」で生成されているようです。
Mac OS Xでは、生成後の拡張ライブラリをコピーする際に、拡張子を.bundleでコピーするように修正しました。

ということで、install_miyako.rbを以下の様に修正します。

#(旧)
if osn =~ /mswin|mingw|cygwin|bccwin/
  ext_dir = "win/"
else # linux, U*IX, MacOSX...
  system("cd idaten_miyako/ ; " + Config::CONFIG["ruby_install_name"] + " extconf.rb ; make ; cp idaten_miyako.so ../")
  system("cd miyako_no_katana/ ; " + Config::CONFIG["ruby_install_name"] + " extconf.rb ; make ; cp miyako_no_katana.so ../")
end

#↓(OS名がdarwinのときの処理を追加)

#(新)
if osn =~ /mswin|mingw|cygwin|bccwin/
  ext_dir = "win/"
elsif osn =~ /darwin/ # Mac OS X
  system("cd idaten_miyako/ ; " + Config::CONFIG["ruby_install_name"] + " extconf.rb ; make ; cp idaten_miyako.bundle ../")
  system("cd miyako_no_katana/ ; " + Config::CONFIG["ruby_install_name"] + " extconf.rb ; make ; cp miyako_no_katana.bundle ../")
else # linux, U*IX...
  system("cd idaten_miyako/ ; " + Config::CONFIG["ruby_install_name"] + " extconf.rb ; make ; cp idaten_miyako.so ../")
  system("cd miyako_no_katana/ ; " + Config::CONFIG["ruby_install_name"] + " extconf.rb ; make ; cp miyako_no_katana.so ../")
end
#(旧)
Dir.glob(ext_dir + "*.so"){|fname| FileUtils.install(fname, sitelibdir, option)}

#↓(OS名がdarwinのときの処理とで切り分け)

#(新)
if osn =~ /darwin/ # Mac OS X
  Dir.glob(ext_dir + "*.bundle"){|fname| FileUtils.install(fname, sitelibdir, option)}
else # Windows, linux, U*IX...
  Dir.glob(ext_dir + "*.so"){|fname| FileUtils.install(fname, sitelibdir, option)}
end

フォントパスの区切り文字

パスの区切り文字に「\」が混じっていると言うことですが・・・。
・・・おかしいなぁ、昔直した記憶があったのに・・・。と思ったら入ってなかった・・・。
ということで、「\」を「/」に書き直す処理を追加しました。

    def Font.search_font_path_file(hash, path) #:nodoc:
      Dir.glob(path+"*"){|d|
        hash = Font.search_font_path_file(hash, d+"/") if test(?d, d)
        d = d.toutf8 if Miyako.getOSName == "mac_osx" # MacOSXはパス名がUTF-8固定のため
        d = d.tr("\\","\/") # これを追加!
        hash[$1] = d if (d =~ /\/([^\/\.]+\.tt[fc])\z/ || d =~ /\/([^\/\.]+\.otf)\z/) # MacOSX対応
      }
      return hash
    end

    def Font.create_font_path #:nodoc:
      osn = Miyako::getOSName
      @@font_base_path[osn].each{|path|
        path = path.toutf8 if Miyako.getOSName == "mac_osx" # MacOSXはパス名がUTF-8固定のため
        path = path.tr("\\","\/") # これを追加!
        @@name_2_font_path = Font.search_font_path_file(@@name_2_font_path, path)
      }
    end

これでちゃんと動くかな?