Mailing List Archive

svn commit: r326272 - in /spamassassin/trunk: MANIFEST MANIFEST.SKIP Makefile.PL build/mkrules
Author: jm
Date: Tue Oct 18 15:11:28 2005
New Revision: 326272

URL: http://svn.apache.org/viewcvs?rev=326272&view=rev
Log:
change of plan -- let the wookie win. ;)

Avoid MANIFEST/"dist"/install issues, by limiting the rule filenames to just a
pre-defined set.

That way, we're back to MANIFEST containing the list of files in the "rules"
directory. That dir includes both code-tied (source) and rules project (built)
rules files. The "rulescode" dir is gone, again.

The "rulesrc" dir is SVN-only, and not in tarballs -- the package produced by
make dist/make tardist etc. will contain the built rules files in "rules".
"make install" then installs those files.

This means that there may still be issues running "make install" from
an SVN checkout -- but it will always work from a tarball, since that
will contain the "built" files.

Non-"publish"ed sandbox rules are written to rules/70_sandbox.cf, and this file
is *not* installed.


Modified:
spamassassin/trunk/MANIFEST
spamassassin/trunk/MANIFEST.SKIP
spamassassin/trunk/Makefile.PL
spamassassin/trunk/build/mkrules

Modified: spamassassin/trunk/MANIFEST
URL: http://svn.apache.org/viewcvs/spamassassin/trunk/MANIFEST?rev=326272&r1=326271&r2=326272&view=diff
==============================================================================
--- spamassassin/trunk/MANIFEST (original)
+++ spamassassin/trunk/MANIFEST Tue Oct 18 15:11:28 2005
@@ -339,6 +339,7 @@
t/razor2.t
t/rcvd_parser.t
t/recips.t
+t/recreate.t
t/recursion.t
t/regexp_valid.t
t/relative_scores.t
@@ -408,59 +409,59 @@
tools/test_extract
tools/triplets.pl
build/mkrules
-rulesrc/core/tmp.cf
-rulescode/10_default_prefs.cf
-rulescode/20_dnsbl_tests.cf
-rulescode/20_html_tests.cf
-rulescode/20_net_tests.cf
-rulescode/23_bayes.cf
-rulescode/25_accessdb.cf
-rulescode/25_antivirus.cf
-rulescode/25_dcc.cf
-rulescode/25_domainkeys.cf
-rulescode/25_hashcash.cf
-rulescode/25_pyzor.cf
-rulescode/25_razor2.cf
-rulescode/25_spf.cf
-rulescode/25_textcat.cf
-rulescode/25_uribl.cf
-rulescode/60_awl.cf
-rulescode/60_whitelist.cf
-rulescode/60_whitelist_subject.cf
-rulescode/70_broken_rules.cf
-rulescode/70_testing.cf
-rulescode/70_uribl.cf
-rulescode/init.pre
-rulescode/languages
-rulescode/local.cf
-rulescode/name-triplets.txt
-rulescode/regression_tests.cf
-rulescode/STATISTICS-set0.txt
-rulescode/STATISTICS-set1.txt
-rulescode/STATISTICS-set2.txt
-rulescode/STATISTICS-set3.txt
-rulescode/triplets.txt
-rulescode/user_prefs.template
-rulescode/v310.pre
-rulesrc/core/20_advance_fee.cf
-rulesrc/core/20_meta_tests.cf
-rulesrc/core/20_compensate.cf
-rulesrc/core/20_porn.cf
-rulesrc/core/20_body_tests.cf
-rulesrc/core/60_whitelist_spf.cf
-rulesrc/core/20_fake_helo_tests.cf
-rulesrc/core/25_replace.cf
-rulesrc/core/20_uri_tests.cf
-rulesrc/core/50_scores.cf
-rulesrc/core/20_head_tests.cf
-rulesrc/core/20_drugs.cf
-rulesrc/core/20_phrases.cf
-rulesrc/core/20_ratware.cf
-rulesrc/lang/es/25_body_tests_es.cf
-rulesrc/lang/pl/25_body_tests_pl.cf
-rulesrc/lang/pl/30_text_pl.cf
-rulesrc/lang/de/30_text_de.cf
-rulesrc/lang/fr/30_text_fr.cf
-rulesrc/lang/it/30_text_it.cf
-rulesrc/lang/nl/30_text_nl.cf
-rulesrc/lang/pt_br/30_text_pt_br.cf
+rules/10_default_prefs.cf
+rules/20_advance_fee.cf
+rules/20_body_tests.cf
+rules/20_compensate.cf
+rules/20_dnsbl_tests.cf
+rules/20_drugs.cf
+rules/20_fake_helo_tests.cf
+rules/20_head_tests.cf
+rules/20_html_tests.cf
+rules/20_meta_tests.cf
+rules/20_net_tests.cf
+rules/20_phrases.cf
+rules/20_porn.cf
+rules/20_ratware.cf
+rules/20_uri_tests.cf
+rules/23_bayes.cf
+rules/25_accessdb.cf
+rules/25_antivirus.cf
+rules/25_body_tests_es.cf
+rules/25_body_tests_pl.cf
+rules/25_dcc.cf
+rules/25_domainkeys.cf
+rules/25_hashcash.cf
+rules/25_pyzor.cf
+rules/25_razor2.cf
+rules/25_replace.cf
+rules/25_spf.cf
+rules/25_textcat.cf
+rules/25_uribl.cf
+rules/30_text_de.cf
+rules/30_text_fr.cf
+rules/30_text_it.cf
+rules/30_text_nl.cf
+rules/30_text_pl.cf
+rules/30_text_pt_br.cf
+rules/50_scores.cf
+rules/60_awl.cf
+rules/60_whitelist.cf
+rules/60_whitelist_spf.cf
+rules/60_whitelist_subject.cf
+rules/70_broken_rules.cf
+rules/70_sandbox.cf
+rules/70_testing.cf
+rules/70_uribl.cf
+rules/STATISTICS-set0.txt
+rules/STATISTICS-set1.txt
+rules/STATISTICS-set2.txt
+rules/STATISTICS-set3.txt
+rules/init.pre
+rules/languages
+rules/local.cf
+rules/name-triplets.txt
+rules/regression_tests.cf
+rules/triplets.txt
+rules/user_prefs.template
+rules/v310.pre

