解决ExtUtils :: MakeMaker和Test :: Harness之间的循环依赖关系

时间:2015-10-01 23:46:33

标签: git perl rhel6 makemaker

我试图将RHEL6上的git 2.5.2编译到我的主目录中,它需要一个perl模块ExtUtils :: MakeMaker。 ExtUtils :: MakeMaker没有安装在标准位置,由于组织限制,安装包(通过yum)是不可能的。

ExtUtils :: MakeMaker需要Test :: Harness,它也没有安装。 Test :: Harness依赖于ExtUtils :: MakeMaker,有没有办法打破这种依赖关系或者一种编译git的方法,而不依赖于ExtUtils :: MakeMaker?

尝试安装ExtUtils :: MakeMaker时的输出:

Using included version of CPAN::Meta (2.120351) because it is not already installed.
Using included version of Parse::CPAN::Meta (1.4405) because it is not already installed.
Using included version of CPAN::Meta::YAML (0.008) because it is not already installed.
Using included version of ExtUtils::Manifest (1.65) because it is not already installed.
Using included version of JSON::PP (2.27203) because it is not already installed.
Using included version of ExtUtils::Install (1.54) because it is not already installed.
Using included version of CPAN::Meta::Requirements (2.127) because it is not already installed.
Generating a Unix-style Makefile
Writing Makefile for ExtUtils::MakeMaker
Writing MYMETA.yml and MYMETA.json
Can't locate Test/Harness.pm in @INC (@INC contains: bundled/CPAN-Meta bundled/JSON-PP-Compat5006 bundled/Parse-CPAN-Meta bundled/CPAN-Meta-YAML bundled/File-
Temp bundled/ExtUtils-Manifest bundled/JSON-PP bundled/ExtUtils-Install bundled/Scalar-List-Utils bundled/CPAN-Meta-Requirements lib . /usr/local/lib64/perl5
/usr/local/share/perl5 /usr/lib64/perl5/vendor_perl /usr/share/perl5/vendor_perl /usr/lib64/perl5 /usr/share/perl5) at Makefile.PL line 143.

git make的输出:

    SUBDIR perl
/usr/bin/perl Makefile.PL PREFIX='/home/svc_rrtd/local' INSTALL_BASE='' --localedir='/home/svc_rrtd/local/share/locale'
Can't locate ExtUtils/MakeMaker.pm in @INC (@INC contains: /usr/local/lib64/perl5 /usr/local/share/perl5 /usr/lib64/perl5/vendor_perl /usr/share/perl5/vendor_perl /usr/lib64/perl5 /usr/share/perl5 .) at Makefile.PL line 3.
BEGIN failed--compilation aborted at Makefile.PL line 3.
make[1]: *** [perl.mak] Error 2
make: *** [perl/perl.mak] Error 2

2 个答案:

答案 0 :(得分:0)

它安装在哪里? 只需将该目录添加到PERL5LIB

即可
export PERL5LIB=/home/user/stuff/lib/perl5:$PERL5LIB

更新:尝试安装git的先决条件,例如

$ sudo yum install curl-devel expat-devel gettext-devel \
  openssl-devel perl-devel zlib-devel
$ sudo apt-get install libcurl4-gnutls-dev libexpat1-dev gettext \
  libz-dev libssl-dev

来自http://git-scm.com/book/en/v2/Getting-Started-Installing-Git

的引用

答案 1 :(得分:0)

编译更近期(2018年第二季度,差不多3年后),Git版本可能会更容易,因为perl /部分的构建过程已经通过断开Git MakeMaker而大大简化了。

commit 7a7bfc7Jonathan Nieder (artagnon)(2018年1月2日) 请参阅commit 805a378(2017年12月22日)和commit 20d2a30(2017年12月10日)Ævar Arnfjörð Bjarmason (avar)(由Junio C Hamano -- gitster --合并于commit ed1b87e,2018年2月13日)

Ævar解释道:

  

替换下使用的perl/Makefile.PL和后备perl/Makefile   NO_PERL_MAKEMAKER=NoThanks具有更简单的实现方式   灵感来自i18n基础设施的构建过程如何运作   请参阅commit 5e9637c from Git v1.7.9-rc0, Nov. 2011

     

首先拥有Makefile.PL的原因是它   最初构建了一个perl C绑定到与libgitcommit b1edc53d0, Git v1.4.3-rc1, June 2006)的接口,这个功能在Git.pm进入{{1}之前被移除(commit 18b0fc1, Git v1.4.3-rc1, Sept. 2006)分支。

     

从那以后我们就开始维持一个后备master   perl/Makefile无法在某些平台上发挥作用(commit f848718, Git v1.5.0-rc0, Dec. 2006   这只是冰山一角。我们在顶级MakeMakercommit ee9be06, Git v1.7.12-rc1, Jul. 2012)中有PM.stamp黑客来检测我们是否需要重新生成Makefile,我刚刚修复了perl/perl.mak以解决像perl版本从我们(commit c59c4939, Git v2.13.0-rc0, March 2017)下更改。

     

绝对没有理由为什么这种情况需要变得如此复杂   我们从这个精心制作的Rube Goldberg机器中得到的就是将perl/*复制到perl/blib/*,因为我们进行了字符串替换   要在源中硬编码*.pm的{​​{1}}个文件,以及   pod2man-ing @@LOCALEDIR@@&朋友。

     

所以用几乎是副本的东西替换整个东西   我们如何从Git.pm生成po/build/**.mo,只需要一个小sed(1)   命令而不是po/*.po   正如所做的那样,将文件从msgfmt重命名为*.pm只是为了表明它们已生成(请参阅"perldoc -f require")。