打补丁的内容再不写,过段时间自己也要忘记了,还是抓紧时间记录下来。我在安装gobby时,发现archlinux更新后,gobby要用到的libgnutls.so.13这个库没有了,就想把它重新编译它,采用新的libgnutls库。结果编译的过程中发现了几个问题:

1)gcc编译时报错

报错的信息是std:memcpy,我猜想估计是gcc的版本,因为好久也没有用c/c++了,所以只能猜,到gobby的主站去看新的代码是怎么处理的,发现要增加

#include <cstring>

改了一个地方,又发现两个地方,都是如此,改了之后,再作make有发现了新问题。

2)gnutls惹的祸

编译通过,可是连接又总是报错,先开头总是没有想明白,gobby的makefile里没有指定gnutls的版本号啊,继续猜吧,它没有用到,可能就是依赖的包也依赖gnutls的老版本,接着发现gobby依赖的两个obby,net6依赖gnutls,就把这两个的PKGBUILD下载下来,重新打包安装。

3)打补丁

因为要让gobby的打包自动能进行,不要手工介入,我就分步骤试验打补丁过程,先想能不能用版本控制的hg,来作补丁,hg diff,patch文件倒是可以,但是发现有个问题,就是补丁和版本号连在一起。所以只能单独使用diff,

a)把修改过的文件unix.cpp, header.cpp,preferencesdialog.cpp拷贝到gobby_patch/src/下

b)diff -ud src/gobby-0.4.5/src/ gobby_patch/src |grep -v '^Only' > gobby.patch

c)patch -p1 < gobby.patch

4)改PKGBUILD

完成上面3步,make成功了,然后就把第3步弄进PKGBUILD。

pkgname=gobby
pkgver=0.4.5
pkgrel=1
pkgdesc="A collaborative text editor"
arch=('i686' 'x86_64')
url="http://gobby.0x539.de"
license=('GPL')
depends=('obby' 'libxml++2' 'gtkmm' 'gtksourceview' 'gnome-vfs' 'libbonobo')
makedepends=('gettext')
source=(http://releases.0x539.de/gobby/gobby-$pkgver.tar.gz)
#install=$pkgname.install

build() {
  patch -p1 < $startdir/gobby.patch
  cd $startdir/src/gobby-$pkgver
  ./configure --prefix=/usr --with-gnome
  make || return 1
  make DESTDIR=$startdir/pkg install
  #find -name gobby.desktop -exec sed -i "s|Network|Office|" {} \;
  install -D -m644 contrib/gobby.desktop \
                   $startdir/pkg/usr/share/applications/gobby.desktop
  #install -D -m644 contrib/artwork/gobby.png \
  #                 $startdir/pkg/usr/share/pixmaps/gobby.png
}

这下就能自动进行打包了,makepkg -c,gobby的包自动生成。pacman -U 安装成功,运行成功。就连以前的一个错误,avahi的错,如今也没有了。

gobby到底是什么?记得原先介绍过,是一款协同编辑器,远程多人编辑的好利器。

5)把打包用的脚本也打包

为了方便,把脚本打包tar zcvf gobby_patch.tar.gz --exclude='*.tar.gz',排除掉已经打好包的文件。

干了一圈,几乎都是在猜,原来打补丁,别的功夫弱点没关系,猜的功夫是要有的,呵呵!