You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
55 lines
1.6 KiB
55 lines
1.6 KiB
2 months ago
|
# Perl module for parsing LibUCW configuration files (using the ucw-config utility)
|
||
|
#
|
||
|
# (c) 2002--2005 Martin Mares <mj@ucw.cz>
|
||
|
#
|
||
|
# This software may be freely distributed and used according to the terms
|
||
|
# of the GNU Lesser General Public License.
|
||
|
|
||
|
package UCW::Config;
|
||
|
|
||
|
use strict;
|
||
|
use warnings;
|
||
|
use Getopt::Long;
|
||
|
|
||
|
our %Sections = ();
|
||
|
|
||
|
our $DefaultConfigFile = "";
|
||
|
our $Usage = "-C, --config filename Override the default configuration file
|
||
|
-S, --set sec.item=val Manual setting of a configuration item";
|
||
|
|
||
|
|
||
|
sub Parse(@) {
|
||
|
my @options = @_;
|
||
|
my $defargs = "";
|
||
|
my $override_config = 0;
|
||
|
push @options, "config|C=s" => sub { my ($o,$a)=@_; $defargs .= " -C'$a'"; $override_config=1; };
|
||
|
push @options, "set|S=s" => sub { my ($o,$a)=@_; $defargs .= " -S'$a'"; };
|
||
|
Getopt::Long::Configure("bundling");
|
||
|
Getopt::Long::GetOptions(@options) or return 0;
|
||
|
if (!$override_config && $DefaultConfigFile) {
|
||
|
$defargs = "-C'$DefaultConfigFile' $defargs";
|
||
|
}
|
||
|
foreach my $section (keys %Sections) {
|
||
|
my $opts = $Sections{$section};
|
||
|
my $optlist = join(";", keys %$opts);
|
||
|
my %filtered_opts = map { my $t=$_; $t=~s/[#\$]+$//; $t => $$opts{$_} } keys %$opts;
|
||
|
my @l = `bin/config $defargs "$section\{$optlist\}"`;
|
||
|
$? && exit 1;
|
||
|
foreach my $o (@l) {
|
||
|
$o =~ /^CF_.*_([^=]+)='(.*)'\n$/ or die "Cannot parse bin/config output: $_";
|
||
|
my $var = $filtered_opts{$1};
|
||
|
my $val = $2;
|
||
|
if (ref $var eq "SCALAR") {
|
||
|
$$var = $val;
|
||
|
} elsif (ref $var eq "ARRAY") {
|
||
|
push @$var, $val;
|
||
|
} elsif (ref $var) {
|
||
|
die ("UCW::Config::Parse: don't know how to set $o");
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
1;
|
||
|
}
|
||
|
|
||
|
1; # OK
|