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)"

参考リンク