3 はじめての CDBS

木洋

PIC
____________________________________________________________________

3.1 は じ め に

CDBS – Common Debian Build System , debian/rules 部分有することで, debian/rules かつ しやすくすることを的としたです. [CDBS Documentation Rev.0.1.2]Introduction によれば, 発動機 GNU autoconf & GNU automake 使している Debian 複した debian/rules をなんとかしたい, です:

The motivating factor for CDBS was originally that more and more programs today are created using GNU Autoconf configure scripts and GNU Automake, and as such they are all very similar to configure and build. It was realized that a lot of duplicated code in everyone’s debian/rules could be factored out. ...

では CDBS はも的になており, autotools らず, Gnome, KDE, Python, Haskel , 使できるようになています. [Online CDBS Gallery]によると, CDBS 使しているスパ1805 , スパ全体~ 16% だそうで *1 .

ドキメントげられている CDBS 以下りで *2 :

  1. , , 率的な debin/ruls できる.
  2. debhelper autotools しを動化することによ, にする必要がなくなる.
  3. カスタマイズ無いので, メンテナのよりできる.
  4. されるクラス分にテストされており, よくあるするためのhack をする必要がない.
  5. 存のCDBS するのはである.
  6. 張性.

かにそうなんですけれども, 以下ではをしているのかわからなくてになたりします:

#!/usr/bin/make -f

include /usr/share/cdbs/1/rules/debhelper.mk
include /usr/share/cdbs/1/class/autotools.mk

ここでは[CDBS Documentation Rev. 0.4.0]頭をざくりしてみようといます.

3.2 CDBS レクトリ& イル

CDBS 分化された Makefile です. /usr/share/cdbs/ 以下眺めてみまし:

% ls -aR /usr/share/cdbs
/usr/share/cdbs/:
./  ../  1/

/usr/share/cdbs/1:
./  ../  class/  rules/

/usr/share/cdbs/1/class:
./                  autotools-vars.mk  hbuild.mk         perlmodule-vars.mk
../                 autotools.mk       kde.mk            perlmodule.mk
ant-vars.mk         cmake.mk           langcore.mk       python-distutils.mk
ant.mk              docbookxml.mk      makefile-vars.mk  qmake.mk
autotools-files.mk  gnome.mk           makefile.mk

/usr/share/cdbs/1/rules:
./   buildcore.mk  debhelper.mk  patchsys-quilt.mk   tarball.mk
../  buildvars.mk  dpatch.mk     simple-patchsys.mk  utils.mk

レクトリ 1 API 慮したレクトリです. rules, class レクトリ以下にあるイル分化 された Makefile です. するにはこれらのイル適宜 debian/rules include して使します. Makefile 存関以下りです:


PIC


3.1: CDBS される Makefile 存関([CDBS Documentation Rev.0.1.2]).


3.3 となる rules

3.3.1 buildvars.mk

buildvars.mk include するとのためのされます. される3.1 しま . 使われるのは CURDIR DEB_DESTDIR でし.



3.1: /usr/share/cdbs/1/rules/buildvars.mk される


CURIDR しているレクトリ名前.


DEB_SOURCE_PACKAGE スパ名前.


DEB_VERSION Debian Version.


DEB_NOEPOCH_VERSION Debian version without epoch .


DEB_ISNATIVE native ではない (分岐使)..


DEB_ALL_PACKAGES されるてのリスト.


DEB_INDEP_PACKAGES キテクチ存しないリスト.


DEB_ARCH_PACKAGES キテクチ存するリスト.


DEB_PACKAGES (udeb ではない) リスト.


DEB_UDEB_PACKAGES udeb , そのリスト.


DEB_ARCH Debian キテクチ. のためにされている..


DEB_HOST_ARCH_CPU Debian キテクチCPU .


DEB_HOST_ARCH_OS Debian キテクチOS .


DEB_DESTDIR ソフトinstall するレクトリ. .
単一, $(CURDIR)debian/
複数するには $(CURDIR)debian/tmp



これらのしたいには, buildvars.mk include したdebian/rules 以下します:

# where sources are
DEB_SRCDIR = $(CURDIR)/src
# in which directory to build
DEB_BUILDDIR = $(DEB_SRCDIR)/build
# in which directory to install the sofware
DEB_DESTDIR = $(CURDIR)/destination
3.3.2 buildcore.mk による

buildcore.mk のための的なします. [Debian Policy Manual]によれば, debian/rules イルからされうる, 以下りです:

buidcore.mk include するとこれらの分化されてされます. buildcore.mk する 3.2します.


PIC


3.2: buildcore.mk される流れ ([CDBS Documentation Rev.0.1.2]).


には, buildcore.mk してなんのもしません. 適宜 rules することに なります. として, [CDBS Documentation Rev. 0.4.0]されている foo ついてします. ここで foo

するだとします.

#!/usr/bin/make -f
include /usr/share/cdbs/1/rules/buildcore.mk

# pre-configure action
makebuilddir/foo::
        ln -s plop plop2
# post-configure action
configure/foo::
    sed -ri ’s/PLOP/PLIP/’ Makefile
configure/foo-data::
    touch src/z.xml
# post-build action
build/foo::
    /bin/bash debian/scripts/toto.sh
build/foo-data::
    $(MAKE) helpfiles
# post-install action
install/foo:
    cp debian/tmp/myfoocmd debian/foo/foocmd
      find debian/foo/ -name ‘‘CVS’’ -depth -exec rm -rf {} \;
install/foo-data:
    cp data/*.png debian/foo-data/usr/share/foo-data/images/
    dh_stuff -m ipot -f plop.bz3 debian/foo-data/libexec/
# post deb action
binary/foo:
    strip --remove-section=.comment --remove-section=.note --strip-unneeded \
      debian/foo/usr/lib/foo/totoz.so
# pre-clean action
cleanbuilddir/foo::
    rm -f debian/fooman.1

コメントとしてするタイミングしました. 法は

target/packagename::

です. ろの :: です.

3.3.3 debhelper.mk による dh_ 動化

CDBS , この debhelper.mk です. CDBS ではdh_ コマンドしを debhelper.mk において うため, debian/rules dh_ んどがになります. debhelper.mk によされる dh_ 3.2します.



3.2: /usr/share/cdbs/1/rules/debhelper.mk される dh_ コマンド




dh_builddeb dh_installchangelogs dh_installemacsen dh_installman
dh_perl dh_clean dh_installcron dh_installexamples
dh_installmenu dh_shlibdeps dh_compress dh_installdeb
dh_installinfo dh_installpam dh_strip dh_fixperms
dh_installdebconf dh_installinit dh_link dh_gencontrol
dh_installdirs dh_installlogcheck dh_makeshlibs dh_install
dh_installdocs dh_installlogrotate dh_md5sums





debhelper.mk によされる dh_ コマンドしては, パラメ() です. debelpher しをカスタマイズするdebhelper.mk 頭のコメントしてさい. [CDBS Documentation Rev. 0.4.0]には 以下があります:

存関シビア有ライブラリについて

DEB_DH_MAKESHLIBS_ARGS_libfoo := -V’’libfoo (>= 0.1.2-3)‘‘
DEB_SHLIBDEPS_LIBRARY_arkrpg := libfoo
DEB_SHLIBDEPS_INCLUDE_arkrpg := debian/libfoo/usr/lib/

ChangeLog イル名が的でない

DEB_INSTALL_CHANGELOGS_ALL := ProjectChanges.txt

.py せずにする

DEB_COMPRESS_EXCLUDE := .py

ここでの

:=

してさい. := 上書きです. CDBS するするには += 使します.

3.3.4 patch

dpatch, quilt, そして CDBS simple-patchsys rules されています. quilt, dpatch については include するだけ patch 適用する rule 適用されます.

simple-patchsys debian/patches patch くだけで, patch 適用clean には します. patch level 3 まで ok です. 動的に適用しようとみます.

3.4 class 使する

rules について単にまとめました. ここではつかの class についてします.

3.4.1 Makefile :makefile.mk

autotools 使わず Makefile のみを使するソフトウには makefile.mk 便です. [CDBS Documentation Rev. 0.4.0] で は , Makefile

というソフトウについてしています:

#!/usr/bin/make -f
include /usr/share/cdbs/1/rules/debheper.mk
include /usr/share/cdbs/1/class/makefile.mk

DEB_MAKE_CLEAN_TARGET    := mrproper
DEB_MAKE_BUILD_TARGET    := myprog
DEB_MAKE_INSTALL_TARGET  := install DESTDIR=$(CURDIR)/debian/tmp/
# no check for this software
DEB_MAKE_CHECK_TARGET    := check
# allow changing the makefile filename in case of emergency exotic practices
DEB_MAKE_MAKEFILE        := MaKeFiLe
# example when changing environnement variables is necessary :
DEB_MAKE_ENVVARS         := CFLAGS=’’-fomit-frame-pointer’’
3.4.2 Autotools : autotools.mk

いわゆる configure && make && make install ソフトウautotools.mk 便です. 頭にもしました , 標準的な autotools 使するソフトウには

#!/usr/bin/make -f

include /usr/share/cdbs/1/rules/debheper.mk
include /usr/share/cdbs/1/class/autotools.mk

となります.

configure へのオプシなうには以下にします:

DEB_CONFIGURE_EXTRA_FLAGS := --with-ipv6 --with-foo
COMMON_CONFIGURE_FLAGS := --program-dir=/usr
DEB_CONFIGURE_SCRIPT_ENV += LDFLAGS=’’ -Wl,-z,defs -Wl,-O1’’

ここでも +=, := 味はわりません. えば

#!/usr/bin/make -f

include /usr/share/cdbs/1/rules/debheper.mk
include /usr/share/cdbs/1/class/autotools.mk

# normally
DEB_MAKE_INSTALL_TARGET := install DESTDIR=$(DEB_DESTDIR)
# example to work around dirty makefile
# DEB_MAKE_INSTALL_TARGET := install prefix=$(CURDIR)/debian/tmp/usr
DEB_MAKE_CLEAN_TARGET := distclean
# example to activate check rule
DEB_MAKE_CHECK_TARGET := check
# overriding make-only environnement variables :
# (should never be necessary in a clean build system)
# (example borrowed from the bioapi package)
DEB_MAKE_ENVVARS    := ‘‘SKIPCONFIG=true’’

など.

他にも Perl, Python, Ruby, GNOME, KDE, Ant, HBuild(Haskel) class があります

3.5 まとまてないまとめ

そんなれてしましました*3 .

CDBS 使いはじめたら, もう debhelper にはれないになてしまうわけですが, いかんせん CDBS ドキメン ないんですよね. この文書になればいです.