`perl Makefile.PL` 创建的 Makefile 创建了不存在的目标

Makefile created by `perl Makefile.PL` creates non-existent target

我从 sourceforge 下载了一个旧项目的最新版本,从这里下载了 Vipul's Razor:http://razor.sourceforge.net/

perl Makefile.PL 生成的 Makefile 在我的平台 MacOS“Big Sur”11.3.1 上创建了一个不存在的目标。这是我尝试过的:

$ perl Makefile.PL
Warning: NAME must be a package name
Writing MYMETA.yml and MYMETA.json
Generating a Unix-style Makefile
Writing Makefile for razor-agents
Writing MYMETA.yml and MYMETA.json
$ make
make: *** No rule to make target `/System/Library/Perl/5.30/darwin-thread-multi-2level/CORE/perl.h', needed by `blib/man5/.exists'.  Stop.
$ ls /System/Library/Perl/5.30/darwin-thread-multi-2level/CORE/
libperl.dylib
$ uname -a
Darwin macbook.local 20.4.0 Darwin Kernel Version 20.4.0: Thu Apr 22 21:46:41 PDT 2021; root:xnu-7195.101.2~1/RELEASE_ARM64_T8101 arm64
$

有什么想法吗? Makefile 有 1000 多行,但 FWIW:

$ grep '/System' Makefile
# These definitions are from config.sh (via /System/Library/Perl/5.30/darwin-thread-multi-2level/Config.pm).
PERL_LIB = /System/Library/Perl/5.30
PERL_ARCHLIB = /System/Library/Perl/5.30/darwin-thread-multi-2level
PERL_ARCHLIBDEP = /System/Library/Perl/5.30/darwin-thread-multi-2level
PERL_INC = /System/Library/Perl/5.30/darwin-thread-multi-2level/CORE
PERL_INCDEP = /System/Library/Perl/5.30/darwin-thread-multi-2level/CORE
MAKEMAKER   = /System/Library/Perl/5.30/ExtUtils/MakeMaker.pm
XSUBPPDIR = /System/Library/Perl/5.30/ExtUtils
XSUBPPDEPS = /System/Library/Perl/5.30/ExtUtils/typemap /System/Library/Perl/5.30/ExtUtils$(DFSEP)xsubpp
XSUBPPARGS = -typemap '/System/Library/Perl/5.30/ExtUtils/typemap'
$(INST_MAN5DIR)/.exists :: /System/Library/Perl/5.30/darwin-thread-multi-2level/CORE/perl.h
    @$(EQUALIZE_TIMESTAMP) /System/Library/Perl/5.30/darwin-thread-multi-2level/CORE/perl.h $(INST_MAN5DIR)/.exists
MAP_PERLINC   = "-Iblib/arch" "-Iblib/lib" "-I/System/Library/Perl/5.30/darwin-thread-multi-2level" "-I/System/Library/Perl/5.30"
$

编辑

这是 perl -V 的输出:

