vim-jpでも紹介されているように、universal ctagsに、エンコーディング変換機能が追加されました。
この機能を有効にしたctagsをビルドしてみましょう。
基本的なビルド手順
基本的なビルド手順は、以下の公式ドキュメントを参考にしてください。
- building.rst
- autotools.rst -- Linux等、Autotoolsを使う場合
- windows.rst -- Windowsの場合
- osx.rst -- OSXの場合
WindowsでMSYS2を使う場合
MinGW-w64 Win32 Shell (32bitの場合)を起動し、以下のコマンドを実行します。
$ git clone https://github.com/universal-ctags/ctags.git
$ cd ctags
$ ./autogen.sh
$ ./configure --enable-iconv --disable-external-sort LDFLAGS=-static
$ make
$ strip *.exe # 必要に応じて
ポイントは以下の通りです。
-
--enable-iconv
: エンコーディング変換機能を有効にする。 -
LDFLAGS=-static
: libiconvを静的リンクする。 -
--disable-external-sort
: 外部のsortコマンドを使わず、内蔵のsort機能を使用する。
ctagsのバージョン情報に、+multibyte
が含まれていれば、エンコーディング変換機能が有効になっています。
$ ./ctags --version
Universal Ctags Development, Copyright (C) 1996-2009 Darren Hiebert
Compiled: Jul 10 2015, 00:04:55
Addresses: <dhiebert@users.sourceforge.net>, https://github.com/universal-ctags/ctags
Optional compiled features: +win32, +wildcards, +regex, +internal-sort, +multibyte, +debug
小技
適当なディレクトリを作成してその中でconfigureを実行すると、そのディレクトリを作業ディレクトリとすることが出来るので、複数のビルド設定を簡単に共存できます。
$ ./autogen.sh
# iconvを動的リンク
$ mkdir build-dynamic-iconv
$ cd build-dynamic-iconv
$ ../configure --enable-iconv --disable-external-sort
$ make
$ cd -
# iconvを静的リンク
$ mkdir build-static-iconv
$ cd build-static-iconv
$ ../configure --enable-iconv --disable-external-sort LDFLAGS=-static
$ make
Windowsでcmd.exe上からMinGWを使う場合
mingw32-make -f mk_mingw.mak WITH_ICONV=yes LDFLAGS="-s -static"
WindowsでVisual Studioを使う場合
WindowsでVS2013/VS2015を使う場合
まずは、libiconvをビルドする必要があります。公式のlibiconvはVCに対応していないため、koron氏のVC移植版をビルドします。ここでは、C:\work\libiconv
でビルドし、C:\work\iconv
にインストールすることにします。
なお、libiconvをスタティックリンクする方法は若干面倒なため、iconv.dllをビルドしてダイナミックリンクで使う方法を説明します。
rem libiconvをビルド
set ICONV_BUILD_DIR=C:\work\libiconv
rem win32.makがある場所をINCLUDEに追加。VS2012(VC11)以降で必須。
set "INCLUDE=%INCLUDE%;C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\Include"
git clone https://github.com/koron/libiconv.git %ICONV_BUILD_DIR%
cd %ICONV_BUILD_DIR%\msvc10
rem msvcrXX.dllにリンクしない設定で、リリース版のDLLをビルド
nmake NODEBUG=1 NOMSVCRT=1
rem libiconvをインストール
set ICONV_DIR=C:\work\iconv
mkdir %ICONV_DIR%\include
mkdir %ICONV_DIR%\lib
copy %ICONV_BUILD_DIR%\msvc10\iconv.h %ICONV_DIR%\include
copy %ICONV_BUILD_DIR%\msvc10\iconv.lib %ICONV_DIR%\lib
次に、universal ctagsをビルドします。
cd c:\work
git clone https://github.com/universal-ctags/ctags.git
cd ctags
nmake -f mk_mvc.mak WITH_ICONV=yes ICONV_DIR=%ICONV_DIR%
実行の際には、iconv.dllが必要なため、libiconvのビルドディレクトリからコピーしてきます。
copy %ICONV_BUILD_DIR%\msvc10\iconv.dll .
WindowsでVS2010を使う場合
universal ctagsをビルドするにはVS2013以降が必須とされていますが、koron氏がVS2010でビルドできるように改造した版を公開しています。(https://github.com/koron/ctags/tree/vc10)
ビルド方法は、そのリポジトリのWikiを参照してください。(libiconvは、VS2013と同じ方法でビルドしてください。)
Linux等
$ git clone https://github.com/universal-ctags/ctags.git
$ cd ctags
$ ./autogen.sh
$ ./configure --enable-iconv
$ make
$ sudo make install