/* OPTIONS.JP,v 2.1 1998/04/23 12:30:35 hayashi */
/* OPTIONS.JP,v 2.2 1999/02/07 17:03:12 hayashi */

/* *********************************************** *
 *  MH の options 解説 暫定版 (by MH-plus project) *
 * *********************************************** */

  MH の make 時には、MH の挙動を色々と指定する MHconfig ファイル(conf/MH)
が必要になります。MH-plus project による configure スクリプトを利用すれば、
MHconfig ファイルが自動作成出来ますが、システムに依って、また、サイトの好み
などに応じて、options を色々と変更する必要があるかと思います。以下は
MHconfig ファイルに指定出来る options について、簡単に説明を加えたものです。
MH-JP 自体の make & インストール方法の詳細に関しては、INSTALL.JP などを
参照して下さい。

【参考文献】
  MH-6.8.4 の READ-ME ファイル


options の解説
**************

  ( )内が default 指定されるものです。
  < >内が選択可能なオプションです。

  [JP3] は、MH-plus project による拡張 option です。
  詳細は、FEATURES.JP、CHANGES.JP を御覧下さい。
  ※ 尚、JP-3.x 拡張の options を全て指定しなかったとしても、
  MH-6.8.4 オリジナルにはなりません(bug fix等も行っているからです:-))。


インストール関連(path他)
========================

・bin		(/usr/local)
	bin program のインストール先を指定します。(man sec.1 参照)

・etc		(/usr/local/lib/mh)
	MH の各コマンドプログラムから起動されるプログラムなどのインストール
	先を指定します。(man sec.8 参照)

・mail		(/usr/spool/mail)
	ユーザのメールスプールファイルの{ディレクトリ|ファイル}を指定します。
	絶対パスで指定すると、ユーザのメールスプールファイルは $USER として
	扱われます [default で /usr/spool/mail/$USER となります]。
	絶対パスで指定していない場合は、各ユーザの home dir 以下になります。
	例)「mail  /var/mail」… /var/mail/$USER
	   「mail  mailspool」… ~$USER/mailspool

・mandir	(/usr/man)
	マニュアルのインストール先(親ディレクトリ)を指定します。

・jmandir	(NULL)	[JP3]
	日本語マニュアルのインストール先(親ディレクトリ)を指定します。

・manuals	(standard) <local|new|old|standard|bsd44|gen|non>
	mandir で指定されたディレクトリ以下へのマニュアルのインストール形式
	を指定します。それぞれ、manl(local)・mann(new)・mano(old)・
	man?(standard)・man?/page.0(BSD44)・マニュアルファイルを作成するが
	インストールしない(gen)・マニュアル作成もインストールもしない(non)
	となります。
	さらに"/cat"をつけると nroff -man 形式のマニュアルを作成し、
	cat?/ にインストールします。
	[JP3] では、"/gzip"をつけると、マニュアルを圧縮して man?/ に
	インストールします。

	例) /usr/man/u_man/man? にインストールしたい
	   → standard として、mandir に /usr/man/u_man を指定します。
	例) /usr/contrib/man/cat? にインストールしたい
	   → standard/cat として、mandir に /usr/contrib/man を指定します。
	例) BSD44 convention でインストールしたい
	   → bsd44/cat と指定します。

・chown		(/etc/chown)
	chown(8) の場所。パスが通ってるなら、"chown" のみで OK です。
	SYS5 では多分「/bin/chown」でしょう。

・cp		(cp)
	インストール時、ファイルコピーのコマンドの指定です。
	(たとえば cp -p とするとか)

・ln		(ln)
	ソースツリーでファイルをリンクするコマンドの指定です。
	lndir の様にソースとコンパイルツリーを分けたい場合は、"ln -s" とか
	"cp" とかを指定します。

・remove	(mv -f)
	新規にインストールを行なう際に、既にインストールされている場合は、
	それをどうするかの指定です。単純に削除するのなら "rm -f" を指定すれ
	ばよいでしょう。


Compiler+loader関連
===================

・cc		(/bin/cc)
	C コンパイラの指定です。

・ccoptions	(-O)
	C コンパイラへのオプション指定です。
	default で "-O" が指定されていますが、指定された場合は指定内容のみ
	を C コンパイラへ渡しますので、"-O" 以外のオプションを指定して、
	かつ、"-O" も与えたい場合は、ちゃんと "-O" をも一緒に指定する必要が
	あります。(例)「ccoptions -m486 -pipe -O」)
	※ options: の -D オプションも参照して下さい。

・curses	(-lcurses -ltermlib)
	termcap(3) と curses(3) ライブラリをロードする、loader のオプション
	指定です。SYS5 システムでは、"-lcurses" だけでいい筈ですが、
	"-lcurses" と "-ltermlib" の両方が必要なものも報告されています。

・ldoptions	(NULL)
	ld(1) のオプションの指定です。
	通常、"-s" にしておくとよいでしょう。

・ldoptlibs	(NULL)
	ld(1) でリンクするライブラリの指定に用います。

	・"-ldbm" … dbm パッケージがあって、MMDF が動いてる時に指定します。
	・"-lndir"… default で new directory access mechanism を
                     ロードしないシステム(4.1BSD/SYS5など)で、
                     MH を作成する時に指定します。
		(libndir は、miscellany/libndir/ にソースが用意してあります)
	などを設定することが多いでしょう。
	※ ライブラリの検索パスも含めて、"ldoptlibs -L/local/lib -lxxx…"
	という形で設定することもあるでしょう。

