JSXのパッケージマネージャ(npmへのあいのり)対応のパッチを書いたりもしましたが、今どきのプログラミング言語ではパッケージマネージャは必要不可欠なインフラだと思います。Qtももっといろいろなコードが流通するといいと思うのですが、いまだに、昔ながらの強力なコアAPI + 人力で努力みたいなノリなのかなぁ、と思ったり。欲しいのは、パッケージというかモジュールというかライブラリの流通インフラ。以下妄想。モデルはnodeのnpm。
- qpm(仮称)コマンドで、必要なライブラリを取得。
- システムのフォルダには手を加えない
- qt_modulesフォルダにファイルが入る。孫依存もフラットに並べる。
- qt_package.jsonに依存関係が書かれる。依存は、ビルドに必要、ライブラリの利用にも必要の2種類。
- パッケージは基本的にgithubに置く。ブランチ、タグで指定
- ブランチとタグはgithub APIで取得可能。タグ、ブランチ
- バージョンは、メジャー、マイナー、パッチを指定することである程度柔軟な組み合わせができる
- パッケージはソースコード(gitリポジトリチェックアウト)、バイナリ(リリース)のどちらかで提供。
- パッケージには、追加すべきファイル情報を持つ。
- アプリのプロジェクトのルートは必ず、subdirs形式。その中に同名のルートのプロジェクトが入る。
- ビルドが必要なソース形式のパッケージは、ルート直下にライブラリのプロジェクトとして追加。
- ルートのプロジェクトの.pro、アプリのプロジェクトの.proは、qpmが作るをインクルードする。このファイルは機械生成で、依存ファイル利用に必要な情報などをすべて含む
なんとなくできそうな気はしてきた。パッケージ作成支援の部分もうちょっと考えると良さそう。configure使うのは、パッケージマネージャがかわりにビルドというのも手かなぁ。
追記 9/27
- 静的リンクもしくはソースコードとして提供するなら、subdirsじゃなくてもいい。階層構造じゃない素の構成の方がわかりやすいかな。
- ソースコード提供はqt_modules内にgit cloneが良いかも。パッチ当ててpull request出したりしやすい
- git ls-remoteで、cloneしなくてもリポジトリのタグとかブランチ情報は取ってこれる
- ファイル形式は.jsonじゃなくて.iniにしたい。コンフリクトに強いし、素のQtで扱える。