Bug 8150 - have_getaddrinfo_in_core fails
Summary: have_getaddrinfo_in_core fails
Status: REOPENED
Alias: None
Product: Spamassassin
Classification: Unclassified
Component: spamc/spamd (show other bugs)
Version: 4.0.0
Hardware: PC FreeBSD
: P2 normal
Target Milestone: Undefined
Assignee: SpamAssassin Developer Mailing List
URL:
Whiteboard:
Keywords:
Depends on:
Blocks:
 
Reported: 2023-07-28 13:53 UTC by Curtis Villamizar
Modified: 2023-11-25 12:01 UTC (History)
4 users (show)



Attachment Type Modified Status Actions Submitter/CLA Status
a proper patch to spamd.raw patch None Curtis Villamizar [HasCLA]

Note You need to log in before you can comment on or make changes to this bug.
Description Curtis Villamizar 2023-07-28 13:53:27 UTC
The variable have_getaddrinfo_in_core fails to get set.  I'm running FreeBSD stable 13.  Move the line with "require Socket" up from about line 81 to line 56 and it works.  I'm using IPv6 only so I get an error message related to "protocol 28" from the code as distributed that is produced on line 167.  This worked in spamassassin 4.0.0_2 with FreeBSD 13.2-STABLE pulled on 20230517 but not in 4.0.0_3 with FreeBSD pulled on 20230722.

