メニエスの名のもとに

プログラミング関係を中心としたぐだぐだブログ

autotools対応中

これもウソ対応です

config.h とか作成されるけど、どこでも見ていません。まだgit pushしてないし。

shared library にしようとして失敗しました

OS X ではうまく shared library が作成されたんだけど、ubuntu でやったら作成できなかった。MTToolBox はNTLのライブラリに依存しているんだが、NTLはstatic libraryなんだよね。たぶん、そのせいだと思うので、あんまり追求しないで、さっさと諦めることにしました。

header ファイルのインストールで悩んだ

MTToolBox の正体はほとんど、C++のテンプレートヘッダーファイルなので、たくさんのヘッダファイルをインストールしなければならない。Unix系ではヘッダーは/usr/local/include にインストールすることになっているが、ファイル名の衝突が怖いので、/usr/local/include/MTToolBox/といったところにインストールしたい。つまりサブディレクトリにヘッダをまとめたい。そういうときには、pkginclude_HEADERS にヘッダファイルを記述すればよいとのことだった。
だが、それではmttoolboxとパッケージ名の部分が小文字に変換されてしまうのである。いやーん。既にヘッダファイルから他のヘッダファイルをincludeする部分に#includeとか記述しているので、全部変更しなくちゃならないじゃないですか。そこで、別のマクロでパッケージ名を指定するとか、変数に直接代入するとか、Makefile.amをやめてMakefile.inを直接編集するとかいろいろやってみましたが、駄目でした。しかし、最後にautomake の manual を見て(最初に見ろって)わかりました。

nobase_include_HEADERS = MTToolBox/*

パッケージ名を変更しないで、ヘッダのインストール先を変更できた。本当はtar ballもMTToolBox-0.2.1.tar.gz とかにしたかったのだが、まあtarball名は小文字でもいいや。

名前の衝突の問題

Unix系で/usr/local にインストールするのはシステムファイルと名前の衝突を避けるためだが、みんなが /usr/localにインストールしたら結局名前の衝突が起こる。mac ports だと opt/local だけど、やはりみんな同じところにインストールするので名前の衝突は避けられない。まあ、昔のUnix 系のコマンドはls とか短い名前だったけど、これからは可能な限り長い名前にした方がいい。
とか言っているうちに、はっと気がついてMTToolBoxで検索すると、既にあるんだなあ。駄目じゃん。だいたいToolBoxなんてツール的なプログラムには誰もが付ける名前じゃないか。そうすると最初のMTだけがユニークだけど二文字だから衝突しない方がおかしいくらいだ。バカじゃん、俺。略するならtoolboxの方をTBって略すべきだろうが。MersenneTwisterTBなら、衝突しなかったし、衝突してもウチらMersenneTwisterの本家だからお前らが名前変えろって言えないこともなかった。っていうか、名前の衝突を避けるには省略禁止にするべきなんだろう。MersenneTwisterPseudoRandomNumberGeneratorDevelopmentToolBox とかいう名前にしておけば、まず衝突しない。いやいや、一般名詞では衝突の危険は減らないだろう。ここは、アレあのI18Nみたいな掟破りの省略法を混ぜて、MersenneTwisterP4OR4MN4RG7RD9TTBとかにすればいい。おお、これならまず衝突しないはず。いや、規則的に名前をつけている以上衝突は起こる。しかしあまり長い名前にすると、Common Lispグローバル変数みたいに、使わせないためにわざと長い名前にしたと思われる可能性がある。
バージョン0.2 だから、この際パッケージ名をMersenneTwisterToolBox にしてバージョンを1.0にすることで妥協しようかな。といいつつ、別の用があるのですぐには公開されないのであった。