我如何让外星人使用现有的 tarball 而不是下载?
How do I make Alien use an existing tarball instead of downloading?
我的发行版不再提供任何 <2.6 的 gsl。
鉴于:
- Alien::GSL 1.01
- /tmp/gsl-2.5.tar.gz
我如何强制它编译 gsl 而不是从 GNU FTP 2.6 版下载,反正我已经在系统上了 but is not delectable to Math::GSL 0.40?
我尝试失败:
- 将 tarball 复制到解压缩的 Alien::GSL 基本目录
- 搞乱 alien_repository
这是一个一次性项目。我可以接受手动安装说明和修补工具链代码。
ikegami found the decisive hint:
It looks like you can set protocol of local to use a local file
测试了分步说明,以及一些额外的解决方法;在我看来,这两个模块的构建系统似乎已经过 buggy/insufficiently 测试:
cpanm --look Alien::GSL
补丁Build.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}|
' 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 ')
./Build test
./Build install
exit # cpanm
最后,只要你想使用 Math::GSL,就重新导出变量。
我的发行版不再提供任何 <2.6 的 gsl。
鉴于:
- Alien::GSL 1.01
- /tmp/gsl-2.5.tar.gz
我如何强制它编译 gsl 而不是从 GNU FTP 2.6 版下载,反正我已经在系统上了 but is not delectable to Math::GSL 0.40?
我尝试失败:
- 将 tarball 复制到解压缩的 Alien::GSL 基本目录
- 搞乱 alien_repository
这是一个一次性项目。我可以接受手动安装说明和修补工具链代码。
ikegami found the decisive hint:
It looks like you can set protocol of local to use a local file
测试了分步说明,以及一些额外的解决方法;在我看来,这两个模块的构建系统似乎已经过 buggy/insufficiently 测试:
cpanm --look Alien::GSL
补丁Build.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}|
' 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 ')
./Build test
./Build install
exit # cpanm
最后,只要你想使用 Math::GSL,就重新导出变量。