MacPorts で ctags-5.7J を作ってみる

以前 ctags-5.6J1 を MacPorts の PrivatePortfile からインストールした。

vim で tags ファイルを作って、Ctr + ] でタグジャンプを行ってみたが、
うまい事メソッドにジャンプしない。


JSONView
ググったら上記サイトに書かれてた。ctags-5.7J にすると良いみたい。


MacPorts の PrivatePortfile の ctags のバージョンが 5.6J1 で、
5.7J にはまだ対応してない。
ソースからインストールする事も考えたが、
せっかくだから自分で Portfile を作成してみる。
# お約束ですが、自己責任で。


ctags-5.7J をそのままインストールすると、emacs がインストールする ctags と衝突してしまうらしい。
http://d.hatena.ne.jp/mitsygh/20070711/1184147703


なので、上記のサイトを参考に patch ファイルを作成する。

ctags-5.7J の取得

ctags日本語対応版
まず、ctags5.7J1.tar.gz をダウンロードし、/opt/local/src/ に展開する。


展開したファイルから、ctags.1、Makefile.ini をオリジナルファイルとしてコピーする。

# cp ctags.1 ctags.1.orig
# cp Makefile.ini Makefile.ini.orig

http://d.hatena.ne.jp/mitsygh/20070711/1184147703を参考に、
ファイルを変更する。

patch-ctags.1.diff

-- ctags.1.orig  2007-12-12 23:03:14.000000000 +0900
+++ ctags.1 2007-12-12 23:04:46.000000000 +0900
@@ -1,19 +1,19 @@
-.TH CTAGS 1 "Version 5.7" "Darren Hiebert" "Exuberant Ctags"
+.TH JEXCTAGS 1 "Version 5.7" "Darren Hiebert" "Exuberant Ctags"


 .SH "NAME"
-ctags \- Generate tag files for source code
+jexctags \- Generate tag files for source code


 .SH SYNOPSIS
 .TP 6
-\fBctags\fP [\fBoptions\fP] [\fIfile(s)\fP]
+\fBjexctags\fP [\fBoptions\fP] [\fIfile(s)\fP]
 .TP 6
 \fBetags\fP [\fBoptions\fP] [\fIfile(s)\fP]


 .SH "DESCRIPTION"
