Sun, 21 Jul 2013
grepの代わりに、grin、ack、rak、ag
タイトル通り、最近はgrepより簡単に使える検索コマンドというのがいくつかあるようです。grin(pythonで書かれている。これだけ少し毛色が違う)、ack(perlで書かれている)、rak(ackのrubyを使った実装)、ag(the silver searcher)(ackよりも早く!を目指してCで書かれたもの)。簡単にというのは、「余分なものはデフォルトで検索対象から除外になっているので構文が簡単」くらいの意味です。grin some_regexみたいな感じ。みんな早い早い言ってますが、自分はvmware fusionでHaikuという環境なので、良く分りません。
ではさっそく…といきたいのですが、Haikuで使おうとすると難しいものもあります。grinはeasy_installを使って問題無くインストール完了しました。BeOSやHaikuでpythonのライブラリを入れたりする際に、上手くいかなかったことはほとんど経験がありません。ackはCPANから入れようとすると、エラーが出て途中で止ってしまいます。経験上、BeOSやHaikuでCPANを使って何かを入れようとしても、成功する確率はあまり高くありません。ackは必要なライブラリ等が全部ひとつのファイルに纏められた形のものがあるので、今回はそれをダウンロードしました。rakは、gemからインストールして問題無く使えました。CPANからの時ほどではありませんが、gemから何か入れようとしても、成功するかは微妙と思っています。BeOSやHaikuでは、ということでが。
ここで終っても良かったのですが、せっかくなのでag(the silver searcher)もコンパイルしてみました。configureスクリプトを騙してしまえば後は何とかなるだろうと思ったら、できあがったバイナリはディレクトリの情報をちゃんと取れていないっぽい感じで、検索結果が変でした。src/scandir.cにそれっぽい部分があったのでそれに乗っかって、以下のように修正したところ…上手くいったようです。
#if defined (__SVR4) && defined (__sun) || defined(__HAIKU__)
/*
* The d_name member of the dirent struct is declared as char[1] on
* Solaris, we need to actually allocate enough space for the whole
* string.
*/
d = malloc(sizeof(struct dirent) + strlen(entry->d_name) + 1);
#else
d = malloc(sizeof(struct dirent));
#endif
if (d == NULL) {
goto fail;
}
memcpy(d, entry, sizeof(struct dirent));
#if defined (__SVR4) && defined (__sun) || defined (__HAIKU__)
strcpy(d->d_name, entry->d_name);
#endif
ということで、自分用にバイナリを置いておくことにします。haikuportのlibpcre、libz、liblzma(xz-util)に依存しています。ag-0.15pre-haikur1a4-gcc4.zipちなみにオチはありません。あえて言えば、ちょっとだけでも自分で手をかけた分、agを使おうかなって感じです。
Thu, 27 Jun 2013
Debian Almquist shell(dash) on Haikuそのに
dash、前回のバイナリは問題があったので、差し替えます。今度は問題無く使えている…と思う。興味本位で/bin/shを/boot/home/config/bin/dashへのシンボリックリンクに置き換えでみたが、例えばbashを使った場合に完了まで3分30秒ほどかかるconfigureスクリプトが、dashだと2分30秒ほどで終ったりして(適当な計測)、これはけっこう良い結果なのかな、と。
diffは、wait3が無いところをwaitpidで置き換えしたのと、Haikuのstrchrnulを使わずにdashのsystem.hにあるstrchrnulを使うようにしたのと。
Wed, 26 Jun 2013
tcsh-6.18.01 on Haikuそのに
tcsh-6.18.01を、Haikuで、普通に./configure --prefix=/boot/home/configでコンパイルできるようにするパッチ。
どのhost-typeのものだったらconfigureを続けるか、configure本体の最初のほうにベタに条件が書いてあるのだけれど、注意力散漫なために最初は分らなくて嵌りました。config_p.hという、書き換えてconfigureしたら内容が変ってるファイルがどこから飛んでくるのか、これも最初は分らなくて嵌りました(host-type判定直後に、config/以下のファイル群からhost-typeに合うものがコピー・リネームされている)。このconfig_p.hと、configureが生成するconfig.h、最初からあるconfig_f.hとhost.defs…どんだけあるんよ、という感じ。
後もう一つ要点として、必ずconfig_f.hを修正して、#define SYSMALLOCの所を通るようにしないと、コンパイルは通っても起動しません。
Tue, 25 Jun 2013
tcsh-6.18.01 on Haiku
基本的にソースコードを弄っていなくて、config.hやconfig_f.hやconfig_p.hを触ったとか、ifdefでどこを通るか変えたとかその程度なので、大丈夫だと思う。
Sun, 23 Jun 2013
Debian Almquist shell(dash) on Haiku
dashをHaikuでコンパイルしてみた。何となく動いているっぽいので、使っているシェルスクリプトの#!/bin/sh
を#!/bin/dash
に書き換えて使ってみた。…やっぱり動いているっぽい。…本当だろうか?
けっして、/bin/shと置き換えたりしてはいけないのではないか、と思う。たぶん、インタラクティブなシェルとして使うものでは無い。コマンド履歴も無いっぽいし。libedit付きでコンパイルできれば違うのかもしれないけれど、libeditライブラリはコンパイルできなかったので。
Page 1 of 40 >>