【メモ】tigのインストールでSEGVる件


homebrewでinstallすると
segmentation faultが発生するので

[こちら](https://github.com/jonas/tig/blob/master/INSTALL.adoc)を参考にソースビルドを試みるも現象変わらず。

```
-> % ./configure && make
checking for gcc... gcc
checking whether the C compiler works... yes
checking for C compiler default output file name... a.out
checking for suffix of executables...
checking whether we are cross compiling... no
checking for suffix of object files... o
checking whether we are using the GNU C compiler... yes
checking whether gcc accepts -g... yes
checking for gcc option to accept ISO C89... none needed
checking how to run the C preprocessor... gcc -E
checking for grep that handles long lines and -e... /usr/bin/grep
checking for egrep... /usr/bin/grep -E
checking for ANSI C header files... yes
checking for sys/types.h... yes
checking for sys/stat.h... yes
checking for stdlib.h... yes
checking for string.h... yes
checking for memory.h... yes
checking for strings.h... yes
checking for inttypes.h... yes
checking for stdint.h... yes
checking for unistd.h... yes
checking for stdlib.h... (cached) yes
checking for string.h... (cached) yes
checking sys/time.h usability... yes
checking sys/time.h presence... yes
checking for sys/time.h... yes
checking for unistd.h... (cached) yes
checking for gettimeofday... yes
checking whether environ is declared... no
checking whether errno is declared... yes
checking for mkstemps... yes
checking for setenv... yes
checking for NcursesW wide-character library... yes
checking for working ncursesw/curses.h... yes
checking for working ncursesw.h... no
checking for working ncurses.h... yes
checking for iconv... yes
checking for iconv declaration...
         extern size_t iconv (iconv_t cd, char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft);
checking for asciidoc... no
checking for xmlto... no
checking for docbook2pdf... no
configure: creating ./config.status
config.status: creating config.make
config.status: creating config.h
config.status: config.h is unchanged
gcc -g -O2 -DHAVE_CONFIG_H '-DTIG_VERSION="1.2.1"' '-DSYSCONFDIR="/usr/local/etc"'   -c -o tig.o tig.c
gcc -g -O2 -DHAVE_CONFIG_H '-DTIG_VERSION="1.2.1"' '-DSYSCONFDIR="/usr/local/etc"'   -c -o io.o io.c
gcc -g -O2 -DHAVE_CONFIG_H '-DTIG_VERSION="1.2.1"' '-DSYSCONFDIR="/usr/local/etc"'   -c -o graph.o graph.c
gcc -g -O2 -DHAVE_CONFIG_H '-DTIG_VERSION="1.2.1"' '-DSYSCONFDIR="/usr/local/etc"'   -c -o refs.o refs.c
gcc   tig.o io.o graph.o refs.o  -liconv -lncursesw -o tig
gcc -g -O2 -DHAVE_CONFIG_H '-DTIG_VERSION="1.2.1"' '-DSYSCONFDIR="/usr/local/etc"'   -c -o test-graph.o test-graph.c
gcc   test-graph.o io.o graph.o  -liconv -lncursesw -o test-graph
```

```
-> % ./tig
[1]    79933 segmentation fault  ./tig
```

でもなぜか

```
-> % make clean all-debug
rm -f -r tig-1.2.1-0 *.spec tig-*.tar.gz tig-*.tar.gz.md5
rm -f tig test-graph core *.o compat/*.o *.xml
gcc -g -O2 -g -DDEBUG -Werror -O0 -DHAVE_CONFIG_H '-DTIG_VERSION="1.2.1"' '-DSYSCONFDIR="/usr/local/etc"'   -c -o tig.o tig.c
gcc -g -O2 -g -DDEBUG -Werror -O0 -DHAVE_CONFIG_H '-DTIG_VERSION="1.2.1"' '-DSYSCONFDIR="/usr/local/etc"'   -c -o io.o io.c
gcc -g -O2 -g -DDEBUG -Werror -O0 -DHAVE_CONFIG_H '-DTIG_VERSION="1.2.1"' '-DSYSCONFDIR="/usr/local/etc"'   -c -o graph.o graph.c
gcc -g -O2 -g -DDEBUG -Werror -O0 -DHAVE_CONFIG_H '-DTIG_VERSION="1.2.1"' '-DSYSCONFDIR="/usr/local/etc"'   -c -o refs.o refs.c
gcc   tig.o io.o graph.o refs.o  -liconv -lncursesw -o tig
gcc -g -O2 -g -DDEBUG -Werror -O0 -DHAVE_CONFIG_H '-DTIG_VERSION="1.2.1"' '-DSYSCONFDIR="/usr/local/etc"'   -c -o test-graph.o test-graph.c
gcc   test-graph.o io.o graph.o  -liconv -lncursesw -o test-graph
```
と`all-debug`指定をしてビルドすると何故かSEGVが直りました。

```
-> % ./tig
```
私の環境のせいでしょうか？？？


## 追記
自己解決したので追記、やはり環境問題でした。

`lldb`でエラー箇所を探ったところ`vwprintw`という`ncursesw`の関数で落ちているようで、
`/usr/local/Cellar/ncursesw/5.7`
という過去にHomeBrewで管理されていた古いライブラリが残っていたためにエラっていたようでした。

`brew uninstall ncursesw`
して
`brew install tig`
で正しくインストール出来ました。