summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorfukachan <fukachan>2003-03-11 06:17:10 +0000
committerfukachan <fukachan>2003-03-11 06:17:10 +0000
commitf52e7d12d07c3d795be158eb69eb72198621b6ef (patch)
tree998afcec6a11f7a96b17c80d6ce1b60ac9567166
parent2b4b85830489dcef79c055c11093af16c4ee1bac (diff)
downloadfml8-f52e7d12d07c3d795be158eb69eb72198621b6ef.tar.gz
fml8-f52e7d12d07c3d795be158eb69eb72198621b6ef.tar.bz2
fml8-f52e7d12d07c3d795be158eb69eb72198621b6ef.zip
read (/etc/fml/)defaults/$version/main.cf if exists and merge it with
main.cf (/etc/fml/main.cf). we use FML::Config::Tiny, which just reads and parses the file. It is a tiny version of FML::Config module.
-rw-r--r--fml/lib/FML/Config/Tiny.pm113
-rw-r--r--fml/lib/FML/Process/Switch.pm42
2 files changed, 154 insertions, 1 deletions
diff --git a/fml/lib/FML/Config/Tiny.pm b/fml/lib/FML/Config/Tiny.pm
new file mode 100644
index 00000000..5b367707
--- /dev/null
+++ b/fml/lib/FML/Config/Tiny.pm
@@ -0,0 +1,113 @@
+#-*- perl -*-
+#
+# Copyright (C) 2003 Ken'ichi Fukamachi
+# All rights reserved. This program is free software; you can
+# redistribute it and/or modify it under the same terms as Perl itself.
+#
+# $FML: @template.pm,v 1.7 2003/01/01 02:06:22 fukachan Exp $
+#
+
+package FML::Config::Tiny;
+use strict;
+use vars qw(@ISA @EXPORT @EXPORT_OK $AUTOLOAD);
+use Carp;
+
+=head1 NAME
+
+FML::Config::Tiny - just read and return without variable expansion.
+
+=head1 SYNOPSIS
+
+=head1 DESCRIPTION
+
+=head1 METHODS
+
+=head2 C<new()>
+
+constructor.
+
+=cut
+
+
+# Descriptions: constructor.
+# Arguments: OBJ($self)
+# Side Effects: none
+# Return Value: OBJ
+sub new
+{
+ my ($self) = @_;
+ my ($type) = ref($self) || $self;
+ my $me = {};
+ return bless $me, $type;
+}
+
+
+=head2 read($file)
+
+read $file, parse it and return content as HASH_REF.
+
+=cut
+
+
+# Descriptions: read $file, parse it and return content as HASH_REF.
+# Arguments: OBJ($self) STR($file)
+# Side Effects: none
+# Return Value: HASH_REF
+sub read
+{
+ my ($self, $file) = @_;
+ my $config = {};
+
+ my $fh = new IO::File $file, "r";
+ if (defined $fh) {
+ my $curkey = '';
+ my $buf;
+
+ LINE:
+ while ($buf = <$fh>) {
+ next LINE if $buf =~ /^\#/o;
+ chomp $buf;
+
+ if ($buf =~ /^([A-Za-z]\w+)\s+=\s*(.*)/) {
+ my ($key, $value) = ($1, $2);
+ $curkey = $key;
+ $config->{$key} = $value;
+ }
+ if ($buf =~ /^\s+(.*)/) {
+ $config->{ $curkey } .= " ". $1;
+ }
+ }
+ $fh->close;
+ }
+ else {
+ croak("cannot open $file");
+ }
+
+ return $config;
+}
+
+
+=head1 CODING STYLE
+
+See C<http://www.fml.org/software/FNF/> on fml coding style guide.
+
+=head1 AUTHOR
+
+Ken'ichi Fukamachi
+
+=head1 COPYRIGHT
+
+Copyright (C) 2003 Ken'ichi Fukamachi
+
+All rights reserved. This program is free software; you can
+redistribute it and/or modify it under the same terms as Perl itself.
+
+=head1 HISTORY
+
+FML::Config::Tiny appeared in fml8 mailing list driver package.
+See C<http://www.fml.org/> for more details.
+
+=cut
+
+
+1;
diff --git a/fml/lib/FML/Process/Switch.pm b/fml/lib/FML/Process/Switch.pm
index 68500b7a..383d1202 100644
--- a/fml/lib/FML/Process/Switch.pm
+++ b/fml/lib/FML/Process/Switch.pm
@@ -4,7 +4,7 @@
# All rights reserved. This program is free software; you can
# redistribute it and/or modify it under the same terms as Perl itself.
#
-# $FML: Switch.pm,v 1.88 2003/03/06 12:36:33 fukachan Exp $
+# $FML: Switch.pm,v 1.89 2003/03/09 03:52:13 fukachan Exp $
#
package FML::Process::Switch;
@@ -103,6 +103,12 @@ sub main::Bootstrap2
print "ARGV: @ARGV\n";
}
+ # 0.3 overload main.cf (defaults/$version/main.cf + main.cf)
+ # to inherit $default_* variables defined later.
+ # installer should merget the changes except for $default_*.
+ $main_cf = _overload_main_cf($main_cf);
+
+ # 1.0 $main_cf is already o.k. here.
# 1.1 parse command line options (preliminary)
{
my $options = _module_specific_options($main_cf, $myname);
@@ -281,6 +287,40 @@ sub ProcessSwitch
}
+# Descriptions: read defaults/$version/main.cf if exists and merge it
+# with the specified $main_cf.
+# Arguments: HASH_REF($main_cf)
+# Side Effects: none
+# Return Value: HASH_REF
+sub _overload_main_cf
+{
+ my ($main_cf) = @_;
+ my $new_main_cf = {};
+ my $config_dir = $main_cf->{ default_config_dir };
+
+ use File::Spec;
+ my $default_main_cf = File::Spec->catfile($config_dir, 'main.cf');
+ if (-f $default_main_cf) {
+ my ($k, $v);
+
+ use FML::Config::Tiny;
+ my $tinyconfig = new FML::Config::Tiny;
+ $new_main_cf = $tinyconfig->read($default_main_cf);
+
+ # overwrittern by the specified $main_cf (e.g. /etc/fml/main.cf)
+ while (($k, $v) = each %$main_cf) {
+ $new_main_cf->{ $k } = $v;
+ }
+
+ # variable expansion by the function in libexec/loader.
+ main::loader_expand_variables( $new_main_cf );
+ $main_cf = $new_main_cf;
+ }
+
+ return $main_cf;
+}
+
+
# Descriptions: return the suitable getopt options
# Arguments: HASH_REF($main_cf) STR($myname)
# Side Effects: none