anyenv + phpenv で php7.2.3をビルドする

## 環境
* CentOS7 1708(Minimal)

## 準備
### CentOS更新

```bash
$ yum update
```

### 依存関係インストール

```bash
$ yum install gcc gcc-c++ wget unzip automake curl-devel expat-devel gettext-devel openssl-devel zlib-devel perl-ExtUtils-MakeMaker
```

### Gitを入れる

```bash
# https://mirrors.edge.kernel.org/pub/software/scm/git/ 参考に最新のソースをwget
# 18/03/28 時点では 2.16.3
$ wget https://mirrors.edge.kernel.org/pub/software/scm/git/git-2.16.3.tar.gz
$ tar zxvf git-2.16.3.tar.gz
$ cd git-2.16.3
$ make prefix=/usr/local all
$ make prefix=/usr/local install
```

これで以下のようにメッセージが出れば成功

```bash
$ git --version
# git version 2.16.3
```

### anyenvを入れる

```bash
$ git clone https://github.com/riywo/anyenv ~/.anyenv
$ echo 'export PATH="$HOME/.anyenv/bin:$PATH"' >> ~/.bash_profile &&
$ echo 'eval "$(anyenv init -)"' >> ~/.bash_profile &&
$ exec $SHELL -l # Shell再読込
```

これで anyenvコマンドが使用できるはず。

```bash
$ anyenv
# anyenv 
# Usage: anyenv <command> [<args>]
# 
# Some useful anyenv commands are:
#    commands            List all available anyenv commands
#    local               Show the local application-specific Any version
#    global              Show the global Any version
#    install             Install a **env
#    uninstall           Uninstall a specific **anv
#    version             Show the current Any version and its origin
#    versions            List all Any versions available to **env
#
# See `anyenv help <command>' for information on a specific command.
# For full documentation, see: https://github.com/riywo/anyenv#readme
```

### phpenvを入れる

```bash
$ anyenv install phpenv
$ exec $SHELL -l # Shell再読込
```

これでphpenvコマンドが使用できる。

```bash
$ phpenv
# phpenv:
# =======
#   PHP multi-version installation and management utility.
#
# Usage: phpenv <command> [<args>]
#
# Some useful phpenv commands are:
#   commands    List all available phpenv commands
#   configure   Edit the current PHP's php.ini configuration file at location
#   local       Set or show the local application-specific PHP version
#   global      Set or show the global PHP version and update the Apache apxs
#   shell       Set or show the shell-specific PHP version
#   install     Install a PHP version using the php-build plugin
#   uninstall   Uninstall a specific PHP version using the php-build plugin
#   rehash      Rehash phpenv shims (run this after installing executables)
#   version     Show the current PHP version and its origin
#   versions    List all PHP versions available to phpenv
#   which       Display the full path to an executable
#   whence      List all PHP versions that contain the given executable
#
# See `phpenv help <command>' for information on a specific command.
# For full documentation, see: https://github.com/madumlao/phpenv#readme
```

### phpのビルド環境を整える
phpに必要な依存関係をインストール

```bash
yum install libxml2-devel bison bison-devel curl-devel libjpeg-devel libpng-devel readline-devel libxslt-devel httpd-devel enchant-devel libXpm libXpm-devel freetype-devel t1lib t1lib-devel gmp-devel libicu-devel net-snmp net-snmp-devel bzip2 bzip2-devel
```

php7.2から削除されたmcryptを付けるオプションをデフォルトのビルド設定から削除

```bash
sed -i -e '/--with-mcrypt/d' /root/.anyenv/envs/phpenv/plugins/php-build/share/php-build/default_configure_options
```

libtidyをyum標準で入れられないので使わないし面倒だから削除

```bash
sed -i -e '/--with-tidy/d' /root/.anyenv/envs/phpenv/plugins/php-build/share/php-build/default_configure_options
```

使う人は以下のコマンドで`libtidy-devel`を入れる。

```bash
$ yum install epel-release
$ yum --enablerepo=epel install libtidy-devel
```

このままビルドすると`re2c`を`0.13.4`以上にしろと言って怒られる。
が、yum標準リポジトリには`re2c`は存在しないので、自分でビルドする。

```bash
$ git clone https://github.com/skvadrik/re2c
$ cd re2c
$ ./configure
$ make
$ make install
```

## phpをビルド

```bash
# インストールできる最新のものを探す
$ phpenv install -l
# (略)
#  7.1.0
#  7.1.1
#  7.1.2
#  7.1.3
#  7.1.4
#  7.1.5
#  7.1.6
#  7.1.7
#  7.1.8
#  7.1.9
#  7.1.10
#  7.1.11
#  7.1.12
#  7.1.13
#  7.1.14
#  7.1.15
#  7.1snapshot
#  7.2.0
#  7.2.1
#  7.2.2
#  7.2.3
#  7.2snapshot
#  master
```

今回は`7.2.3`をビルドする。

```bash
$ phpenv install 7.2.3
[Info]: Loaded extension plugin
[Info]: Loaded apc Plugin.
[Info]: Loaded composer Plugin.
[Info]: Loaded github Plugin.
[Info]: Loaded uprofiler Plugin.
[Info]: Loaded xdebug Plugin.
[Info]: Loaded xhprof Plugin.
[Info]: Loaded zendopcache Plugin.
[Info]: php.ini-production gets used as php.ini
[Info]: Building 7.2.3 into /root/.anyenv/envs/phpenv/versions/7.2.3
Preparing]: /tmp/php-build/source/7.2.3
Compiling]: /tmp/php-build/source/7.2.3
```

`[Compiling]`から結構長い。
終わったら以下のコマンドで`php`に割り当てるバージョンを`7.2.3`にする。

```bash
$ phpenv global 7.2.3
$ php -v
# PHP 7.2.3 (cli) (built: Mar 27 2018 23:08:09) ( NTS )
# Copyright (c) 1997-2018 The PHP Group
# Zend Engine v3.2.0, Copyright (c) 1998-2018 Zend Technologies
#     with Zend OPcache v7.2.3, Copyright (c) 1999-2018, by Zend Technologies
#     with Xdebug v2.6.0, Copyright (c) 2002-2018, by Derick Rethans
```

ok.