・ldoptlibs_post	(NULL)	[JP3]
・options: NORESPOST		[JP3]
	NORESPOST を指定すると、uip/post のリンク時に ldoptlibs ではなく、
	ldoptlibs_post の方を見るようになります。
		
	ldoptlibs の方に -lresolv を加えている場合は、この
	オプションを指定し、 ldoptlibs_post に -lresolv を加えない
	ようにすると、post コマンドプログラムが resolver を引かない
	(引けない?)様になります。
	※ 単にリンク時に -lresolv を 付けない様にしているだけなの
	で、library自体が resolver 見に行ってしまう OS (HP-UX等)では
	意味がないのですが…(その方が多いかも…^^;;)

	DNS的に localhost を認識しなくなったりした場合を考えると、
	post で resolver を引かない方が安全です。resolverを入れ換え
	たりして、NIS や /etc/hosts も参照できるとかなら、大丈夫
	でしょうけど:-)。
	但し、mtstailor に変な server 名を書いてしまうと恐いです。
	普通は localhost だから大丈夫でしょうけど:-)

・lex		(lex -nt)
	他の version の lex を使う時に指定します。
	MH の 一部のソース(zotnet/tws/dtimep.lex など)は lex 形式で用意
	されており、これを、options の設定に合わせ、変更して C ソースを
	作成する、という様になっています。
	※ 尚、OSによって lex はタコだったりします(汗)ので、.lex から
	正しい .c が作成されないために、make 時にエラーを起こすことが
	あります。

