Moving Files around (removing file endings, libraries to lib)
[darcs-mirror-metainit.git] / lib / MetaInit / Parse.pm
1 package MetaInit::Parse;
2
3 sub parse {
4     my $filename = shift;
5     open(FILE, "<", $filename) || die $!;
6
7     my %parsed;
8     my $lastkey;
9     while (<FILE>) {
10         # Ignore empty lines and comments
11         chomp;
12         next if /^$/ or /^#/;
13         if (my ($key, $value) = m/^(\S.*): (.*)/) {
14             $parsed{$key} = $value;
15             $lastkey = $key;
16         }
17         elsif ($lastkey) {
18             s/^ //;
19             s/^\.$//;
20             $parsed{$lastkey} .= "\n$_";
21         } else {
22             die "Cannot parse $_";
23         }
24     }
25     close FILE;
26
27     if (not exists $parsed{Description}) {
28         $parsed{Description} = $parsed{Name}
29     }
30
31     {
32         no warnings qw(uninitialized);
33         ($parsed{Path}, $parsed{Args}) = split(/\s+/,$parsed{Exec});
34
35         my @splits = qw(Required-Start Should-Start Required-Stop Should-Stop);
36
37         for (@splits){
38                 $parsed{$_} = [ split m/\s+/, $parsed{$_} ];
39         }
40     }
41
42     my @mandatory = qw(Exec Name);
43
44     my $error_msg = "";
45     for (@mandatory){
46             $error_msg .= "No '$_:' provided\n" unless $parsed{$_};
47     } 
48     die $error_msg if $error_msg;
49
50     $parsed{File} = $filename;
51
52     return \%parsed;
53 }
54
55
56 # Return a true value
57 1;