Reviewed by: The FreeBSD Japanese Manual Project <man-jp@jp.FreeBSD.ORG> Submitted by: horikawa@jp.freebsd.org
304 lines
9.2 KiB
Groff
304 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
|
|
は
|
|
.An James da Silva Aq jds@cs.umd.edu
|
|
によって作成されました。
|
|
.sp 0
|
|
Copyright (c) 1994 University of Maryland. All Rights Reserved.
|