FreeCAD 0.13 のビルド
Ubuntu Linux系におけるFreeCAD 0.13系 のビルドに関するノート。
今回は、Ubuntu系であるEdubuntuの64ビット版にて、ビルドを行ってみた。
OSのバージョン選択
Ubuntu系でdebパッケージを作る場合は、debユーティリティの依存関係から(11.xx以下では、バージョンの陳腐化によって未対応となるので)12.04.1以降のシステムが望ましい。
またlibboostのバージョンは、1.48系を推奨とする。Ubuntu 12.10系においてlibboostのバージョンは、1.49系に移行している。
14.04α系において、libboostのバージョンは1.48系(リリース版は1.54系)となっている。しかし、libcoin60-devのパッケージがリポジトリから外されて代わりにlibcoin80-devが採用された。coinのバージョン番号が異なるだけではなくインクルードファイルのファイル名やヘッダファイル内の記述等々に仕様変更があったようで、src/3rdParty/Pivy-0.5/ 周りでビルドエラーがでる。つまりバイナリのオブジェクトを拝するにはコードに手を入れる必要がある。
あるいは、FreeCAD内部Pivyコードのビルドを諦めて、cmakeでコンパイルオプションを変えてバイパスさせてしまうしかない*1。
cmake -DFREECAD_USE_EXTERNAL_PIVY=true
ということで、当面はUbuntu 12.04.x系のOSを選択する方が無難であろう。
依存パッケージのバージョン
その他にも確認すべきパッケージのバージョンを以下に示す。*2
パッケージ | バージョン | 公式サイト |
---|---|---|
Python | >= 2.5.x | http://www.python.org/ |
OpenCasCade | >= 5.2 | http://www.opencascade.org/ |
Qt | >= 4.4.x*3 | http://www.qtsoftware.com/ |
Coin3D | >= 2.x < 3.0 | http://www.coin3d.org/ |
ODE | >= 0.10.x | http://www.ode.org/ |
SoQt | >= 1.2 | http://www.coin3d.org/ |
Xerces-C++ | >= 2.7.x < 3.0 | http://xml.apache.org/xerces-c/ |
GTS(GNU Triangulated Surface Library) | >= 0.7.x | http://gts.sourceforge.net/ |
Zlib | >= 1.x.x | http://www.zlib.net/ |
Boost | >= 1.33.x | http://www.boost.org/ |
Eigen | >= 3.0.1 | http://eigen.tuxfamily.org/index.php?title=Main_Page |
依存関係
ドキュメント*4でインストールが必要とされているパッケージ
build-essential cmake python libtool libcoin60-dev libsoqt4-dev libxerces-c-dev libboost-dev libboost-filesystem-dev libboost-regex-dev libboost-program-options-dev libboost-signals-dev libboost-thread-dev libqt4-dev libqt4-opengl-dev qt4-dev-tools python-dev gfortran libeigen3-dev libqtwebkit-dev libode-dev swig libzipios++-dev
opencascadeは、正規版とコミュニティ版のいずれかをインストールする。
なおUbuntu系メイン・リポジトリではコミュニティ版OCEを採用している。
- コミュニティ版
- liboce*-dev oce-draw
- 正規版
- libopencascade-dev opencascade-draw
正規版を使う場合は、Cmakeの実行時にコミュニティ版が見つからないとケチつけるワーニングが出るが、無視してよい。
CMake Warning at CMakeLists.txt:218 (find_package): Could not find module FindOCE.cmake or a configuration file for package OCE. Adjust CMAKE_MODULE_PATH to find FindOCE.cmake or set OCE_DIR to the directory containing a CMake configuration file for OCE. The file will have one of the following names: OCEConfig.cmake oce-config.cmake
Debパッケージ生成で求められる依存関係(Build-Depends)
debhelper (>= 7.0.50~), autotools-dev, libtool, automake, autoconf, libboost-dev, libboost-date-time-dev, libboost-filesystem-dev, libboost-graph-dev, libboost-iostreams-dev, libboost-program-options-dev, libboost-regex-dev, libboost-serialization-dev, libboost-signals-dev, libboost-python-dev, python-dev, python-support, libqt4-dev, libxt-dev, libxext-dev, libxmu-dev, libxi-dev, libx11-dev, libcoin60-dev, libsoqt4-dev (>= 1.4.2~svn20090224), libeigen3-dev, libgl1-mesa-dev, zlib1g-dev, libxerces-c2-dev, libopencascade-foundation-dev, libopencascade-modeling-dev, libopencascade-visualization-dev, python-cxx-dev, libswscale-dev, libzipios++-dev, swig, gfortran, libqtwebkit-dev
FreeCAD 0.13のビルドでは、libboostのバージョン1.4.8以降を要求する。Ubuntu 12.04.x系では何故かlibboostのバージョン1.4.6となているので、自明適にバージョンを指定する必要がある。
そのほか、推奨されるパッケージ
- Teigha File Converter
- DWG形式のファイルをサポートするのに必要なファイルコンバータ。*5
- pycollada
- 交換用ファイルフォーマットCOLLADA*6のPythonバインディング。*7
- python-matplotlib
- Python based plotting system in a style similar to Matlab*8。
- libode-dev
- Open Dynamics Engine*9 いわゆる物理計算エンジン。
- pyOpenCL
- PyOpenCL lets you access the OpenCL parallel computation API from Python.*10
- nvidia-current
- NVIDIA binary Xorg driver, kernel module and VDPAU library.*11
- doxygen
- Documentation system for C, C++, Java, Python and other languages
- doxygen-doc
- Documentation for doxygen*12
- graphviz
- 豊富なグラフ描画ツールセット*13
- PovRay
- レイトレーシングエンジン*14。CGで見た目を確認するために必要なのだが、Ubuntuのリポジトリでパッケージ提供のあるのはhardy、lucid、oneiricの3バージョンのみのようだ*15。Ubuntu 12.xx.x系にインストールするには、本家サイトよりソースパッケージを取得してビルドする必要がある。
- libspnav-dev
- Library to access 3D-input-devices*16. FreeCADでは、3Dマウスでの入力を扱うことができる。 (for 3Dconnexion devices support like the Space Navigator or Space Pilot)
- libsimage-dev
- to make Coin to support additional image file formats.
- python-pivy
- needed for the 2D Drafting module.
- python-qt4
- needed for the 2D Drafting module.
- checkinstall
- to register your installed files into your system's package manager, so yo can easily uninstall later. 自前ビルドやtarbalパッケージのインストール管理ができるようにする代物のようだ。
- libgts-dev
- GNU Triangulated Surface Library(GTS)*17は、ポリゴン・メッシュの3D表面を扱う関数群を提供するライブラリ。
Ubuntu 12.04.x系での依存関係
つまりUbuntu 12.04.x系では、
sudo apt-get install autoconf automake autotools-dev \ build-essential cmake debhelper doxygen doxygen-doc \ gfortran graphviz libsimage-dev python-pivy \ libboost-date-time1.48-dev libboost-filesystem1.48-dev \ libboost-graph1.48-dev libboost-iostreams1.48-dev \ libboost-program-options1.48-dev libboost-regex1.48-dev \ libboost-serialization1.48-dev libboost-signals1.48-dev \ libboost-thread1.48-dev libboost1.48-dev python-qt4 \ libcoin60-dev libcoin60-doc libeigen3-dev libgl1-mesa-dev \ libode-dev liboce-foundation-dev liboce-modeling-dev \ liboce-visualization-dev oce-draw libqt4-dev \ libqt4-opengl-dev libqtwebkit-dev libsoqt4-dev libspnav-dev \ libswscale-dev libtool libxerces-c2-dev libgts-dev \ libzipios++-dev python python-cxx-dev python-dev python-qt4-dev \ python-matplotlib qt4-dev-tools swig zlib1g-dev \ python-qt4 python-tk
とかして、依存関係の解決を試みる。*18
ライブラリのデバック・シンボル
GDBを用いたデバックをする場合には、ライブラリのデバック・シンボルもインストールする必要がある。
sudo apt-get install libgfortran3-dbg libboost1.48-dbg \ libgl1-mesa-glx-dbg \libgl1-mesa-dri-dbg libqt4-dbg \ libqt4-webkit-dbg libgts-dbg zlib1g-dbg python-dbg \ python-qt4-dbg python-tk-dbg libgcc1-dbg libc6-dbg \ libstdc++6-4.6-dbg xserver-xorg-core-dbg
ソースコードの入手
https://github.com/FreeCAD/FreeCAD_sf_master から、Gitすると、PPAで配布しているラインと同等のリビジョン番号。ほぼ日刊アップデートの最新バージョン。ビルドしたバイナリで、リポジトリに上がっている日本語の翻訳も表示されるようだ。
git clone git://github.com/FreeCAD/FreeCAD_sf_master FreeCAD_sf_master
ほかに以下sourceforgeの本家リポジトリもあるが、内容はgithubと同期をとっているようだ。
git clone git://free-cad.git.sourceforge.net/gitroot/free-cad/free-cad freecad
コンフィギュレーション
mkdir Build-Freecad cd Build-Freecad
ここでCmake*19を実行してMakefileなどビルドの依存関係を生成する。
Cmakeにオプション -G を付加するとIDEのプロジェクトファイルも生成してくれる。たとえば 'CodeBlocks - Unix Makefiles' を指定するとCode::Blocks*20が利用できるようになり、コードのブラウズが容易になる。*21
Code::Blocksのインストールは
sudo apt-get codeblocks
とすればよい。
デバックシンボル付きでビルドする場合はCMakeのオプションに '-DCMAKE_BUILD_TYPE=Debug' を指定すればよい。gitの本流をビルドするからにはアプリケーションが落ちる場所を特定したり、新しいコードを追加したい気持ちがあるだろうからシンボルを生成してもらった方が都合よい。
cmake -DCMAKE_BUILD_TYPE=Debug -G'CodeBlocks - Unix Makefiles' ../${srcdir}
ビルド
いつものようにmakeを実行する。このとき-jオプションを付加すると、Makeが起動するジョブの数を指定できる。また-lオプションを指定すると、プロセッサの負荷が高い時に起動を抑制してくれる。たとえば0.9のように小数点で指定するとプロセッサの負荷が90%以上であるときには新たなジョブを立てないで負荷が下がるまで保留するように指定できるので、バッググラウンドプロセスでビルドするときは便利だ。
make -j 4 -l 0.9 all
あるいはcode::blocks上からビルド作業したい場合は
codeblocks FreeCAD_trunk.cbp
のようにして、code::blocksを起動させてからメニューやツールバーアイコンからビルドを実行させればよい。
ビルドエラー
64ビット版Linux上でビルドしていると、Meshモジュール周りのリンクでリンクエラーが発生する。ビルドエラーの要因は、Cmakeが生成するビルドルールのパスに32ビットライブラリのパスが含まれてしまっているからだ。余談になるが、もし32ビット/64ビット混在のビルド環境で64ビットオブジェクトを作ろうとすると32ビットライブラリをリンクしようとするかもしれない。
さて問題の修正であるが、Cmakeの経験が浅いので、本流を正攻法に直すことを考えることは割愛して、問題となるパス指定を上書きしてしまうスクリプトをビルドディレクトリで実行することにしよう。
grep i386-linux-gnu -r . -l |sed -e "s/^/sed -e 's\/i386-linux-gnu\/x86_64-linux-gnu\/g' -i /g" |dash
テスト
作業ディレクトリのbinにcdする。freecadにテスト用オプションを付加して実行すると、テストスクリプトが実行される。
cd bin ./FreeCAD -t0
このテストで100%合格となるには、プリンターが利用できる必要がある。
アプリの翻訳(ローカライズ)
(日本語版のドキュメントは陳腐化してるので、)ローカライズのドキュメント英語版*22を参考にして作業をおこなう。
翻訳ファイルの更新
翻訳したいモジュールのディレクトリにcdして、以下のように翻訳ファイルあるパスを相対パスで指定すると、アプリのテキストと翻訳ファイルを同期させることができる。シェルのtab補完を利用すると便利。
pylupdate4 *.py -ts Giu/Resource/translate/HogeHoge-no-Module_fr.ts
でも、上述のpylupdate4を実行すると、ほとんどの項目にobsoleteがついてlinguistでの翻訳作業ができなくなる。
旧式の方法
モジュールのGiuディレクトリにcdしてから
qmake -project
とかして、qtプロジェクトファイルを作っておく。
先ほどのqtプロジェクトファイルのあるディレクトリにcdして,
lupdate -ts Giu/Resource/translate/HogeHoge-no-Module_fr.ts
とかすると、ソースコードのテキストが翻訳ファイルに反映される。
翻訳作業
翻訳ファイルはXMLで記述されてあるので、テキストエディタよりもQT-linguist*23のような専用ユーティリティを利用する方がよい。
デスクトップ上のNautilus*24から翻訳ファイルを選択して右クリックのメニューからQT-linguistを起動すれば、作業したいファイルを読み込まれ編集できるようになる。またコマンドラインから同様の作業を行うならば、ターミナルのshellから、ソースツリーのパスに移動して、linguistに翻訳ファイルのパスをshellのタブ補完を駆使するなどして長々と指定して起動する。
QT-linguistには、フレーズファイルを作っておいてフレーズファイルから近い文章を選ぶ機能がある。ということでフレーズファイルをホームディレクトリに作成しておきCtrl+Tを押して翻訳結果を地道に登録してゆく方法もとれる。
翻訳作業が終わったら保存をして、さらにファイルメニューのリリースを選択するとビルドに用いられる翻訳ファイルが生成される。*25
git の差分ファイルを作る
Patchコマンドで使えるパッチは以下のようにする*26。ここで -- の後ろにファイル名を指定すると、指定されたファイルだけの差分を表示することができる。
git diff --no-prefix -- *ja.ts >../FreeCAD$(date +%Y%m%d-%H%M%S%z).patch
3Dマウスの例
3Dマウスは、3次元空間にある物体の座標変換を指定するための入力デバイスである。FreeCADの設定ダイアログには、SpaceBallの文字列がみうけられるが、既にSpaceBallは旧世代の製品となって入手できない。後続製品には以下のようなものがあるが、動作の情報について当方は未確認である。
なお、FreeCADのWebドキュメント*27によれば 3Dconnexion の SpaceNavigator*28が利用できると記載されている。
3Dconnexion 3Dマウス SpaceNavigator SE (Standard Edition) SNSE
- 出版社/メーカー: 3D Connexion
- 発売日: 2006/12/08
- メディア: Personal Computers
- 購入: 4人 クリック: 140回
- この商品を含むブログ (19件) を見る
3Dconnexion SpaceMouse Pro SMP
- 出版社/メーカー: 3D Connexion
- メディア: Personal Computers
- クリック: 1回
- この商品を含むブログを見る
3Dconnexion 3Dマウス SpaceExplorer USB SEU
- 出版社/メーカー: 3D Connexion
- 発売日: 2006/12/08
- メディア: Personal Computers
- 購入: 2人 クリック: 10回
- この商品を含むブログ (3件) を見る
- Windows XP Professional SP2 (x86)
- Windows XP Professional x64 Edition
- Windows Vista (all editions)
- Windows 7 (all editions)
- MAC OS X 10.4.6 or greater
- Linux Red Hat Enterprise WS 4, SuSE Linux 9.3
- Sun Solaris 8 (SPARC), Sun Solaris 10 (x64), AIX 5.2 -ML04, HP-UX 11
とされている。
脚注
*1:Problem compiling from source on Linux Mint (petra)
*2:FreeCADのオンラインマニュアルより
*3:オンラインマニュアルには4.1.xとあるが、ダイアログメッセージには4.4以降が必要という文面を見つけた。
*4:http://www.freecadweb.org/wiki/index.php?title=CompileOnUnix
*5:http://www.opendesign.com/guestfiles/TeighaFileConverter/
*7:https://github.com/pycollada
*10:http://mathema.tician.de/software/pyopencl
*11:pyOpenCLが依存を要求
*15:http://packages.ubuntu.com/search?keywords=povray
*16:http://spacenav.sourceforge.net/
*17:http://gts.sourceforge.net/
*18:この例では、Ubuntu 12.04.x系のリポジトリにpycolladaがないので含めていない。PyOpenCL、nvidia-currentは、実機にnVideaのグラフィックスを持っていないの含めていない。
*20:http://www.codeblocks.org/
*21:オプション -GKDevelop3 をつけるとKDEのIDEが使えるらしいが、IDEからのビルドなどの使い方がよくわからなかった。なぜだかシャドービルドで依存関係が満たされない様子で途中でエラーとなる。
*22:http://www.freecadweb.org/wiki/index.php?title=Localisation
*23:http://qt-project.org/doc/qt-4.8/linguist-translators.html
*24:http://live.gnome.org/Nautilus
*25:lrelease コマンドでも同様のリリース作業が可能である。
*26:http://transitive.info/article/git/command/diff/
*27:http://www.freecadweb.org/wiki/index.php?title=3D_input_devices