使用回退的参数必须是目录,而不是文件

问题描述 投票:0回答:1

当我从 bazel 规则运行它时,openssl 中的

Configure
中的 use OpenSSL::fallback "$FindBin::Bin/external/perl/MODULES.txt"; 失败。

我正在使用 https://github.com/bazelbuild/rules_perl/tree/main 为我运行

Configure
脚本。然后是一个运行
make
命令的 shell 脚本。到目前为止,虽然我陷入了上述错误。只有当我从
Configure
中完全删除该行时它才会消失,而如果我修改它则不会消失。

对我来说奇怪的是,当我这样做时

./Configure
它就像预期的那样工作。 bazel 的沙箱有什么特别之处导致它不起作用吗?

load("@rules_perl//perl:perl.bzl", "perl_binary")

perl_binary(
    name = "configure_openssl",
    srcs = ["Configure"],
    data = glob(["**/*.pm"]),
)

sh_binary(
    name = "make",
    srcs = ["run_build.sh"],
    data = [
        "Makefile",
        "config",
        ":configure",
        "@modules",
    ] + glob([
        "include/**/*.h",
        "crypto/**/*.h",
        "ssl/**/*.h",
        "util/**/*",
        "**/build.info",
        "Configurations/*",
        "**/*.in",
        "**/*.pm",
    ]),
)

我也知道

rules_foreign_cc
存在,但这对我的目的不起作用,因为他们的
openssl
示例在运行时甚至无法在我的系统上找到
rm
,所以这看起来更像是一场艰苦的战斗。

哦,当我使用这个 shell 脚本时,我遇到了同样的错误(仅使用 bazel)

#!/bin/bash
perl Configure && make
perl bazel
1个回答
0
投票

好吧,我明白了。 Openssl 有一个名为“fallback”的模块,它正在寻找条件而不仅仅是目录。

        unless (-e $path
                && ($path =~ m/(?:^|\/)MODULES.txt/ || -d $path)) {
            croak "Parameter to use fallback must be a directory, not a file";
            next;
        }

因此,由于它组织运行文件的方式,

MODULES.txt
的默认路径不再存在于
bazel
中。所以解决方案是修改
Configure
以查看正确的路径(类似于
external/<some_submodule>~/perl/MODULES.txt
)。我认为错误消息应该更改为“文件不存在,文件与正则表达式不匹配,或者这不是目录”。

© www.soinside.com 2019 - 2024. All rights reserved.