diff -uw /usr/local/bin/spamd~ /usr/local/bin/spamd
--- /usr/local/bin/spamd~       2023-07-26 09:22:03.000000000 -0400
+++ /usr/local/bin/spamd        2023-07-28 08:39:33.286767000 -0400
@@ -52,6 +52,7 @@
 
 # don't force requirement on IO::Socket::IP or IO::Socket::INET6
 BEGIN {
+  require Socket;
   $have_getaddrinfo_in_core = eval {
     # The Socket module (1.94) bundled with Perl 5.14.* provides
     # new affordances for IPv6, including implementations of the
@@ -78,7 +79,6 @@
     &NI_NUMERICHOST; &NI_NUMERICSERV; &NI_NAMEREQD; 1;
   };
 
-  require Socket;
   Socket->import(qw(:DEFAULT IPPROTO_TCP));
 
   &SOCK_STREAM; &IPPROTO_TCP; &SOMAXCONN; # enable inlining
Comment 1 Curtis Villamizar 2023-07-28 14:14:13 UTC
Created attachment 5892 [details]
a proper patch to spamd.raw
Comment 2 Bill Cole 2023-07-28 15:51:18 UTC
Thanks for the patch!

I'm a bit mystified by the version interaction here, but the patch is perfectly reasonable and it certainly makes sense to require a module before testing whether it provides a feature. 

Committed in r1911328
Comment 3 RvdH 2023-11-20 09:02:09 UTC
This bugfix is responsible for all kind of warnings when running spamd -V

Constant subroutine main::EAI_FAIL redefined at .\runtime\spamd line 90, <FILE> line 3.
        eval {...} called at .\runtime\spamd line 86
        main::BEGIN() called at .\runtime\spamd line 261
        eval {...} called at .\runtime\spamd line 261
Prototype mismatch: sub main::EAI_FAIL () vs none at .\runtime\spamd line 90, <FILE> line 3.
        eval {...} called at .\runtime\spamd line 86
        main::BEGIN() called at .\runtime\spamd line 261
        eval {...} called at .\runtime\spamd line 261
Constant subroutine main::EAI_NODATA redefined at .\runtime\spamd line 90, <FILE> line 3.
        eval {...} called at .\runtime\spamd line 86
        main::BEGIN() called at .\runtime\spamd line 261
        eval {...} called at .\runtime\spamd line 261
Prototype mismatch: sub main::EAI_NODATA () vs none at .\runtime\spamd line 90, <FILE> line 3.
        eval {...} called at .\runtime\spamd line 86
        main::BEGIN() called at .\runtime\spamd line 261
        eval {...} called at .\runtime\spamd line 261
Constant subroutine main::NI_NUMERICHOST redefined at .\runtime\spamd line 90, <FILE> line 3.
        eval {...} called at .\runtime\spamd line 86
        main::BEGIN() called at .\runtime\spamd line 261
        eval {...} called at .\runtime\spamd line 261
Prototype mismatch: sub main::NI_NUMERICHOST () vs none at .\runtime\spamd line 90, <FILE> line 3.
        eval {...} called at .\runtime\spamd line 86
        main::BEGIN() called at .\runtime\spamd line 261
        eval {...} called at .\runtime\spamd line 261
Constant subroutine main::AI_CANONNAME redefined at .\runtime\spamd line 90, <FILE> line 3.
        eval {...} called at .\runtime\spamd line 86
        main::BEGIN() called at .\runtime\spamd line 261
        eval {...} called at .\runtime\spamd line 261
Prototype mismatch: sub main::AI_CANONNAME () vs none at .\runtime\spamd line 90, <FILE> line 3.
        eval {...} called at .\runtime\spamd line 86
        main::BEGIN() called at .\runtime\spamd line 261
        eval {...} called at .\runtime\spamd line 261
Constant subroutine main::NI_NAMEREQD redefined at .\runtime\spamd line 90, <FILE> line 3.
        eval {...} called at .\runtime\spamd line 86
        main::BEGIN() called at .\runtime\spamd line 261
        eval {...} called at .\runtime\spamd line 261
Prototype mismatch: sub main::NI_NAMEREQD () vs none at .\runtime\spamd line 90, <FILE> line 3.
        eval {...} called at .\runtime\spamd line 86
        main::BEGIN() called at .\runtime\spamd line 261
        eval {...} called at .\runtime\spamd line 261
Constant subroutine main::NI_NUMERICSERV redefined at .\runtime\spamd line 90, <FILE> line 3.
        eval {...} called at .\runtime\spamd line 86
        main::BEGIN() called at .\runtime\spamd line 261
        eval {...} called at .\runtime\spamd line 261
Prototype mismatch: sub main::NI_NUMERICSERV () vs none at .\runtime\spamd line 90, <FILE> line 3.
        eval {...} called at .\runtime\spamd line 86
        main::BEGIN() called at .\runtime\spamd line 261
        eval {...} called at .\runtime\spamd line 261
Prototype mismatch: sub main::EAI_SYSTEM () vs none at .\runtime\spamd line 90, <FILE> line 3.
        eval {...} called at .\runtime\spamd line 86
        main::BEGIN() called at .\runtime\spamd line 261
        eval {...} called at .\runtime\spamd line 261
Constant subroutine main::AI_PASSIVE redefined at .\runtime\spamd line 90, <FILE> line 3.
        eval {...} called at .\runtime\spamd line 86
        main::BEGIN() called at .\runtime\spamd line 261
        eval {...} called at .\runtime\spamd line 261
Prototype mismatch: sub main::AI_PASSIVE () vs none at .\runtime\spamd line 90, <FILE> line 3.
        eval {...} called at .\runtime\spamd line 86
        main::BEGIN() called at .\runtime\spamd line 261
        eval {...} called at .\runtime\spamd line 261
Prototype mismatch: sub main::EAI_BADHINTS () vs none at .\runtime\spamd line 90, <FILE> line 3.
        eval {...} called at .\runtime\spamd line 86
        main::BEGIN() called at .\runtime\spamd line 261
        eval {...} called at .\runtime\spamd line 261
Constant subroutine main::EAI_BADFLAGS redefined at .\runtime\spamd line 90, <FILE> line 3.
        eval {...} called at .\runtime\spamd line 86
        main::BEGIN() called at .\runtime\spamd line 261
        eval {...} called at .\runtime\spamd line 261
Prototype mismatch: sub main::EAI_BADFLAGS () vs none at .\runtime\spamd line 90, <FILE> line 3.
        eval {...} called at .\runtime\spamd line 86
        main::BEGIN() called at .\runtime\spamd line 261
        eval {...} called at .\runtime\spamd line 261
Constant subroutine main::EAI_SOCKTYPE redefined at .\runtime\spamd line 90, <FILE> line 3.
        eval {...} called at .\runtime\spamd line 86
        main::BEGIN() called at .\runtime\spamd line 261
        eval {...} called at .\runtime\spamd line 261
Prototype mismatch: sub main::EAI_SOCKTYPE () vs none at .\runtime\spamd line 90, <FILE> line 3.
        eval {...} called at .\runtime\spamd line 86
        main::BEGIN() called at .\runtime\spamd line 261
        eval {...} called at .\runtime\spamd line 261
Constant subroutine main::EAI_SERVICE redefined at .\runtime\spamd line 90, <FILE> line 3.
        eval {...} called at .\runtime\spamd line 86
        main::BEGIN() called at .\runtime\spamd line 261
        eval {...} called at .\runtime\spamd line 261
Prototype mismatch: sub main::EAI_SERVICE () vs none at .\runtime\spamd line 90, <FILE> line 3.
        eval {...} called at .\runtime\spamd line 86
        main::BEGIN() called at .\runtime\spamd line 261
        eval {...} called at .\runtime\spamd line 261
Prototype mismatch: sub main::EAI_ADDRFAMILY () vs none at .\runtime\spamd line 90, <FILE> line 3.
        eval {...} called at .\runtime\spamd line 86
        main::BEGIN() called at .\runtime\spamd line 261
        eval {...} called at .\runtime\spamd line 261
Prototype mismatch: sub main::AI_ALL () vs none at .\runtime\spamd line 90, <FILE> line 3.
        eval {...} called at .\runtime\spamd line 86
        main::BEGIN() called at .\runtime\spamd line 261
        eval {...} called at .\runtime\spamd line 261
Prototype mismatch: sub main::AI_V4MAPPED () vs none at .\runtime\spamd line 90, <FILE> line 3.
        eval {...} called at .\runtime\spamd line 86
        main::BEGIN() called at .\runtime\spamd line 261
        eval {...} called at .\runtime\spamd line 261
Constant subroutine main::EAI_NONAME redefined at .\runtime\spamd line 90, <FILE> line 3.
        eval {...} called at .\runtime\spamd line 86
        main::BEGIN() called at .\runtime\spamd line 261
        eval {...} called at .\runtime\spamd line 261
Prototype mismatch: sub main::EAI_NONAME () vs none at .\runtime\spamd line 90, <FILE> line 3.
        eval {...} called at .\runtime\spamd line 86
        main::BEGIN() called at .\runtime\spamd line 261
        eval {...} called at .\runtime\spamd line 261
Constant subroutine main::NI_NOFQDN redefined at .\runtime\spamd line 90, <FILE> line 3.
        eval {...} called at .\runtime\spamd line 86
        main::BEGIN() called at .\runtime\spamd line 261
        eval {...} called at .\runtime\spamd line 261
Prototype mismatch: sub main::NI_NOFQDN () vs none at .\runtime\spamd line 90, <FILE> line 3.
        eval {...} called at .\runtime\spamd line 86
        main::BEGIN() called at .\runtime\spamd line 261
        eval {...} called at .\runtime\spamd line 261
Prototype mismatch: sub main::EAI_PROTOCOL () vs none at .\runtime\spamd line 90, <FILE> line 3.
        eval {...} called at .\runtime\spamd line 86
        main::BEGIN() called at .\runtime\spamd line 261
        eval {...} called at .\runtime\spamd line 261
Prototype mismatch: sub main::AI_NUMERICSERV () vs none at .\runtime\spamd line 90, <FILE> line 3.
        eval {...} called at .\runtime\spamd line 86
        main::BEGIN() called at .\runtime\spamd line 261
        eval {...} called at .\runtime\spamd line 261
Prototype mismatch: sub main::AI_ADDRCONFIG () vs none at .\runtime\spamd line 90, <FILE> line 3.
        eval {...} called at .\runtime\spamd line 86
        main::BEGIN() called at .\runtime\spamd line 261
        eval {...} called at .\runtime\spamd line 261
Constant subroutine main::NI_DGRAM redefined at .\runtime\spamd line 90, <FILE> line 3.
        eval {...} called at .\runtime\spamd line 86
        main::BEGIN() called at .\runtime\spamd line 261
        eval {...} called at .\runtime\spamd line 261
Prototype mismatch: sub main::NI_DGRAM () vs none at .\runtime\spamd line 90, <FILE> line 3.
        eval {...} called at .\runtime\spamd line 86
        main::BEGIN() called at .\runtime\spamd line 261
        eval {...} called at .\runtime\spamd line 261
Constant subroutine main::AI_NUMERICHOST redefined at .\runtime\spamd line 90, <FILE> line 3.
        eval {...} called at .\runtime\spamd line 86
        main::BEGIN() called at .\runtime\spamd line 261
        eval {...} called at .\runtime\spamd line 261
Prototype mismatch: sub main::AI_NUMERICHOST () vs none at .\runtime\spamd line 90, <FILE> line 3.
        eval {...} called at .\runtime\spamd line 86
        main::BEGIN() called at .\runtime\spamd line 261
        eval {...} called at .\runtime\spamd line 261
Constant subroutine main::EAI_FAMILY redefined at .\runtime\spamd line 90, <FILE> line 3.
        eval {...} called at .\runtime\spamd line 86
        main::BEGIN() called at .\runtime\spamd line 261
        eval {...} called at .\runtime\spamd line 261
Prototype mismatch: sub main::EAI_FAMILY () vs none at .\runtime\spamd line 90, <FILE> line 3.
        eval {...} called at .\runtime\spamd line 86
        main::BEGIN() called at .\runtime\spamd line 261
        eval {...} called at .\runtime\spamd line 261
Constant subroutine main::EAI_AGAIN redefined at .\runtime\spamd line 90, <FILE> line 3.
        eval {...} called at .\runtime\spamd line 86
        main::BEGIN() called at .\runtime\spamd line 261
        eval {...} called at .\runtime\spamd line 261
Prototype mismatch: sub main::EAI_AGAIN () vs none at .\runtime\spamd line 90, <FILE> line 3.
        eval {...} called at .\runtime\spamd line 86
        main::BEGIN() called at .\runtime\spamd line 261
        eval {...} called at .\runtime\spamd line 261
SpamAssassin Server version 4.0.0-r1913803
  running on Perl 5.30.3
  with SSL support (IO::Socket::SSL 2.068)
  with zlib support (Compress::Zlib 2.093)
Comment 4 Bill Cole 2023-11-20 19:07:47 UTC
I cannot reproduce those warnings with a spamd freshly built from trunk on Perl 5.34.1. I suspect from a cursory look at the nature of those messages that this is an idiosyncratic set of warnings likely due to inconsistent or duplicative versions of the Socket and/or Socket6 and/or IO::Socket::{IP,INET6} installed. This is most likely to happen in an older system that has been upgraded in place over a long time. I don't believe that any of these are actually harmful errors.

Also, the line numbers cited in those error messages don't seem to me to match the current version of spamd. Is it possible that you have a modified version? 

Can you rebuild from a clean trunk checkout to confirm this?
Comment 5 RvdH 2023-11-20 19:53:59 UTC
C:\Strawberry\perl\site\bin>spamd -V
Prototype mismatch: sub main::AI_ADDRCONFIG () vs none at spamd line 77.
        eval {...} called at spamd line 73
        main::BEGIN() called at spamd line 248
        eval {...} called at spamd line 248
Constant subroutine main::NI_NAMEREQD redefined at spamd line 77.
        eval {...} called at spamd line 73
        main::BEGIN() called at spamd line 248
        eval {...} called at spamd line 248
Prototype mismatch: sub main::NI_NAMEREQD () vs none at spamd line 77.
        eval {...} called at spamd line 73
        main::BEGIN() called at spamd line 248
        eval {...} called at spamd line 248
Prototype mismatch: sub main::AI_V4MAPPED () vs none at spamd line 77.
        eval {...} called at spamd line 73
        main::BEGIN() called at spamd line 248
        eval {...} called at spamd line 248
Constant subroutine main::EAI_BADFLAGS redefined at spamd line 77.
        eval {...} called at spamd line 73
        main::BEGIN() called at spamd line 248
        eval {...} called at spamd line 248
Prototype mismatch: sub main::EAI_BADFLAGS () vs none at spamd line 77.
        eval {...} called at spamd line 73
        main::BEGIN() called at spamd line 248
        eval {...} called at spamd line 248
Prototype mismatch: sub main::AI_NUMERICSERV () vs none at spamd line 77.
        eval {...} called at spamd line 73
        main::BEGIN() called at spamd line 248
        eval {...} called at spamd line 248
Prototype mismatch: sub main::EAI_SYSTEM () vs none at spamd line 77.
        eval {...} called at spamd line 73
        main::BEGIN() called at spamd line 248
        eval {...} called at spamd line 248
Constant subroutine main::NI_NUMERICSERV redefined at spamd line 77.
        eval {...} called at spamd line 73
        main::BEGIN() called at spamd line 248
        eval {...} called at spamd line 248
Prototype mismatch: sub main::NI_NUMERICSERV () vs none at spamd line 77.
        eval {...} called at spamd line 73
        main::BEGIN() called at spamd line 248
        eval {...} called at spamd line 248
Constant subroutine main::EAI_NODATA redefined at spamd line 77.
        eval {...} called at spamd line 73
        main::BEGIN() called at spamd line 248
        eval {...} called at spamd line 248
Prototype mismatch: sub main::EAI_NODATA () vs none at spamd line 77.
        eval {...} called at spamd line 73
        main::BEGIN() called at spamd line 248
        eval {...} called at spamd line 248
Constant subroutine main::NI_NOFQDN redefined at spamd line 77.
        eval {...} called at spamd line 73
        main::BEGIN() called at spamd line 248
        eval {...} called at spamd line 248
Prototype mismatch: sub main::NI_NOFQDN () vs none at spamd line 77.
        eval {...} called at spamd line 73
        main::BEGIN() called at spamd line 248
        eval {...} called at spamd line 248
Constant subroutine main::AI_PASSIVE redefined at spamd line 77.
        eval {...} called at spamd line 73
        main::BEGIN() called at spamd line 248
        eval {...} called at spamd line 248
Prototype mismatch: sub main::AI_PASSIVE () vs none at spamd line 77.
        eval {...} called at spamd line 73
        main::BEGIN() called at spamd line 248
        eval {...} called at spamd line 248
Constant subroutine main::EAI_FAMILY redefined at spamd line 77.
        eval {...} called at spamd line 73
        main::BEGIN() called at spamd line 248
        eval {...} called at spamd line 248
Prototype mismatch: sub main::EAI_FAMILY () vs none at spamd line 77.
        eval {...} called at spamd line 73
        main::BEGIN() called at spamd line 248
        eval {...} called at spamd line 248
Constant subroutine main::EAI_AGAIN redefined at spamd line 77.
        eval {...} called at spamd line 73
        main::BEGIN() called at spamd line 248
        eval {...} called at spamd line 248
Prototype mismatch: sub main::EAI_AGAIN () vs none at spamd line 77.
        eval {...} called at spamd line 73
        main::BEGIN() called at spamd line 248
        eval {...} called at spamd line 248
Prototype mismatch: sub main::EAI_PROTOCOL () vs none at spamd line 77.
        eval {...} called at spamd line 73
        main::BEGIN() called at spamd line 248
        eval {...} called at spamd line 248
Constant subroutine main::NI_DGRAM redefined at spamd line 77.
        eval {...} called at spamd line 73
        main::BEGIN() called at spamd line 248
        eval {...} called at spamd line 248
Prototype mismatch: sub main::NI_DGRAM () vs none at spamd line 77.
        eval {...} called at spamd line 73
        main::BEGIN() called at spamd line 248
        eval {...} called at spamd line 248
Constant subroutine main::AI_NUMERICHOST redefined at spamd line 77.
        eval {...} called at spamd line 73
        main::BEGIN() called at spamd line 248
        eval {...} called at spamd line 248
Prototype mismatch: sub main::AI_NUMERICHOST () vs none at spamd line 77.
        eval {...} called at spamd line 73
        main::BEGIN() called at spamd line 248
        eval {...} called at spamd line 248
Constant subroutine main::AI_CANONNAME redefined at spamd line 77.
        eval {...} called at spamd line 73
        main::BEGIN() called at spamd line 248
        eval {...} called at spamd line 248
Prototype mismatch: sub main::AI_CANONNAME () vs none at spamd line 77.
        eval {...} called at spamd line 73
        main::BEGIN() called at spamd line 248
        eval {...} called at spamd line 248
Prototype mismatch: sub main::EAI_ADDRFAMILY () vs none at spamd line 77.
        eval {...} called at spamd line 73
        main::BEGIN() called at spamd line 248
        eval {...} called at spamd line 248
Constant subroutine main::EAI_FAIL redefined at spamd line 77.
        eval {...} called at spamd line 73
        main::BEGIN() called at spamd line 248
        eval {...} called at spamd line 248
Prototype mismatch: sub main::EAI_FAIL () vs none at spamd line 77.
        eval {...} called at spamd line 73
        main::BEGIN() called at spamd line 248
        eval {...} called at spamd line 248
Constant subroutine main::EAI_NONAME redefined at spamd line 77.
        eval {...} called at spamd line 73
        main::BEGIN() called at spamd line 248
        eval {...} called at spamd line 248
Prototype mismatch: sub main::EAI_NONAME () vs none at spamd line 77.
        eval {...} called at spamd line 73
        main::BEGIN() called at spamd line 248
        eval {...} called at spamd line 248
Constant subroutine main::NI_NUMERICHOST redefined at spamd line 77.
        eval {...} called at spamd line 73
        main::BEGIN() called at spamd line 248
        eval {...} called at spamd line 248
Prototype mismatch: sub main::NI_NUMERICHOST () vs none at spamd line 77.
        eval {...} called at spamd line 73
        main::BEGIN() called at spamd line 248
        eval {...} called at spamd line 248
Prototype mismatch: sub main::EAI_BADHINTS () vs none at spamd line 77.
        eval {...} called at spamd line 73
        main::BEGIN() called at spamd line 248
        eval {...} called at spamd line 248
Constant subroutine main::EAI_SERVICE redefined at spamd line 77.
        eval {...} called at spamd line 73
        main::BEGIN() called at spamd line 248
        eval {...} called at spamd line 248
Prototype mismatch: sub main::EAI_SERVICE () vs none at spamd line 77.
        eval {...} called at spamd line 73
        main::BEGIN() called at spamd line 248
        eval {...} called at spamd line 248
Prototype mismatch: sub main::AI_ALL () vs none at spamd line 77.
        eval {...} called at spamd line 73
        main::BEGIN() called at spamd line 248
        eval {...} called at spamd line 248
Constant subroutine main::EAI_SOCKTYPE redefined at spamd line 77.
        eval {...} called at spamd line 73
        main::BEGIN() called at spamd line 248
        eval {...} called at spamd line 248
Prototype mismatch: sub main::EAI_SOCKTYPE () vs none at spamd line 77.
        eval {...} called at spamd line 73
        main::BEGIN() called at spamd line 248
        eval {...} called at spamd line 248
SpamAssassin Server version 4.0.0-r1913803
  running on Perl 5.30.0
  with SSL support (IO::Socket::SSL 2.066)
  with zlib support (Compress::Zlib 2.086)
Comment 6 RvdH 2023-11-20 19:58:16 UTC
PS, running on Windows, Perl 5.34.x is not available from Strawberry Perl
Comment 7 Giovanni Bechis 2023-11-21 09:52:59 UTC
Works for me on Windows.

PS C:\Strawberry\perl\site\bin> .\spamd -V
SpamAssassin Server version 4.0.0-rsvnunknown
  running on Perl 5.38.0
  with SSL support (IO::Socket::SSL 2.083)
  with zlib support (Compress::Zlib 2.204)

What's the output of this command ?
perl -e 'use Socket; print Socket->VERSION'
Comment 8 RvdH 2023-11-23 10:56:43 UTC
I had to use double quotes for that command to work, it says:

perl -e "use Socket; print Socket->VERSION"
2.029
Comment 9 RvdH 2023-11-23 11:21:08 UTC
Tried updating to Socket v2.037, doesn't make a difference regarding the warnings
Comment 10 RvdH 2023-11-23 11:23:36 UTC
Socket6 is the latest, eg:

perl -e "use Socket6; print Socket6->VERSION"
0.29
Comment 11 Giovanni Bechis 2023-11-23 16:41:00 UTC
I can replicate this with Perl 5.30 on Windows and with Perl 5.28 on Linux.
Comment 12 RvdH 2023-11-23 17:02:01 UTC
Same with Perl 5.32.x

I tried Perl 5.38.x, but i got a whole handful of other issues when trying to build that on a Windows system, like not able to build optional module(s), Net::LibIDN2 or Net::LibIDN, Mail::SPF and Mail::DMARC
Comment 13 RvdH 2023-11-23 17:05:45 UTC
FYI, the warnings are gone on 5.38.x but that seems a no go for now until i am able to build (some of) the optional modules
Comment 14 Sidney Markowitz 2023-11-23 21:05:18 UTC
(In reply to RvdH from comment #13)
> FYI, the warnings are gone on 5.38.x but that seems a no go for now until i
> am able to build (some of) the optional modules

Those optional modules are optional for a reason. They don't support Windows, and SpamAssassin will run, though without the functionality they support, if they are not installed.

It might be possible to get them to work in Windows and to submit patches to the module maintainers and get them to accept them, but that hasn't happened yet. Here is a runup at that with LibIDN from back in 2010 which didn't go anywhere: https://www.perlmonks.org/?node_id=741544

Mail::SPF is a little more forgiving. On some platforms I have to use options to specify where to put the executable it generates and force it to install even with failing tests, but then the client works. However I still haven't gotten that one to work in Windows.
Comment 15 RvdH 2023-11-23 21:17:17 UTC
In the meantime I have been able to install Mail::SPF (manually after patching some lines) and Mail::DMARC (using force)

Net::LibIDN2 install fine on (Strawberry) Perl 5.30.x and 5.32.x but not on anything higher, that is rather weird, no?
Comment 16 RvdH 2023-11-23 21:21:27 UTC
Mail::SPF patch/diff

https://rt.cpan.org/Public/Bug/Display.html?id=93241
Comment 17 RvdH 2023-11-25 12:01:17 UTC
As noted i am aware it are just warnings, fact is i really don't like them much, so i altered spamd,

new location

  if ($] >= 5.034000) {
    require Socket;
  }

old location

  if ($] < 5.034000) {
    require Socket;
  }

Any downside doing this like so?