Modified: spamassassin/trunk/MANIFEST.SKIP
URL: http://svn.apache.org/viewcvs/spamassassin/trunk/MANIFEST.SKIP?rev=326272&r1=326271&r2=326272&view=diff
==============================================================================
--- spamassassin/trunk/MANIFEST.SKIP (original)
+++ spamassassin/trunk/MANIFEST.SKIP Tue Oct 18 15:11:28 2005
@@ -111,3 +111,4 @@
^build/describe-to-po-file$
^masses/enable-all-evolved-rules$
^masses/evolve_metarule/Makefile$
+^rules/70_sandbox.cf$

Modified: spamassassin/trunk/Makefile.PL
URL: http://svn.apache.org/viewcvs/spamassassin/trunk/Makefile.PL?rev=326272&r1=326271&r2=326272&view=diff
==============================================================================
--- spamassassin/trunk/Makefile.PL (original)
+++ spamassassin/trunk/Makefile.PL Tue Oct 18 15:11:28 2005
@@ -227,9 +227,7 @@

'version.env',

- 't/bayessql.cf', 't/do_net', 't/log', 't/sql_based_whitelist.cf',
-
- 'rules/*'
+ 't/bayessql.cf', 't/do_net', 't/log', 't/sql_based_whitelist.cf'
)

},
@@ -1041,11 +1039,8 @@
spamd/spamd: spamd/spamd.raw
$(PREPROCESS) $(FIXBYTES) $(FIXVARS) $(FIXBANG) -m$(PERM_RWX) -i$? -o$@

-build_rules: rulesrc rulescode rules
- $(PERL) build/mkrules --src rulesrc --src rulescode --out rules
-
-rules:
- $(PERL) -e 'mkdir "rules" or die'
+build_rules:
+ $(PERL) build/mkrules --src rulesrc --out rules --manifest MANIFEST --manifestskip MANIFEST.SKIP

SPAMC_MAKEFILE = spamc/Makefile
MAKE_SPAMC = $(MAKE) -f $(SPAMC_MAKEFILE)