Summary of my perl5 (revision 5 version 30 subversion 2) configuration:
   
  Platform:
    osname=darwin
    osvers=20.0
    archname=darwin-thread-multi-2level
    uname='darwin bb-g8-pdb106.ta10.sd.apple.com 20.0 darwin kernel version 20.1.0: mon jan 11 10:18:29 pst 2021; root:xnu-7195.41.8.100.5~1development_x86_64 x86_64 '
    config_args='-ds -e -Dprefix=/usr -Dccflags=-g  -pipe  -Dldflags= -Dman3ext=3pm -Duseithreads -Duseshrplib -Dinc_version_list=none -Dcc=cc'
    hint=recommended
    useposix=true
    d_sigaction=define
    useithreads=define
    usemultiplicity=define
    use64bitint=define
    use64bitall=define
    uselongdouble=undef
    usemymalloc=n
    default_inc_excludes_dot=define
    bincompat5005=undef
  Compiler:
    cc='cc'
    ccflags =' -g -pipe -fno-strict-aliasing -fstack-protector-strong -DPERL_USE_SAFE_PUTENV'
    optimize='-Os'
    cppflags='-g -pipe -fno-strict-aliasing -fstack-protector-strong'
    ccversion=''
    gccversion='Apple LLVM 12.0.5 (clang-1205.0.19.59.6) [+internal-os, ptrauth-isa=deployment-target-based]'
    gccosandvers=''
    intsize=4
    longsize=8
    ptrsize=8
    doublesize=8
    byteorder=12345678
    doublekind=3
    d_longlong=define
    longlongsize=8
    d_longdbl=define
    longdblsize=16
    longdblkind=3
    ivtype='long'
    ivsize=8
    nvtype='double'
    nvsize=8
    Off_t='off_t'
    lseeksize=8
    alignbytes=8
    prototype=define
  Linker and Libraries:
    ld='cc'
    ldflags =' -fstack-protector-strong'
    libpth=/System/Volumes/Data/SWE/macOS/BuildRoots/2288acc43c/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX11.3.Internal.sdk/usr/local/lib /System/Volumes/Data/SWE/macOS/BuildRoots/2288acc43c/Applications/Xcode.app/Contents/Developer/Toolchains/OSX11.3.xctoolchain/usr/lib/clang/12.0.5/lib /System/Volumes/Data/SWE/macOS/BuildRoots/2288acc43c/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX11.3.Internal.sdk/usr/lib /System/Volumes/Data/SWE/macOS/BuildRoots/2288acc43c/Applications/Xcode.app/Contents/Developer/Toolchains/OSX11.3.xctoolchain/usr/lib /System/Volumes/Data/SWE/macOS/BuildRoots/2288acc43c/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib /usr/lib /usr/local/lib
    libs= 
    perllibs=
    libc=
    so=dylib
    useshrplib=true
    libperl=libperl.dylib
    gnulibc_version=''
  Dynamic Linking:
    dlsrc=dl_dlopen.xs
    dlext=bundle
    d_dlsymun=undef
    ccdlflags=' '
    cccdlflags=' '
    lddlflags=' -bundle -undefined dynamic_lookup -fstack-protector-strong'


Characteristics of this binary (from libperl): 
  Compile-time options:
    HAS_TIMES
    MULTIPLICITY
    PERLIO_LAYERS
    PERL_COPY_ON_WRITE
    PERL_DONT_CREATE_GVSV
    PERL_IMPLICIT_CONTEXT
    PERL_MALLOC_WRAP
    PERL_OP_PARENT
    PERL_PRESERVE_IVUV
    PERL_USE_SAFE_PUTENV
    USE_64_BIT_ALL
    USE_64_BIT_INT
    USE_ITHREADS
    USE_LARGE_FILES
    USE_LOCALE
    USE_LOCALE_COLLATE
    USE_LOCALE_CTYPE
    USE_LOCALE_NUMERIC
    USE_LOCALE_TIME
    USE_PERLIO
    USE_PERL_ATOF
    USE_REENTRANT_API
    USE_THREAD_SAFE_LOCALE
  Locally applied patches:
    /Library/Perl/Updates/<version> comes before system perl directories
    installprivlib and installarchlib points to the Updates directory
  Built under darwin
  Compiled at Feb 28 2021 03:43:27
  %ENV:
    PERL5LIB="/Users/lucky/perl5/lib/perl5"
    PERL_LOCAL_LIB_ROOT="/Users/lucky/perl5"
    PERL_MB_OPT="--install_base "/Users/lucky/perl5""
    PERL_MM_OPT="INSTALL_BASE=/Users/lucky/perl5"
  @INC:
    /Users/lucky/perl5/lib/perl5/5.30.2/darwin-thread-multi-2level
    /Users/lucky/perl5/lib/perl5/5.30.2
    /Users/lucky/perl5/lib/perl5/darwin-thread-multi-2level
    /Users/lucky/perl5/lib/perl5
    /Library/Perl/5.30/darwin-thread-multi-2level
    /Library/Perl/5.30
    /Network/Library/Perl/5.30/darwin-thread-multi-2level
    /Network/Library/Perl/5.30
    /Library/Perl/Updates/5.30.2
    /System/Library/Perl/5.30/darwin-thread-multi-2level
    /System/Library/Perl/5.30
    /System/Library/Perl/Extras/5.30/darwin-thread-multi-2level
    /System/Library/Perl/Extras/5.30

编辑#2

我注意到blib下没有man5目录。它是 Vipul 剃刀的一个非常老的版本。

$ make
make: *** No rule to make target `/System/Library/Perl/5.30/darwin-thread-multi-2level/CORE/perl.h', needed by `blib/man5/.exists'.  Stop.
$ ls blib/man5
ls: blib/man5: No such file or directory
$

编辑 #3

Håkon Hægland 的以下建议修复了该问题,同时由于代码的年代久远而发现了下一个看似相似的问题。它可能可以用类似的杂耍 TBD 修复,但这里是后代的输出:

