cdbs (Common Debian Build System) の使い方
あまりドキュメントが豊富ではないので,ここにメモしておく. 多くの人が言うように,Makefile を追っていけばだいたいわかるが, Makefile を追えないと使えないということでは,cdbs の意味がない. あるていどのドキュメントは必要である.
典型的な使用例
Makefile を使っているソフトの場合 (Depends: debhelper (>= 4.1.0))
#!/usr/bin/make -f include /usr/share/cdbs/1/class/makefile.mk include /usr/share/cdbs/1/rules/debhelper.mk
Autotools を使っているソフトの場合
#!/usr/bin/make -f include /usr/share/cdbs/1/rules/debhelper.mk include /usr/share/cdbs/1/class/autotools.mk
変数
- DEB_DESTDIR
- binary-install 時につかうパッケージのインストール先($(CURDIR)/debian/packagename)
メモ
- cdbs の Makefile は「1」とかいうディレクトリの下に置いてあるがこれはバージョン
- 将来 API が変更になるかもしれないが,そうなったときはバージョンを上げて,古いバージョンを残しておく
- 古いバージョンを読み込んでいるパッケージも問題なく動作する
- 互換性をあまり気にせずにいろんな試みを導入できる
- /usr/share/cdbs/1/rules/buildcore.mk が中心のファイル
- 他のファイルを使うときに依存関係でかならず読み込まれる
- これに対するフックでさまざまな機能を実装
- class
- どのようにしてソフトをビルドするか
- rule
- どのようにしてパッケージを作るか
- クラスの継承
- autotools.mk は makefile.mk を継承している
- clean に追加するときは clean:: ターゲットに
- :: をつけるときは既存のターゲットに追加のようだ
CDBS の問題点
cdbs 0.4.49 では、autotools.mk を使ったときの configure 環境変数 (DEB_CONFIGURE_SCRIPT_ENV)に「CC="$(CC)" CXX="$(CXX)"」が含まれている。 これが指定されている場合、libtool がこの値を使ってしまうため、コンパイル時に 以下のようなエラーが出る。
libtool: compile: unable to infer tagged configuration libtool: compile: specify a tag with `--tag'
これを避けるためには、環境変数を指定せずに configure を起動する必要がある。 そのため、debian/rules で以下のように指定する。これは、 /usr/share/cdbs/1/class/autotools-vars.mk で指定されている値から、CC と CXX を省いたものである。
DEB_CONFIGURE_SCRIPT_ENV = CFLAGS="$(CFLAGS)" CXXFLAGS="$(CXXFLAGS)" CPPFLAGS="$(CPPFLAGS)" LDFLAGS="$(LDFLAGS)"
