-
Notifications
You must be signed in to change notification settings - Fork 49
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
perl 5.36 cpan | several Crypt:: builds are failing #80
Comments
I think those " AES_decrypt and AES_encrypt should be resolved by C:\strawberry\c\lib\libcrypto.a. To build "Crypt::CBC" on sp536_20230311, I first needed to perform the same trick as was used for bareword::filehandles in order to install the pre-requisite "multidimensional". I'll post "solutions" (for want of a better word) to the issues with the other Crypt::* modules mentioned in this ticket as II find them. Edited to restore backslashes that had been removed. Cheers, |
Having built and installed Crypt::CBC on sp536_20230311, I find that Crypt::OpenSSL::RSA, Crypt::OpenSSL::Random, Crypt::OpenSSL::AES-0.05 and Crypt::OpenSSL::Bignum-0.09 are all installed (in vendor) and up to date.
I'm not seeing any unresolved symbols at all. Cheers, |
Thanks once again Rob. Ideally this should all work out of the box. The need for such a workaround makes me suspect that something is missing in the build, and it's likely to affect other modules users try to install. That's all beyond my skill set so hopefully someone can provide suggestions. |
I suspect GH formatting is mangling the escapes as I cannot get that to work. Can you format the invocation as a code block inside the three backticks? |
Yes. Unfortunately I think that bareword::filehandles and multidimensional are not going to build out of the box until @ilmari addresses https://rt.cpan.org/Public/Bug/Display.html?id=147149 and then applies the same fix to multidimensional. Mind you - I don't know how the bareword::filehandles/multidimensional install procedures are supposed to work.
Yes, you need to escape the 2nd and 3rd of 4 the double-quotes: Cheers, |
Duh they're relying on ExtUtils::Depends - which is even more appalling than Win32::API (IMO). However, I'm finding exactly the same problem on my own builds of perl-5.36.0 - where the ".xs.dll" issue is not present. Dunno .... not sure that I have the ability to determine exactly what needs to be done. (Best thing, IMO, would be for these 2 troublesome modules to avoid the EU::Depends denpendency.) Cheers, |
I still cannot get that to work, but assume it's a PEBKAC. One thing I do notice is that the 5.32 build for multidimensional has uses full path names for the libs to link. Newlines added for readability. Perl 5.36:
Perl 5.32 (edited so base paths look the same):
And if one compares the
--- 532.txt 2023-03-16 20:17:25.736107700 +1100
+++ 536.txt 2023-03-16 20:13:28.937796000 +1100
@@ -1 +1 @@
-Summary of my perl5 (revision 5 version 32 subversion 1) configuration:
+Summary of my perl5 (revision 5 version 36 subversion 0) configuration:
@@ -5 +5 @@
- osvers=10.0.19042.746
+ osvers=10.0.17763.3406
@@ -7 +7 @@
- uname='Win32 strawberry-perl 5.32.1.1 #1 Sun Jan 24 15:00:15 2021 x64'
+ uname=''
@@ -19 +18,0 @@
- bincompat5005=undef
@@ -22,2 +21,2 @@
- ccflags =' -DWIN32 -DWIN64 -D__USE_MINGW_ANSI_STDIO -DPERL_TEXTMODE_SCRIPTS -DPERL_IMPLICIT_CONTEXT -DPERL_IMPLICIT_SYS -DUSE_PERLIO -fwrapv -fno-strict-aliasing -mms-bitfields'
- optimize='-s -O2'
+ ccflags =' -DWIN32 -DWIN64 -D__USE_MINGW_ANSI_STDIO -DPERL_TEXTMODE_SCRIPTS -DMULTIPLICITY -DPERL_IMPLICIT_SYS -DUSE_PERLIO -D__USE_MINGW_ANSI_STDIO -fwrapv -fno-strict-aliasing -mms-bitfields'
+ optimize='-O2'
@@ -26 +25 @@
- gccversion='8.3.0'
+ gccversion='10.3.0'
@@ -48,3 +47,3 @@
- ld='g++.exe'
- ldflags ='-s -L"C:\strawberry\perl\lib\CORE" -L"C:\strawberry\c\lib"'
- libpth=C:\strawberry\c\lib C:\strawberry\c\x86_64-w64-mingw32\lib C:\strawberry\c\lib\gcc\x86_64-w64-mingw32\8.3.0
+ ld='g++'
+ ldflags ='-s -L"C:\strawberry\perl\lib\CORE" -L"C:\strawberry\c\lib" -L"C:\strawberry\c\x86_64-w64-mingw32\lib" -L"C:\strawberry\c\lib\gcc\x86_64-w64-mingw32\10.3.0"'
+ libpth=C:\strawberry\c\lib C:\strawberry\c\x86_64-w64-mingw32\lib C:\strawberry\c\lib\gcc\x86_64-w64-mingw32\10.3.0 C:\strawberry\c\x86_64-w64-mingw32\lib C:\strawberry\c\lib\gcc\x86_64-w64-mingw32\10.3.0
@@ -56 +55 @@
- libperl=libperl532.a
+ libperl=libperl536.a
@@ -64 +63 @@
- lddlflags='-mdll -s -L"C:\strawberry\perl\lib\CORE" -L"C:\strawberry\c\lib"'
+ lddlflags='-shared -s -L"C:\strawberry\perl\lib\CORE" -L"C:\strawberry\c\lib" -L"C:\strawberry\c\x86_64-w64-mingw32\lib" -L"C:\strawberry\c\lib\gcc\x86_64-w64-mingw32\10.3.0"'
@@ -75 +73,0 @@
- PERL_IMPLICIT_CONTEXT
@@ -91 +89 @@
- Compiled at Jan 24 2021 15:05:42
+ Compiled at Mar 16 2023 12:09:49 |
Possibly, but the modules build without issue on strawberry perl 5.32 which suggests some difference in the setups is triggering the issue. |
If you can re-run your cpanm command with verbosity turned on (
Good point. For me, the the problem arises with perl-5.34.0 - which still defines According to I don't know what that leaves us with ... something to chew over. Cheers, |
I just noticed that with perl-5.32.0, the directory that contains Check.dll (or Check.xs.dll) also contains an import library named "Check.a". So, in sp536_20230316, I created that import lib using the gendef and libtool that ships with that perl and doing:
The bareword::filehandles and multidimensional builds then go fine. That will have to wait for a while - it's getting late over here. Cheers, |
Thanks Rob. The only
In contrast my 5.32 has:
plus a heap of Alien related files except So something is missing in the compilation. Hopefully it is just a flag that needs to be added. We might also need to recompile the extlibs, particularly if it turns out that winlibs gcc 10.3 has sufficiently different default compiler/linker flags compared with the strawberry perl gcc 8.3. |
With my SP-5.32.1 (EU-MM-7.58) if I manually build B-Hooks-OP-Check-0.22, then Check.a does NOT get created. Presumably SP-5.32.1 did not actually rebuild B-Hooks-OP-Check, but just used the already-built rendition that had shipped with 5.32.0 - which is technically a fine and reasonable thing to do, given that the B-Hooks-OP-Check had not been updated. The difference, I think , comes down to the generated Makefiles in the 2 builds of B-Hooks-OP-Check.
the (bad) 5.32.1 Makefile has:
And, presumably, this change (for the worse) has stayed with us ever since. What determines which "MakeMaker static lib section" gets written into the generated Makefile ? Cheers, |
FWIW, there is no special handling of B-Hooks-OP-Check in the build system. The last update on CPAN is from 2017. The config for 5.32.0 is at https://github.com/StrawberryPerl/Perl-Dist-Strawberry/blob/master/share/64bit-5.32.0.1.pp There seems not to be a config file for 5.32.1 so it is hard to say what changes were made. (Edit - actually it is here if one wants to run a diff). There is a step where any CPAN modules are updated to their latest versions. It is automated so if any of the modules it checks (dual-life core modules I think) has an update then it is picked up. Methods are here and the update script is here. The settings for 5.32.0 are: Perl-Dist-Strawberry/share/64bit-5.32.0.1.pp Lines 98 to 106 in d1a3c70
So all the above would suggest changes in EUMM? |
....and ExtUtils-Install and ExtUtils-MakeMaker are both updated in the 5.36 build. |
I'm pretty sure it's just a bug in ExtUtils::Depends-0.8001. I haven't yet done the requisite fart-arsing around to prove this. Shawn, I'll do the necessary "fart-arsing around" tonight or tomorrow morning, and try to come up with a patch that repairs the damage done to version 0.8001. This entry in the EU-Depends "Changes" file is, I think, telling:
Obsolete ???? Cheers, |
Thanks Rob. I'll have a go at building with ExtUtils::Depends-0.8000 tomorrow. |
Yep - LGTM.
I expect you'll also need to rebuild and reinstall B::Utils and Devel::Declare. One of the Devel::Declare dependencies kept on throwing exceptions during the running of the tests because libgcc-s-seh-1.dll (which is in my path) could not be found. UPDATE: Cheers, |
I've replied with the below text to your ticket on CPAN, but I'm adding it here so that people have some context to the original problem and why the change was made to EU::Depends for 0.80001 ===== I honestly don't know how to move forward with this. It sounds like Strawberry and "other people's Windows Perl" are using two different compiler suites or versions of GCC/MinGW, but at the time we were working on this, we never asked specifically who was using what, so now that knowledge has probably moved on. I'm fine with reverting the change for 0.80001 and cutting a release, as long as reverting this change doesn't cause RT tickets and releases that oscillate the code between "needs static_lib" and "doesn't need static_lib", which is what I think will happen. |
@spicyjack I'm not sure that given what you've pointed out that I'd request you make changes at this point. We'll always be dealing with different versions of GCC/MinGW due to how we have to build things for Windows at the moment. Since we know a specific version works, we can ship with that one for now. In the future, when we release with a different version of GCC/MinGW we may not run into the same problems. Eventually, when we start using MSVC we'll have entirely different problems. Anybody else feel differently? I'd hate to have EUMM::Depends unfix things for Windows when each version of Perl for Windows right now ships with a different compiler version. |
I'm happy to release with EUMM::Depends 0.80000. There remains the risk (likelihood) that a user will update to 0.80001 and then hit the same issues when building other dependencies. So hopefully a satisfactory solution can be found. @spicyjack - if it helps, the differences between the perl -V for 5.32 and 5.36dev are in this earlier comment. No one has yet commented on those in this issue (edit - except sisyphus in #80 (comment)). There is the obvious difference that lddlflags for 5.32 start with |
AFAICS, the only thing that matters is whether auto/B-Hooks-OP-Check/Check.a exists - either in vendor/lib or site/lib (or both).
There is currently no flag that will alter that. @spicyjack - I don't accept that the version of gcc/mingw is relevant to this problem. @shawnlaffan - FWIW, I support the using of EU-D-0.8000 in the upcoming releases. UPDATE: made some corrections |
Just an update to confirm that these modules pass when using
The changes will be on the wip_536 branch when next I push to it. |
I just want to add that, regarding the problem with ExtUtils-Depends-0.8001, I've reopened the original ticket at https://rt.cpan.org/Ticket/Display.html?id=45224 Re-opening it might also attract the assistance of some well informed and interested parties. Cheers, |
That's probably the better place for discussion of the issue. If a new version of I'll open a separate issue for the |
The latest dev release includes ExtUtils::Depends 0.8000. If anyone wants to look at #86 then that would be very useful. |
All except Crypt::OpenSSL::DSA are now passing. Crypt::OpenSSL::DSA has its own issue (#86) so closing this. |
Several of the Crypt builds are failing in a similar manner.
A common theme in the logs is
Warning (mostly harmless): No library found for -leay32
(or-lssl32
) followed later by errors like those below, but with differing source files:Possibly there is an issue with the SSL libs. Or it is similar to #76 where libs are not correctly passed, and which suggests a broader issue with the 5.36 builds.
I can provide full logs for each if needed.
The text was updated successfully, but these errors were encountered: