総合手引 | セクション 1 | English | オプション |
crunchgen ユーティリティは conf-file に記述されたクランチバイナリのための設定項目を読み込み、 Makefile とそれに付随するトップレベルの C ソースファイルを生成します。 これらはビルド時に各コンポーネントプログラムからクランチした実行形式を 作成します。 オプションにより、 crunchgen は、各コンポーネントプログラムに対して、 そのソースディレクトリの Makefile から プログラムを構成するオブジェクトファイル (.o) を決定することも試みます。 この情報は実行のたびにキャッシュされます。 crunchgen ユーティリティは関連するもうひとつのプログラム crunchide(1) を用い、全ての不要なシンボルを隠すことで コンポーネントプログラム間のリンク時のシンボル競合を防ぎます。
crunchgen ユーティリティは特殊な要件をパッケージの Makefile に課しており、このことが原因で Makefile が非 BSD ソース用に使えなくなっています。 特に、 Makefile はターゲット depend を含むことが必要であり、全オブジェクトファイルを変数 OBJS で定義することが必要です。 場合によっては、偽の Makefile を使えるでしょう。 crunchgen は、ソースディレクトリ foo 中の Makefile を見る前に、現在のディレクトリ中の Makefile.foo を見ます。
crunchgen 実行後、 "make -f <conf-name>.mk" を実行することで クランチバイナリを作成できます。 コンポーネントプログラムのオブジェクトファイルは既に作成されている 必要があります。 出力される makefile に含まれる objs ターゲットは、 各コンポーネントプログラムのソースディレクトリで make(1) を実行し、ユーザのためにオブジェクトファイルを作成してくれます。 しかしこのターゲットは自動的には実行されません。 リリースエンジニアリング環境では、オブジェクトを他のディレクトリで 修正するのは一般に望ましくないからです。
オプションは以下の通りです:
| |
出力する C のファイル名を c-file-name とします。デフォルトの名前は <conf-name>.c です。 | |
| |
クランチバイナリの実行形式ファイルの名前を exec-file-name とします。デフォルトの名前は <conf-name> です。 | |
| |
キャッシュを消去し、キャッシュされていたパラメータを強制的に再計算します。 | |
| |
名前の表示。このバイナリが対応する名前を一覧表示します。 | |
| |
crunchgen が生成する Makefile の先頭に含めるファイルの名前を設定します。 make の変数を定義するのに便利です。 これには、 make(1) の動作に影響を与え、環境変数を介してでは面倒である、 RELEASE_CRUNCH が含まれます。 | |
| |
出力する Makefile の名前を makefile-name とします。デフォルトの名前は <conf-name>.mk です。 | |
| |
各プログラムの make ターゲットに対し、 "make obj" ルールを追加します。 | |
| |
objdir を計算するときに、 srcdir の前に付けるパス名を設定します。 このオプションが存在しない場合、使用するプレフィックスは MAKEOBJDIRPREFIX 環境変数の内容か、または /usr/obj です。 | |
| |
静粛処理モード。状況報告メッセージを抑制します。 | |
conf-file のコマンドは以下の通りです:
srcdirs dirname ... | |
コンポーネントプログラムのソースディレクトリがあるソースツリーのリスト。 これらのディレクトリは BSD の " <source-dir>/<progname>/" 方式を用いて検索されます。 srcdirs 行は複数あってもよく、ディレクトリは記述された順に検索されます。 | |
progs progname ... | |
クランチバイナリを構成するプログラムのリスト。 progs 行は複数あっても構いません。 | |
libs libspec ... | |
クランチバイナリのリンク時に含めるライブラリ指定のリスト。 libs 行は複数あっても構いません。 | |
buildopts buildopts ... | |
各 make ターゲットに追加される、ビルドオプションのリスト。 | |
ln | argv[0] に linkname が現われたときはいつも progname を起動するよう、クランチバイナリに要請します。 これにより、起動時の名前によって振る舞いを変えるようなプログラムも 正しく動作するようにできます。 |
特別な状況、例えば ソースファイルがないとか、 従来の Makefile によらないビルドを行うといった場合に対応するため、以下に述べる special コマンドを用いてコンポーネントプログラムの crunchgen パラメータを指定できます。
special progname srcdir pathname | |
プログラム progname のソースディレクトリを指定します。 通常は指定されたディレクトリ srcdirs 内の progname ディレクトリを検索して決定されます。 | |
special progname objdir pathname | |
プログラム
progname
の
obj
ディレクトリを指定します。
通常、
obj
ディレクトリは、
ソースディレクトリ名の前に次のいずれかのコンポーネントを付けたものとして
計算され、コンポーネントには次の順番で優先度があります:
コマンドラインにおける
| |
special progname buildopts buildopts | |
ビルドオプション集合を定義します。 progname 処理時には、 buildopts で指定されたものに加え、これらが追加されて make(1) のターゲットが作成されます。 | |
special progname objs object-file-name ... | |
プログラム progname のオブジェクトファイルのリストを指定します。 通常は、 " srcdir/ Makefile" をインクルードし $(OBJS) の値を出力するような一時 makefile を構築する ことで決定されます。 | |
special progname objpaths full-pathname-to-object-file ... | |
プログラム progname のオブジェクトファイルのパス名を指定します。 通常は objs リスト中の各ファイルのパス名の先頭に objdir を付加することで決定されます。 | |
special progname objvar variable_name | |
プログラム progname 用のオブジェクトファイルリストを保持する make(1) 変数名を設定します。 これは通常 OBJS ですが、 Makefile によっては別の規約を使用したいかもしれませんし、 変数名の前にプログラム名を付けたいかもしれません。例えば SSHD_OBJS など。 | |
special progname lib library-name ... | |
progname .lo を生成するためにオブジェクトファイルとリンクするライブラリを指定します。 標準ライブラリに含まれるルーチンを再定義するライブラリを使用するときに 有用です。 | |
special progname keep symbol-name ... | |
プログラム
progname
の保持リストに、指定するシンボルのリストを追加します。
各シンボルの前にはアンダスコア
(‘_’)
が付加され、
crunchide(1)
フェーズでは
| |
special progname ident identifier | |
progname に対する Makefile/ C 識別子を設定します。 これは通常、 progname を元に、 ‘-’ を ‘_’ にマップし、他のすべての非識別子文字を無視することにより、生成されます。 この結果、 "foo.bar" と "foobar" は、同一の識別子にマップされてしまいます。 | |
実際に crunchgen が必要とするのは objpaths だけですが、 これは objdir と objs から求められ、これらも srcdir から求められます。 ですから、もし可能なら、初期のパラメータを指定し、あとは crunchgen に求めさせたほうが便利な場合もあります。
crunchgen が生成する makefile はオプションのターゲット objs を含みます。 これは、各コンポーネントプログラムのソースディレクトリ内で make(1) を実行してオブジェクトファイルを作成するターゲットです。 これがうまく動作するためには srcdir および objs パラメータが正しいものでなくてはなりません。 もしこれらの値があるプログラムに対して不正なものであると、 objs ターゲットではそのプログラムはスキップされてしまいます。
srcdirs /usr/src/bin /usr/src/sbinprogs test cp echo sh fsck halt init mount umount myinstall progs anotherprog ln test [ # test は [ として起動することもできる ln sh -sh # init は argv[0] を "-sh" としてシェルを起動する
special myprog objpaths /homes/leroy/src/myinstall.o # ソースなし
special anotherprog -DNO_FOO WITHOUT_BAR=YES
libs -lutil -lcrypt
このコンフィギュレーションファイルでは、 いくつかの基本的なシステムユーティリティと 自家製のインストールプログラム " myinstall" から成る 小さなクランチバイナリを記述しています。 ソースディレクトリは全く指定されていませんが、 オブジェクトファイルは special 行で直接指定されています。
さらに、 " anotherprog" 構築時には、引数
-DNO_FOO WITHOUT_BAR=YES
がすべてのビルドターゲットに対して追加されます。
クランチバイナリ " kcopy" は以下のようにして作成できます:
% crunchgen -m Makefile kcopy.conf # Makefile と kcopy.c 作成 % make objs # コンポーネントプログラムの *.o 作成 % make # クランチバイナリ kcopy の作成 % kcopy sh # シェル sh を起動できるかどうか試すと.. $ # うまくいった!
ここまでくれば、バイナリ " kcopy" をインストールフロッピにコピーし、 各コンポーネントプログラムの名前でハードリンクを設けることができます。
BSD のバージョンによっては、デフォルトのビルド環境では 単一ソースファイルのプログラムに対して 中間オブジェクトファイルを作成しないことがあります。 その場合は "make objs" ターゲットを用いてオブジェクトファイルを 作成するか、他の調整を施す必要があります。
Copyright (c) 1994 University of Maryland. All Rights Reserved.
CRUNCHGEN (1) | November 16, 2000 |
総合手引 | セクション 1 | English | オプション |
このマニュアルページサービスについてのご意見は Ben Bullock にお知らせください。 Privacy policy.
“ | F U cn rd dis U mst uz Unix. | ” |