Kan-Ru Chen's Weblog

devscripts 系列: mk-build-deps

devscripts 是給 Debian developer 用的一些好用工具的集合,今天要介紹的是 mk-build-deps

Debian distribution 中包含了許多預先編譯好的 deb 檔,通常我們只要 apt-get install 安裝即可,但是當我們需要修改編譯參數或是製作新版本的套件時,就會需要 apt-get source 取得 source package 自行編譯。要製作 deb 時會要求先安裝一些相依套件,通常是 libfoo-dev 等,此時可以用 apt-get build-dep 自動安裝相依套件。

麻煩的地方是,透過 apt-get build-dep 安裝的套件並不是因為跟任何套件有相依性才被安裝的,相等於直接 apt-get install,因此不會在你編譯完不需要的時候自動移除。如果時常要編一些東西的話,常常系統上會裝滿了許多 libxxx-dev 難以整理。有一個技巧就是利用 equivs 製作 metapackage ,把編譯需要的套件都包含進去,以後不需要了只要移除這個 metapackage 就可以把所有相依套件移除乾淨。

mk-build-deps 就是把這個技巧自動化的工具,使用範例如下:

    % mk-build-deps network-manager-gnome
    dh_testdir
    dh_testroot
    dh_clean -k
    dh_testdir
    dh_testroot
    dh_install
    dh_installdocs
    dh_installchangelogs
    dh_compress
    dh_fixperms
    dh_installdeb
    dh_gencontrol
    dh_md5sums
    dh_builddeb
    dpkg-deb: building package `network-manager-applet-build-deps' in
              `../network-manager-applet-build-deps_0.6.6-2_all.deb'.
     
    The package has been created.
    Attention, the package has been created in the current directory,
    not in ".." as indicated by the message above!
     
    % dpkg -f network-manager-applet-build-deps_0.6.6-2_all.deb depends
    autotools-dev, cdbs, debhelper (>= 5.0.0), docbook-to-man, intltool,
    libdbus-glib-1-dev (>= 0.60), libgconf2-dev, libglade2-dev, libglib2.0-dev
    (>= 2.10), libgnome-keyring-dev, libgnome2-dev, libgnomeui-dev,
    libgtk2.0-dev, libiw-dev (>= 27+28pre9), libnm-util-dev (>= 0.6.6),
    libnotify-dev (>= 0.3.0), network-manager-dev (>= 0.6.6), pkg-config

而 Frank Lichtenheld 更整理了一個 apt repository 可以直接安裝已經製作好的 build-dep 套件!只要加入以下到 sources.list 即可:

    deb http://sourcedeps.debian.net/ sid main contrib non-free