On 2022-04-29 Fr 08:50, Andrew Dunstan wrote: > On 2022-04-26 Tu 16:26, Robert Haas wrote: >> On Wed, Apr 13, 2022 at 10:22 AM Melih Mutlu <m.melihmu...@gmail.com> wrote: >>> What I realized is that c:\lz4\lib\liblz4.lib actually does not exist. >>> The latest versions of lz4, downloaded from [2], do not contain \liblz4.lib >>> anymore, as opposed to what's written here [3]. Also there isn't a lib >>> folder too. >>> >>> After those changes on lz4 side, AFAIU there seems like this line adds >>> library from wrong path in Solution.pm file [4]. >>>> $proj->AddIncludeDir($self->{options}->{lz4} . '\include'); >>>> $proj->AddLibrary($self->{options}->{lz4} . '\lib\liblz4.lib'); >>> Even if I spent some time on this problem and tried to fix some places, I'm >>> not able to run a successful build yet. >>> This is also the case for zstd too. Enabling zstd gives the same error. >>> >>> Has anyone had this issue before? Is this something that anyone is aware of >>> and somehow made it work? >>> I would appreciate any comment/suggestion etc. >> In Solution.pm we have this: >> >> if ($self->{options}->{lz4}) >> { >> $proj->AddIncludeDir($self->{options}->{lz4} . '\include'); >> $proj->AddLibrary($self->{options}->{lz4} . '\lib\liblz4.lib'); >> } >> if ($self->{options}->{zstd}) >> { >> $proj->AddIncludeDir($self->{options}->{zstd} . '\include'); >> $proj->AddLibrary($self->{options}->{zstd} . '\lib\libzstd.lib'); >> } >> >> I think what you're saying is that the relative pathnames here may not >> be correct, depending on which version of lz4/zstd you're using. The >> solution is probably to use perl's -e to test which files actually >> exists e.g. >> >> if ($self->{options}->{lz4}) >> { >> $proj->AddIncludeDir($self->{options}->{lz4} . '\include'); >> if (-e $proj->AddLibrary($self->{options}->{lz4} . >> '\someplace\somelz4.lib') >> { >> $proj->AddLibrary($self->{options}->{lz4} . >> '\someplace\somelz4.lib'); >> } >> else >> { >> $proj->AddLibrary($self->{options}->{lz4} . '\lib\liblz4.lib'); >> } >> $proj->AddLibrary($self->{options}->{lz4} . '\lib\liblz4.lib'); >> } >> >> The trick, at least as it seems to me, is figuring out exactly what >> the right set of conditions is, based on what kinds of different >> builds exist out there and where they put stuff. > > I agree that we should use perl's -e to test that the files actually > exists. But I don't think we should try to adjust to everything the zstd > and lz4 people put in their release files. They are just horribly > inconsistent. > > What I did was to install the packages using vcpkg[1] which is a > standard framework created by Microsoft for installing package > libraries. It does install the .lib files in a sane place > (installdir/lib), but it doesn't use the lib suffix. Also it names the > lib file for zlib differently. > > I got around those things by renaming the lib files, but that's a bit > ugly. So I came up with this (untested) patch. > >
er this patch -- Andrew Dunstan EDB: https://www.enterprisedb.com
diff --git a/src/tools/msvc/Project.pm b/src/tools/msvc/Project.pm index d39c502f30..ec2b860462 100644 --- a/src/tools/msvc/Project.pm +++ b/src/tools/msvc/Project.pm @@ -175,6 +175,15 @@ sub AddLibrary { my ($self, $lib, $dbgsuffix) = @_; + if ( ! -e $lib) + { + my ($libname = $lib) =~ s!.*[/\\]!!; + my $altlibname = $libname eq 'zdll.lib' ? 'zlib.lib' : "lib$libname"; + my ($altlib = $lib) =~ s/$libname/$altlibname/; + die "cannot find $lib or $altlib" unless -e $altlib; + $lib = $altlib; + } + # quote lib name if it has spaces and isn't already quoted if ($lib =~ m/\s/ && $lib !~ m/^[&]quot;/) { diff --git a/src/tools/msvc/Solution.pm b/src/tools/msvc/Solution.pm index cb2ad6cd29..d0a949b391 100644 --- a/src/tools/msvc/Solution.pm +++ b/src/tools/msvc/Solution.pm @@ -1089,12 +1089,12 @@ sub AddProject if ($self->{options}->{lz4}) { $proj->AddIncludeDir($self->{options}->{lz4} . '\include'); - $proj->AddLibrary($self->{options}->{lz4} . '\lib\liblz4.lib'); + $proj->AddLibrary($self->{options}->{lz4} . '\lib\lz4.lib'); } if ($self->{options}->{zstd}) { $proj->AddIncludeDir($self->{options}->{zstd} . '\include'); - $proj->AddLibrary($self->{options}->{zstd} . '\lib\libzstd.lib'); + $proj->AddLibrary($self->{options}->{zstd} . '\lib\zstd.lib'); } if ($self->{options}->{uuid}) {