1

我正在尝试将 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
4

2 回答 2

1

编译更新的 Git 版本(2018 年第二季度 2.17,差不多 3 年后)可能会更容易,因为perl/ 部分的构建过程已通过将 Git 从MakeMaker.

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

Ævar 解释说:

用受 i18n 基础架构的构建过程如何工作的启发的更简单的实现替换使用的和 perl/Makefile.PL后备。 请参阅Git v1.7.9-rc0, Nov. 2011 中的提交 5e9637cperl/MakefileNO_PERL_MAKEMAKER=NoThanks

首先是它的原因Makefile.PL是它最初构建了一个 Perl C 绑定来与libgitcommit b1edc53d0,Git v1.4.3-rc1,2006 年 6 月)接口,这个功能被删除了(commit 18b0fc1,Git v1. 4.3-rc1,2006 年 9 月) 在Git.pm进入master分支之前。

从那以后,我们开始维护 fallback perl/Makefile,因为 MakeMaker它在某些平台上不起作用(提交 f848718,Git v1.5.0-rc0,2006 年 12 月)。
这只是冰山一角。我们PM.stamp在顶层Makefile( commit ee9be06,Git v1.7.12 - rc1,2012年 7 月)中有 hack 来检测是否需要重新生成提交 c59c4939,Git v2.13.0-rc0,2017 年 3 月)。perl/perl.makperl

绝对没有理由再这么复杂了。
我们从这台精心制作的 Rube Goldberg 机器中得到的所有东西都是复制perl/*到的,perl/blib/*因为我们对*.pm文件进行字符串替换以在源代码中进行硬编码@@LOCALEDIR@@,以及 pod2man-ingGit.pm和朋友。

因此,将整个内容替换为几乎是我们如何从 生成的副本po/build/**.mopo/*.po只需使用一个小sed(1)命令而不是msgfmt.
完成后,将文件从 重命名为*.pm*.pmc表明它们已生成(请参阅perldoc -f require)。


使用 Git 2.32(2021 年第二季度),构建过程得到了清理。

请参阅提交 8c55753(2021 年 5 月 12 日)和提交 256c2dc提交 368a50d提交 3d49f72提交 4070c9e(2021 年 5 月 5 日),作者 Ævar Arnfjörð Bjarmason ( avar)
(由Junio C Hamano 合并 -- gitster--2e2ed74 提交中,2021 年 5 月 20 日)

perl: 在下使用 mock i18n 函数NO_GETTEXT=Y

签字人:Ævar Arnfjörð Bjarmason

更改我在5e9637c中添加的 i18n 函数的逻辑(“ i18n:添加使用 gettext 翻译 Git 的基础设施”,2011-11-18,Git v1.7.9-rc0 -- merge)以在定义时使用传递函数NO_GETTEXT

这加快了使用该库的命令NO_GETTEXT=Y在生效时的编译时间。
在我的机器上加载它POSIX.pm大约需要 20 毫秒,而仅实例化 Perl 本身需要 2 毫秒。

于 2018-02-18T14:03:26.877 回答
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的引述

于 2015-10-02T00:06:19.807 回答