LoginSignup
20
20

More than 5 years have passed since last update.

mkmfでわくわく環境チェック

Last updated at Posted at 2014-06-16

Rubyの標準添付ライブラリにmkmfがあります。

これは本来Rubyの拡張ライブラリを作るMakefileを作るためのRuby標準添付ライブラリなのですが、Ruby developerの方々の手によって素晴らしく便利で柔軟に作られているため、かんたんにマシンの環境チェックする用途にも使えるようです。

「構造体struct statでst_ctim.tv_nsecメンバーが取れる環境なのかチェックしたい」
=> have_struct_member("struct stat", "st_ctim.tv_nsec")

「mecabが使えるものなら使いたい」
=> have_header('mecab.h')

「ライブラリlibcがあってしかもprintfが使えるのか気になってしょうがない」
=> have_library("c", "printf")

「今までチェックしたことをまとめてヘッダーファイルとして書き出したい」
=> create_header

このヘッダーファイルにはstruct stat st_ctim.tv_nsecメンバーがあるなら#define HAVE_STRUCT_STAT_ST_CTIM 1のように書きだされています。
あとはヘッダーファイルを#includeして#ifdef等で分岐すればどんな環境でもポータブルに使えるコードを書くことができます。(要調査力)
わざわざヘッダーに書きださなくても$defsには["-DHAVE_STRUCT_STAT_ST_CTIM"]のように配列が詰まっているのでコンパイルオプションとしても使いやすく設計されています。
使い方はかんたん。require 'mkmf'と唱えるだけです。

Rubyのコードなのでif文なんかも思いのまま、これでご家庭の隅に複雑に詰まってしまったconfigureのいくつかはRubyコードで綺麗にまとめられるんじゃないでしょうか。

「こっちのほうがもっと汎用的で高機能だよー」等の声があればぜひ教えていただきたいところですが、「標準添付」は結構なアドバンテージなのではないでしょうか。Rubyすばらしい。
(「mkmfをそんな用途に使うんじゃねえ!」って言われたらどうしよう。。。)

20
20
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
20
20