2011-01-03 18 views
1

ffmpegの./configureスクリプトで問題が発生しています。私のLinux環境ではbusyboxが使用されています。これは限られた一連のLinuxコマンドしか許可していません。 ffmpeg ./configureスクリプトで使用されている1つのコマンドはmktemp -uです。ここで問題となるのは、Linux用のビジーボックスは-uスイッチが有効であると認識しないため、それに不満を持ち、configureプロセスを中断させます。設定スクリプトの問題

これはmktemp -uコマンドを使用しています./configure内の関連するコードです:

if ! check_cmd type mktemp; then 
    # simple replacement for missing mktemp 
    # NOT SAFE FOR GENERAL USE 
    mktemp(){ 
     echo "${2%XXX*}.${HOSTNAME}.${UID}.$$" 
    } 
fi 

tmpfile(){ 
    tmp=$(mktemp -u "${TMPDIR}/ffconf.XXXXXXXX")$2 && 
     (set -C; exec > $tmp) 2>/dev/null || 
     die "Unable to create temporary file in $TMPDIR." 
    append TMPFILES $tmp 
    eval $1=$tmp 
} 

私はすべてのbashのスクリプトとよくないよ、そう誰1は、私はこれを強制することができます方法についてのアイデアを持っていた場合、私は思っていましたmktemp -uを使用しないようにスクリプトを設定し、の '置き換え'代替オプションを使用してください。これは、上記のスニペットのとおりです。ありがとう。

btw ...単に削除すると-uスイッチが動作しません。それを-t、または-pに置き換えることもできません。私はmktempが完全にバイパスされなければならないと信じています。

if ! check_cmd type mktemp; then 
    # simple replacement for missing mktemp 
    # NOT SAFE FOR GENERAL USE 
    mktemp(){ 
     echo "${2%XXX*}.${HOSTNAME}.${UID}.$$" 
    } 
fi 

これに:この

+1

なぜそれをビジーボックスでコンパイルしたいのですか? FFMPEGにはn個の依存関係があります。 n個のライブラリにコンパイルを依頼します。たとえそれがうまく構成されていても、コンパイル中に泣くでしょう。私の提案は、プリコンパイルされたバージョンを使用するか、ターゲット要件に従ってクロスコンパイルすることです。 – Alam

+0

Busyboxは私が開発しようとしているモバイルプラットフォーム(webos)で利用できるものです。私はそれを私のMacでクロスコンパイルしようとしましたが、gccが実行可能ファイルを作成できないと言って失敗しました。私は古いバージョンのプリコンパイルされたバイナリを見つけることができません。私は数日間グーグルで行ってきました。あなたが言ったように、それは最終的にmake中に失敗したので、どんな提案もありません。 – cube

答えて

2

変更

#if ! check_cmd type mktemp; then 
if true; then # Force the use of mktemp() 
    # simple replacement for missing mktemp 
    # NOT SAFE FOR GENERAL USE 
    mktemp(){ 
     echo "${2%XXX*}.${HOSTNAME}.${UID}.$$" 
    } 
fi 

何残っていることがちょうどmktemp()定義されるようにあなたは、代わりに全体iffi構造を削除することもできますが、私はむしろ、それらを残したいです何が必要なのか、また戻ってくる必要があるのか​​を覚えておく方法です。

+0

あなたの解決策は、私がmktempのジレンマに合格したことをもたらしました。ありがとうございました。 – cube

1

私はノークロバーモードを設定し、存在しないと、ファイルを必要とする(mktempを-uオプションを削除し、set -C;を削除するためにconfigureスクリプトを変更します。-uを削除すると、あなたはset -Cを削除する必要があることを意味あまりにも)。

mktempのためのMacOS Xのマニュアルページ(1)は言う:

-uは ``安全でない '' モードで動作します。 mktempが終了する前に一時ファイルがリンク解除されます。これはmktemp(3)よりやや優れていますが、引き続き競合状態を引き起こします。 の使用は推奨されません。

生成されたファイル名は、mktempによってリンク解除され、直ちに構成スクリプトによって再作成されます。これは簡単ではありません。 -uを削除すると、安全に作成されたファイル名が既に存在することになります。

このソフトウェアが頻繁に使用するものであれば、その問題をソフトウェアの開発者または保守担当者に報告してください。