mattintosh note

どこかのエンジニアモドキの備忘録

2nd MacPorts & Homebrew に gtk-mac-integration をインストールする

1つの OS X に複数の MacPorts と Homebrew を共存させる。



RawTherapee で使う gtk-mac-integration 用に GTK+ Quartz な2つめの MacPorts を入れてみたので作業メモ。あと、Homebrew での構築もやりたかったのでそっちも追加。

作業内容

  • /opt/local → MacPorts+x11
  • /opt/gtkMacPorts-x11 +no_x11 +quartz
  • /opt/hb → Homebrew

2nd MacPortsgtk-mac-integraion(gtk-osx-application)

/opt/local を使わないのでソースからビルド。異なるプレフィックスを使用する場合のインストール方法は http://guide.macports.org/#installing.macports.source.multiple に見本あり。--with-no-root-privileges で管理者権限不要な環境にしようと思ったけど sqlite3 のデータベース作成あたりでパーミッションエラーなので sudo

PATH=/usr/bin:/bin:/usr/sbin:/sbin
prefix=/opt/gtk
tar xf MacPorts-2.0.3.tar.gz
cd MacPorts-2.0.3
./configure \
    --prefix=$prefix \
    --enable-readline \
    --with-applications-dir=$prefix/Applications \
    --with-frameworks-dir=$prefix/Library/Frameworks \
    CFLAGS="-pipe -Os"
make
sudo make install

macports.conf

applications_dir がユーザのアプリケーションディレクトリになってたので修正。binpath はおまじない。

applications_dir /opt/gtk/Applications
binpath /opt/gtk/bin:/opt/gtk/sbin:/usr/bin:/bin:/usr/sbin:/sbin
buildnicevalue 10

variants.conf

x86_64 と Quartz が強制されるようにしておく。

-x11 +no_x11 +quartz
+gcc48
-universal

容量削減のため distfiles をメインツリーと共用。

sudo rm -rf /opt/gtk/var/macports/distfiles
sudo ln -s /opt/local/var/macports/distfiles /opt/gtk/var/macports/distfiles

あとはフルパスで port コマンドを呼び出して install gtk-osx-application

Homebrew で gtk-mac-integration

/usr/local は自分で使ってるので /opt/hb 辺りに置くことにした。昔使ってたときは気づかなかったけど何処に置いてもいいらしい。手始めに xz をインストールしてみたらバイナリが降ってきてびっくり。

sudo install -d -o 501 -g 20 /opt/hb
git clone --depth 1 https://github.com/Homebrew/homebrew.git /opt/hb
alias brew="PATH=/opt/hb/bin:/opt/hb/sbin:/usr/bin:/bin:/usr/sbin:/sbin /opt/hb/bin/brew"

現時点ではフォーミュラに gtk-mac-integration が無いっぽいので自作。brew create してみたら「ふぉおおお!brew create すごいよ!!簡単だよ!!!」と、ちょっと感動した(Tcl?いえ、知らない子ですね…)。depends_on 'pkg-config' 書かないと PATH 通してくれないのにハマったけど。

gtk-mac-integration.rb

require 'formula'

class GtkMacIntegration < Formula
  homepage 'http://gtk.org/'
  url      'http://ftp.acc.umu.se/pub/gnome/sources/gtk-mac-integration/2.0/gtk-mac-integration-2.0.5.tar.xz'
  sha256   '6c4ff7501d7ff35e49068052d80fcf76ce494e5953c5f3967e4958b1b0c67b9f'
  version  '2.0.5'

  depends_on 'pkg-config' => :build
  depends_on 'xz'
  depends_on 'gtk+'

  patch do
    url  'http://git.gnome.org/browse/gtk-osx/plain/patches/0001-Fix-unhandled-exception-from-attempting-to-access-me.patch'
    sha1 'da39a3ee5e6b4b0d3255bfef95601890afd80709'
  end

  def install
    system "./configure", "--prefix=#{prefix}",
                          "--disable-dependency-tracking",
                          "--disable-silent-rules"
    system "make install"
  end
end

