配置脚本有问题

时间:2011-01-03 03:27:06

标签: c linux shell ffmpeg busybox

我遇到了ffmpeg的./configure脚本问题。我的linux环境使用busybox,它只允许有限的linux命令集。在ffmpeg ./configure脚本中使用的一个命令是mktemp -u,这里的问题是linux的busybox无法将-u开关识别为有效,因此它会抱怨它并中断配置过程。

这是./configure中使用mktemp -u命令的相关代码:

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脚本,所以我想知道是否有人知道我如何强制这个配置脚本不使用mktemp -u并使用'替换'根据上面的代码段提供的替代选项。感谢。

btw ...只是删除-u开关不起作用。也不会将其替换为-t-p。我认为mktemp必须完全被绕过。

2 个答案:

答案 0 :(得分:2)

改变这个:

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

对此:

#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

您也可以删除整个if fi结构,这样剩下的只是mktemp()定义,但我宁愿留下它们以便记住需要的内容完成后如果你需要回去。

答案 1 :(得分:1)

我只是更改配置脚本以将-u选项删除到 mktemp 并删除set -C;(设置no-clobber模式,并要求文件为缺席;删除-u表示您还需要删除set -C

mktemp(1)的MacOS X手册页说:

  

-u在“不安全”模式下操作。在mktemp退出之前,临时文件将被取消链接。这比mktemp(3)略好,但仍然引入了竞争条件。用于                不鼓励这个选项。

生成的文件名由mktemp取消链接,然后立即由configure脚本重新创建,这有点愚蠢。删除-u意味着文件名已经存在,已经安全创建。

如果软件是您经常使用的软件,请将问题报告给软件开发人员或维护人员。