1

我的发行版不再提供任何 gsl <2.6。

鉴于:

  • 外星人::GSL 1.01
  • /tmp/gsl-2.5.tar.gz

我如何强制它编译该 gsl 而不是从 GNU FTP 版本 2.6 下载,无论如何我已经在系统上,但对 Math::GSL 0.40 不感兴趣

我尝试失败:

这是一个一次性项目。我同意手动安装说明和修补工具链代码。

4

1 回答 1

2

ikegami找到了决定性的提示

看起来您可以设置本地协议以使用本地文件


经过测试的分步说明,以及一些额外的解决方法;对我来说,这两个模块的构建系统似乎有问题/测试不足:

cpanm --look Alien::GSL

补丁构建.PL

diff --git a/Build.PL b/Build.PL
index 32f3057..6537138 100644
--- a/Build.PL
+++ b/Build.PL
@@ -20,10 +20,9 @@ my $builder = Alien::Base::ModuleBuild->new(
   alien_name => 'gsl',
   alien_repository => [
     {
-      protocol => 'ftp',
-      host     => 'ftp.gnu.org',
-      location => '/gnu/gsl',
-      pattern  => qr/^gsl-([\d\.]+)\.tar\.gz$/,
+      protocol => 'local',
+      location => '/tmp',
+      pattern  => 'gsl-2.5.tar.gz',
     },
   ],
   meta_merge => {
-- 
2.23.0
perl Build.PL
./Build

注意这里生成的configure/libtool命令,它们匹配 Perl 配置。不保证没有这些不同选项的手动安装兼容或可用。(这不是迷信:历史上在系统 httpd 上从源代码安装 mod_perl2 和 libapreq2 时会出现类似的问题;需要先编译 perl,然后编译 httpd 以匹配,然后再编译其他包,否则将无法工作。)这个显示了通过 Alien 安装的价值,因为它委托给 M::B,所以会找出正确的选项。从头开始准确地创建它们超出了我的知识水平。

./Build test

gsl-config在 blib 现在错误地包含构建路径,而不是安装路径,修复:

perl -MConfig -i -lpe'
    s|/.*(/auto/share/dist/Alien-GSL)|$Config{installsitelib}$1|
' blib/lib/auto/share/dist/Alien-GSL/bin/gsl-config
./Build install
exit # cpanm

cpanm --look Math::GSL
# let it pick up gsl-config on PATH
export PATH=$PATH:$(perl -mAlien::GSL -e'print Alien::GSL->bin_dir')
perl Build.PL
./Build
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$(gsl-config --libs | perl -lne'/-L(\S+) / && print $1')
./Build test
./Build install
exit # cpanm

最后,只要您想使用 Math::GSL,就重新导出变量。

于 2019-09-29T16:31:49.673 回答