|
|
| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
GNU ソフトウェアのほとんどが configure スクリプト方式を使っていて、 configure スクリプトを実行することにより OS の違い、ライブラリやヘッダの違 いを判断し、適切な Makefile が作成される。
Cygwin ではこの「configure が正常に行なえること」を開発目標のひとつとして いるほどで、ほとんどのものが問題なく実行可能である。
ただし、configure が成功しからと言って make がエラーなく終わるわけではない し、make が成功したからと言って期待通りに実行可能であると言うわけではない のだが。
GNU ソフトウェアの標準的なコンパイル方法を示そう。
もしうまくいかなかった場合には Cygwin 用のパッチを誰かが作っているかもしれ ないので Internet で検索してみよう。運が良ければ見つかるでしょう、いや、た いてい見つかるはずである。
| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
多くのGNUツールはインストールを行なう場合に make install で
install foo /usr/local/bin
を起動する。しかし、Windows での実行ファイルのファイル名には `.exe' という拡張子が付いているためたいていの場合これではインストールに失敗してし まう。
そこで、install foo /usr/local/bin で foo がない場合には foo.exe を扱うよ うにしたパッチがあるのでそれを使う。前述の方法にパッチをあてるという手順が 増えるだけだ。
GNU のミラーサイトから fileutils-3.16.tar.gz を入手、Cygwin 環境用のパッチは cygwin develop メーリングリストで流れた ginstall.zip 中に含まれる install.diff を使う。(http://www.cygnus.com/ml/gnu-win32/1998-Mar/0116.html 今月の LibCD Vol.xx には両者を収録している。
tar zxf fileutils-3.16.tar.gz で展開し、ginstall.zip は zip 形式を展開できるツールで展開する。
% tar zxf fileutils-3.16.tar.gz % unzip -x ginstall.zip Archive: ginstall.zip inflating: install.diff inflating: install.exe %
READMEにはfileutilsにどんなコマンドが含まれるのかとその概要が書かれていて る。INSTALLにはインストール方法が書かれているので一読しよう。
ソースディレクトリに移動して patch コマンドを実行してパッチをあてる。
% cd fileutils-3.16/src/ % patch -b --verbose -p1 < ../../install.diff Hmm... Looks like a unified diff to me... The text leading up to this was: -------------------------- |--- org/install.c Fri Feb 13 00:48:37 1998 |+++ new/install.c Mon Mar 02 20:16:19 1998 -------------------------- Patching file `install.c' using Plan A... Hunk #1 succeeded at 78. Hunk #2 succeeded at 311. Hunk #3 succeeded at 336. Hunk #4 succeeded at 367. Hunk #5 succeeded at 381. Hmm... Ignoring the trailing garbage. done %
これでオリジナルのものが `install.c.orig' というファイル名になり、パッ チをあてた `install.c' ができあがる。
fileutils-3.16 ディレクトリで以下のように実行する。
% ./configure
loading cache ./config.cache
checking for a BSD compatible install... /CYGNUS/CYGWIN~1/H-I586~1/BIN/install -c
checking whether build environment is sane... yes
checking whether make sets ${MAKE}... yes
checking whether to enable maintainer-specific portions of Makefiles... no
checking for ln... /CYGNUS/CYGWIN~1/H-I586~1/BIN/ln
checking for mv... /CYGNUS/CYGWIN~1/H-I586~1/BIN/mv
checking for rm... /CYGNUS/CYGWIN~1/H-I586~1/BIN/rm
checking for perl... /usr/local/BIN/perl
checking for gcc... gcc
:
updating cache ./config.cache
creating ./config.status
creating Makefile
creating doc/Makefile
creating intl/Makefile
creating lib/Makefile
creating man/Makefile
creating m4/Makefile
creating po/Makefile.in
creating src/Makefile
creating config.h
linking ./intl/libgettext.h to intl/libintl.h
%
% make
make all-recursive
Making all in lib
gcc -DHAVE_CONFIG_H -I. -I. -I.. -I.. -I. -I../intl -g -O2 -c getdate.c
gcc -DHAVE_CONFIG_H -I. -I. -I.. -I.. -I. -I../intl -g -O2 -c posixtm.c
gcc -DHAVE_CONFIG_H -I. -I. -I.. -I.. -I. -I../intl -g -O2 -c getopt.c
:
:
gcc -DLOCALEDIR=\"/usr/local/share/locale\" -DSHAREDIR=\"/usr/local/share\" -DHAVE_CONFIG_H -I.. -I. -I../lib -I../intl -g -O2 -c df.c
gcc -o df df.o ../intl/libintl.a ../lib/libfu.a
Making all in doc
make[2]: Nothing to be done for `all'.
Making all in man
make[2]: Nothing to be done for `all'.
Making all in m4
make[2]: Nothing to be done for `all'.
Making all in po
make[2]: Nothing to be done for `all'.
%
ここで make installを実行するのだが、今回は fileutils 中の `install.exe' だけが欲しいのでこういう場合は手動でインストールを行なっ てもよいだろう。
% cp -p fileutils-3.16/src/ginstall.exe /usr/local/bin/install.exe
| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
UNIX のバージョン管理システムとしてよく使われている RCS を取り上げる。
RCS はその名前が示すようにプログラム(プログラムに限らず LaTeX 文書などのテキ スト形式のファイルであればなんでも利用可能である)のバージョンを管理するツー ルでり以下のような特徴を持つ。
どちらかと言えば小規模(少人数)向け、個人利用向けのシステムであるので、入門 には最適であると考え取り上げた。なお、多人数でのバージョン管理には CVS (Concurrent Versions System)をお勧めする。
| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
これも前述の手順に従ってコンパイルする。
% cd /usr/local/src % tar zxf rcs-5.7.tar.gz % cd rcs-5.7
rcs-5.7/src/rcslex.c 1115行目を以下のように修正します。
int fd = fdSafer(open(name, O_RDONLY # if OPEN_O_BINARY | (strchr(type,'b') ? OPEN_O_BINARY : 0) # endifを以下のように修正する。
int fd = fdSafer(open(name, O_RDONLY # if OPEN_O_BINARY && !(has_mmap && large_memory) /* <-- 追加 */ | (strchr(type,'b') ? OPEN_O_BINARY : 0) # endif
% ./configure
creating cache ./config.cache
checking diff basename... diff
checking for diff... /CYGNUS/CYGWIN~1/H-I586~1/BIN/diff
checking diff success status... 0
checking diff failure status... 1
checking diff trouble status... 2
checking diff options for RCS... -an
checking diff -L... yes
checking diff3 -m... yes
checking for diff3... /CYGNUS/CYGWIN~1/H-I586~1/BIN/diff3
:
checking whether make sets ${MAKE}... yes
updating cache ./config.cache
creating ./config.status
creating Makefile
creating man/Makefile
creating src/Makefile
%
% make
cd man && make all
make[1]: Nothing to be done for `all'.
cd src && make all
rm -f a.*
ALL_CFLAGS=' -Dhas_conf_h -I. -I. -g -O' \
CC='gcc' \
COMPAT2='0' \
DIFF3='/CYGNUS/CYGWIN~1/H-I586~1/BIN/diff3' DIFF3_BIN='1' \
DIFF='/CYGNUS/CYGWIN~1/H-I586~1/BIN/diff' DIFFFLAGS='-an' DIFF_L='1' \
:
gcc -g -O rcsdiff.o rcsutil.o rcsfnms.o rcsmap.o rcsrev.o rcssyn.o rcslex.o maketime.o partime.o rcstime.o rcskeep.o rcskeys.o version.o -o rcsdiff
gcc -c -Dhas_conf_h -I. -I. -g -O rcsmerge.c
gcc -g -O rcsmerge.o merger.o rcsutil.o rcsfnms.o rcsmap.o rcsrev.o rcssyn.o rcslex.o rcskeep.o rcskeys.o maketime.o partime.o rcstime.o version.o -o rcsmerge
gcc -c -Dhas_conf_h -I. -I. -g -O rlog.c
gcc -g -O rlog.o rcslex.o rcsmap.o rcssyn.o rcsrev.o rcsutil.o maketime.o partime.o rcstime.o rcsfnms.o rcskeep.o rcskeys.o version.o -o rlog
%
% make install
cd man && make install
./../mkinstalldirs /usr/local/man/man1 /usr/local/man/man5
for m in ci co ident merge rcs rcsclean rcsdiff rcsintro rcsmerge rlog; do \
/usr/local/BIN/install -c -m 644 ./$m.1 /usr/local/man/man1/$m.1; \
done
{ test -f rcsfile.5 || cd .; } && \
/usr/local/BIN/install -c -m 644 rcsfile.5 /usr/local/man/man5/rcsfile.5
cd src && make install
./../mkinstalldirs /usr/local/bin
for p in ci co ident merge rcs rcsclean rcsdiff rcsmerge rlog; do \
/usr/local/BIN/install -c $p /usr/local/bin/$p; \
done
%
| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
では実際に Meadow から使ってみよう。
ここでは `hello.c' というファイルを編集するものとする。`hello.c' のあるディレクトリの下に RCS という RCS のファイル保存用のディレクトリを作 成する。
% ls -l total 1 drwxr-xr-x 2 kose bingo 0 Jul 11 23:06 RCS -rw-r--r-- 1 kose bingo 89 Jul 11 23:09 hello.c %
図2-8 は `hello.c' を編集中の画面で、まだ チェックイン前のものだ。
★「図2-8 hello.c チェックイン前」
次にチェックインを行う。Meadow からの最初のチェックインは C-x v i で 行う。チェックイン後は 図2-9 のようになる。下か ら2行目の白黒反転したモードラインに RCS-1.1 という表示があり、こ の `hello.c' が RCS の管理下にあり、バージョン1.1 であること、 ロックしていない書き込み禁止ファイルであることもわかる。
★「図2-9 hello.c チェックイン後」
これをロック付きでチェックアウトを行い、編集可能状態にするのは C-x C-q である。チェックアウトを行うとモードラインには RCS:1.1 とい う表示に変わりロック付きチェックアウトしてあることがわかる。 (図2-10)
★「図2-10 version 1.1チェックアウト」
この状態で編集を行う。編集が終わったらチェックインを行なう。チェックインは C-x C-q である。C-x C-q を入力すると 図2-11 のようなログ入力画面となるのでバージョン1.1 から1.2への変更のログ を書きこみ、C-c C-c でチェックインを行なう。チェックイン後は再び 図2-12 のようなロックしていない書き込み禁止状態 となる。バージョンはこのように自動的に1.1、1.2、1.3‥と振られる。
★「図2-11 version 1.2のチェックイン」
★「図2-12 version 1.2」
ここで C-x v l と押下するとさきほど入力した編集のログを読むことがで きる。(図2-13)
★「図2-13 編集ログ」
任意のバージョンを参照したい場合は C-x v ~ version RET である。 C-x v ~ 1.1 RET でバージョン1.1を取り出した画面を 図2-14 に示す。このように任意のバージョンを参照し ながら編集が可能なのである。
★「図2-14 version1.1の参照画面」
主なキーバインドをまとめると以下のようになる。
表
| C-x C-q | チェックイン、チェックアウトのトグル動作 |
| C-x v i | 最初にチェックインする。 |
| C-x v l | RCSのログ表示 |
| C-x v ~ | 任意のバージョンの表示 |
| C-x v = | 最新バージョンと編集中のものの表示 |
図2-15 は最後にチェックインしたものと現在編集 中のものの diff(差分)を取って、それの変更個所を色分け表示したものである。 これが
M-x ediff-revision RET RET
だけでできるのである。もう著者などはこの機能なしでは何も書けないという状態 にあるのである。Cソースや、Emacs Lisp は言うの及ばず、文書(LaTeXも含む)であっ てもこの RCS の管理下に置いているのである。
★「図2-15 ediffの表示画面」
目の覚めるような能率アップにつながること受けあいである。
| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
Meadow を使いこなしていくうちに Cygwin に含まれている grep では日本語の検 索ができないため、「日本語の検索ができたらいいのに」と思うはずである。そこ で足りないものはコンパイルしようとなるのであった。
日本語対応 grep は vimを日本語対応にした jvim に含まれていて以下のURLから 入手可能だ。今月の LibCDVol.xx に収録。
オリジナルの `vim-3.0.tar.gz' にパッチをあて jvim とする。
% tar zxf jvim.1.5a.tar.gz
% tar zxf vim-3.0.tar.gz
% cd vim
% patch -b --verbose -p0 < jvim.diff
Hmm... Looks like a new-style context diff to me...
The text leading up to this was:
--------------------------
|diff -crN ../orig/doc.j/cygwin.txt ./doc.j/cygwin.txt
|*** ../orig/doc.j/cygwin.txt Thu Jan 01 09:00:00 1970
|--- ./doc.j/cygwin.txt Sat Jan 09 01:19:58 1999
--------------------------
Patching file `./doc.j/cygwin.txt' using Plan A...
Hunk #1 succeeded at 1.
Hmm... The next patch looks like a new-style context diff to me...
The text leading up to this was:
--------------------------
|diff -crN ../orig/doc.j/differen.doc ./doc.j/differen.doc
|*** ../orig/doc.j/differen.doc Thu Jan 01 09:00:00 1970
|--- ./doc.j/differen.doc Sun Jun 16 17:13:08 1996
--------------------------
Patching file `./doc.j/differen.doc' using Plan A...
Hunk #1 succeeded at 1.
Hmm... The next patch looks like a new-style context diff to me...
The text leading up to this was:
--------------------------
|diff -crN ../orig/doc.j/fepctrl.doc ./doc.j/fepctrl.doc
:
|--- ./src/winjnt.c Sun Apr 04 09:43:50 1999
--------------------------
Patching file `./src/winjnt.c' using Plan A...
Hunk #1 succeeded at 1.
Hmm... The next patch looks like a new-style context diff to me...
The text leading up to this was:
--------------------------
|diff -crN ../orig/src/xargs.c ./src/xargs.c
|*** ../orig/src/xargs.c Thu Jan 01 09:00:00 1970
|--- ./src/xargs.c Sat May 09 23:12:58 1998
--------------------------
Patching file `./src/xargs.c' using Plan A...
Hunk #1 succeeded at 1.
done
%
jvim は Cygwin に対応済みなので、makefile 中で Cygwin 用のコンパイルスイッ チを選択するだけで make することができる。それに関しては附属のドキュメント の vim/doc.j/cygwin.txt に詳細が記されているので参照のこと。
以下のように makjunix.mak を編集する。
# cygwin (TESTED B20.1 coolview patch) # #MACHINE = -DBSD_UNIX #CC=gcc -O #LIBS = -lncursesを以下のように変更する。
# cygwin (TESTED B20.1 coolview patch) # MACHINE = -DBSD_UNIX CC=gcc -O LIBS = -ltermcap
あとは以下のようにすれば
% cd src
% make -f makjunix.mak grep
gcc -O -c -DBSD_UNIX -DDIGRAPHS -DTERMCAP -DSOME_BUILTIN_TCAPS -DNO_FREE_NULL -DVIM_ISSPACE -DWEBB_COMPLETE -DWEBB_KEYWORD_COMPL -DVIM_HLP=\"/usr/local/lib/vim.hlp\" -DKANJI -DTRACK -DCRMARK -DFEXRC -DUSE_GREP -DUSE_OPT -I. grep/grep.c
grep/grep.c: In function `getarg':
grep/grep.c:810: warning: passing arg 1 of `bsdmemset' from incompatible pointer type
:
gcc -O -c -DBSD_UNIX -DDIGRAPHS -DTERMCAP -DSOME_BUILTIN_TCAPS -DNO_FREE_NULL -DVIM_ISSPACE -DWEBB_COMPLETE -DWEBB_KEYWORD_COMPL -DVIM_HLP=\"/usr/local/lib/vim.hlp\" -DKANJI -DTRACK -DCRMARK -DFEXRC -DUSE_GREP -DUSE_OPT regsub.c
gcc -O -o grep/grep grep.o alloc.o charset.o kanji.o regexp.o regsub.o -ltermcap
%
これで `src/grep' ディレクトリの下に `grep.exe' ができあがる。こ こではオリジナルの Cygwin の grep も使えるように jgrep という名前にし、 `/usr/local/bin/jgrep.exe' と置く。
grep の使い方の詳しい説明は vim/doc.j/readme.doc にあるの で参照のこと。
| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
Meadow からは以下のように入力して使う。
M-x grep RET 検索文字列 RET
その時に必要になる設定を以下に示す。これを .emacs に追加する。この grep で は検索するファイルの文字コードは自動判定で、出力する文字コードは Shift JIS となっているので、特にそれの指定の必要はない。
(setq grep-program "jgrep.exe")(if (and (= 20 emacs-major-version) (= 2 emacs-minor-version)) (if (functionp 'orig-start-process) () (fset 'orig-start-process (symbol-function 'start-process)) (defun start-process (name buffer program &rest args) (interactive) (apply 'orig-start-process name buffer program (mapcar (lambda (arg) (encode-coding-string arg file-name-coding-system)) args)))))
| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
part1 で述べた Nana-gnus で使う MIME(Multipurpose Internet Mail Extensions) のための base64 エンコーダ、デコーダである mmencode のコンパイルを行なう。
mmencode のソースファイルは ftp://thumper.bellcore.com/pub/nsb/mm2.7.tar.Z に含まれている。今月のLibCDXXの収録した。 これを展開する。
% tar zxf mm2.7.tar.Z
次に `mm2.7/src/metamail/mmencode.c' を修正する。
#ifdef MSDOS
if (fp == stdin) setmode(fileno(fp), O_BINARY);
#endif /* MSDOS */
if (which == BASE64) {
を以下のような追加を行なう。これでデコードの時のファイ ルモードをバイナリにしている。
#ifdef MSDOS
if (fp == stdin) setmode(fileno(fp), O_BINARY);
if(!encode) setmode(fileno(fpo), O_BINARY); /* <-- 追加 */
#endif /* MSDOS */
if (which == BASE64) {
あとは以下のようにコンパイルを行ない、できあがった mmencode.exeは /usr/local/bin へ置く。
% cd mm2.7/src/metamail/ % make CC=gcc mmencode rm -f mmencode.o gcc -c -I.. -g -I. mmencode.c rm -f codes.o gcc -c -I.. -g -I. codes.c rm -f mmencode gcc -I.. -g -I. -o mmencode mmencode.o codes.o % % cp mmencode.exe /usr/local/bin %
| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
ホームディレクトリの下に以下の内容を書いた .mailcap というファイルを置く。 これで MIME 形式のメールの Content-Type: が、image/gif や image/jpeg など の画像ファイルは fiber というアプリケーションで再生するという指示を行なっ ている。
image/*; fiber %s application/octet-stream; fiber %s
fiber (File Inspect and Broking End Resolver) は Windows で関連付けされた アプリケーションを自動的に起動するという優れものでなのである。fiber は Meadow 同封されていて `c:/Meadow/1.00/bin/' に置いてあるのでこれをパ スの通った所へ置けば良い。
| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
Nana-gnus からメールに添付された画像ファイルを表示している画面を 図2-16に示す。
操作はいたって簡単で、
[2 Emacs1.gif <image/gif (base64)>]
の部分にマウスカーソルを置いて、二つボタンマウスの場合は左右のボタンを同時 に押すだけで画像を表示することができる。
マウスを使わない場合は、同様にカーソルを上に置いて v を押す。 画像を表示するのではなくファイルに保存したい場合は e を押す。
★「図2-16 MIMEの再生」
| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
グループバッファから m 押下でメールを、a 押下でニュースを、 返事を書く場合には f 押下で 図2-16 のような メッセージ作成バッファになる。カーソルの位置に画像を挿入したい場合は、 C-c C-x C-i filename RET である。 図2-16 で示すようにファイル名をミニ バッファから入力する。入力が終わると 図2-17 に示すような画面になる。
★「図2-16 画像ファイルの挿入」
★「図2-17 画像ファイルの挿入後」
あとはそれに続いてふつうに文字を入力し(図2-18)、 C-c C-c で送信である。
★「図2-18 画像ファイルの挿入後」
以下にメッセージバッファでのキーバインドを示す。 それぞれの詳細の説明は C-c C-x ? を押下してヘルプを読むか、前述の SEMI の info を参照して欲しい。
表
| C-c C-x ? | mime-edit-help |
| C-c C-x C-z | mime-edit-exit |
| C-c C-x p | mime-edit-preview-message |
| C-c C-x C-y | mime-edit-insert-message |
| C-c C-x C-e | mime-edit-insert-external |
| C-c C-x C-i | mime-edit-insert-file |
| C-c C-x C-t | mime-edit-insert-text |
| [ << ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
|
URL: http://www.NetLaputa.ne.jp/~kose/ PGP Fingerprint: 59 8E 1E 4D 41 7F DD 80 12 13 47 A3 FB 62 97 44 Copyright (C) 1999, 2000 kose@yk.NetLaputa.ne.jp All Rights Reserved. |
|