Fritzingのビルド(OpenSUSE環境)
電子工作でよく使われている配線図等の作成ソフトFritzingをソースコードからビルドしてみました。
Linuxは主にOpenSUSEを使っているので、現在主に使っているTumbleweedで行いました。
Friztingの開発にはQtを使っているようで、Qt6(Qt Creator 11.0.2)の環境で試してみました。
下記の公式ページが参考になるかもしれません。
FritzingのソースコードはGitHubに置いてあるので、適当なディレクトリでアプリ(fritzing-app)とパーツ(fritzing-parts)のソースコードダウンロードします。
ここでは、/home/xxx/src/appディレクトリ内にダウンロードするとします。
> cd /home/xxx/src/app
> git clone https://github.com/fritzing/fritzing-app.git
> git clone https://github.com/fritzing/fritzing-parts.git
ビルドは基本的にはQt Creatorを起動して、ダウンロードしたfritzing-appディレクトリ内のプロジェクトファイルphoenix.proを開いてリビルドすればできるようになっています。
ただ、コンパイルを通すには、いくつかのプログラムが必要でした。出てくるエラーに対応しながらビルドしました。以下は主な対応した点です。
libgit2
fritzing-app.gitとfritzing-parts.gitをダウンロードした同じディレクトリにあるlibgit2ディレクトリのスタティックライブラリを探すようになっているようなので、ソースコードをダウンロードしてインストールします。
> cd /home/xxx/src/app
> git clone https://github.com/libgit2/libgit2.git
> cd libgit2
> mkdir build
> cd build
> cmake -DBUILD_SHARED_LIBS=OFF ..
> sudo make install
ただ、libgit2はOpenSUSEのパッケージにもあるので、上記のように自分でインストールせずに、YaST(GUIの管理ソフト)やzypper(コマンドラインのパッケージ管理ソフト)などでインストールした方が良いかもしれません。
パッケージでインストールしてあるはずなのに見つけてくれない場合は、fritzing-app/priディレクトリ内にあるlibgit2detect.priに下記のように
LIBGIT_STATIC = false
を書き込んでしまうと良いかもしれません。この場合は、共有ライブラリでが使われるようです。
packagesExist(libgit2) {
} else {
LIBGIT_STATIC = true
}
LIBGIT_STATIC = false <--追加部分
ngspice
fritzing-app.gitとfritzing-parts.gitをダウンロードした同じディレクトリにあるngspice-40というディレクトリを探しにいくようになっているようなので、Ngspiceのダウンロードサイトからngspice-42.tar.gzをダウンロードしてインストールします。
ngspiceのコンパイルに必要だったので、libXaw-develのパッケージを別途インストールしました。
$ cd /home/xxx/src/app
$ tar xvfz ngspice-42.tar.gz
$ ln -s ngspice-42 ngspice-40
$ cd ngspice-40
$ mkdir build
$ cd build
$ ../configure --with-ngshared --enable-xspice --disable-debug --enable-cider --with-readline=yes --enable-predictor --enable-osdi --enable-openmp
$ make -j4
$ sudo make install
以上でngspiceの共有ライブラリがインストールされます。Fritzingでは共有ライブラリのみ利用するようですが、ngspiceのコマンドラインも使いたい場合は、--with-ngsharedを--with-xにして再度configure, make, make installを行ってください。
quazip
fritzing-app.gitとfritzing-parts.gitをダウンロードした同じディレクトリにあるquazip_qt6というディレクトリ内のinclude/quazipディレクトリを探しにいくようになっているようなので、下記のようソースコードをダウンロードしてインストールします。Qt5の環境では、quazip_qt5のディレクトリを探すのでquazip_qt5にしてください。
> cd /home/xxx/src/app
> git clone https://github.com/stachenov/quazip.git
> ln -s quazip quazip_qt6
> cd quazip_qt6
> mkdir build
> cd build
> cmake ..
> make
> sudo make install
> cd ..
> mkdir include
> cd include
> ln -s /usr/local/include/QuaZip-Qt6-1.4/quazip
svgpp
svgppはインクルードファイルのみなので、ソースコードをダウンロードしてパスが通っているディレクトリ(ここでは/usr/local/include/)に、svgppとexboostの各ディレクトリをコピー(ここではシンボリックリンクにしています)します。
> cd /home/xxx/src/app
> git clone https://github.com/svgpp/svgpp.git
> cd svgpp/src
> sudo ln -s /home/xxx/src/app/svgpp/include/svgpp /usr/local/include/
> sudo ln -s /home/xxx/src/app/svgpp/include/exboost /usr/local/include/
modelbase.cpp
fritzingの開発はQt5で行われているようで、Qt6環境では、
/home/xxx/src/app/fritzing-app/src/model/modelbase.cppの下記の部分でエラーになりました。
bool ok = oldDoc.setContent(&newFzp);
下記のようにboolでキャストすると良さそうです。
bool ok = (bool)oldDoc.setContent(&newFzp);
起動方法
そんなこんなで、Qt Creatorでのビルドが完了すると、build-phoenix-unknown-Debugディレクトリ(Debugでビルドした場合)またはbuild-phoenix-unknown-Releaseディレクトリ(Releaseでビルドした場合)にFritzingのファイルができます。
下記のようにfritzing-appとfritzing-partsへのフルパスを指定して起動すると実行できます。
./Fritzing -f "/home/xxx/src/app/fritzing-app" --parts "/home/xxx/src/app/fritzing-parts"
下記のようなシェルスクリプトを作って、パスの通ったディレクトリに置いておけば、どこからでも起動できるようになると思います。
#! /bin/sh
Fritzingへのフルパス -f "/home/xxx/src/app/fritzing-app" --parts "/home/xxx/src/app/fritzing-parts" "$@" &
ビルドした現在のバージョンは1.0.1でした。すでに1.0.2が出ているようですが、GitHubではまだ公開されていないようです。
ちなみに、fritzingは自分でビルドしなくてもOpenSUSEのパッケージでインストールできます。バージョンは0.9.4のようです。
Qt6(6.5.2)の環境で構築したせいか下記のようなエラーメッセージが出るのが少し気になります。もしかするとどこかに影響がでているのかもしれません。
QDomDocument called with unopened QIODevice. This will not be supported in future Qt versions.
QDomDocument::setContent: Failed to open device.
OpenSUSE14.5のQt5(5.15.2)の環境でもビルドしてみましたが、このようなエラーメッセージは出ないようです。
その後、1.0.2の新しいバージョンではQt6環境に変わったようなので、それに関しては下記に書きました。