The Japanese Manual team(man-jp@jp.FreeBSD.ORG) has translated and keeps maintaining them. Submitted by: Kazuo Horikawa <horikawa@isrd.hitachi.co.jp>
		
			
				
	
	
		
			302 lines
		
	
	
	
		
			9.2 KiB
		
	
	
	
		
			Groff
		
	
	
	
	
	
			
		
		
	
	
			302 lines
		
	
	
	
		
			9.2 KiB
		
	
	
	
		
			Groff
		
	
	
	
	
	
| .\"
 | |
| .\" Copyright (c) 1994 University of Maryland
 | |
| .\" All Rights Reserved.
 | |
| .\"
 | |
| .\" Permission to use, copy, modify, distribute, and sell this software and its
 | |
| .\" documentation for any purpose is hereby granted without fee, provided that
 | |
| .\" the above copyright notice appear in all copies and that both that
 | |
| .\" copyright notice and this permission notice appear in supporting
 | |
| .\" documentation, and that the name of U.M. not be used in advertising or
 | |
| .\" publicity pertaining to distribution of the software without specific,
 | |
| .\" written prior permission.  U.M. makes no representations about the
 | |
| .\" suitability of this software for any purpose.  It is provided "as is"
 | |
| .\" without express or implied warranty.
 | |
| .\"
 | |
| .\" U.M. DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL
 | |
| .\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL U.M.
 | |
| .\" BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
 | |
| .\" WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
 | |
| .\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR
 | |
| .\" IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
 | |
| .\"
 | |
| .\" Author: James da Silva, Systems Design and Analysis Group
 | |
| .\"			   Computer Science Department
 | |
| .\"			   University of Maryland at College Park
 | |
| .\"
 | |
| .Dd September 29, 1997
 | |
| .\" jpman %Id: crunchgen.1,v 1.3 1997/07/29 13:43:59 konuma Stab %
 | |
| .Dt CRUNCHGEN 1
 | |
| .Os BSD 4
 | |
| .Sh 名称
 | |
| .Nm \&crunchgen
 | |
| .Nd クランチバイナリ構築環境を作成する
 | |
| .Sh 書式
 | |
| .Nm \&crunchgen
 | |
| .Op Fl fql
 | |
| .Op Fl m Ar makefile-name
 | |
| .Op Fl c Ar c-file-name
 | |
| .Op Fl e Ar exec-file-name
 | |
| .Op Ar conf-file
 | |
| .Sh 解説
 | |
| 
 | |
| クランチバイナリ(crunched binary)は、
 | |
| たくさんの別々のプログラムをひとつにまとめて
 | |
| 単一の実行形式にしたプログラムです。
 | |
| クランチバイナリの main() 関数は、argv[0] の値をみて、
 | |
| どのコンポーネントプログラムが実行されるべきかを決定します。
 | |
| 複数プログラムをクランチしてひとつにまとめる主たる理由は、
 | |
| インストールフロッピあるいはシステム回復フロッピ上に、
 | |
| できるだけ多くのプログラムを収納するためです。
 | |
| 
 | |
| .Pp
 | |
| .Nm crunchgen
 | |
| は
 | |
| .Ar conf-file
 | |
| に記述されたクランチバイナリのための設定項目を読み込み、
 | |
| Makefile とそれに付随するトップレベルの C ソースファイルを生成します。
 | |
| これらはビルド時に各コンポーネントプログラムからクランチした実行形式を
 | |
| 作成します。
 | |
| オプションにより、
 | |
| .Nm
 | |
| は、各コンポーネントプログラムに対して、
 | |
| そのソースディレクトリの Makefile から
 | |
| プログラムを構成するオブジェクトファイル(.o)を決定することも試みます。
 | |
| この情報は実行のたびにキャッシュされます。
 | |
| .Nm
 | |
| は関連するもうひとつのプログラム
 | |
| .Nm crunchide
 | |
| を用い、全ての不要なシンボルを隠すことで
 | |
| コンポーネントプログラム間のリンク時のシンボル競合を防ぎます。
 | |
| 
 | |
| .Pp
 | |
| .Nm
 | |
| 実行後、 ``make -f <conf-name>.mk'' を実行することで
 | |
| クランチバイナリを作成できます。
 | |
| コンポーネントプログラムのオブジェクトファイルは既に作成されている
 | |
| 必要があります。
 | |
| 出力される makefile に含まれる ``objs'' ターゲットは、
 | |
| 各コンポーネントプログラムのソースディレクトリで make を実行し、
 | |
| ユーザのためにオブジェクトファイルを作成してくれます。
 | |
| しかしこのターゲットは自動的には実行されません。
 | |
| リリースエンジニアリング環境では、オブジェクトを他のディレクトリで
 | |
| 修正するのは一般に望ましくないからです。
 | |
| 
 | |
| .Pp
 | |
| オプションは以下の通りです:
 | |
| .Bl -tag -width indent
 | |
| .It Fl c Ar c-file-name
 | |
| 出力する C のファイル名を
 | |
| .Ar c-file-name
 | |
| とします。デフォルトの名前は ``<conf-name>.c'' です。
 | |
