あるいは、ビルド方法とちょっとした技術ドキュメント。
もう最後にビルドしたのが何年か前も思い出せないので、とりあえずビルドできるだけです。ビルドできるところまでは確認しましたが、動かして最後まで走りきるかどうかはちょっと確信がもてない。たぶん、無理だと思う。
以下のどのチャンネルでも構わないので、ご連絡ください:
- メール:psi < at > 7io < dot > org
- このリポジトリのIssue欄
- マストドン:@[email protected]
(2chは規制で書けないことが稀によくあるのでちょっと勘弁してください)
開発を引き継ぐと次の特典がえられます:
- github Orgnizationの管理者権限
- ソースコードへのコミット権限
- 公式サイト編集権限
- OSDNプロジェクトの管理者権限
- 昔使ってて最近ほとんど使ってない。実質休眠状態です。
- github/OSDNをやめて他に行くなどしてももちろんOKです
さきゅばすは基本的にGPLv3かBSD-2-Clauseでデュアルライセンスされているオープンソース・ソフトウェアですので、そこだけご注意を。
Saccubus3のffmpegはSaccubus2ベースですが、saccubus.dllはSaccubus1ベースなので、互換性がありません。
解決策としては、次の2つがあります:
- Saccubus3ブランチをSaccubus1ブランチをベースに変更する
- rebaseでたぶんすごい苦労すると思います
- saccubus.dllを書き換え、Saccubus3のffmpegに対応させる
- 全く仕様を覚えてないので、ソースコードの解読が必要
がんばれ。
今使ってるのがSDL1.2で、今の最新盤はSDL2で、そのうちobsoletedになりビルドすら出来なくなるかも…。
全体の構造はこんな感じです:
他にもあったかもしれないが、もう忘れた。
- ffmpeg - カスタムffmpeg
- saccubs.jar - フロントエンド
- saccubus.dll - コメントを焼き込むフィルタ
さきゅばすのffmpegは、オリジナルのffmpegにちょっとしたパッチを入れたものです。そのため自分でビルドする必要があります。
なお、ffmpegのライセンスが下記の手順でビルドするとGPLv3になるので、さきゅばすはffmpegだけはGPLv3になります。
git clone [email protected]:Saccubus/ffmpeg.git
cd ffmpeg
まずは、ffmpegの最新版に追従させましょう。とにかくビルドだけしたい人はここは読み飛ばしてください。
# ffmpegディレクトリ下で
git checkout master
# 大本のリポジトリを追加し、情報を取得する
git remote add upstream https://git.ffmpeg.org/ffmpeg.git
git fetch upstream
# ローカルリポジトリのmasterブランチを、大本のmasterブランチに追従させる
git pull upstream master --ff-only
# https://github.com/Saccubus/ffmpeg/tree/master に反映
git push origin master
さきゅばす用のパッチは、gitのrebaseを使って管理しています。一つ上の手順を飛ばした場合は、こちらも飛ばして大丈夫です。
# Saccubus3 ブランチに移動
git checkout Saccubus3
# masterブランチからrebase
git rebase master
## この時conflictが起こったら…がんばれ。
# https://github.com/Saccubus/ffmpeg/tree/Saccubus3 にpush
# この時、--forceをつけないと親子関係がない(遠い親戚ぐらいになる)ため弾かれる。
# もしこの時の--forceで何かを壊してしまった場合、次に作るtagからリカバリしてください。
git push origin Saccubus3 --force
# 成功したら、後でトラブった時のためにtagをつけてpushしておく
git tag Saccubus3-20191109
git push origin Saccubus3-20191109
mergeだけでなんとかしようとした時期もあったのですが、やたらコンフリクトしてつらいのでやめました。ちなみにですが、Saccubus{1,2,3}ブランチすべてで同じ操作で最新版ffmpegに追従させることができます。ただ、Saccubus1ブランチはコンフリクトを解消するのはたぶんかなり難しいでしょう。
さきゅばすのwindows用ffmpegバイナリは、クロスコンパイラを使ってLinuxから生成されています。
windows用ffmpegの全部入りバイナリを作るためのヘルパを提供してくれる人がいるので、その人の成果に乗っかります。
具体的に言うと、ffmpegを最新版にしたのと同じことをします。
# clone
git checkout [email protected]:Saccubus/ffmpeg-windows-build-helpers.git
cd ffmpeg-windows-build-helpers
# ローカルリポジトリのmasterブランチを、大本のmasterブランチに追従させる
git remote add upstream [email protected]:rdp/ffmpeg-windows-build-helpers.gi
git checkout master
git pull upstream master --ff-only
git push origin master
# saccubus3リポジトリでrebase、push
git checkout saccubus3
git rebase master
## ffmpeg同様、ここでconflictする事があります。その時はがんばれ。
git push origin saccubus3 --force
# 後のために一応タグをつけて保存
git tag saccubus3-20191109
git push origin saccubus3-20191109
やっとこれでビルドが出来ます。
# ffmpeg-windows-build-helpersのディレクトリで
git checkout saccubus3
bash compile_saccubus.sh
二時間ぐらい掛かるかな。
うまくいくと、sandbox/win64/ffmpeg_git/
の下にffmpeg.exe
が出来上がるはずです。
% cd sandbox/win64/ffmpeg_git/
% ls ffmpeg.exe
-rwxrwxr-x 1 kaede kaede 88M Nov 9 06:09 ffmpeg.exe
% file ffmpeg.exe
ffmpeg.exe: PE32+ executable (console) x86-64 (stripped to external PDB), for MS Windows
いわゆるGUI部分です。
OpenJDKの最新版をとりあえず入れておいてください。
git checkout [email protected]:Saccubus/Saccubus3.git
cd Saccubus3/frontend
# とりあえず起動したい
./gradlew run
# jarを作りたい
./gradlew build
java -jar build/libs/jp.osdn.saccubus-3.0-all.jar
他の./gradlew
のコマンドに関しては公式サイトを見てください。
gradleでビルドできる関係上、開発にはIntelliJ Ideaがそのまま使えます。
コメントをフレームに描きこむ機能を担う部分です。
ffmpegからは独立したDLL(Dynamic Link Library)として存在しており、ffmpegのうち、さきゅばすのために当てたパッチの部分が実行時にこいつをdlopen()して読み込み・実行します。ffmpegと一緒にするとさすがに開発もビルドも大変だったので、このような形になりました。
こちらもLinuxでクロスコンパイルできます(Ubuntu 19.04)。Windowsでもできるはず(未確認)。
# 必要なライブラリを入れる
sudo apt install build-essential mingw-w64 cmake
cmakeを使ってビルドしているので、開発にはCLionがそのまま使えます。
git checkout [email protected]:Saccubus/Saccubus3.git
cd Saccubus3/filter
# windows用ビルドにつかうフォルダの作成
mkdir build
cd build
# windows向けにクロスコンパイル
cmake -DCMAKE_TOOLCHAIN_FILE=../mingw64-cross.cmake ..
make
# windowsでビルドする時は普通にこれでいいはず
cmake ..
make
こんな画面が出たらビルド成功。
上で作ったbuildフォルダにできるsaccubus.dll
がフィルタの実体です。
% ls
total 6.9M
....
-rwxrwxr-x 1 kaede kaede 3.4M Nov 10 12:48 saccubus.dll
% file saccubus.dll
saccubus.dll: PE32+ executable (DLL) (console) x86-64, for MS Windows
さきゅばす公式サイトもgithub pages で管理しています。