Modified: spamassassin/trunk/build/mkrules
URL: http://svn.apache.org/viewcvs/spamassassin/trunk/build/mkrules?rev=326272&r1=326271&r2=326272&view=diff
==============================================================================
--- spamassassin/trunk/build/mkrules (original)
+++ spamassassin/trunk/build/mkrules Tue Oct 18 15:11:28 2005
@@ -28,10 +28,18 @@
use strict;
use File::Find;
use File::Copy;
-
use Getopt::Long;
-use vars qw(@opt_srcs $opt_out $opt_sandboxout);
-GetOptions("src=s" => \@opt_srcs, "out=s", "sandboxout=s");
+
+use vars qw(
+ @opt_srcs $opt_out $opt_sandboxout $opt_manifest
+ $opt_manifestskip
+);
+GetOptions("src=s" => \@opt_srcs,
+ "out=s",
+ "sandboxout=s",
+ "manifest=s",
+ "manifestskip=s"
+ );

if (!@opt_srcs) {
foreach ( 'rulescode', 'rulesrc' ) {
@@ -46,14 +54,17 @@
die "no out" unless ($opt_out);
die "unreadable out" unless (-d $opt_out);

-$opt_sandboxout ||= "$opt_out/70_sandbox.cf";
+$opt_sandboxout ||= "70_sandbox.cf";

# source files that need compilation, and their targets
my $needs_compile = { };
my $current_src;

foreach my $src (@opt_srcs) {
- die "unreadable src" unless (-d $src);
+ if (!-d $src) {
+ warn "WARNING: unreadable src '$src'\n";
+ next;
+ }
$current_src = $src;
File::Find::find ({
wanted => \&wanted,
@@ -61,6 +72,15 @@
}, $src);
}

+my $file_manifest = { };
+my $file_manifest_skip = [ ];
+if ($opt_manifest) {
+ read_manifest($opt_manifest);
+}
+if ($opt_manifestskip) {
+ read_manifest_skip($opt_manifestskip);
+}
+
# context for the rules compiler
my $seen_rules = { };
my $said_renamed_warning = { };
@@ -253,6 +273,14 @@
# is set to "0". iow: publish RULE_NAME [(0 | 1)] [default: 1]
if (!defined $val) { $val = '1'; }
}
+ elsif ($command eq 'pubfile') {
+ if (!filename_in_manifest($opt_out.'/'.$val)) {
+ my $sbout = $opt_out.'/'.$opt_sandboxout;
+ warn "$val: WARNING: not listed in manifest file, using $sbout\n";
+ $val = $sbout;
+ }
+ }
+
$rules->{$name}->{$command} = $val;
}
elsif (/^
@@ -287,7 +315,7 @@
$pubfile = ($rules->{$name}->{pubfile} || $filename);
$pubfile = $opt_out.'/'.$pubfile;
} else {
- $pubfile = $opt_sandboxout;
+ $pubfile = $opt_out.'/'.$opt_sandboxout;
}
$output_files->{$pubfile} = 1;

@@ -373,7 +401,7 @@
my $name = $2;
my $val = $3;

- warn "$f: cannot use 'publish' in non-sandbox files\n";
+ warn "$f: WARNING: cannot use 'publish' in non-sandbox files\n";
}
}
close IN;
@@ -388,6 +416,11 @@
unlink $pubfile or die "cannot remove output file '$pubfile'";
}

+ if (!filename_in_manifest($pubfile)) {
+ # if (!filename_in_manifest($opt_out.'/'.$val)) {
+ warn "$pubfile: WARNING: not listed in manifest file\n";
+ }
+
if ($output_file_text->{$pubfile}) {
open (OUT, ">".$pubfile) or die "cannot write to output file '$pubfile'";
print OUT $output_file_text->{$pubfile};
@@ -434,4 +467,35 @@
my $now = scalar localtime time;
return "# [compiled from '$filename' on $now]\n";
}
+
+sub read_manifest {
+ my ($mfest) = @_;
+ open (IN, "<$mfest") or warn "cannot read $mfest";
+ while (<IN>) {
+ next if /^#/;
+ /^\s*(.*?)\s*$/ and $file_manifest->{$1} = 1;
+ }
+ close IN;
+}
+
+sub read_manifest_skip {
+ my ($mfest) = @_;
+ open (IN, "<$mfest") or warn "cannot read $mfest";
+ while (<IN>) {
+ next if /^#/;
+ /^\s*(.*?)\s*$/ and push (@{$file_manifest_skip}, qr/$1/);
+ }
+ close IN;
+}
+
+sub filename_in_manifest {
+ my ($fname) = @_;
+ return 1 if ($file_manifest->{$fname});
+ foreach my $skipre (@{$file_manifest_skip}) {
+ # warn "JMD $skipre $fname";
+ return 1 if ($fname =~ $skipre);
+ }
+ return 0;
+}
+