$ make
cp lib/Razor2/Preproc/deBase64.pm blib/lib/Razor2/Preproc/deBase64.pm
cp lib/Razor2/Client/Agent.pm blib/lib/Razor2/Client/Agent.pm
cp lib/Razor2/Errorhandler.pm blib/lib/Razor2/Errorhandler.pm
cp lib/Razor2/Preproc/deHTML_comment.pm blib/lib/Razor2/Preproc/deHTML_comment.pm
cp lib/Razor2/Logger.pm blib/lib/Razor2/Logger.pm
cp lib/Razor2/Preproc/deHTML.pm blib/lib/Razor2/Preproc/deHTML.pm
cp lib/Razor2/String.pm blib/lib/Razor2/String.pm
cp lib/Razor2/Signature/Ephemeral.pm blib/lib/Razor2/Signature/Ephemeral.pm
cp lib/Razor2/Signature/Whiplash.pm blib/lib/Razor2/Signature/Whiplash.pm
cp lib/Razor2/Preproc/enBase64.pm blib/lib/Razor2/Preproc/enBase64.pm
cp lib/Razor2/Client/Version.pm blib/lib/Razor2/Client/Version.pm
cp lib/Razor2/Preproc/Manager.pm blib/lib/Razor2/Preproc/Manager.pm
cp lib/Razor2/Preproc/deQP.pm blib/lib/Razor2/Preproc/deQP.pm
cp lib/Razor2/Client/Engine.pm blib/lib/Razor2/Client/Engine.pm
cp lib/Razor2/Client/Core.pm blib/lib/Razor2/Client/Core.pm
cp lib/Razor2/Client/Config.pm blib/lib/Razor2/Client/Config.pm
cp lib/Razor2/Syslog.pm blib/lib/Razor2/Syslog.pm
AutoSplitting blib/lib/Razor2/Syslog.pm (blib/lib/auto/Razor2/Syslog)
cp lib/tags blib/lib/tags
cp lib/Razor2/Preproc/deNewline.pm blib/lib/Razor2/Preproc/deNewline.pm
cp lib/Razor2/Engine/VR8.pm blib/lib/Razor2/Engine/VR8.pm
cp deHTMLxs.pm ../blib/lib/Razor2/Preproc/deHTMLxs.pm
AutoSplitting ../blib/lib/Razor2/Preproc/deHTMLxs.pm (../blib/lib/auto/Razor2/Preproc/deHTMLxs)
Running Mkbootstrap for deHTMLxs ()
chmod 644 "deHTMLxs.bs"
"/usr/bin/perl" -MExtUtils::Command::MM -e 'cp_nonempty' -- deHTMLxs.bs ../blib/arch/auto/Razor2/Preproc/deHTMLxs/deHTMLxs.bs 644
cc -c   -g -pipe -fno-strict-aliasing -fstack-protector-strong -DPERL_USE_SAFE_PUTENV -Wno-error=implicit-function-declaration -Os   -DVERSION=\"2.18\" -DXS_VERSION=\"2.18\"  "-I/System/Library/Perl/5.30/darwin-thread-multi-2level/CORE"   _deHTMLxs.c
"/usr/bin/perl" "/System/Library/Perl/5.30/ExtUtils/xsubpp"  -typemap '/System/Library/Perl/5.30/ExtUtils/typemap' -typemap '/Users/gmcintire/Downloads/Vipul/razor-agents-2.85/Razor2-Preproc-deHTMLxs/typemap'  deHTMLxs.xs > deHTMLxs.xsc
mv deHTMLxs.xsc deHTMLxs.c
cc -c   -g -pipe -fno-strict-aliasing -fstack-protector-strong -DPERL_USE_SAFE_PUTENV -Wno-error=implicit-function-declaration -Os   -DVERSION=\"2.18\" -DXS_VERSION=\"2.18\"  "-I/System/Library/Perl/5.30/darwin-thread-multi-2level/CORE"   deHTMLxs.c
deHTMLxs.xs:3:10: fatal error: 'EXTERN.h' file not found
#include "EXTERN.h"
         ^~~~~~~~~~
1 error generated.
make[1]: *** [deHTMLxs.o] Error 1
make: *** [subdirs] Error 2

而且,FWIW:

