fixed Makefile bugs

added support for ezmlm-idx v5.0
This commit is contained in:
lars 2005-12-26 17:20:58 +00:00
parent eaca96a963
commit a3d1e3ec40
2 changed files with 64 additions and 24 deletions

View file

@ -144,7 +144,8 @@ sub update {
# can we actually alter this list; # can we actually alter this list;
($self->_seterror(-1, 'must setlist() before you update()') && return 0) unless(defined($self->{'LIST_NAME'})); ($self->_seterror(-1, 'must setlist() before you update()') && return 0) unless(defined($self->{'LIST_NAME'}));
($self->_seterror(-1, "$self->{'LIST_NAME'} does not appear to be a valid list in update()") && return 0) unless(-e "$self->{'LIST_NAME'}/config"); # check for important files: 'config' (idx < v5.0) or 'flags' (idx >= 5.0)
($self->_seterror(-1, "$self->{'LIST_NAME'} does not appear to be a valid list in update()") && return 0) unless((-e "$self->{'LIST_NAME'}/config") || (-e "$self->{'LIST_NAME'}/flags"));
# Work out if this is a vhost. # Work out if this is a vhost.
open(OUTHOST, "<$self->{'LIST_NAME'}/outhost") || ($self->_seterror(-1, 'unable to read outhost in update()') && return 0); open(OUTHOST, "<$self->{'LIST_NAME'}/outhost") || ($self->_seterror(-1, 'unable to read outhost in update()') && return 0);
@ -176,15 +177,15 @@ sub update {
# == Get a list of options for the current list == # == Get a list of options for the current list ==
sub getconfig { sub getconfig {
my($self) = @_; my($self) = @_;
my($options, $i); my($options);
# Read the config file # Read the config file
if(open(CONFIG, "<$self->{'LIST_NAME'}/dot")) { if(-e "$self->{'LIST_NAME'}/flags") {
# this file exists since ezmlm-idx-5.0.0 # this file exists since ezmlm-idx-5.0.0
# 'config' is not authorative anymore since this version # 'config' is not authorative anymore since that version
$option = $self->_getconfigmanual_idx5(); $options = $self->_getconfig_idx5();
} elsif(open(CONFIG, "<$self->{'LIST_NAME'}/config")) { } elsif(open(CONFIG, "<$self->{'LIST_NAME'}/config")) {
# 'config' contains the authorative information # 'config' contains the authorative information
while(<CONFIG>) { while(<CONFIG>) {
if (/^F:-(\w+)/) { if (/^F:-(\w+)/) {
$options = $1; $options = $1;
@ -194,19 +195,13 @@ sub getconfig {
} }
close CONFIG; close CONFIG;
} else { } else {
# Try manually # Try manually - this will ignore all string settings, that can only be found
$options = $self->_getconfigmanual_idx4(); # in the config file
$options = $self->_getconfigmanual();
} }
($self->_seterror(-1, 'unable to read configuration in getconfig()') && return undef) unless (defined($options)); ($self->_seterror(-1, 'unable to read configuration in getconfig()') && return undef) unless (defined($options));
# Add the unselected options too
# TODO: this is not especially great, as some options are undefined and cause an
# error, if you use it for update
foreach $i ('a' .. 'z') {
$options .= uc($i) unless ($options =~ /$i/i)
}
$self->_seterror(undef); $self->_seterror(undef);
return $options; return $options;
} }
@ -514,10 +509,45 @@ sub _checkaddress {
return 1; return 1;
} }
# == Internal function to work out a list configuration == # == Internal function to work out a list configuration (idx >= v5.0) ==
sub _getconfigmanual_idx4 { sub _getconfig_idx5 {
my($self) = @_; my($self) = @_;
my ($savedollarslash, $options, $manager, $editor); my ($options, %optionfiles);
my ($file, $opt_num, $temp);
# read flag file (available since ezmlm-idx 5.0.0)
$options = chomp($self->getpart('flags'));
# remove prefixed '-'
$options =~ s/^-//;
# since ezmlm-idx v5, we have to read the config
# values from different files
# first: preset a array with "filename" and "option_number"
%optionfiles = (
'sublist', '0',
'fromheader', '3',
'tstdigopts', '4',
'owner', '5',
'sql', '6',
'modpost', '7',
'modsub', '8');
# "-9" seems to be ignored - this is a good change (tm)
while (($file, $opt_num) = each(%optionfiles)) {
if (-e "$self->{'LIST_NAME'}/$file") {
$temp = chomp($self->getpart($file));
$options .= " -$opt_num '$temp'" if ($temp ne '');
}
}
return $options;
}
# == Internal function to work out a list configuration manually (idx < v5.0.0 ) ==
sub _getconfigmanual {
# use this function for strange lists without
# 'config' (idx < v5.0) and 'flags' (idx >= v5.0)
my($self) = @_;
my ($savedollarslash, $options, $manager, $editor, $i);
# Read the whole of DIR/editor and DIR/manager in # Read the whole of DIR/editor and DIR/manager in
$savedollarslash = $/; $savedollarslash = $/;
@ -550,6 +580,15 @@ sub _getconfigmanual_idx4 {
|| $editor =~ /ezmlm-gate/ ); || $editor =~ /ezmlm-gate/ );
$options .= 'x' if (-e "$self->{'LIST_NAME'}/extra" || -e "$self->{'LIST_NAME'}/allow"); $options .= 'x' if (-e "$self->{'LIST_NAME'}/extra" || -e "$self->{'LIST_NAME'}/allow");
# Add the unselected options too
# but we will skip invalid options (any of 'cevz')
foreach $i ('a' .. 'z') {
$options .= uc($i) unless (('cevz' =~ /$i/) || ($options =~ /$i/i))
}
# there is no way to get the other string settings, that are only
# defined in 'config' - sorry ...
return $options; return $options;
} }
@ -723,9 +762,10 @@ See the ezmlm-make(1) man page for more details
getconfig() returns a string that contains the command line switches that getconfig() returns a string that contains the command line switches that
would be necessary to re-create the current list. It does this by reading the would be necessary to re-create the current list. It does this by reading the
DIR/config file if it exists. If it can't find this file it attempts to work DIR/config file (idx < v5.0) or DIR/flags (idx >= v5.0) if one of them exists.
things out for itself (with varying degrees of success). If both these If it can't find these files it attempts to work things out for itself (with
methods fail, then getconfig() returns undefined. varying degrees of success). If both these methods fail, then getconfig()
returns undefined.
$list->ismodpost; $list->ismodpost;
$list->ismodsub; $list->ismodsub;

View file

@ -39,7 +39,7 @@ EOM
$ezmlm_path = prompt('Ezmlm binary directory?', '/usr/local/bin'); $ezmlm_path = prompt('Ezmlm binary directory?', '/usr/local/bin');
last if (-e "$ezmlm_path/ezmlm-make"); last if (-e "$ezmlm_path/ezmlm-make");
print "I can't find $ezmlm_path/ezmlm-make. Please try again\n"; print "I can't find $ezmlm_path/ezmlm-make. Please try again\n";
if ($_ >= 10) { if (! -e "$ezmlm_path/ezmlm-make") {
print STDERR "No correct input after $_ attempts. Exiting Makefile.PL.\n"; print STDERR "No correct input after $_ attempts. Exiting Makefile.PL.\n";
exit (2); exit (2);
} }
@ -57,7 +57,7 @@ EOM
$qmail_path = prompt('Qmail base directory?', '/var/qmail'); $qmail_path = prompt('Qmail base directory?', '/var/qmail');
last if (-d "$qmail_path/control"); last if (-d "$qmail_path/control");
print "I can't find $qmail_path/control. Please try again\n"; print "I can't find $qmail_path/control. Please try again\n";
if ($_ >= 10) { if (! -e "$qmail_path/control") {
print STDERR "No correct input after $_ attempts. Exiting Makefile.PL.\n"; print STDERR "No correct input after $_ attempts. Exiting Makefile.PL.\n";
exit (2); exit (2);
} }
@ -81,7 +81,7 @@ EOM
last if (-e "$mysql_path/mysql" || $mysql_path eq ''); last if (-e "$mysql_path/mysql" || $mysql_path eq '');
print "I can't find $mysql_path/mysql. Please enter the full path\n"; print "I can't find $mysql_path/mysql. Please enter the full path\n";
print "or leave this option blank if you don't want to use MySQL\n"; print "or leave this option blank if you don't want to use MySQL\n";
if ($_ >= 10) { if ((! -e "$mysql_path/mysql") && ($mysql_path ne '')) {
print STDERR "No correct input after $_ attempts. Exiting Makefile.PL.\n"; print STDERR "No correct input after $_ attempts. Exiting Makefile.PL.\n";
exit (2); exit (2);
} }