gtk+.rbgtkmm.rbx11 付きなのでちょいと弄る。とりあえずローカルのフォーミュラを無理矢理コメントアウトしたけどいずれ cairo/cairomm みたいな --without-x11 オプションを追加できるようにしたいところ。Homebrew ってバリアントの管理どうなってんだろう。

diff --git a/Library/Formula/gtk+.rb b/Library/Formula/gtk+.rb
index 75fc0c7..9383f4d 100644
--- a/Library/Formula/gtk+.rb
+++ b/Library/Formula/gtk+.rb
@@ -21,7 +21,7 @@ class Gtkx < Formula
   depends_on 'jasper' => :optional
   depends_on 'atk'
   depends_on 'cairo'
-  depends_on :x11 => '2.3.6'
+#  depends_on :x11 => '2.3.6'
   depends_on 'gobject-introspection'
 
   fails_with :llvm do
@@ -35,7 +35,8 @@ class Gtkx < Formula
                           "--prefix=#{prefix}",
                           "--disable-glibtest",
                           "--enable-introspection=yes",
-                          "--disable-visibility"
+                          "--disable-visibility",
+                          "--with-gdktarget=quartz"
     system "make install"
   end
 end
diff --git a/Library/Formula/gtkmm.rb b/Library/Formula/gtkmm.rb
index da0d8be..c25e514 100644
--- a/Library/Formula/gtkmm.rb
+++ b/Library/Formula/gtkmm.rb
@@ -18,7 +18,7 @@ class Gtkmm < Formula
   depends_on 'pangomm'
   depends_on 'atkmm'
   depends_on 'cairomm'
-  depends_on :x11
+#  depends_on :x11
 
   def install
     system "./configure", "--disable-dependency-tracking", "--prefix=#{prefix}"

インストールはとりあえずOK。

% brew -v install gtk-mac-integration
Homebrew 0.9.5
==> Downloading http://ftp.acc.umu.se/pub/gnome/sources/gtk-mac-integration/2.0/gtk-mac-integration-2.0.5.tar.xz
Already downloaded: /Library/Caches/Homebrew/gtk-mac-integration-2.0.5.tar.xz
==> Verifying gtk-mac-integration-2.0.5.tar.xz checksum
/opt/hb/opt/xz/bin/xz -dc "/Library/Caches/Homebrew/gtk-mac-integration-2.0.5.tar.xz" | tar xf -
==> Downloading http://git.gnome.org/browse/gtk-osx/plain/patches/0001-Fix-unhandled-exception-from-attempting-to-access-me.patch
Already downloaded: /Library/Caches/Homebrew/gtk-mac-integration--patch-1c99223c1a21e49836d1f1c95c0d098616077037.patch
==> Verifying gtk-mac-integration--patch-1c99223c1a21e49836d1f1c95c0d098616077037.patch checksum
==> Patching
/usr/bin/patch -g 0 -f -d /private/tmp/gtk-mac-integration-2Fx2/gtk-mac-integration-2.0.5 -p1 -i /private/tmp/gtk-mac-integration--patch-W64a/0001-Fix-unhandled-exception-from-attempting-to-access-me.patch
patching file src/cocoa_menu_item.c
==> ./configure --prefix=/opt/hb/Cellar/gtk-mac-integration/2.0.5 --disable-dependency-tracking --disable-silent-rules
==> make install
==> Cleaning
rm /opt/hb/Cellar/gtk-mac-integration/2.0.5/lib/libgtkmacintegration.la
==> Finishing up
ln -s ../Cellar/gtk-mac-integration/2.0.5/include/gtkmacintegration gtkmacintegration
ln -s ../Cellar/gtk-mac-integration/2.0.5/share/strings strings
ln -s ../Cellar/gtk-mac-integration/2.0.5/lib/libgtkmacintegration.2.dylib libgtkmacintegration.2.dylib
ln -s ../Cellar/gtk-mac-integration/2.0.5/lib/libgtkmacintegration.dylib libgtkmacintegration.dylib
ln -s ../../Cellar/gtk-mac-integration/2.0.5/lib/pkgconfig/gtk-mac-integration.pc gtk-mac-integration.pc
==> Summary
🍺  /opt/hb/Cellar/gtk-mac-integration/2.0.5: 43 files, 304K, built in 58 seconds

うーん、これは楽だ。絵文字表示も面白いね。