・oldload	(off) <on|off|なにも指定しない>
	local symbols を消すために library object files をどの様に
	処理しようとするかを制御します。
	・"on"  …… ALTOS の loader など
	・指定なし… `-x -r'を扱えない loader など

・ranlib	(on)
	ranlib(1) が有るか無いかの指定です。
	SYS5 では、ranlib(1) がありませんので、"off" にします。
	(MH は代わりに lorder と tsort を使います)
	※ 尚、いくつかの SYS5 はこれだけでは不十分かもしれません。


Message Transport System
========================

  メッセージを転送するシステム(MTS/MTA)の選択です。

MMDF
----
  Multi-channel Memo Distribution Facility の略で、UCI が属している(いた?)
CSnet で用いられている(いた?) MTA です。詳細は
http://www.cs.ruu.nl/wais/html/na-dir/mail/mmdf-faq/.html や
http://www.irvine.com/%7Emmdf/mmdf.html などを参照して下さい。

Sendmail
--------
  4.2BSD で標準となったシステムで、現在も幅広く用いられている MTA です。

ZMailer
-------
  大量にメールを扱うマシンなどに特に適するように設計された、MTA の一つです。


・mts		(sendmail) <mmdf|mmdf2|sendmail|zmailer|mh>
	どの message transport system (MTA) を使用するかを指定します。
	それぞれ、mmdf…MMDF・mmdf2…MMDF-II・sendmail…SendMail・
	zmailer…ZMAILER・mh…MH(stand-alone)となります。

	socket経由の TCP/IP ネットワーキングをサポートしている UNIX
	システムでは、さらに、"/smtp" という指定を付け加えることが出来ます。
	これを指定すると、MH がメールの送信に際して、MMDF や sendmail など
	の MTS を直接起動するのでなく、SMTP (Simple Mail Transfer Protocol)
	を用いて、local SMTP server 経由でメールを投函する様になります。
	こうすることで、interface がしばしば改善されます。
	※ "/smtp" をつける場合は、<mh-etc-dir>/mtstailor ファイルの
	"servers:" (mh-tailor(8) に記載されてます)を正しく設定しているかを
	確認して下さい。

・mf		(off)
	MTS に UUCP を使用していないシステムでのメールフィルタリングの
	サポートです。このオプションは、MTS を "mmdf" に設定している場合か、
	もしくは "mh" (stand-alone)としている場合に限られます。

・sendmail	(/usr/lib/sendmail)	[JP3]
	sendmail(8) の場所。

UCI BBoards 機能
----------------
  BBoards (Bulletin Boards) とは、UCI 学内などで使用されている(いた?)
簡易電子掲示板システム(簡易 BBS みたいなもの)のことです。
詳細は… papers/bboards/ 以下をよく読んで下さい:-)。

・bboards	(off) <off|on|nntp|pop>
	"on" ならば、UCI BBoards 機能をサポートします。
	BBoards は、どんな MTS 下でも可能です。
          ・"off"  …bbc (BBoard の reading program)はインストールされません。
          ・"nntp" …NNTP 経由で Network News も読むことが出来るようにします。
          ・"pop"  …POP3 経由での BBoards をサポートします。
                   (但し、別途 "pop: on" の指定が必要です)

・bbdelivery	(off) <off|on>
	・"off" …BBoards 配送エージェントとライブラリファイルは
		インストールされません。
	・"on" かつ "bboards: " が "off" 以外
		…BBoards 配送エージェントとライブラリファイルは、
		bbhome ディレクトリ(下記参照)にインストールされます。

		リモートな BBoards を読むためには、bbc が POP3 もしくは
		NNTP server とやりとり出来るように設定しておかねばなりません。
		しかし、別のホストから bbhome のディレクトリ自体を NFS で
		マウントして読む、という場合は、"off" でよいでしょう。

・bbhome	(/usr/spool/bboards)
	BBoards ユーザのホームディレクトリの指定です。

・options: NNTP	[JP3]
	指定すると、bbc というコマンドプログラムがインストールされ、
	NNTP を喋るサーバーに接続し、NetNews を読む事が出来るようになります。

	オリジナルでは、MHconfig ファイルで、"bboards: pop" という
	形で BPOP が、"bboards: nntp" という形で BPOP と NNTP が、
	options	指定される様になっていました。
	それを "bboards: nntp" と指定しなくとも、"options NNTP" と
	指定出来るようにしました。
	(パスワードや crypt 関係からも独立させてあります:-))


Post Office Protocol
====================

POP (Post Office Protocol)
--------------------------
  RFC1939 で規定された、server となるマシンにあるユーザの maildrop
(メールスプール)を、他のマシン(client)からでも利用可能にする手法です。
USER コマンド(USER name)と PASS コマンド(PASS passwd)を対にして用いて
ユーザ認証を行ないます。

○POP と RFC の流れ:-)。
  POP1:  RFC918 (Obsolated)
  POP2:  RFC937
  POP3:  RFC1081 → RFC1225 → RFC1460 → RFC1725 → RFC1939

※ 参考) IMAP (Internet Message Access Protocol) のサポートについて
   comp.mail.mh に投稿される Bill Wohler 氏<wohler@newt.com> の MH FAQ に
   よると、「02.05 Does MH support IMAP?」に、1996/09/08 の John Romine 氏
   <jromine@ics.uci.edu> が、「現時点では IMAP は experimental, limited
   use だからサポートしてないが、いずれサポートすることになるだろう」旨の
   回答はあります。(IMAP 自体は既に RFC に規定されていますし…)

RPOP
----
  ユーザ認証を行なう PASS コマンドの代わりに用いるコマンドです(RPOP user)。
Berkeley UNIX にて "~/.rhosts" や "/etc/hosts.equiv" で使用されている方法と
同じ認証方法です。但しこれは RFC1225 で規定されましたが、RFC1460 で削除
されてしまいました。現在(RFC1939)は、USER/PASS ペアによるユーザ認証か、
APOP による認証(下記)を行なうかの2通り(のみ)が規定されています。

APOP
----
  password 文字列がそのまま送られるのは非常に危険ですので、いろいろと
認証方法を改善しようと試みられ、APOP をはじめとして KPOP などの方法
が考案されました。APOP は one-time-password を用いる認証方法で、pop server
側は、接続すると greeting として「<process-ID.clock@hostname>」という
文字列を返し、それに応じて client 側は「APOP name digest」
  name…… pop を使用しているユーザ
  digest… 上の「<…>」文字列に、予め server 側と client 側で共有している
           secret 文字列(/etc/pop.auth 等のファイルに指定)を付け加え、
	  「<…>xxxxxx」としたものに、MD5 アルゴリズム(MD5(1))を適用して
	  作成した文字列
という形式で、USER 認証を行なうものです。

DPOP
----
  ログインパスワード(/etc/passwd)とは別個に各自 POP 専用のパスワードを用意し、
この独自パスワードデータベースを使用する手法です。
"~pop/POP" (pop というユーザのホームディレクトリにある POP というファイル)を
参照します。これは全ての POP に対して有効です。

  "APOP" や "MPOP" については、「The Internet Message」(Marshall T.Rose著、
ISBN 0-13-092941-7)や support/pop/pop-more.txt も参照して下さい。


・pop		(off) <off|on>		[Original]
		(off) <off|on|client>	[JP3]
	POP サービスをサポートします。
	(詳細な説明は support/pop/pop.txt を参照して下さい)

	MH のコマンドプログラムで実際に pop を使用する場合には、
	例) % inc      …そのマシンのローカル maildrop からメールを取り込む
	    % inc -norpop -user hayashi -host popserver.hogehoge.jp
	               …popserver.hogehoge.jp に pop を飛ばし、hayashi と
	                 いう user で、rpop を使わずに user 認証モードに入り、
	                 inc を行なう
	…などと、オプションスイッチを与えて実行する必要がありますので、
	POP を使う/使わないに関わらず、このオプションを指定してコンパイル
	しても問題は…(あまり)ないと思います。

	[JP3] での client 指定は、クライアント部分だけ POP に対応して
	コンパイルし、POP サーバー部分はインストールしないという
	オプションです。

・popdir	(/usr/etc)
	POP daemon (popd) をインストールするディレクトリの指定です。
	~MH/support/pop に popd のソースが用意されています。

	尚、この popd でも問題なく使用できますが、qpop などのさらに改良
	された popd のパッケージも色々ありますので、それらを別途用意し、
	server として利用しても構いません。

・options
	C コンパイラへの "-D" オプションの指定です。「options XXX=YYY」と
	与えると、C コンパイラへ「-DXXX=YYY」と渡されます。

	POP 関連で指定出来るものには以下のものがあります。
	・APOP (='"/etc/pop.auth"')
		このオプションを指定すると、POP daemon が APOP コマンドを
		サポートします。引数のファイル名は、APOP 認証データベースの
		名前となります。
		APOP コマンドは MD5 メッセージダイジェストアルゴリズムを
		使用して、challenge-based 認証システムを規定します。

		これを指定すると、管理者が APOP 認証データベースを操作する
		popauth プログラムもインストールします。
		詳細は、support/pop/pop-more.txt などを参照して下さい。
		尚、"APOP" オプションを使用しても、ノーマルな POP の
		USER/PASS 認証も可能となります。

	・DPOP
		POP を利用するユーザは passwd(5) ファイルにわざわざエントリ
		されるのでなく、passwd ファイルとは別個の独自のデータベース
		に登録され、これを利用する認証方法です。

	・KPOP
		KERBEROS + POP をサポートします。
		READ-ME ファイルには「テスト中」と書かれていますが、
		6.8.3 時点で "MH now works with Kerberos as well."
		(by Bill Wohler. FAQ)とされていますですので、ちゃんと
		動くようになっているのでしょう :-)

		Kerberos は MIT のアテナプロジェクト(Project Athena)により
		開発されている、オープンネットワークシステムのための認証
		システムです。ただ、暗号プロトコルに対称鍵方式の DES
		(Data Encryption Standard) を用いていますが、DES が米国
		政府により、米国とカナダ以外の国への持ち出しが制限されて
		いますので、現在、それ以外の国で使用できるのは、KerberosIV
		から DES を除いた "Bones" と呼ばれるコードだけです。
		(実際に我々が使えるのは、これに DES に代わる暗号化コードを
		加えた "eBones" と呼ばれるものです)
		参照: http://www.ov.com/misc/krb-faq.html 等

		…ですので mh-plus としても、この機能に関しては一切テスト
		してません(出来ません…^^;;)。

	・MPOP
		指定すると、POP daemon が非標準の拡張コマンド、XTND SCAN
		コマンドをサポートします。
		また、インタラクティブな POP クライアントプログラムである
		popi をコンパイルしてインストールします。(man も)
		詳細は、support/pop/pop-more.txt などを参照して下さい。
		(※ このオプションは "bboards: pop" の指定も必要とします)

		XTND SCAN は、POP で使用できるコマンドを、非標準で拡張した
		もので、「XTND SCAN width [format]」として使用します。
		これにより、
############
    S: XTND SCAN 80 "%4(msg)%<(cur)+%| %>%<{replied}-%|...
    C: +OK SCAN
    S: LIST 1
    C: +OK 1 369 #   1  04/14 13:49JST To:mh-plus         now status<<
############
		などと、POP しつつ、メールの scan をも出来るようになります。

	・POP2
		MH で使用される POP は POP3 プロトコルですが、旧 POP で
		ある POP2 プロトコルをも使用できるようにするオプションです。
		POP daemon は、自動的に client が使用している POP プロトコル
		を判別しますので、POP を利用するなら、このオプションも設定
		しておいた方がよいでしょう。POPSERVICE オプションも参照して
		下さい。

	・POPSERVICE (='"pop"') <pop|pop3>
		MH の POP が使用する port 名の指定です。
		歴史的経緯によって、default で "pop" としています。

		1987年、MH POP プロトコル(POP version 3)は RFC1081 で発表
		され、そのポートを 110番と定義されました。これはそれまでの
		POP (version 1 と 2)が 109番であることと異なります。

		MH POP が 110番を使うためには、POPSERVICE='"pop3"' と指定
		して、かつ server/client のマシンのポート番号指定一覧である、
		/etc/services ファイルに "110/tcp" の行があるかどうかを
		確認しておいて下さい。

	・RPOP
		POP の一種である RPOP をサポートします。(詳細は上述)

	・SHADOW
		POP server (popd) が、/etc/passwd ファイルでなく、
		/etc/shadow ファイルを参照するようにするオプションです。
		パスワード文字列が /etc/passwd でなく、/etc/shadow に
		記述されているシステム(シャドーパスワード)では、
		これを設定して下さい。


共有ライブラリ関連
==================

・sharedlib	(off) <sun4|sys5|secure|off>			[Original]
		(off) <sun4|sys5|secure|fbsd|gnuelf|off>	[JP3]
	MH 関連のライブラリファイル libmh.a を shared library として作ります。
	"sun4"… SunOS 4.0 以降。("options SUN40" も必要)
	"sys5"… SYS5 R4 以降。("options SVR4" も必要)

	[JP3] ではさらに拡張オプションとして、
	"fbsd" …  FreeBSD 2.x、NetBSD など。(4.4BSD 系)
	"gnuelf"… FreeBSD 3.x、Linux など。(GNU 系)
	が指定可能となります。

・slflags	(-pic)
	MH を PIC (position independent code) で作成します。

・slibdir	(/usr/local/lib)
	MH の共有ライブラリのインストール先ディレクトリ指定です。


ライブラリのパスについて
------------------------
  いくつかの MH コマンドプログラムは set-user-id されますが、それらは
基本的に "trusted" な場所に置かれているライブラリやファイルなどを探したり
アクセスしたりするため「だけ」です。従って基本的に、/usr/lib や
/usr/local/lib 以外にライブラリをおくのはあまりお勧め出来ません。
  しかし、どうしても上記以外にライブラリを置くのであれば、slibdir で
指定する path を、コンパイラにもライブラリ検索パス指定で与えて下さい
(例: "ldoptions: -L/usr/mh/lib")。

  また、新しい shared object をシステムにインストールした時には、手動で
ldconfig(8) を行なう必要があるかも知れません。


システム依存のオプション
========================

  使用している OS に合った指定をするオプションです。

・mailgroup	(off)
	グループ名の指定です。指定すると、inc はこのグループ名に
	set-group-id されます。SYS5 では、これを "mail" に指定する必要が
	あるかも知れません。/usr/spool/mail や /usr/mail などのメールの
	spool ディレクトリが world-writeable でないなら、これを指定して
	下さい。

	※ slocal はこういうシステムではうまく動かないでしょう。
	set-group-id することは security hole を開けることになりかねません。
	もし、"mailgroup" を使用するなら、slocal (とその man page) を
	削除してしまう方が望ましい("READ-ME" ファイルによる)。

	[JP3] "mailgroup mail" を指定した場合、inc のグループを
	mail にして、chmod g+s にするだけです。
	slocal でメールを配送する際に、$MH/dir/maildelivery か
	$HOME/.maildelivery の配送設定ファイルを読み損なった等が起こると、
	デフォルトとしてその user の mail spool ファイルに、届いたメール
	を配送します。この際、mail spool ファイルが存在していないと、
	"user id/user's group id" で新規ファイルを作成してしまいます。
	一部の sysV では、mail spool ファイルは group=mail である必要が
	あるので、user の group id でファイルが作成されてしまうと、
	それ以後、rmail などでの通常の local 配送が出来なくなったりします。
	そこで、JP-3.x では "option SETMG" を指定すると、
	slocal の gid を修正する様にしています。
	※ security hole となるかも知れないことを御承知おき下さい。

・signal	(int) <int|void>
	signal(2) の型指定です (int or void)。
	(例えば SYS5 V3.0 以降や SunOS4.0 以降では "signal void")

・sprintf	(char *) <char *|int>
	sprintf の型指定です (char * or int)。
	(古い SYS5 などでは int)

・options
	C コンパイラへの "-D" オプションの指定です。「options XXX=YYY」と
	与えると、C コンパイラへ「-DXXX=YYY」と渡されます。
	システム依存関連で指定出来るものには、以下のものがあります。

	・ALTOS
		XENIX/v7 システムの場合に使用する。"options V7" も必要です。

	・ATTVIBUG
		MH から呼び出すエディタを vi としている時に、非0 status
		状態で終了した場合に、"What now?" というプロンプトを返す
		ようにする指定です。

		これは、一部の vi エディタなどでは、終了時にエディット中
		に起こった"エラー"数を status として返して終了するものが
		あり、そういうシステムで用います。
		但し、エディターの終了 status をテストするプログラムや、
		status が非0 では abort してしまうようなプログラム
		(MH のコマンドプログラムや /usr/etc/vipw なども含まれます)
		では、問題が起きてしまいます。

		AT&T version の vi とかは、こういう 非0 status で終るらしい
		ですが、オリジナルの vi を broken_vi などと rename し、
######
	#! /bin/sh
	/usr/ucb/broken_vi "$@"
	exit 0
######
		というスクリプトを用意すれば、問題を回避できるらしいです。
		(MH FAQ.Subject: 06.01 What to do with "Problems with edit
		- draft removed". by John Romine <jromine@ics.uci.edu>)

	・AUX
		AUX システムで使用する場合に指定します。

	・BIND
		TCP/IP sockets での UNIX システムの BIND code を
		走らせている場合に指定します。
		レゾルバが利用できる(named を走らせている、もしくは
		resolv.conf をちゃんと設定している)環境なら、設定して
		おけばよい筈です。

	・BSD41A
		4.1a Berkeley UNIX システムで使用する場合に指定します。

	・BSD42
		Berkeley UNIX システムもしくは 4.2BSD 以降で使用する
		場合に指定します。

	・BSD43
		4.3 Berkeley UNIX システムで使用する場合に指定します。
		尚、"options BSD42" も指定する必要があります。

		openlog(3) ("man 3 syslog" 参照) の引数が 2でなく 3で、かつ、
		write(1) コマンドが tty に set-group-id されているなら、
		このオプションを指定して下さい。(どちらかが違う場合は、
		指定する必要はないです)

	・BSD44
		Berkeley UNIX システムもしくは 4.4BSD 以降で使用する
		場合に指定します。
		"options BSD43" と "options BSD42" も指定する必要があります。

	・DBMPWD
		passwd ファイルを読み込む際のパフォーマンスの改善です。

		/etc/passwd ファイルを逐次読むのでなくて、getpwent(3) 関数
		で NIS などの dbm データベースを読んでいる場合に指定します。
		指定しない場合、passwd ファイル全体をメモリに読み込みます。
		しかし、NIS などで大きな passwd ファイルの場合、読み込む
		こと自体に時間がかかってしまい、dbm データベースを用いると
		かえって遅くなることがあります。そこでそういうシステムでは、
		DBMPWD を指定して下さい。

	・GCOS_HACK
		sendmail でメールを出す場合の From: 行などで、ユーザの
		フルネームを必要とする際、passwd ファイルのいわゆる GCOS
		フィールドを、他に設定がない場合の最終的な"切札"として
		利用するようにします。詳細は mh-profile(5) を参照して下さい。
		尚、gcos フィールドの "&" 文字がログイン名として解釈される
		ようなシステム(passwd(5) マニュアル参照)でも、利用可能です。

	・FCNTL
		カーネルレベルでのファイル locking に、fcntl() 関数を使用
		します。SYS5 システムなら、これを指定する必要があるでしょう。
		("options FLOCK" と "options LOCKF" を参照して下さい)

	・FILBUF_ADJ	[JP3]
		_filbuf() が FILE 構造体内部のバッファーのポインターを
		初期化しないような OS で指定します。

	・FLOCK
		カーネルレベルでのファイル locking に、flock() 関数を使用
		します。BSD42 システムで使用、かつ、maildrop が NFS されて
		いないなら、このオプションを指定して下さい。
		("options FCNTL" と "options LOCKF" を参照して下さい)

	・HESIOD
		HESIOD name server をサポートします。
		※ MIT の Project Athena が行なった、BIND 上での
		Sun の NIS に似た拡張(らしいです^^;;)。
		(bind-4.9.6-REL.tar.gz の doc/bog/files.lst より)
		参照) ftp://athena-dist.mit.edu/pub/ATHENA/hesiod.tar.Z

	・JAPAN	[JP3]
		様々なコマンドプログラムが日本語化対応になります。

	・LOCKF
		カーネルレベルでのファイル locking に、lockf() 関数を使用
		します。maildrops が NFS されているなら、指定して下さい。
		("options FLOCK" と "options FCNTL" を参照して下さい)

	・locname
		MH を使うホストのローカル名を強制的に指定します。
		例えば locname='"KOMADORI"'などとします。
		MH がシステムにこの情報を聞きにいったり、または mtstailor
		ファイルに予め書き込んでおく…という手法よりも、
		多分 "better" でしょう。
 
	・MORE		(='"/usr/ucb/more"')
		more(1) プログラムをフルパスで指定します。

	・NDIR
		このオプションを指定すると <ndir.h> を include します。
		(非 BSD 系の UNIX システム用)

	・NFS
		NFS C ライブラリの問題を hack します。
		コンパイルの際に、"ruserpass" が undefined symbol だという
		エラーが出たら、このオプションを指定して下さい。
		逆に、指定していて、"__ruserpass" が undefined symbol だと
		言われたら、このオプションを削除して下さい。
		("options NORUSERPASS" も参照して下さい)

	・NOIOCTLH
		<sys/ioctl.h> ファイルがないシステムでは指定して下さい。

	・NORUSERPASS
		ruserpass(3) 関数がないシステムでは指定して下さい。
		代わりに、MH 自身で用意している(sbr/ruserpass.c)ルーチンを
		使用します。

	・NTOHLSWAP
		TCP/IP ネットワークに接続されているシステムで、
		msh に、ntohl() を使うようにする指定です。
		ホームディレクトリを異なるアーキテクチャのマシン間で
		共有してる場合などでは、maildrop 形式の map ファイルの
		データがおかしくなる可能性がある(エンディアンの違いによる)
		ので、それをネットワークバイトオーダーに統一するための
		オプションです。

	・READLINE	[JP3]
		msh がヒストリやフォルダー名補完などを出来るようになります。
		但し、libreadline.a が必要です。

	・RENAME
		rename() 関数があるシステムでは指定して下さい。

	・SENDMAILBUG
		SMTP の reply code 451 (failure) を code 250 (OK) と(無理
		矢理:-))見倣す指定です。failure を示すつもりでないのに、
		code 451 を返してしまうことがある様な sendmail を使用して
		いることが"確実である時のみ"、使用して下さい。
		でないと、問題を起こしてしまうかも知れません。
		※ 現状の sendmail.8.x なら指定しなくて大丈夫だと思いますが…。

	・SETMG	[JP3]
		SYS5 システムでの slocal の不具合の修正を行ないます。
		実際にはファイルを open する際に gid を立ててますので、
		セキュリティホールになる危険性がありますから、詳しくは
		"mailgroup" を参照して下さい。

	・SOCKETS
		4.2, 4.3BSD UNIX とコンパチな TCP/IP ネットワークの socket
		interface が利用できることを指定します。
		BSD42 を指定しているのなら、わざわざ指定する必要はありません。
		SYS5 や HPUX の場合には有用でしょう。

	・SUN40
		SunOS 4.0 (以降?) のシステムで使用する場合に指定します。
		"options BSD42", "options BSD43" と "signal void" の指定も
		必要になるでしょう。

		もし、Domain Name Service が NIS 経由でしか使えないという、
		Sun 特有の"頭の痛い"状況下で使用するなら、"options BIND" と
		"ldoptions -lresolv" をも指定して下さい。

	・SYS5
		AT&T の SYSTEM 5 Release 3 (とそれ以降?)の UNIX システムで
		使用する場合に指定します。
		("mailgroup" も参照して下さい)

	・SYS5DIR
		"struct direct" でなくて、"struct dirent" を使うシステムで
		使用する場合に指定します。
		<direct.h> と mkdir, rmdir と getcwd を使用します。

	・SVR4
		AT&T の SYSTEM 5 Release 4 (とそれ以降?)の UNIX システムで
		使用する場合に指定します。"options SYS5" と
		"options SYS5DIR" も指定して下さい。
		("mailgroup" も参照して下さい)

	・TERMINFO
		terminfo があるシステムで使用する場合に指定します。
		※ terminfo があるのは SYS5 ですが、"SYS5" という
		オプションとは独立して "TERMINFO" というオプションが
		存在しています。SYS5 ではほとんど、両方を指定することに
		なるでしょうが。

	・TZNAME
		tzname 変数(tzset() 関数で定義します)で time zone 名を
		決定する場合に指定します。
		SYS5 システムで、かつ alpha-timezone を使う("options ATZ"
		を参照して下さい)場合に効きます。
		("options ZONEINFO" も参照して下さい)

	・UNISTD
		<unistd.h> ファイルがあるシステムで使用する場合に指定します。
		指定されない場合、LOCKF オプションを指定すると <sys/fcntl.h>
		ファイルを include します。

	・V7
		V7 UNIX システムで使用する場合に指定します。
		V7 では void という型定義が存在しないので、さらに、
		"options void=int" も指定しておく必要があります。

	・VSPRINTF
		vsprintf(3) 関数があるシステムで使用する場合に指定します。
		指定しない場合、_doprnt(3) が使われます。

	・WAITINT
		BSD42 ベースのシステムでは、wait(2) 関数を union wait 型
		pointer と定義していますが、"options BSD42" を指定している
		ものの、wait(2) 関数を int 型の ponter としているシステムで
		使用する場合に指定して下さい。

	・ZONEINFO
		time zone information (/etc/zoneinfo ファイル)もしくは
		/usr/lib/zoneinfo ファイル (SunOS) があるか、
		localtime(3) で返される struct tm に tm_gmtoff がある
		(/usr/include/time.h 参照) BSD43 ベースのシステムで
		使用する場合に指定します。
		これを指定することにより、発送されるメッセージの日付(時刻)
		は、TZ 環境変数に指定されている timezone に修正されます。
		("options TZNAME" も参照して下さい)


Site Preferences
================

  これらのオプションは、MH の default 挙動を変更したり、さらに拡張機能を
使用可能にします。MH を使用するシステムの設定や、そのサイトの好みに合った
オプションを追加して下さい。

・editor: prompter
	MH の default エディタの指定です。

・options:
	C コンパイラへの "-D" オプションの指定です。
	「options XXX」と与えると、C コンパイラへ「-DXXX」と渡され、
	引数を取る物は「options XXX=YYY」で、「-DXXX=YYY」と渡されます。
	Site Preferences 関連で指定出来るものには、以下のものがあります。

	・ATZ
		可能である限り、alpha-timezones を使用するようにします。
		alpha-timezone とは、timezone を "+0000" などでななく、
		代わりに "GMT" などと表記する方法です。

		さらに options の "JAPAN" を指定(詳細は下記)すると、
		timezone "JST" を正しく認識し、また mh-format の tzone
		関数や pretty 関数が "JST" を返すようになります。

		※ ATZ は非常に"曖昧"です。例えば "EST" は
		(American) Eastern Standard Time, (Australian) Eastern
		Standard Time, (Australian) Eastern Summer Time …など
		いろいろと解釈できてしまいます。なので、RFC1123 では、
############
There is a strong trend towards the use of numeric timezone
indicators, and implementations SHOULD use numeric timezones
instead of timezone names.  However, all implementations MUST
accept either notation.  If timezone names are used, they MUST
be exactly as defined in RFC-822.
############
		です。つまり "JST" という ATZ 表記は、RFC-1123 に反する
		ことになってしまいます。
		このオプションを使用することに関しては、くれぐれも
		*at your own risk* で行って下さい。

		尚、backward compatibility のために "options ATZ" の
		指定の有無に関わらず、"JST" を "+0900" の意味である…
		などと認識出来るようにはしてあります。

	・ATHENA
		repl コマンドプログラムの default を、"-cc all"から、
		"-nocc all" にします。
		※ 名称の「ATHENA」は、Project Athena でこういう設定が
		使われていた…とかなんでしょうかねぇ…? :-)

	・BANG
		@ アドレス表記(822-style addressing)よりも ! アドレス表記
		(UUCP-style addressing) を優先するようにする指定です。

	・BERK
		指定すると、822-style アドレス解析ルーチンのほとんどを使用
		しなくなります。これにより、822-style アドレス表記形式以外
		の形式も受け付けることが可能になります。

		元々はそういうつもりで作成されたオプションではなく、指定時
		に、メールを送信すると、sendmail に引き渡す spost を使う
		ことを前提としていたためです。
		(で、アドレス解析は sendmail 側でやってもらう、と)
		尚、指定すると、アドレス解析が出来ませんので、
		mh-format の mbox() や friendly() などの関数が、うまく
		働かなくなります。

		単に、822-style アドレス表記形式以外の形式も受け付けたいだけ
		なら、"options DUMB" を指定するほうがよいでしょう。

		※ "options BERK" と "options DUMB" の差については、
		sbr/addrsbr.c の冒頭コメント部に解説があります。

	・COMPAT
		MH.4 よりも古い MH との互換性を保つためのオプションです。
		通常は指定することはないでしょう。

	・CONTENT_LENGTH	[JP3]
		SVR4 などのローカルメーラーで使われている Content-Length:
		ヘッダーでメールの切れ目を表わす形式に対応します。

	・DUMB
		"official" form に address を書き直ししない設定をします。

	・FOLDPROT	(='"0711"')
		フォルダーの default での permission を指定(変更)します。
		例)「FOLDPROT='"0700"'」など。

	・ISI
		"repl -cc me" とした際、自分宛にもメールが送られますが、
		Alternate-Mailboxes (man mh-profile(5) 参照)に自分の
		アドレスを複数登録している場合、その最初のアドレスだけに
		"Cc: "されて、その他のアドレスには送らないようにする指定です。

	・LINK	(='"@"')
		dist コマンドプログラムと repl コマンドプログラムでは、
		ドラフトを編集中に、再配布/返信する元のメールが、
		あるファイル名で一時的にリンクされます。
		default では 「@」 です(編集中に "@" で参照出来ます)。
		このファイル名を変更したい時に指定します。
		例) LINK='"\\043"' …「#」になります。

	・MHE
		Brien Reid 氏の MHE interface (mh-e.el) を使う場合に指定
		します。
		尚、MH-6.8.3 のアーカイブ中の miscellany/mh-e/mh-e.el は
		version 3.8 で、少し古いですのでご注意を。
		mh-2.3 標準添付の MH-e は 4.1 で、
		ftp.ics.uci.edu/pub/mh/mh-e の MH-e は 5.0.2 です。

	・MHRC
		CShell の "~"(=home dir) 表記を MH に認識させる様にします。
		…らしいです。

	・MIME
		RFC1341 (MH.6.8.3 当時)に規定されているマルチメディアな
		メッセージ(Multipurpose Internet Mail Extensions; MIME)を、
		いくつかの MH コマンドプログラムがサポートする様になる
		指定です。詳細は、miscellany/multi-media/READ-ME などを
		参照して下さい。

		[JP3] JP-3.x ではさらに MIME [RFC2045〜2049] まわりの
		fix/拡張を加えており、また、MIME ヘッダの language拡張
		[RFC2231] にも対応しています。詳しくは doc-JP/{CHANGES,
		FAQ,FEATURES}.JP などを参照して下さい。
		("options MH_PLUS" と "options MIME_HEADERS" も参照して
		下さい)

	・MH_PLUS	[JP3]
		オリジナルの MH.6.8.4 に対する、様々な機能拡張が利用できる
		ようになります。
		・pgped/pgpshow コマンドプログラムを PGP/MIME 対応に
		・~/.mh_profile に「Trash-Folder: +trash」などと書いて
		  おくと rmm はメールをゴミ箱フォルダに移動
		・message/rf822 を mhn -list すると、Subject: も見る様に
		・mhn に -junet オプションと、-8bit オプションを追加
		…などです。

	・MIME_HEADERS	[JP3]
		mh-format の拡張を行ないます。
		・RFC2047 header のエンコード関数 hencode()、
		  デコード関数 hdecode() を利用できるようになる。
		  (いわゆる "MIMEエンコード"文字列の取り扱いが可能に)
		などの拡張を行ないます。


	・MSGID
		slocal で、何らかの理由により同じメッセージを重複して受取
		ることが起きた場合、メッセージの Message-ID を基に NDBM を
		用いてチェックする指定です。
		<ndbm.h> ライブラリを使用します。

		また、元の MH-6.8.4 では、ファイル locking に flock(2) 関数
		を使用しているので、"options BSD42" が必要です。
		(つまり、NFS 越しにはうまく働きません)

		[JP3] 尚、JP-3.x では lockf() や fcntl() でも使えるように
		変更しました…が、実行テストはしてません(^^;;)。

	・MSGPROT	(='"0644"')
		メッセージファイルの default での permission を指定(変更)
		します。例)「MSGPROT='"0600"'」

	・NOMHSEQ
		private sequences を default とします。
		これを定義しなければ、default で、sequence ファイル名は、
		".mh_sequences" となります。

	・OVERHEAD
		MH コマンドプログラムが profile や context を読む際に、
		ファイル記述子を経由で読むようにする指定です。
		詳細は mh-profile(5) を参照して下さい。
		尚、これを指定しておくと、MH コマンドプログラムから、他の
		MH コマンドプログラムを child process として呼び出す際にも、
		ファイル記述子は close されずそのままなので処理速度が向上
		する…らしいです:-)。
		
	・RPATHS
		inc した際に、メッセージの UNIX "From " 行を Return-Path: 
		に書き換える様にします。
		※ 「UNIX From」自体、色々議論のあるところ…ですが。
		また、通常、sendmail.cf では「H?P?Return-Path: <$g>」で
		あることが多いので、mailer の P オプションにも依存します。。

	・SBACKUP	(='","')
		バックアップファイル名の prefix 文字列を変更します。
		例) 「SBACKUP='"\\043"'」

	・TMA
		TTI trusted mail agent (TMA と呼ばれるメールエージェント)を
		サポートします。TMA に関する詳細は、papers/trusted/ 以下を
		参照して下さい。尚、TTI TMA 自体はパブリックドメインではない
		ですが、TTI TMA をサポートする MH はパブリックドメインです。

	・TTYD
		TTYD (Terminal access daemon)をサポートする指定です。
		これはもはやあまり使われてないので、お勧めしません(とのこと)。

	・UCI
		UCI 内での統一設定であった様です。
		1) "_" と "#" を抹消されたファイルの接頭詞として認識する
		2) UCI group-leadership mechanism のサポートをする
		3) $HOME/.signature の1行目を "From:" ヘッダ のフルネーム
		部分として使用します(但し、News システムでのこのファイルの
		利用方法と異なるので何か問題が起きるかも)

		※ UCI に所属してない場合は、このオプションは指定する
		必要はないはずです。:-)

	・UK
		scan コマンドプログラムでの日付の表示形式を default で
		「UK-style date」とします。
		UK-style date とは、例えば「7月24日」なら通常は「07/24」と
		表記されるものを、UK では「24/07」と表記することです。

	・WHATNOW
		refile, send, show, whom 各コマンドプログラムを起動する際、
		引数でドラフト名を与えなくとも、whatnow コマンドプログラム
		が、現在編集中のドラフト名を環境変数 mhdraft から取得します。

	・YEARMOD
		mh-format の %(year) 関数が、常に100以下の数値を返す様に
		する指定です。4桁の年数を扱えない様な mh-format(5) ファイル
		を使用している場合に指定して下さい。しかし、4桁を使える
		ものに変更するか、%(modulo 100) 関数を利用して 2桁の年数を
		得るように書き換えたようがよいでしょう。


Testing/debugging
=================

・debug: off
	MH の debug mode をサポートします。

・regtest: off <off|on>
	異なるコンパイルの MH での復帰(regression) テストをするとか、
	MH コマンドプログラム中のホスト名やコンパイルデータを必要と
	しないとかなら、"on" にして下さい。


mhconfig(.c) と MHconfig ファイル(conf/MH)の関係
************************************************

  手動で作成した MHconfig ファイル、もしくは MH-plus project による
configure スクリプトを利用して作成された MHconfig ファイルを、mhconfig(.c)
に食わせることで(configure スクリプトでは、内部から mhconfig を起動可能)、
conf/config.sed が出来、この sed ファイル経由で、conf/makefiles の下にある
Makefile テンプレートを、mhconfig が書き直しつつ 各dir へ Makefile として
コピーします。

※ MHconfig ファイルを通常の設定以外などにした場合、元のテンプレート自体を
書き直さないと、うまく効いてくれないこともあったりする「かも」知れません。

  あとは、MH ソースのトップディレクトリから、make します(前の object
ファイル等が残っている場合は、先に make clean してから)。make が成功したら、
make install でインストールして下さい。


/* MH-plus project <mh-plus@ml.chem.eng.himeji-tech.ac.jp> */
