GNU Autoconf 2.13 for EMX

Current patchlevel: 3

Original author: Juan Jose Garcia Ripoll
Modified by Hung-Chi Chu

もくじ

は じ め に

ほとんどの Linux プログラムには、重要なシステム初期状態判定の任を負う configure スクリプトがついてきます。 現在、そういったスクリプトのほとんどは FSF 製の Autoconf というツールで作成されており、それは一、二個のファイル(configure.inaclocal.m4)を取り込み、マクロプロセッサ M4 とマクロファイルの内部セット(おもに acgeneral.m4acspecific.m4)を使って、configure という名の三つめのファイルを作ります。 ロングファイルネームの使えるファイルシステムの EMX で生成コードがうまく実行できるように、私たちはその内部マクロファイルに手を加えました。

2.12 からの変更点

Autoconf 実行に必要なもの

必要になる EMX プログラムの一覧です。 大部分は Leo か Hobbes にあります。 それから、ロングファイルネームが使える HPFS 上で作業をしなくてはなりません。

構築済みパッケージからのインストール

オフィシャルソースを使ったインストール

(autoconf のオフィシャルソースは、たとえば ftp://ftp.gnu.org/pub/gnu/autoconf/autoconf-2.13.tar.gz あたりだと思う)

autoconf を使う

傾向と対策 (Tips and Tricks)

ドライブ名と拡張子

Unix プログラムは、'C:' といったディスクユニット名を考慮していません。 私たちは Autoconf がドライブ名を理解するようにしていますが、これはあなたの(コンパイルしようする)プログラムがそうだという意味ではないのです。

構成処理で、Autoconf はプログラムコード中に絶対パス名を導入します。 config.h 作成時、もしくはコンパイル時の明示的定義のいずれかによって、典型的にこのことが起こります。 ユーザがこれらのパスを上書きするようなコードを書かねばならないでしょう。

そればかりでなく、aclocal.m4configure.in の中から手製の規則を探して、パス参照が絶対パスか否かチェックすべきでしょう。 典型的にはこの例のようになっています。

...
case "$LD" in
  /*)	ac_program_LD="$LD";;
  *)	#some other stuff
...
これを、以下のような互換性のあるモードに修正しなければなりません。
...
case "$LD" in
changequote(, )dnl
  /* | [a-zA-Z]:*) ac_program_LD="$LD";;
changequote([, ])dnl
  *)    #some other stuff
...
修正した規則はドライブ名を認識します。 それから、unix のもとではコロン ":" も有効なパス文字ではないのですが、影響はそれほど出ません。

コンパイル時のフラグ

プログラムコンパイル用の Autoconf のデフォルトフラグは、本リリースではこのようになっています。
	CC=gcc.exe
	MAKE=make
	CXX=gcc.exe
	CPP="gcc.exe -E"
	CFLAGS="-O2 -Zmt"
	CXXFLAGS="-O2 -Zmt"
	LDFLAGS="-Zmt -Zcrtdll -Zsysv-signals -Zbin-files"
	CONFIG_SHELL=sh.exe

フラグは置き換えることができます。 生成された configure ファイルを編集するか、このように

[CMD.EXE 内からは]
	set MAKE=x11make.exe
	set CFLAGS=-O2
	set CFLAGS=-O2
	set LDFLAGS=-Zexe -Zcrtdll -Zsysv-signals
[SH.EXE 内からは]
	export MAKE=x11make.exe
	export CFLAGS=-O2
	export CFLAGS=-O2
	export LDFLAGS="-Zexe -Zcrtdll -Zsysv-signals"
環境変数を変更、あるいは configure プログラムを走らせ、その終りに、config.status を編集して、必要に応じて変数を変更します。 (下を参照)

デフォルト設定は X11 プログラム向けのもので、他の種類のアプリケーションを移植する際にもそれほど害は出ないでしょう。 この設定を使おうとするなら、以下のふたつの規則を守ってください(XFree86/OS2 porting guide からの抜書き)。

config.status ファイル

このスクリプトはすべての設定パラメータを格納しており、 *.in ファイルを利用可能なものに変換するのがその役目です。
config.status の小技:

移植性のない規則

プログラムが、Autoconf の預かり知らぬシステム依存仕様の推察を迫られることがあります。 これは通常、aclocal.m4 に収められた規則のもとで実行されます。 これらの規則のいくつかは標準的なチェックを並べたものですが、他のいくつかは移植性のないものです(OS/2 では動かないという意味で)。

以下のセクションでは、規則を OS/2 互換に変更する方法を説明します。

ファイル名

本リリースでは、実行バイナリ名とライブラリ名に使われる変数を書き換えます。 ac_cv_exeext は、OS/2 では ".exe" であり、Unix では空です。 ac_cv_libpre は、OS/2 では空であり、Unix では "lib" です。 時には Unix 書式のファイル名を書き換え、変数をつけくわえることになるでしょう。

パス分離記号

パス分離記号は変数 PATH_IFS に格納され、OS/2 では ";"、それ以外では ":" です。 ${PATH_IFS} を Unix のパス分離記号 ":" に置き換える必要がある時は、configure.inaclocal.m4 を書き換えてください。

一例

以下に aclocal.m4 の変更法の一例を示します。

	[case "$LD" in
	  /*)
	  ac_cv_path_LD="$LD" # Let the user override the test with a path.
	  ;;
	  *)
	  IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS="${IFS}:"
	  for ac_dir in $PATH; do
	    test -z "$ac_dir" && ac_dir=.
	    if test -f "$ac_dir/ld"; then
		...
	    fi
	  done
	  IFS="$ac_save_ifs"
	  ;;
	esac])
修正版
	[case "$LD" in
        changequote(, )dnl
	  /*|[a-zA-Z]:*)
        changequote([, ])dnl
	  ac_cv_path_LD="$LD" # Let the user override the test with a path.
	  ;;
	  *)
	  IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS="${PATH_IFS}"
	  for ac_dir in $PATH; do
	    test -z "$ac_dir" && ac_dir=.
	    if test -f "$ac_dir/ld$ac_cv_exeext"; then
		...
	    fi
	  done
	  IFS="$ac_save_ifs"
          ;;
	esac])

バグレポートは

autoconf の出来に問題があると思う、もしくは何かうまく動かないところを見つけたなら、どうかにメールをください。

バグレポートの際は、以下の手順を踏んでください。

謝辞

We must thank Juan Jose Garcia Ripoll for hist GREATE port, Alexander Mai for his many comments on the project, and T.E.Dickey for pointing out some bugs.

念のため:


Maintainer: Hung-Chi Chu