Cygwinにtreeコマンドがなかったのでビルドしたメモ

Cygwin初心者がCygwinを入れてみて気になったことメモ - kanonjiの日記から、最近Cygwinを使っているんですが、Cygwinにはtreeコマンドがありませんでした。Cygwinリポジトリ*1にも見当たらず、しょうがないのでソースコードからビルドしました。MakefileCygwin場合にコメントアウトする箇所があったり、treeコマンドの方はCygwinを想定して作られてるみたいです。特にはまる事も無くビルドできました。

ソースコードのダウンロード

$ curl -LO http://mama.indstate.edu/users/ice/tree/src/tree-1.6.0.tgz
$ tar xzfv tree-1.6.0.tgz
$ cd tree-1.6.0.tgz
$ vi Makefile

Makefileを編集する

-prefix = /usr
+prefix = /usr/local

やっぱり自分でビルドしたコマンドは/usr/local/binに入って欲しいので変更しました。configureが無いみたいなので、Makefileを直接変えました。下記のとおり、直接編集する事を想定しているみたいだし。

# Uncomment for Cygwin:
-#CFLAGS=-O2 -Wall -fomit-frame-pointer -DCYGWIN
-#LDFLAGS=-s
-#TREE_DEST=tree.exe
-#OBJS+=strverscmp.o
# Uncomment for Cygwin:
+CFLAGS=-O2 -Wall -fomit-frame-pointer -DCYGWIN
+LDFLAGS=-s
+TREE_DEST=tree.exe
+OBJS+=strverscmp.o

MakefileにはCygwinの場合にコメントアウトを外す箇所がある。

$ make
gcc -O2 -Wall -fomit-frame-pointer -DCYGWIN -c -o tree.o tree.c
gcc -O2 -Wall -fomit-frame-pointer -DCYGWIN -c -o unix.o unix.c
gcc -O2 -Wall -fomit-frame-pointer -DCYGWIN -c -o html.o html.c
gcc -O2 -Wall -fomit-frame-pointer -DCYGWIN -c -o xml.o xml.c
gcc -O2 -Wall -fomit-frame-pointer -DCYGWIN -c -o hash.o hash.c
gcc -O2 -Wall -fomit-frame-pointer -DCYGWIN -c -o color.o color.c
gcc -O2 -Wall -fomit-frame-pointer -DCYGWIN -c -o strverscmp.o strverscmp.c
gcc -s -o tree.exe tree.o unix.o html.o xml.o hash.o color.o strverscmp.o
$ make install
install -d /usr/local/bin
install -d /usr/local/man/man1
if [ -e tree.exe ]; then \
        install -s tree.exe /usr/local/bin/tree.exe; \
fi
install doc/tree.1 /usr/local/man/man1/tree.1

treeのソースコードを探す

Cygwin/tree - discypus

確かにちょっとググっても見つからなかったので、適当なディストリビュージョンのパッケージから探すのはいいかも。tree_1.5.3-1_ia64.debを解凍して、copyrightとかREADMEとかを見ると、大本のURLが見つかりました。

nkf

Cygwinにはnkfも無い様で、nkfもその後入れたんだけど、コマンドログをどっかやっちゃったので詳細分かんなくなっちゃった。まぁ特にはまることなくビルド出来たんだし、いっか。
iconvは入ってたけど、iconvだと複数のファイルを一括して文字コード変換がすっごいやり難かったので、nkf入れました。

環境

Windows Windows7
Cygwin 1.7.11-1
setup.exe*2 version 2.769

*1:Setup.exeやapt-cygから色々パッケージを入れられる。リポジトリと呼んで良いのかな?

*2:Cygwinインストーラ