universal ctagsをビルドする

[vim-jpでも紹介されている](http://vim-jp.org/blog/2015/07/09/ctags-encoding-options.html)ように、[universal ctags](https://ctags.io/)に、エンコーディング変換機能が追加されました。

この機能を有効にしたctagsをビルドしてみましょう。

# 基本的なビルド手順

基本的なビルド手順は、以下の公式ドキュメントを参考にしてください。

* [building.rst](https://github.com/universal-ctags/ctags/blob/master/docs/building.rst)
* [autotools.rst](https://github.com/universal-ctags/ctags/blob/master/docs/autotools.rst) -- Linux等、Autotoolsを使う場合
* [windows.rst](https://github.com/universal-ctags/ctags/blob/master/docs/windows.rst) -- Windowsの場合
* [osx.rst](https://github.com/universal-ctags/ctags/blob/master/docs/osx.rst) -- OSXの場合


# WindowsでMSYS2を使う場合

MinGW-w64 Win32 Shell (32bitの場合)を起動し、以下のコマンドを実行します。

```sh
$ 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を実行すると、そのディレクトリを作業ディレクトリとすることが出来るので、複数のビルド設定を簡単に共存できます。

```sh
$ ./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移植版](https://github.com/koron/libiconv)をビルドします。ここでは、`C:\work\libiconv`でビルドし、`C:\work\iconv`にインストールすることにします。
なお、libiconvをスタティックリンクする方法は若干面倒なため、iconv.dllをビルドしてダイナミックリンクで使う方法を説明します。

```bat
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をビルドします。

```bat
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のビルドディレクトリからコピーしてきます。

```bat
copy %ICONV_BUILD_DIR%\msvc10\iconv.dll .
```

## WindowsでVS2010を使う場合

universal ctagsをビルドするにはVS2013以降が必須とされていますが、koron氏がVS2010でビルドできるように改造した版を公開しています。(https://github.com/koron/ctags/tree/vc10)

ビルド方法は、そのリポジトリの[Wiki](https://github.com/koron/ctags/wiki)を参照してください。（libiconvは、VS2013と同じ方法でビルドしてください。）

# Linux等

```sh
$ git clone https://github.com/universal-ctags/ctags.git
$ cd ctags
$ ./autogen.sh
$ ./configure --enable-iconv
$ make
$ sudo make install
```