| .It Fl e Ar exec-file-name
 | |
| クランチバイナリの実行形式ファイルの名前を
 | |
| .Ar exec-file-name
 | |
| とします。デフォルトの名前は ``<conf-name>'' です。
 | |
| .It Fl f
 | |
| キャッシュを消去し、キャッシュされていたパラメータを強制的に再計算します。
 | |
| .It Fl l
 | |
| 名前の表示。このバイナリが対応する名前を一覧表示します。
 | |
| .It Fl m Ar makefile-name
 | |
| 出力する Makefile の名前を
 | |
| .Ar makefile-name
 | |
| とします。デフォルトの名前は ``<conf-name>.mk'' です。
 | |
| .It Fl q
 | |
| 静粛処理モード。状況報告メッセージを抑制します。
 | |
| .El
 | |
| .Sh CRUNCHGEN コンフィギュレーションファイルコマンド
 | |
| 
 | |
| .Nm
 | |
| は、クランチバイナリのコンポーネントについて記述した設定項目を
 | |
| .Ar conf-file
 | |
| から読み取ります。
 | |
| 最も単純な場合は、各コンポーネントプログラム名を、
 | |
| そのソースファイルが置かれたトップレベルのディレクトリ名とともに、
 | |
| 単に列挙するだけです。
 | |
| 次に
 | |
| .Nm
 | |
| は(ソースの makefile によって)オブジェクトファイルリストと
 | |
| その位置を求め、それをキャッシュします。
 | |
| もっと特殊な場合には、
 | |
| .Nm
 | |
| が必要とするあらゆるパラメータを、ユーザが手動で指定することができます。
 | |
| .Pp
 | |
| .Ar conf-file
 | |
| のコマンドは以下の通りです:
 | |
| .Bl -tag -width indent
 | |
| .It Nm srcdirs Ar dirname ...
 | |
| コンポーネントプログラムのソースディレクトリがあるソースツリーのリスト。
 | |
| これらのディレクトリは BSD の ``<source-dir>/<progname>/'' 方式を
 | |
| 用いて検索されます。
 | |
| .Nm srcdirs
 | |
| 行は複数あってもよく、ディレクトリは記述された順に検索されます。
 | |
| .It Nm progs Ar progname ...
 | |
| クランチバイナリを構成するプログラムのリスト。
 | |
| .Nm progs
 | |
| 行は複数あっても構いません。
 | |
| .It Nm libs Ar libspec ...
 | |
| クランチバイナリのリンク時に含めるライブラリ指定のリスト。
 | |
| .Nm libs
 | |
| 行は複数あっても構いません。
 | |
| .It Nm ln Ar progname linkname
 | |
| argv[0] に
 | |
| .Ar linkname
 | |
| が現われたときはいつも
 | |
| .Ar progname
 | |
| を起動するよう、クランチバイナリに要請します。
 | |
| これにより、起動時の名前によって振る舞いを変えるようなプログラムも
 | |
| 正しく動作するようにできます。
 | |
| .El
 | |
| 
 | |
| 特別な状況、例えば
 | |
| ソースファイルがないとか、
 | |
| 従来の Makefile によらないビルドを行うといった
 | |
| 場合に対応するため、以下に述べる
 | |
| .Nm special
 | |
| コマンドを用いてコンポーネントプログラムの
 | |
| .Nm
 | |
| パラメータを指定できます。
 | |
| .Bl -tag -width indent
 | |
| .It Nm special Ar progname Nm srcdir Ar pathname
 | |
| プログラム
 | |
| .Ar progname
 | |
| のソースディレクトリを指定します。
 | |
| 通常は指定されたディレクトリ
 | |
| .Nm srcdirs
 | |
| 内の
 | |
| .Ar progname
 | |
| ディレクトリを検索して決定されます。
 | |
| .It Nm special Ar progname Nm objdir Ar pathname
 | |
| プログラム
 | |
| .Ar progname
 | |
| のオブジェクトディレクトリを指定します。
 | |
| 通常はディレクトリ
 | |
| .Ar srcdir
 | |
| 内の
 | |
| .Dq Pa obj
 | |
| という名前のディレクトリを探し、もし見つからなければ、ディレクトリ
 | |
| .Ar srcdir
 | |
| 自身が
 | |
| .Ar objdir
 | |
| となります。
 | |
| .It Nm special Ar progname Nm objs Ar object-file-name ...
 | |
| プログラム
 | |
| .Ar progname
 | |
| のオブジェクトファイルのリストを指定します。
 | |
| 通常は、
 | |
| .Dq Nm srcdir / Pa Makefile 
 | |
| をインクルードし $(OBJS) の値を出力するような一時 makefile を構築する
 | |
| ことで決定されます。
 | |
| .It Nm special Ar progname Nm objpaths Ar full-pathname-to-object-file ...
 | |
| プログラム
 | |
| .Ar progname
 | |
| のオブジェクトファイルのパス名を指定します。
 | |
| 通常は
 | |
| .Nm objs
 | |
| リスト中の各ファイルのパス名の先頭に
 | |
| .Nm objdir
 | |
