cppref をCygwin@WindowsXPに入れたお。
プログラミング言語が普及するかどうかは,そのドキュメントおよびリファレンスをいかに素早く参照できるかどうかにかかっている。
とは,かのwhitypigさんの遺言(死んでへんちゅーねん)ですが,
皆様いかがお過ごしでしょうか。
ワタシはというもの,涼しくなってきて,うれしい限りでございます。
Cygwin on Windows XP SP3 に cppref を入れたおメモ
なぜかC++をおっぱじめるという荒行に出たわけでして,
そろそろドキュメント環境を整えたいなと思いまして,
此度,cpprefというスーパーウルトラ級に便利なツールを
インストールした次第ですが,これが結構はまって,時間がかかったので,
そのときのメモを残しておこうということを企てたのでござる。にんにん。
絶対現実逃避じゃないからね。ほんとだよ。
ソースコードのダウンロード
http://github.com/kazuho/cppref の右上の「Download Source」から。
ほいで,伸張します。
このときは,make して make install で完了ばかりだと思ってたさ−。
Makefile がない・・・だと?
なんかないので,キーボードの一番上のキーをよく使うperlという言語を使って
作るみたいです。
% perl Makefile.PL
# なんかいろいろ怒られる。
CPAN っておいちいの?
Makefileを作るのに必要なモジュールが足らんらしいので,
CPANというのを使ってインストールすることに。
ワタシのスタックはすごーく小さいので,すでに本来の目的を忘れつつある。
おれはただ,cpprefというのをインストールしたかっ・・た。
cygwin 上で作業します。
% cpan
とすれば,色々でてきて,色々できるようになりました。
初めて使いました。えぇ,世間知らずもいいとこですよ。
ほいで,
install Module::Install
だっけな? して,依存関係を解消していくために色々インストールしていき,
途中で errno=11 みたいなんがいっぱいでてきたので,
C-c押しっぱなしで終了。
ググると,例の rebaseall をすれば解消するみたい。
Meadow,Cygwin などをすべて終了して,コマンドプロンプト立ち上げて,
ash して,/bin/rebaseall した。
したけど,なんか権限関係でスキップしてたので,なにくそとばかりに,
文句の対象を,chmod 777 してやった。
でも,だめ。なので,Windowsを再起動。ほいで,再度チャレンジ。
なんとかうまくいく。
まだまだ続くよ,CPAN。
install Module::Install して,よくわからんので,片っ端からインストールしていきます。
といっても,デフォルトがyesなので,noと言えない日本人なwhitypigさんは,
yes! we can! とばかりにyesを選択してきます。
ほいで,テレビを見ながら様子を見つつ,機を見てenterして,終わりを待つ。
終わった。うそ,終わってない。
えーとなんだっけなぁ。
そうそう,
cpan[1]> install Module::Install::ReadmeFromPod
とか,
cpan[2]> install File::ShareDir File::Slurp
こんなんを実行します。
それから,これもしてみた。意味はわかっとらんですたい!
cpan[3]> install ExtUtils::MakeMaker
さてこれで必要なもんは揃っているはず。きっと。
結構な時間かかりましたんよ。
うち,perlもその慣習,文化も知らんから大変。
READMEもついてないから大変。
perl Makefile.PL をします。
やっとMakefileを作る準備が整いました。
% perl Makefile.PL include /home/whitypig/src/cppref/kazuho-cppref-44dfe39/inc/Module/Install.pm include inc/Module/Install/Metadata.pm include inc/Module/Install/Base.pm include inc/Module/Install/Makefile.pm include inc/Module/Install/ReadmeFromPod.pm Writing README from cppref include inc/Module/Install/External.pm include inc/Module/Install/Can.pm Locating required external dependency bin:w3m... found at /usr/bin/w3m. include inc/Module/Install/Scripts.pm include inc/Module/Install/Share.pm # <-- これが阿呆みたいに時間がかかった。ハングしてるかと思った。 include inc/Module/Install/Include.pm include inc/ExtUtils/MakeMaker.pm include inc/Module/Install/WriteAll.pm include inc/Module/Install/Win32.pm include inc/Module/Install/Fetch.pm Writing Makefile for cppref Writing META.yml
これでやっとMakefileができましたよっと。
ささっとmake。
echo $? してみたら,0。ほう。
いけたのか?
make test が7個中6個こけた。
% make test cp cppref blib/script/cppref /usr/bin/perl.exe "-Iinc" "-MExtUtils::MY" -e "MY->fixin(shift)" blib/script/cppref /usr/bin/perl.exe "-MExtUtils::Command::MM" "-e" "test_harness(0, 'inc', 'blib/lib', 'blib/arch')" t/*.t t/00base.t .. no document found for: start t/00base.t .. 1/7 # Failed test 'top page' # at t/00base.t line 6. # got: '256' # expected: '0' no document found for: stl/vector/push_back ## 長いので一部省略 # Failed test 'multiple choices' # at t/00base.t line 12. # got: '256' # expected: '0' # Looks like you failed 6 tests of 7. t/00base.t .. Dubious, test returned 6 (wstat 1536, 0x600) Failed 6/7 subtests Test Summary Report ------------------- t/00base.t (Wstat: 1536 Tests: 7 Failed: 6) Failed tests: 1-5, 7 Non-zero exit status: 6 Files=1, Tests=7, 3 wallclock secs ( 0.05 usr 0.02 sys + 1.25 cusr 2.28 csys = 3.59 CPU) Result: FAIL
なので,よくわからんが,t/00base.t がテストなんだろうと思い,
中身を見てみた。やっていることは,なんとなくわかった。
けど,なぜこけるかがわからん。
そんなときは,気にしない気にしない(あっ,どうも一休さん)
南無三的に,make install してみる。
% make install Installing /usr/share/man/man1/cppref.1 Installing /usr/share/man/man3/App.Cppref.3pm Installing /usr/bin/cppref Appending installation info to /usr/lib/perl5/5.10/i686-cygwin/perllocal.pod
試してみる。
% cppref
no document found for: start
あら,やっぱり。
cppref の中身を,perlを知らないくせに,見てみる。
そういえば,make install のログには,肝心なhtmlファイルをコピーした
形跡はないぞ。(なんかのフラグが立ちました!)
ほいで,マルタイの中身を一部抜粋。
my $doc_dir = $ENV{CPPREF_DOCROOT} || ''; if (! $doc_dir) { eval { $doc_dir = File::ShareDir::dist_dir('cppref'); }; }
ま,ファイルが見つからんと言っているわけだから,探している部分があるだろうと。
ほいで,そのドキュメントルートを取得している部分が上の部分だろうと。
ENV と言っているくらいだから,環境変数だろうと。
環境変数で設定されてなかったら,dist_dir()という関数?メソッド?メンバ関数?
で,なんかを取得していると。
なので,
% ls Changes META.yml Makefile.PL blib cppref-0.08 inc make.install.log pm_to_blib tools MANIFEST.SKIP Makefile README cppref doc lib orig t % CPPREF_DOCROOT=./doc cppref push_back
してみると,
You are here: C++ Reference >> Search results * stl >> deque >> push_back * stl >> list >> push_back * stl >> vector >> push_back * string >> push_back
キタコレ!!
ま,そりゃそうなんだわさ。
肝要なドキュメントをどこにもコピーしてないんだもん。
Not Found で当然だわさ。
あ,ビスケ師匠,わざわざすんません。連載早めに再開してください。
ワンピースの中の人と比較されちゃいますよ。