-The \fBctags\fP and \fBetags\fP programs (hereinafter collectively referred to
+The \fBjexctags\fP and \fBetags\fP programs (hereinafter collectively referred to
 as \fBctags\fP, except where distinguished) generate an index (or "tag") file
 for a variety of language objects found in \fIfile(s)\fP.
 This tag file allows these items to be quickly and easily located by a text

patch-Makefile.in.diff

-- Makefile.in.orig  2007-12-12 23:02:24.000000000 +0900
+++ Makefile.in 2007-12-12 23:02:51.000000000 +0900
@@ -6,7 +6,7 @@
 # These are the names of the installed programs, in case you wish to change
 # them.
 #
-CTAGS_PROG = ctags
+CTAGS_PROG = jexctags
 ETAGS_PROG = etags

 # Set this to the path to your shell (must run Bourne shell commands).

Portfile を作成する

Portfile は PrivatePortfile の ctags-5.6j1 を参考に作成する。


変更する箇所は、
・version のバージョンを5.6j1 を 5.7 に変更。
・revision の行を削除。
・checksums を ctags-5.7J1.tar.gz のチェックサムに変更。

# md5 ctags-5.7j1.tar.gz
MD5 (ctags-5.7j1.tar.gz) = 076ffb2fefd52e3d19e59d27f7b16120


上記を Portfile として保存し、portindex でインデックスを作成する。

localports/devel/ctags/Portfile
--- Portfile.orig    2007-08-05 21:38:33.000000000 +0900
+++ Portfile      2007-12-13 23:38:09.000000000 +0900
@@ -2,8 +2,7 @@
 
 PortSystem 1.0
 name             ctags
-version          5.6j1
-revision         1
+version          5.7
 categories       devel
 maintainers      nomaintainer@macports.org
 description      Reimplementation of ctags(1)
@@ -20,7 +19,7 @@
 homepage         http://hp.vector.co.jp/authors/VA025040/ctags/
 platforms        darwin freebsd
 master_sites     http://hp.vector.co.jp/authors/VA025040/ctags/downloads/
-checksums        md5 801f533e5f25f74c13cbef6353c92e27
+checksums        md5 076ffb2fefd52e3d19e59d27f7b16120
 patchfiles       patch-Makefile.in.diff \
                  patch-ctags.1.diff
 configure.type   gnu


インデックス作成後に、sudo port install ctags でインストールする。

# sudo port install ctags
      • > Fetching ctags
      • > Attempting to fetch ctags-5.7.tar.gz from
http://hp.vector.co.jp/authors/VA025040/ctags/downloads/
      • > Attempting to fetch ctags-5.7.tar.gz from
http://svn.macports.org/repository/macports/distfiles/ctags
      • > Attempting to fetch ctags-5.7.tar.gz from
http://svn.macports.org/repository/macports/distfiles/general/
      • > Attempting to fetch ctags-5.7.tar.gz from
http://svn.macports.org/repository/macports/downloads/ctags Error: Target org.macports.fetch returned: fetch failed Error: Status 1 encountered during processing.


エラーになった(´・ω・`)

どうやら、バージョン番号でファイル名を識別しているみたい。
配布されているファイル名が確かに、ctags-5.7j1.tar.gz となっている。
Portfile の version を 5.7j1 に変更する。

# sudo port clean ctags
# sudo port install ctags
      • > Fetching ctags
      • > Attempting to fetch ctags-5.7j1.tar.gz from
http://hp.vector.co.jp/authors/VA025040/ctags/downloads/
      • > Verifying checksum(s) for ctags
      • > Extracting ctags
      • > Applying patches to ctags
Error: Target org.macports.patch returned: couldn't change working directory to "/opt/local/var/macports/build/_opt_local_var_localports_devel_ctags/work/ ctags-5.7j1": no such file or directory Error: Status 1 encountered during processing.

ファイルに取得に成功した。が、ctags-5.7j1 というディレクトリがない!とエラーになった。

/opt/local/var/localports/devel/ctags/work をみると、ctags-5.7 というディレクトリ名になっている。
ということは、ファイル名は ctags-5.7j1.tar.gz だけど、圧縮したディレクトリ名は ctags-5.7 で
ファイル名とディレクトリ名が一致していないからエラーになったと推測。


じゃあ自分でファイル名の方を変更すればいいんじゃね?ということで変更。

# mv ctags-5.7j1.tar.gz ctags-5.7.tar.gz


変更したものをローカルマシンのドキュメントルートに設置。
で、Portfile の homepage と master_sites の URL をlocalhost 変更し、
checksums にファイル名を一応つけておく。

localports/devel/ctags/Portfile
--- Portfile.orig    2007-08-05 21:38:33.000000000 +0900
+++ Portfile      2007-12-13 23:38:09.000000000 +0900
@@ -2,8 +2,7 @@
 
 PortSystem 1.0
 name             ctags
-version          5.7j1
-revision         1
+version          5.7
 categories       devel
 maintainers      nomaintainer@macports.org
 description      Reimplementation of ctags(1)
@@ -20,7 +19,7 @@
 homepage         localhost
 platforms        darwin freebsd
 master_sites     localhost
-checksums        md5 801f533e5f25f74c13cbef6353c92e27
+checksums        ctags-5.7.tar.gz md5 076ffb2fefd52e3d19e59d27f7b16120
 patchfiles       patch-Makefile.in.diff \
                  patch-ctags.1.diff
 configure.type   gnu

Portfile を置き換え、portindex をし、インストールする。

# sudo port clean ctags
# sudo portindex
# sudo port install ctags
      • > Fetching ctags
      • > Attempting to fetch ctags-5.7.tar.gz from
http://localhost/
      • > Verifying checksum(s) for ctags
      • > Extracting ctags
      • > Applying patches to ctags
      • > Configuring ctags
      • > Building ctags with target all
      • > Staging ctags into destroot
      • > Installing ctags 5.7_0
      • > Activating ctags 5.7_0
      • > Cleaning ctags

おぉ!インストールできた!!

さっそく vim で使ってみたら、アクセス修飾子がついているメソッドでもジャンプできた!

普通にソースからインストールした方が早い!って思ったり、思わなかったりw