| を付加することで決定されます。
 | |
| .It Nm special Ar progname Nm keep Ar symbol-name ...
 | |
| プログラム
 | |
| .Ar progname
 | |
| の保持リストに、指定するシンボルのリストを追加します。
 | |
| 各シンボルの前にはアンダスコアが付加され、
 | |
| .Xr crunchide 1
 | |
| フェーズでは
 | |
| .Fl k
 | |
| オプションの引数となります
 | |
| このオプションはシンボルが衝突するときの最後の拠所ですが、
 | |
| シンボル解決の唯一の方法である場合もあります。
 | |
| .El
 | |
| 
 | |
| .Pp
 | |
| 実際に
 | |
| .Nm
 | |
| が必要とするのは
 | |
| .Nm objpaths
 | |
| だけですが、
 | |
| これは
 | |
| .Nm objdir
 | |
| と
 | |
| .Nm objs
 | |
| から求められ、これらも
 | |
| .Nm srcdir
 | |
| から求められます。
 | |
| ですから、もし可能なら、初期のパラメータを指定し、あとは
 | |
| .Nm
 | |
| に求めさせたほうが便利な場合もあります。
 | |
| 
 | |
| .Pp
 | |
| .Nm
 | |
| が生成する makefile はオプションのターゲット
 | |
| .Ar objs
 | |
| を含みます。
 | |
| これは、各コンポーネントプログラムのソースディレクトリ内で make を実行して
 | |
| オブジェクトファイルを作成するターゲットです。
 | |
| これがうまく動作するためには
 | |
| .Nm srcdir
 | |
| および
 | |
| .Nm objs
 | |
| パラメータが正しいものでなくてはなりません。
 | |
| もしこれらの値があるプログラムに対して不正なものであると、
 | |
| .Ar objs
 | |
| ターゲットではそのプログラムはスキップされてしまいます。
 | |
| .Sh 実行例
 | |
| .Nm
 | |
| の入力コンフィギュレーションファイルの例として
 | |
| .Dq Pa kcopy.conf
 | |
| の内容を示します。
 | |
| .Pp
 | |
| .nf
 | |
| 	srcdirs /usr/src/bin /usr/src/sbin
 | |
| 
 | |
| 	progs test cp echo sh fsck halt init mount umount myinstall
 | |
| 	ln test [       # test は [ として起動することもできる
 | |
| 	ln sh -sh       # init は argv[0] を "-sh" としてシェルを起動する
 | |
| 
 | |
| 	special myprog objpaths /homes/leroy/src/myinstall.o # ソースなし
 | |
| 
 | |
| 	libs -lutil -lcrypt
 | |
| .fi
 | |
| .Pp
 | |
| このコンフィギュレーションファイルでは、
 | |
| いくつかの基本的なシステムユーティリティと
 | |
| 自家製のインストールプログラム ``myinstall'' から成る
 | |
| 小さなクランチバイナリを記述しています。
 | |
| ソースディレクトリは全く指定されていませんが、
 | |
| オブジェクトファイルは
 | |
| .Nm special
 | |
| 行で直接指定されています。
 | |
| .Pp
 | |
| クランチバイナリ ``kcopy'' は以下のようにして作成できます:
 | |
| .Pp
 | |
| .nf
 | |
| 	% crunchgen -m Makefile kcopy.conf    # Makefile と kcopy.c 作成
 | |
| 	% make objs             # コンポーネントプログラムの *.o 作成
 | |
| 	% make                  # クランチバイナリ kcopy の作成
 | |
| 	% kcopy sh              # シェル sh を起動できるかどうか試すと..
 | |
| 	$                       # うまくいった!
 | |
| .fi
 | |
| .Pp
 | |
| ここまでくれば、バイナリ ``kcopy'' をインストールフロッピにコピーし、
 | |
| 各コンポーネントプログラムの名前でハードリンクを設けることができます。
 | |
| .Sh 関連項目
 | |
| .Xr crunchide 1
 | |
| .Sh 警告
 | |
| .Nm crunch
 | |
| はクランチバイナリ中の各コンポーネントプログラム間のリンク競合を
 | |
| 除去するのに気を配っていますが、依然としてリンクされたライブラリ間で
 | |
| 競合が発生する可能性が残っています。
 | |
| ライブラリ順の入れ換えが必要な場合もありますし、
 | |
| 二つのライブラリ間にどうしても解消できない競合が発生し、
 | |
| 結局ひとつにまとめられない場合も稀にあります。
 | |
| .Pp
 | |
| BSD のバージョンによっては、デフォルトのビルド環境では
 | |
| 単一ソースファイルのプログラムに対して
 | |
| 中間オブジェクトファイルを作成しないことがあります。
 | |
| その場合は ``make objs'' ターゲットを用いてオブジェクトファイルを
 | |
| 作成するか、他の調整を施す必要があります。
 | |
| .Sh 作者
 | |
| .Nm crunch
 | |
| は James da Silva <jds@cs.umd.edu> によって作成されました。
 | |
| .sp 0
 | |
| Copyright (c) 1994 University of Maryland.  All Rights Reserved.
 |