mattintosh note

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

mattintosh4-rt4-mac(RTMX)の説明

※4.0.10 がリリースされたためクローンリポジトリの更新は終了しました。(2013-03)

English documentation

https://docs.google.com/document/d/1GHuMMnZ8eM7MVwoI1Vv7aSdQxAKKQK4n-8tsyFPpPwg/edit?usp=sharing

概要

RawTherapee の公式リポジトリのクローンです。OS X 向けに調整しています。"macosx" ブランチを使用して下さい。

http://code.google.com/r/mattintosh4-rt4-mac

hg clone -b macosx https://code.google.com/r/mattintosh4-rt4-mac/

MacPorts を利用している方は Portfile からのインストールもできます。

https://github.com/mattintosh4/MP-RawTherapee

使い方

簡単にバンドル化ができるように macosx_bundle というターゲットを用意しています。make install の後に実行して下さい。ビルドディレクトリ内にアプリケーションバンドルとディスクイメージが作成されます。

cmake ../path/to/source
make install
make macosx_bundle

依存関係のインストール

GTK+ 関連は MacPorts または JHBuild でインストールできます。X11 バックエンドを使用するなら MacPorts、Quartz バックエンドを使用するなら JHBuild がおすすめです。(MacPorts はバリアントによるポートの衝突が多いため)

MacPorts

以下のポートが必要です。バリアントは Quartz バックエンドを使用する場合の設定です。X11 バックエンドを使用する場合は必要ありません。variants.conf+quartz -x11 を追加する方法もあります。cairo 〜 gtkmm までの順番を変えるとうまくインストールできないことがあります。2013年01月現在でインストールが可能だった手順ですが、ポートの更新に伴い、衝突が発生するかもしれません。うまくインストールできない場合はログで確認して下さい。

ポート名 バリアント(Quartz使用時) JHBuild
cairo +quartz -x11 meta-gtk-osx-core
pango +quartz -x11 meta-gtk-osx-core
gdk-pixbuf2 -x11 meta-gtk-osx-core
gtk2 +quartz meta-gtk-osx-core
libsigcxx2 meta-gtk-osx-core
gtkmm *1 meta-gtk-osx-gtkmm
gtk-engines2 meta-gtk-osx-core
lcms2 -
libiptcdata -
fftw-3-single -
gcc47 *2 -
cmake *3 -
mercurial -

*1:バイナリモードではインストールに失敗する可能性があります。ソースモードに変更してインストールして下さい。

sudo port -s install gtkmm

*2OpenMP を使用する場合。

*3:CMake は公式からも入手できます(http://www.cmake.org/cmake/resources/software.html)。コマンドラインツールが使える状態にしておいて下さい。

JHBuild を使用する場合

JHBuild は gtk-osx-build-setup.sh を使うと簡単にインストールできます。GitHub(https://github.com/jralls/gtk-osx-build)などからダウンロードして実行します。JHBuild の実行ファイルは $HOME/.local/bin、パッケージは $HOME/gtk にインストールされるようになっています。

(※www.gnome.org から配布されている JHBuild と www.gtk.org から配布されている JHBuild は仕様が違うみたいです。jhbuildrc の記述が異なります。また、jhbuild bootstrap--ignore-system が使えなかったりします。)

パッケージのインストール先を変更したい場合は $HOME/.jhbuildrc の496行目辺りにある記述を変更します($HOME/.jhbuildrc-custom でもできるかも)。以下の例ではインストール先を /opt/gtk に変更しています(実際には /opt への書込権限が必要になるので下準備が必要です)。

<feff><feff># Source and installation locations.
#
#
#_root = os.path.expanduser("~/gtk")
_root = os.path.expanduser("/opt/gtk")

MacPorts と競合しないようにシェルのプロファイルにエイリアスを設定しておきます。

alias jhbuild="$HOME/.local/bin:$HOME/gtk/inst/bin:/usr/bin:/bin:/usr/sbin:/sbin jhbuild"

以下のパッケージをインストールします。

  • meta-gtk-osx-bootstrap
  • meta-gtk-osx-core
  • meta-gtk-osx-gtkmm
  • meta-gtk-osx-themes
  • shared-mime-info
jhbuild bootstrap --ignore-system
jhbuild build meta-gtk-osx-bootstrap
jhbuild build meta-gtk-osx-core
jhbuild build meta-gtk-osx-gtkmm
jhbuild build meta-gtk-osx-themes
jhbuild build shared-mime-info

fftw-3 などは JHBuild にありませんので MacPorts を使ってインストールして下さい。

RawTherapee のビルド

ここでは MacPorts 版の GCC 4.7 を用いてビルドする方法を説明します。

CMake ではソース外ビルドが推奨されているのでビルドディレクトリを作成して作業していきます。-DCMAKE_<LANG>_COMPILER などは CCCXX 変数で指定することもできます。

# macosx ブランチのみをクローン
hg clone https://code.google.com/r/mattintosh4-rt4-mac/
# ビルドディレクトリの作成
mkdir build
cd build
# Cコンパイラに gcc-mp-4.7、C++ コンパイラに g++-mp-4.7 を指定して cmake を実行
cmake -DCMAKE_C_COMPILER=gcc-mp-4.7 -DCMAKE_CXX_COMPILER=g++-mp-4.7 ../mattintosh4-rt4-mac
make install
make macosx_bundle

JHBuild を使用してビルドする場合は cmake を実行する前に、pkg-config の環境変数を変更します。

# PATH を JHBuild のディレクトリ優先に設定
export PATH=$HOME/gtk/inst/bin:$PATH
# pc ファイルの検索パスに MacPorts のディレクトリを追加
export PKG_CONFIG_PATH=$HOME/gtk/inst/lib/pkgconfig:/opt/local/lib/pkgconfig

各 pkg-config に設定されている pc ファイルの検索パス(PKG_CONFIG_LIBDIR?)は以下のように調べることができます。

/opt/local/bin/pkg-config --variable pc_path pkg-config

gcc|g++-mp-4.7 使用時の注意次項

現在の公式のソースでは MacPorts/opt/local/lib/libstdc++.6.dylib とシステムの /usr/lib/libstdc++.6.dylib が競合するため、実行ファイル単体で起動しようとすると失敗します。これに関していくつかの回避策が考えられます。

※これらの方法は試験中です

1. リンカフラグに -weak_library を使用する

実行ファイルのリンクに -Wl,-weak_library,/usr/lib/libstdc++.6.dylib を追加することで /usr/lib/libstdc++.6.dylib を先に読み込ませることができます。

LDFLAGS="-Wl,-weak_library,/usr/lib/libstdc++.6.dylib"

cmake 時に設定する場合は CMAKE_EXE_LINKER_FLAGS が使用できます。

-DCMAKE_EXE_LINKER_FLAGS="-Wl,-weak_library,/usr/lib/libstdc++.6.dylib"

2. DYLD_INSERT_LIBRARIESDYLD_FORCE_FLAT_NAMESPACE を使用する

DYLD_INSERT_LIBRARIES で指定のライブラリの割り込みができます。DYLD_FORCE_FLAT_NAMESPACE は変数の宣言のみでかまいません。

DYLD_INSERT_LIBRARIES=/usr/lib/libstdc++.6.dylib DYLD_FORCE_FLAT_NAMESPACE= rawtherapee

ビルド時に -Wl,-flat_namespace 付きでビルドしている場合は DYLD_FORCE_FLAT_NAMESPACE は必要ありません。

3. DYLD_LIBRARY_PATH を使用する

DYLD_LIBRARY_PATH=/opt/local/lib/gcc47 rawtherapee