svn commit: r1936135 - spamassassin/trunk/lib/Mail/SpamAssassin/Plugin
[email protected] Tue, 14 Jul 2026 15:16:40 -0000
| Newsgroups | gmane.mail.spam.spamassassin.cvs |
|---|---|
| Message-ID | <178404220098.331171.16308867042204409233@svn03-he-fi> |
Author: gbechis
Date: Tue Jul 14 15:16:40 2026
New Revision: 1936135
Log:
make AI::Fann optional
Modified:
spamassassin/trunk/lib/Mail/SpamAssassin/Plugin/NeuralNetwork.pm
Modified: spamassassin/trunk/lib/Mail/SpamAssassin/Plugin/NeuralNetwork.pm
==============================================================================
--- spamassassin/trunk/lib/Mail/SpamAssassin/Plugin/NeuralNetwork.pm Tue Jul 14 14:25:20 2026 (r1936134)
+++ spamassassin/trunk/lib/Mail/SpamAssassin/Plugin/NeuralNetwork.pm Tue Jul 14 15:16:40 2026 (r1936135)
@@ -44,9 +44,19 @@ use strict;
use warnings;
use re 'taint';
-my $VERSION = 0.11.2;
+my $VERSION = 0.11.3;
-use AI::FANN qw(:all);
+our $HAS_AI_FANN;
+BEGIN {
+ $HAS_AI_FANN = eval { require AI::FANN; AI::FANN->import(qw(:all)); 1 };
+ unless ($HAS_AI_FANN) {
+ # define no-op fallbacks so bareword constants below still compile
+ # under `use strict` when AI::FANN isn't installed
+ no strict 'refs';
+ *{$_} = sub () { 0 } for qw(FANN_SIGMOID FANN_TRAIN_BATCH
+ FANN_TRAIN_INCREMENTAL FANN_TRAIN_QUICKPROP FANN_TRAIN_RPROP);
+ }
+}
use Storable qw(store retrieve);
use File::Copy qw(copy);
use File::Spec;
@@ -622,6 +632,10 @@ sub learn_message {
my $conf = $self->{main}->{conf};
return unless $conf->{use_neuralnetwork};
+ unless ($HAS_AI_FANN) {
+ dbg("AI::FANN is not installed, skipping training");
+ return 0;
+ }
$self->_init_sql_connection($conf) if defined $conf->{neuralnetwork_dsn};
my $min_text_len = $conf->{neuralnetwork_min_text_len};
@@ -869,6 +883,10 @@ sub forget_message {
my $conf = $self->{main}->{conf};
return unless $conf->{use_neuralnetwork};
+ unless ($HAS_AI_FANN) {
+ dbg("AI::FANN is not installed, skipping forget");
+ return 0;
+ }
$self->_init_sql_connection($conf) if defined $conf->{neuralnetwork_dsn};
@@ -1450,7 +1468,11 @@ sub _check_neuralnetwork {
my $conf = $self->{main}->{conf};
return unless $conf->{use_neuralnetwork};
return 0 if (!$self->{main}->{conf}->{use_learner});
-
+ unless ($HAS_AI_FANN) {
+ dbg("AI::FANN is not installed, skipping check");
+ return 0;
+ }
+
my $msg = $pms->{msg};
if(exists $pms->{neuralnetwork_prediction}) {