Alien-Build
Alien-Build copied to clipboard
Installing on Win10/ActivePerl 5.24.0 hangs
I am trying to install Alient-Libxml2 on my Windows10 computer running ActivePerl 5.24.0 (due to a shared hosting service, I cannot use another version of Perl right now unfortunately), but the installation hangs on the extaction of the downloaded tar.xz.
I created the makefile
using the command
perl Makefile.PL
Then started the build using the command
dmake
The output of the dmake
command is:
dmake: makefile: line 753: Warning: -- Empty recipe for special or meta target .NOTPARALLEL
dmake: makefile: line 755: Warning: -- Empty recipe for special or meta target .NO_PARALLEL
cp lib/Alien/Libxml2.pm blib\lib/Alien/Libxml2.pm
"D:\Perl64\bin\perl.exe" -MAlien::Build::MM=cmd -e prefix site D:\Perl64\lib D:\Perl64\site\lib
Alien::Build::Plugin::PkgConfig::Negotiate> Using PkgConfig plugin: PkgConfig::PP
main> prefix D:/Perl64/site/lib/auto/share/dist/Alien-Libxml2
"D:\Perl64\bin\perl.exe" -MAlien::Build::MM=cmd -e version 0.19
Alien::Build::Plugin::PkgConfig::Negotiate> Using PkgConfig plugin: PkgConfig::PP
"D:\Perl64\bin\perl.exe" -MAlien::Build::MM=cmd -e download
Alien::Build::Plugin::PkgConfig::Negotiate> Using PkgConfig plugin: PkgConfig::PP
Alien::Build::Plugin::Core::Download> candidate *https://download.gnome.org/sources/libxml2/2.11/libxml2-2.11.4.tar.xz
Alien::Build::Plugin::Core::Download> candidate https://download.gnome.org/sources/libxml2/2.11/libxml2-2.11.3.tar.xz
Alien::Build::Plugin::Core::Download> candidate https://download.gnome.org/sources/libxml2/2.11/libxml2-2.11.2.tar.xz
Alien::Build::Plugin::Core::Download> candidate https://download.gnome.org/sources/libxml2/2.11/libxml2-2.11.1.tar.xz
Alien::Build::Plugin::Core::Download> candidate https://download.gnome.org/sources/libxml2/2.11/libxml2-2.11.0.tar.xz
Alien::Build::Plugin::Core::Download> candidate https://download.gnome.org/sources/libxml2/2.10/libxml2-2.10.4.tar.xz
Alien::Build::Plugin::Core::Download> candidate https://download.gnome.org/sources/libxml2/2.10/libxml2-2.10.3.tar.xz
Alien::Build::Plugin::Core::Download> candidate https://download.gnome.org/sources/libxml2/2.10/libxml2-2.10.2.tar.xz
Alien::Build::Plugin::Core::Download> candidate ...
Alien::Build::Plugin::Core::Download> setting version based on archive to 2.11.4
Alien::Build::Plugin::Core::Download> downloaded libxml2-2.11.4.tar.xz
"D:\Perl64\bin\perl.exe" -MAlien::Build::MM=cmd -e build
Alien::Build::Plugin::PkgConfig::Negotiate> Using PkgConfig plugin: PkgConfig::PP
Alien::Build::Plugin::Extract::CommandLine> + tar -xf E:/WebPages/personal/Shared/_test/Alien-Libxml2-0.19/_alien/download_Nv7P/libxml2-2.11.4.tar.xz
And then it stops
What version of tar
is in your path? I think on modern windows it is usually bsdtar
?
The command tar --help
gives the following output:
tar(bsdtar): manipulate archive files
First option must be a mode specifier:
-c Create -r Add/Replace -t List -u Update -x Extract
Common Options:
-b # Use # 512-byte records per I/O block
-f <filename> Location of archive (default \\.\tape0)
-v Verbose
-w Interactive
Create: tar -c [options] [<file> | <dir> | @<archive> | -C <dir> ]
<file>, <dir> add these items to archive
-z, -j, -J, --lzma Compress archive with gzip/bzip2/xz/lzma
--format {ustar|pax|cpio|shar} Select archive format
--exclude <pattern> Skip files that match pattern
-C <dir> Change to <dir> before processing remaining files
@<archive> Add entries from <archive> to output
List: tar -t [options] [<patterns>]
<patterns> If specified, list only entries that match
Extract: tar -x [options] [<patterns>]
<patterns> If specified, extract only entries that match
-k Keep (don't overwrite) existing files
-m Don't restore modification times
-O Write entries to stdout, don't restore to disk
-p Restore permissions (including ACLs, owner, file flags)
bsdtar 3.5.2 - libarchive 3.5.2 zlib/1.2.5.f-ipp
So it is indeed bsdtar version 3.5.2. To be complete, my Windows version is Windows 10 22H2 (OS build 19045.3086)
I don't have access to my Windows box right now, but should be able to look at this soon. I've transferred this issue to Alien-Build because it is not specific to Alien::Libxml2.
@MarcelVersteeg can you try this trail version of Alien::Build: https://cpan.metacpan.org/authors/id/P/PL/PLICEASE/Alien-Build-2.81_01.tar.gz and then try reinstalling Alien::Libxml2? It should use the Archive::Tar instead of the command line BSD tar to extract the tarball.
@plicease I tried to install that version, but after installing/updating a lot of the required modules for that, I got stuck at installing Compress::Raw::Lzma:
E:\WebPages\personal\Shared\_test\Compress-Raw-Lzma-2.204>dmake
cp lib/Compress/Raw/Lzma.pm blib\lib\Compress\Raw\Lzma.pm
AutoSplitting blib\lib\Compress\Raw\Lzma.pm (blib\lib\auto\Compress\Raw\Lzma)
Running Mkbootstrap for Lzma ()
"D:\Perl64\bin\perl.exe" -MExtUtils::Command -e chmod -- 644 "Lzma.bs"
"D:\Perl64\bin\perl.exe" -MExtUtils::Command::MM -e cp_nonempty -- Lzma.bs blib\arch\auto\Compress\Raw\Lzma\Lzma.bs 644
"D:\Perl64\bin\perl.exe" "D:\Perl64\lib\ExtUtils\xsubpp" -typemap D:\Perl64\lib\ExtUtils\typemap -typemap E:\WebPages\personal\Shared\_test\Compress-Raw-Lzma-2.204\typemap Lzma.xs > Lzma.xsc
"D:\Perl64\bin\perl.exe" -MExtUtils::Command -e mv -- Lzma.xsc Lzma.c
D:\Perl64\site\lib\auto\MinGW\bin\gcc.exe -c -I/usr/local/include -s -O2 -DWIN32 -DWIN64 -DCONSERVATIVE -DPERL_TEXTMODE_SCRIPTS -DUSE_SITECUSTOMIZE -DPERL_IMPLICIT_CONTEXT -DPERL_IMPLICIT_SYS -fwrapv -fno-strict-aliasing -mms-bitfields -s -O2 -DVERSION=\"2.204\" -DXS_VERSION=\"2.204\" "-ID:\Perl64\lib\CORE" -Wall -Wno-comment Lzma.c
Lzma.xs:18:18: fatal error: lzma.h: No such file or directory
compilation terminated.
dmake: Error code 129, while making 'Lzma.o'
I cannot compile that one, so I can't install it in order to install the trial version.
This is a problem with AS Perl and/or Compress::Raw::Lzma
. (Compress::Raw::Lzma
and lzma.h
have come with Strawberry Perl for a while I think). If you have a support agreement with AS it might be worth opening a ticket with them. Unfortunately they do not provide downloads of older versions of AS Perl so I have no way of even reproducing this to see if there is a workaround to get the Lzma module installed.
Failing all of that here is a workaround that you can use to get it working for you:
Download the libxml2 package https://download.gnome.org/sources/libxml2/2.11/libxml2-2.11.4.tar.xz into a directory patch
in the Alien-Libxml2 dist. Decompress with xz (I believe it is already in your path, that is what is causing the hang with bsdtar).
mkdir patch
cd patch
curl -LO https://download.gnome.org/sources/libxml2/2.11/libxml2-2.11.4.tar.xz
xd -d libxml2-2.11.4.tar.xz
then apply this patch to use the local copy instead of trying to fetch it from gitlab:
diff --git a/alienfile b/alienfile
index dcfb4eb..56ce7f2 100644
--- a/alienfile
+++ b/alienfile
@@ -131,19 +131,9 @@ share {
# off there. Turn it on elsewhere as it saves a copy.
meta->prop->{out_of_source} = $^O eq 'MSWin32' ? 0 : 1;
- plugin 'Download::GitLab' => (
- gitlab_host => 'https://gitlab.gnome.org',
- gitlab_user => 'GNOME',
- gitlab_project => 'libxml2',
- type => 'link',
- format => 'tar.xz',
- version_from => 'tag_name',
- convert_version => sub {
- my $version = shift;
- $version =~ s/^v//;
- $version;
- },
- );
+ start_url './patch/libxml2-2.11.4.tar';
+ plugin 'Download';
+ plugin 'Extract';
if($^O eq 'MSWin32' && $Config{ccname} eq 'cl')
{
Then try installing as normal.
@plicease Sorry for the late reply, but something else came up inbetween.
I downloaded the file to the patch
directory and extracted it, resulting in a file named libxml2-2.11.4.tar
. The I applied the patch to the alienfile
that is located in the root of the package.
Then I executed dmake
again, but it still does not work:
dmake: makefile: line 732: Warning: -- Empty recipe for special or meta target .NOTPARALLEL
dmake: makefile: line 734: Warning: -- Empty recipe for special or meta target .NO_PARALLEL
"D:\Perl64\bin\perl.exe" -MAlien::Build::MM=cmd -e build
Alien::Build::Plugin::PkgConfig::Negotiate> Using PkgConfig plugin: PkgConfig::PP
tried to call extract before download at D:/Perl64/site/lib/Alien/Build.pm line 742.
dmake: Error code 130, while making '_alien\mm\build'
It says "tried to call extract before download at D:/Perl64/site/lib/Alien/Build.pm line 742."
To make sure, the patch is applied correctly, lines 128-170 of alienfile are as follows now:
share {
# out of source build is borked on Windows, so we turn it
# off there. Turn it on elsewhere as it saves a copy.
meta->prop->{out_of_source} = $^O eq 'MSWin32' ? 0 : 1;
start_url './patch/libxml2-2.11.4.tar';
plugin 'Download';
plugin 'Extract';
if($^O eq 'MSWin32' && $Config{ccname} eq 'cl')
{
build [
sub { shift->install_prop->{prefix} =~ s/\//\\/g;},
'cd win32',
'cscript configure.js prefix=%{.install.prefix} iconv=no compiler=msvc static=yes',
'nmake -f Makefile.msvc',
'nmake -f Makefile.msvc install',
];
plugin 'Gather::IsolateDynamic';
gather sub {
my($build) = @_;
my $prefix = $build->runtime_prop->{prefix};
$build->runtime_prop->{cflags} = "-I$prefix/include/libxml2";
$build->runtime_prop->{libs} = "-L$prefix/lib libxml2_a.lib";
};
}
else
{
plugin 'Build::Autoconf' => ();
build [
'%{configure} --prefix=%{.install.autoconf_prefix} --without-python --disable-shared --enable-static',
'%{make}',
'%{make} install',
];
plugin 'PkgConfig::MakeStatic' => ();
}
};
@plicease Sorry for the late reply, but something else came up inbetween.
I downloaded the file to the
patch
directory and extracted it, resulting in a file namedlibxml2-2.11.4.tar
. The I applied the patch to thealienfile
that is located in the root of the package.Then I executed
dmake
again, but it still does not work:dmake: makefile: line 732: Warning: -- Empty recipe for special or meta target .NOTPARALLEL dmake: makefile: line 734: Warning: -- Empty recipe for special or meta target .NO_PARALLEL "D:\Perl64\bin\perl.exe" -MAlien::Build::MM=cmd -e build Alien::Build::Plugin::PkgConfig::Negotiate> Using PkgConfig plugin: PkgConfig::PP tried to call extract before download at D:/Perl64/site/lib/Alien/Build.pm line 742. dmake: Error code 130, while making '_alien\mm\build'
It says "tried to call extract before download at D:/Perl64/site/lib/Alien/Build.pm line 742."
Did you re-use the same Alien-Libxml2 extract from before? if so can you try applying to a fresh copy of Alien-Libxml2?
@plicease I indeed used the same Alien-Libxml2 when I encountered the error. I unpacked the CPAN archive again, reapplied the patch and then dmake
worked.
What I am wondering though, is it correct that I only have a Libxml2.pm
and no binary dll after running dmake
? It seems that the only binary compilation is required for testing if I look at the dmake
output. I need to know this, because I am compiling/installing it locally and then need to transfer the files to the shared hosing server (running the same version of ActivePerl).
What I am wondering though, is it correct that I only have a
Libxml2.pm
and no binary dll after runningdmake
? It seems that the only binary compilation is required for testing if I look at thedmake
output. I need to know this, because I am compiling/installing it locally and then need to transfer the files to the shared hosing server (running the same version of ActivePerl).
The libxml2 binaries are installed in a share directory. You can find the path for that share directory using the dist_dir
method:
perl -MAlien::Libxml2 -E 'say Alien::Libxml2->dist_dir'