在Ubuntu 14.04上构建Emacs 24.5的deb软件包

在Ubuntu 14.04中,通过apt-get install命令可以安装的emacs24版本是24.3,有点老旧。
目前看来,并没有24.5版本的ppa,因此我自己尝试进行了编译。
为了方便管理,我还制作了deb包。
由于遇到了一些问题,所以我写了一篇文章记录下来。

如果有更好的方法,请告诉我,因为我是deb包的初学者。

下载源代码。

由于Wily(15.10)的版本变为24.5,因此需要下载该源代码。
还需要下载一个名为emacsen-common的软件包,因为需要更新。

wget https://launchpad.net/ubuntu/+archive/primary/+files/emacs24_24.5%2B1.orig.tar.bz2
wget https://launchpad.net/ubuntu/+archive/primary/+files/emacs24_24.5%2B1-1ubuntu2.debian.tar.xz
wget https://launchpad.net/ubuntu/+archive/primary/+files/emacsen-common_2.0.8.tar.xz

融化

我们将分别解压缩它们。

tar xf emacsen-common_2.0.8.tar.xz
tar xf emacs24_24.5+1.orig.tar.bz2
mv emacs24-24.5+1.orig emacs24-24.5+1
cd emacs24-24.5+1
tar xf ../emacs24_24.5+1-1ubuntu4.debian.tar.xz
cd ..

打补丁

在我的环境中,当我尝试安装libgnutls28-dev所需的构建时,它与其他软件包发生了冲突,因此我放宽了条件。

而且,需要对debian/patch-to-new的脚本进行修改(参考网址:http://git.willhughes.name/emacs/blob/master/debian/patch-to-news)。

在Shell上执行以下命令将应用该补丁。

patch -p0 << "EOS"
diff -ur emacs24-24.5+1_org/debian/control emacs24-24.5+1/debian/control
--- emacs24-24.5+1_org/debian/control   2015-10-29 23:00:59.000000000 +0900
+++ emacs24-24.5+1/debian/control   2015-12-28 08:45:35.874903978 +0900
@@ -9,7 +9,7 @@
  libgpm-dev [linux-any], libdbus-1-dev,
  autoconf, automake, autotools-dev, dpkg-dev (>> 1.10.0), quilt (>= 0.42),
  debhelper (>= 9), libxaw7-dev, sharutils, imagemagick, libgtk-3-dev,
- libgnutls28-dev, libxml2-dev, libselinux1-dev [linux-any], libmagick++-dev,
+ libgnutls-dev, libxml2-dev, libselinux1-dev [linux-any], libmagick++-dev,
  libgconf2-dev, libasound2-dev [!hurd-i386 !kfreebsd-i386 !kfreebsd-amd64],
  libacl1-dev,
  zlib1g-dev
diff -ur emacs24-24.5+1_org/debian/control.in emacs24-24.5+1/debian/control.in
--- emacs24-24.5+1_org/debian/control.in    2015-09-18 02:58:21.000000000 +0900
+++ emacs24-24.5+1/debian/control.in    2015-12-28 08:46:00.182903255 +0900
@@ -9,7 +9,7 @@
  libgpm-dev [linux-any], libdbus-1-dev,
  autoconf, automake, autotools-dev, dpkg-dev (>> 1.10.0), quilt (>= 0.42),
  debhelper (>= 9), libxaw7-dev, sharutils, imagemagick, libgtk-3-dev,
- libgnutls28-dev, libxml2-dev, libselinux1-dev [linux-any], libmagick++-dev,
+ libgnutls-dev, libxml2-dev, libselinux1-dev [linux-any], libmagick++-dev,
  libgconf2-dev, libasound2-dev [!hurd-i386 !kfreebsd-i386 !kfreebsd-amd64],
  libacl1-dev,
  zlib1g-dev
diff -ur emacs24-24.5+1_org/debian/patch-to-news emacs24-24.5+1/debian/patch-to-news
--- emacs24-24.5+1_org/debian/patch-to-news 2015-09-18 02:58:21.000000000 +0900
+++ emacs24-24.5+1/debian/patch-to-news 2015-12-28 08:45:25.778904278 +0900
@@ -4,6 +4,12 @@

 patch="$1"

+if [ ! -f "$patch" -a -f "patches/$patch" ]; then
+    patch="patches/$patch"
+elif [ ! -f "$patch" -a -f "debian/patches/$patch" ]; then
+    patch="debian/patches/$patch"
+fi
+
 sed '
   # delete everything after the first line starting with "--- " (the diff)
   /^--- [^ ]/,$d' < "$patch" \
EOS

安装构建所需的软件包

安装构建所需的软件包。
如果缺少,debuild会在构建过程中提醒您。

sudo apt-get install build-essential \
                     devscripts \
                     libacl1-dev \
                     libcurl4-gnutls-dev \
                     libgconf2-dev \
                     libghc-gconf-dev \
                     libgif-dev \
                     libgnutls-dev \
                     libgpm-dev \
                     libjpeg-dev \
                     liblockfile-dev \
                     libm17n-dev \
                     libmagick++-dev \
                     libmagickcore-dev \
                     libncurses5-dev \
                     libotf-dev \
                     libpng12-dev \
                     librsvg2-dev \
                     libselinux1-dev \
                     libtiff4-dev \
                     libx11-dev \
                     libxft-dev \
                     libxml2-dev \
                     sharutils \
                     xaw3dg-dev

构建

为了缩短构建时间,我们将进行并行构建。

cd emacs24-24.5+1
debuild -us -uc -j`nproc`

emacsen-common的部分也一样。这边即使不进行并行构建也会很快完成。

cd ../main
debuild -us -uc

安装

我会安装已经准备好的deb软件包。

cd ..
sudo dpkg -i emacsen-common_2.0.8_all.deb
sudo dpkg -i emacs24-el_24.5+1-1ubuntu4_all.deb \
             emacs24-bin-common_24.5+1-1ubuntu4_amd64.deb \
             emacs24-common_24.5+1-1ubuntu4_all.deb \
             emacs24_24.5+1-1ubuntu4_amd64.deb

结束了。