git-buildpackage示例(一)
在《为tolua的deb包作一个补丁》中,我介绍了如何利用quilt为Ubuntu已有包做一个补丁包的办法。可以看出quilt具有一定的版本管理能力,然而与流行版本管理系统相比,功能较弱也不灵活。
从Debian New Maintainers’ Guide中,了解到deb包的制作和维护管理已经与现有流行版本管理系统结合在了一块,其中一款工具为git-buildpackage,它将包制作和维护,特别是第三方补丁包维护,与git紧密的结合了起来。
下面仍然以tolua的补丁制作为例,一步一步展示git-buildpackage的基本操作。
- 安装必要的工具:
sudo apt-get install git-buildpackage build-essential debhelper quilt
- 下载libtolua-dev的源码(建立upstream目录单独存放Ubuntu的deb源码包是为了保证清洁和正确):
mkdir upstream
apt-get source libtolua-dev
- 导入upsteam的dsc文件(将生成与目录upstream同级的目录tolua):
cd ..
git-import-dsc upstream/tolua_5.1.3-1.dsc
cd tolua
这时,运行
git log --format=%d:%s
输出:
(HEAD, debian/5.1.3-1, master):Imported Debian patch 5.1.3-1
(upstream/5.1.3, upstream):Imported Upstream version 5.1.3
从下至上,首条提交导入了tolua 5.1.3的源码,次条提交导入了deb包维护者的deb包文件(debian/*);并且建立了upstream和master两个分支,标签upstream/5.1.3位于upstream分支上,标签debian/5.1.3-1位于master分支头部。
此外,upstream分支用于维护源码作者的发布版本更新情况,master分支用于维护deb包描述文件及其补丁文件。git-buildpackage工具集的正确运行将依赖于标签upstream/5.1.3和debian/5.1.3-1,不能随意删改。
- 导入quilt patches到patch queue中——创建patch-queue/master分支,并将debian/patches/*逐一变成该分支的提交,并自动切换到该分支上:
gbp-pq import
- 执行make后发现构建目标libtolua.a的生成目录lib不存在,这是git只针对文件做版本,所以upstream导入git时,该目录被忽略了。为此,我将src/lib/Makefile中
$T: $(OBJS)
$(AR) $@ $(OBJS)
$(RANLIB) $@
修改为:
$T: $(OBJS)
mkdir -p $(@D)
$(AR) $@ $(OBJS)
$(RANLIB) $@
这样,它将在每次构建该目标时,创建该目标所在目录。更进一步不难发现,src/bin/tolua_lua.o和src/bin/toluabind.c为受版本控制的中间文件,将影响构建的正确运行。为此,删除这两个文件并提交日志。