【发布时间】:2021-11-12 12:02:33
【问题描述】:
我正在尝试在 hpia11.31 系统上构建 Perl 5.32.1,并且在正则表达式评估中遇到了似乎失败的情况。例如,make_patchnum.pl 失败,因为正则表达式旨在从 heredoc 中提取文件名,而不是将整个 heredoc 作为文件名返回:
./miniperl -Ilib make_patchnum.pl
Failed to open for write './lib/Config_git.pl' is generated by make_patchnum.pl
# DO NOT EDIT DIRECTLY - edit make_patchnum.pl instead
######################################################################
$Config::Git_Data=<<'ENDOFGIT';
git_commit_id=''
git_describe=''
git_branch=''
git_uncommitted_changes=''
git_commit_id_title='':File name too long at make_patchnum.pl line 84.
手动解决这个问题,configpm 表现出同样的问题:提取变量标头的正则表达式评估在 5.32.1 中失败,而在 5.28.1 中成功。示例:
Expected a Configure variable header, instead we got:
_exe (Unix.U):
This variable defines the extension used for executable files.
DJGPP, Cygwin and OS/2 use '.exe'. Stratus VOS uses '.pm'.
On operating systems which do not require a specific extension
for executable files, this variable is empty.
我假设这是使用在构建过程中较早构建的regexec.c,尽管我不确定。 Tne regexec.c build 报告了一些警告,但它们似乎与针对 5.28.1 报告的警告一致:我在这里没有看到任何表明它不起作用的东西。
这是regexec.c 的构建命令:
cc -c -DPERL_CORE -D_POSIX_C_SOURCE=199506L -D_REENTRANT \
-Ae -Wp,-H150000 -D_HPUX_SOURCE -Wl,+vnocompatwarnings +DD64 \
-D_INCLUDE__STDC_A1_SOURCE -I/usr/local/include -D_LARGEFILE_SOURCE \
-D_FILE_OFFSET_BITS=64 +O2 +Onolimit regexec.c
任何想法为什么正则表达式解析器在 HP-UX 上的行为可能与其他平台不同?我已经为 x86 Linux、plinux、zlinux、rs6000 和 Solaris 成功构建了 5.32.1,所以这似乎是 HP-UX 特有的。
编辑:编译器信息
bash-4.0$ /opt/aCC/bin/cc --version
cc: HP C/aC++ B3910B A.06.20 [May 13 2008]
【问题讨论】:
-
我应该提一下,我绝不是一个经验丰富的 C 开发人员:我对 Perl 和 bash/ksh 脚本编写很熟悉,但对 Perl 或任何其他 C 的构建过程的实际操作很少可执行文件。
-
也许在Perl/perl5 添加一个问题?那里可能有一些专家可以帮助您。例如,请参阅 this 问题,该问题与 HP-UX 11.00 ANSI 编译器的宏空间太小有关
-
感谢您的建议:我在那里交叉发布了一个问题:github.com/Perl/perl5/issues/19151