summaryrefslogblamecommitdiffstats
path: root/src/bin/devel-tools/parseSusePatterns.pl
blob: a286cd715fa1c0bd350b0d4b0b9f67c069e07633 (plain) (tree)
1
2
3
4
5
6
7
8
9
                

                                                                               
 

                                                                    
 

                                                                         
 


                                                                               

                                                                    
                                                                               
           
             










                                                                       

                
 

                  


           

                              


                                                                       

                         


                                  
                                                                       



                                 
                                      







                                               































                                                         



                  

















                                                     



               













                                           

 



























                                                                    
#! /usr/bin/perl
# -----------------------------------------------------------------------------
# Copyright (c) 2006, 2007 - OpenSLX GmbH
#
# This program is free software distributed under the GPL version 2.
# See http://openslx.org/COPYING
#
# If you have any feedback please consult http://openslx.org/feedback and
# send your suggestions, praise, or complaints to feedback@openslx.org
#
# General information about OpenSLX can be found at http://openslx.org/
# -----------------------------------------------------------------------------
# parseSusePatterns.pl
#    - OpenSLX script to extract a package list from a given list of
#      SUSE-pattern-files (*.pat).
# -----------------------------------------------------------------------------
use strict;
use warnings;

my $abstract = q[
parseSusePatterns.pl
    This script is a tool for OpenSLX developers that allows to extract
    package lists from a given set of SUSE pattern files.
];

use Getopt::Long;
use Pod::Usage;

my (
    $helpReq,
    $versionReq,

    %patternNames,
    %packageNames,
);

GetOptions(
    'help|?' => \$helpReq,
    'version' => \$versionReq,
) or pod2usage(2);
pod2usage(-msg => $abstract, -verbose => 0, -exitval => 1) if $helpReq;
if ($versionReq) {
    system('slxversion');
    exit 1;
}

if ($ARGV[0] !~ m[^(\w+)-(.+)$]) {
    die "can't extract architecture from pattern file name '$ARGV[0]'";
}
my $arch = $2;

foreach my $patternFile (@ARGV) {
    parsePatternFile($patternFile, 1);
}

print join("\n", sort keys %packageNames)."\n";

exit;

sub parsePatternFile
{
    my $patternFile = shift;
    my $outmost = shift;

    my $patFH;
    if (!open($patFH, '<', $patternFile)) {
        return unless $outmost;
        die "unable to open $patternFile";
    }
    undef $/;
    my $content = <$patFH>;
    close($patFH);
    $patternNames{$patternFile} = 1;

    if ($content =~ m[^\=Sum.de:\s*(.+?)\s*$]ms) {
        print "+ $1\n";
    }
    if ($content =~ m[^\+Sug:\s*?$(.+?)^\-Sug:\s*?$]ms) {
        addSubPatterns($1);
    }
    if ($content =~ m[^\+Req:\s*?$(.+?)^\-Req:\s*?$]ms) {
        addSubPatterns($1);
    }
    if ($content =~ m[^\+Rec:\s*?$(.+?)^\-Rec:\s*?$]ms) {
        addSubPatterns($1);
    }
    if ($content =~ m[^\+Prq:\s*?$(.+?)^\-Prq:\s*?$]ms) {
        addPkgNames($1);
    }
    if ($content =~ m[^\+Prc:\s*?$(.+?)^\-Prc:\s*?$]ms) {
        addPkgNames($1);
    }
    return;
}

sub addSubPatterns
{
    my $patternNames = shift;

    my @subPatterns
        = grep { length($_) > 0 }
          map {
              my $pattern = $_;
              $pattern =~ s[^\s*(.+?)\s*$][$1];
              $pattern;
          }
          split "\n", $patternNames;

    foreach my $subPattern (@subPatterns) {
        my $subPatternFile = "$subPattern-$arch";
        if (!exists $patternNames{$subPatternFile}) {
            parsePatternFile($subPatternFile);
        }
    }
    return;
}

sub addPkgNames
{
    my $pkgs = shift;

    my @pkgNames
        = grep { length($_) > 0 }
          map {
              my $pkg = $_;
              $pkg =~ s[^\s*(.+?)\s*$][$1];
              $pkg;
          }
          split "\n", $pkgs;
    foreach my $pkgName (@pkgNames) {
        $packageNames{$pkgName} = 1;
    }
    return;
}

=head1 NAME

parseSusePatterns.pl - OpenSLX script to extract a package list from
a given list of SUSE-pattern-files (*.pat).

=head1 SYNOPSIS

parseSusePatterns.pl [options] <pattern-file> ...

  Options:
      --help                   brief help message
      --version                show version

=head1 OPTIONS

=over 8

=item B<--help>

Prints a brief help message and exits.

=item B<--version>

Prints the version and exits.

=back

=cut