本日誌を始めて、13日目。やっと本日誌ページ用 m4 マクロを作成した。
私の Web ページ (http://www.j.dendai.ac.jp/~naney/ 以下) は m4 を利用して作成している。 m4 はマクロプロセッサである。 主に何に利用しているかというと、ヘッダやフッタなどの定型的な部分の生成などである。 ヘッダやフッタなどをマクロ化し、各ページでパラメータを指定して展開させることで、それぞれにあったものを生成する。 利点としては、例えばヘッダの形式を変えたい場合にマクロを書き換えることで、全ページを変更することができることなどがある。 SSI による include では各ページ固有の情報などのパラメータ部分がうまく扱えない。 ちなみに m4 ページの処理は、Autoconf、Automake を利用して、./configure; make; make install; で一発で済むようにしている。
前置きがながくなった。もちろんこのページのヘッダやフッタなどもマクロ展開で行っていたのだが、ナビゲーションの [Prev Day]、 [Next Day] などは毎日手でリンクを張っていた(実際には前日のものをコピーして書き換え)。 これは面倒だし、間違えもおきやすいので、この部分を処理するマクロを本日作成した。 まだあまりチェックしていないので、もしかしたらうまくリンクがつながらないかもしれない。
次はキーワードインデックス部分と、記事別ナビゲーション(似ている内容の記事ごとの、Prev、Next のリンク) の生成を自動化したいが、これは m4 だけではかなり辛いか(できるとは思うが)。
[ コンピュータ日誌 ]
昨日から configure (with GNU Autotools) で libwwwcore (in W3C libwww ライブラリ)を検出させようとしている。 が、ライブラリはインストールされているのに検出できない。 同じ W3C libwww の中の libwwwutils は検出できるのに。
と Autoconf マニュアルをよく読んだら AC_CHECK_LIB に第5引数が。 もしやと思ったら、やはり。 libwwwcore は libwwwutils に依存しているので一緒にリンクさせなければならないのであった。configure.in の中の記述を
AC_CHECK_LIB([wwwcore], [HTLibInit], [], [], [-lwwwutils])
にしたら detect。
先日 Autoconf の AC_CHECK_LIB の第5引数を知ったのだが、実は AC_CHECK_LIB で発見できたライブラリは次の AC_CHECK_LIB での検査の時にリンクされるのね。 ということは基本的には第5引数に指定しないでも依存関係の親の方を先に検査すればいいわけだ(クロスに参照しあってなければ)。
NSIS のサイトによるとビルドに「SCons」を使うようしたらしい。
と興味深いツールになっているようだ。
現在プロジェクトLaTeXベースのドキュメント生成には GNU Make を使っているのだが、UNIX、Windows の両方でビルドできるようにするには ComSpec 環境変数の有無で使用するコマンドを切り換えたり等いろいろ面倒なので、代替ツールとして使えないかなと。
基本的な機能は Make に対する改良がなされているようであるし、コピー等ファイル操作も SCons 自体がもっているのでクロスプラットフォームでビルドできるようにするのも楽そうだ。
一方 Autoconf 系の機能については、インストール済みのライブラリの検出や実装レベルのチェック等を実装しているようである。 make check や make dist、make install 等にあたるターゲットに関する機能(あるいは規約)のようなものは無い。これは非常に残念。 結局自分が Ant を使わなくなったのも GNU Autotools にあるこれらの機能に欠けているからであるし。
実は私がPerl が好きな理由の一つとして、これらサポートが充実しているという点がある。Perl では ExtUtils::MakeMaker (あるいは Module::Build)があり、ビルドからテスト、ソースパッケージのパッケージングまでフレームワークが整っている。
SCons は Python ベースで、Makefile にあたるファイルも Python スクリプトである。 SCons が影響を受けた Cons は Perl ベースであったのだが、既に2001年5月ごろから開発が止まってしまっている。残念。
ということで Make の代替には使えそうであるが、GNU Autotools と同じようなことをするにはいろいろ手をかけないといけないといった印象。
OS X に Homebrew でインストールした Emacs をしばらく使ってみて IME インラインパッチなるものがないと辛いということがよくわかりました。
今は Homebrew の emacs formula では IME インラインパッチが当たらなくなっているので自分で当ててインストールしなおしました。
パッチは @takaxp 氏の
を使いました。感謝。まずはパッチファイルを取得。
$ mkdir ~/tmp $ cd ~/tmp $ git clone git@gist.github.com:1d91107b311b63b57529.git
次に emacs formula を書き換えます。
$ brew update $ brew edit emacs
で起動したエディタで先頭の方に patch 処理と Autoconf・Automake への依存情報を追加します(/Users/naney は私の HOME ディレクトリ)。
class Emacs < Formula desc "GNU Emacs text editor" homepage "https://www.gnu.org/software/emacs/" url "http://ftpmirror.gnu.org/emacs/emacs-24.5.tar.xz" mirror "https://ftp.gnu.org/gnu/emacs/emacs-24.5.tar.xz" sha256 "dd47d71dd2a526cf6b47cb49af793ec2e26af69a0951cc40e43ae290eacfc34e" # ここから追加 patch :p1 do url "file:///Users/naney/tmp/1d91107b311b63b57529/emacs-24.5-inline.patch" end depends_on "autoconf" => :build depends_on "automake" => :build # ここまで追加 bottle do ...
保存したらあとは Emacs をアンインストールし、書き換えた fomula で再度 Emacs をインストール。
$ brew uninstall emacs $ brew install --with-cocoa --with-gnutls --verbose emacs
やっほー。これで「Google 日本語入力で平仮名入力になっている時に C-x C-f と打ったらカレントバッファに変な文字が入力されてる!」なんていうのが無くなりました。快適です。
3月1日にリプレースした MacBook Pro にようやく Emacs をインストール。
今回もありがたく @takaxp 氏の解説とパッチを利用させていただいた。感謝!
Autoconf と GnuTLS、 libxml2 が無かったので事前にインストール。個人的慣習として ~/local 以下に置いておくため --prefix=$HOME/local/emacs を configure で指定している。
$ brew install autoconf $ brew install gnutls pkgconfig $ brew install libxml2 $ export PKG_CONFIG_PATH="/usr/local/opt/libxml2/lib/pkgconfig" $ cd ~/tmp $ git clone git://git.sv.gnu.org/emacs.git $ curl -LO https://gist.githubusercontent.com/takaxp/3314a153f6d02d82ef1833638d338ecf/raw/156aaa50dc028ebb731521abaf423e751fd080de/emacs-25.2-inline.patch $ cd emacs $ git reset --hard 6217746dd6 $ git checkout -b emacs-26 $ git reset --hard 9ad0f1d15c $ patch -p1 < ../emacs-25.2-inline.patch $ ./autogen.sh $./configure CC=clang --prefix=$HOME/local/emacs --without-x --with-ns --with-modules $ make bootstrap -j1 $ make install -j1 $ cd ./nextstep $ open . # Emacs.app を /Applications に移動
Naney (なにい) です。株式会社MIXIで SNS 事業の部長をしています。
※本サイトの内容は個人的見解であり所属組織とは関係ありません。