$ find / -name EXTERN.h 2>/dev/null 
/Library/Developer/CommandLineTools/SDKs/MacOSX11.1.sdk/System/Library/Perl/5.30/darwin-thread-multi-2level/CORE/EXTERN.h
/Library/Developer/CommandLineTools/SDKs/MacOSX11.1.sdk/System/Library/Perl/5.28/darwin-thread-multi-2level/CORE/EXTERN.h
/Library/Developer/CommandLineTools/SDKs/MacOSX11.1.sdk/System/Library/Perl/5.18/darwin-thread-multi-2level/CORE/EXTERN.h
/Library/Developer/CommandLineTools/SDKs/MacOSX11.3.sdk/System/Library/Perl/5.30/darwin-thread-multi-2level/CORE/EXTERN.h
/Library/Developer/CommandLineTools/SDKs/MacOSX11.3.sdk/System/Library/Perl/5.28/darwin-thread-multi-2level/CORE/EXTERN.h
/Library/Developer/CommandLineTools/SDKs/MacOSX11.3.sdk/System/Library/Perl/5.18/darwin-thread-multi-2level/CORE/EXTERN.h
/Library/Developer/CommandLineTools/SDKs/MacOSX10.15.sdk/System/Library/Perl/5.28/darwin-thread-multi-2level/CORE/EXTERN.h
/Library/Developer/CommandLineTools/SDKs/MacOSX10.15.sdk/System/Library/Perl/5.18/darwin-thread-multi-2level/CORE/EXTERN.h
/System/Volumes/Data/Library/Developer/CommandLineTools/SDKs/MacOSX11.1.sdk/System/Library/Perl/5.30/darwin-thread-multi-2level/CORE/EXTERN.h
/System/Volumes/Data/Library/Developer/CommandLineTools/SDKs/MacOSX11.1.sdk/System/Library/Perl/5.28/darwin-thread-multi-2level/CORE/EXTERN.h
/System/Volumes/Data/Library/Developer/CommandLineTools/SDKs/MacOSX11.1.sdk/System/Library/Perl/5.18/darwin-thread-multi-2level/CORE/EXTERN.h
/System/Volumes/Data/Library/Developer/CommandLineTools/SDKs/MacOSX11.3.sdk/System/Library/Perl/5.30/darwin-thread-multi-2level/CORE/EXTERN.h
/System/Volumes/Data/Library/Developer/CommandLineTools/SDKs/MacOSX11.3.sdk/System/Library/Perl/5.28/darwin-thread-multi-2level/CORE/EXTERN.h
/System/Volumes/Data/Library/Developer/CommandLineTools/SDKs/MacOSX11.3.sdk/System/Library/Perl/5.18/darwin-thread-multi-2level/CORE/EXTERN.h
/System/Volumes/Data/Library/Developer/CommandLineTools/SDKs/MacOSX10.15.sdk/System/Library/Perl/5.28/darwin-thread-multi-2level/CORE/EXTERN.h
/System/Volumes/Data/Library/Developer/CommandLineTools/SDKs/MacOSX10.15.sdk/System/Library/Perl/5.18/darwin-thread-multi-2level/CORE/EXTERN.h
$

make: *** No rule to make target /System/Library/Perl/5.30/darwin-thread-multi-2level/CORE/perl.h, needed by blib/man5/.exists. Stop.

此错误是由以下行引起的:

$(INST_MAN5DIR)/.exists :: /System/Library/Perl/5.30/darwin-thread-multi-2level/CORE/perl.h

在生成的Makefile中。在 macOS >= 10.14 上,该位置没有 Perl header 文件。它们被移动到 Xcode 命令行工具 SDK 目录,请参阅 Xcode 10 Release Notes。那是在 2018 年,所以我猜你试图构建的代码比那个更旧,因此假设 headers 在旧位置。

您可以修补 Makefile.PL(假设您的项目是 this 一个):更改第 81 行:

my ($perlh) = $self->catfile($Config{archlibexp}, 'CORE', "perl.h");

至:

my $arch_dir = $Config{archlibexp};
if ( $^O eq 'darwin' && 
        ($^X eq '/usr/bin/perl' || $^X eq 'perl') ) {
  my @osvers = split /\./, $Config{osvers};
  if ($osvers[0] >= 18 ) {
      my $sdk_path = `xcrun --show-sdk-path`;
      chomp $sdk_path;
      $arch_dir = $self->catfile( $sdk_path, $arch_dir );
  }
}
my ($perlh) = $self->catfile($arch_dir, 'CORE', "perl.h");