Original author: Juan Jose Garcia Ripoll
Modified by Hung-Chi Chu
SET AC_PREFIX=e:/unixスラッシュに御用心。 "\" ではなく、必ず "/" を使うこと。
set AWK=e:/unix/bin/gawk.exeとなるわけです。
[CMD.EXE 内から] sh -c "autoconf --help" [SH.EXE 内から] autoconf --help
rm config.cacheconfigure の再構築、あるいはシステムの変更(新プログラムインストール、新規パス、その他)を configure が調査するので、それらの変更があるたびにキャッシュファイルが消去されるはずです。
autoconfaclocal.m4 と configure.in が configure と同じディレクトリに入っていないようなソフトウェアでは、コマンドが少しややこしくなります。 それらがサブディレクトリ ac にあるとすれば、コマンドをこのように用います。
autoconf -l ac ac/configure.in > configure
別の方法として、configure を使う前に環境変数を export し、configure が行なうチェックをオーバライドできます。
これについての詳細は傾向と対策 (Tips and Tricks) を見てください。
./configure --helpで利用可能なオプション(作成するプログラム、拡張子、排除/組込チェック)がわかり、他方
./configure --prefix=d:/usrでは、デフォルトオプションを用い、/usr をルートディレクトリとして構成を行ないます。
構成処理で、Autoconf はプログラムコード中に絶対パス名を導入します。 config.h 作成時、もしくはコンパイル時の明示的定義のいずれかによって、典型的にこのことが起こります。 ユーザがこれらのパスを上書きするようなコードを書かねばならないでしょう。
そればかりでなく、aclocal.m4 や configure.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 のもとではコロン ":" も有効なパス文字ではないのですが、影響はそれほど出ません。
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 からの抜書き)。
extern int errno;Autoconf 対応のコードでこの不具合は出ないはずですが、もし出るなら、この文を
#ifdef __EMX__
で囲み、プログラムかライブラリが #include <errno.h>
しているか確認してください。
これは暫定措置であり、この移植性のない事態(OS/2 だけの話をしているのではないですよ)をアプリケーション作者に報告し、<errno.h>
が適切なルールのもとで存在しているか確認してもらうべきです。
O_BINARY, O_TEXT, "t", "b"
) 明示的に埋め込む必要があるでしょう。
そうする場合、#ifdef __EMX__
を使って、選択的にパッチを埋め込んでください。
[CMD.EXE 内から] sh config.status [SH.EXE 内から] config.statusで、すべての *.in ファイルを処理し直します。 makefile や config.h 内の変更を破棄したい時に使えます。
s%@CFLAGS@%-O2 -Zmt%g s%@CXXFLAGS@%-O2 -Zmt%g s%@LDFLAGS@%-Zmt -Zcrtdll -Zsysv-signals -Zbinfiles%gこれを、以下のように変更します。 (上を参照)
s%@CFLAGS@%-O2%g s%@CXXFLAGS@%-O2%g s%@LDFLAGS@%-Zexe -Zcrtdll -Zsysv-signals%g
以下のセクションでは、規則を OS/2 互換に変更する方法を説明します。
以下に 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])
バグレポートの際は、以下の手順を踏んでください。
[CMD.EXE や SH.EXE から] sh -x d:/usr/local/bin/autoconf 2>&1 1>error0.logと実行し、error0.log ファイルを私にメールしてください。 autoconf のフルパス名(各自のインストール先にあわせて直すこと)、それから -c オプションがつかない点にご注意。
autoconf --debugとやって、動かない configure スクリプトを再構築します。
configure 2>&1 error.logそして error.log, config.log, config.status, config.cache ファイルを私にメールしてください。 *.in や *.m4 ファイルも送ってかまいません。 できれば ZIP アーカイバで固めてください。
念のため: