do not fail on Kiwi:parse, even though it is not yet implemented.
[opensuse:build.git] / Build / Kiwi.pm
1
2 package Build::Kiwi;
3
4 use strict;
5 use Digest::MD5;
6 #use Device::Cdio::ISO9660;
7 #use Device::Cdio::ISO9660::IFS;
8
9 my $have_zlib;
10 eval {
11   require Compress::Zlib;
12   $have_zlib = 1;
13 };
14
15 sub parse {
16   my ($bconf, $fn) = @_;
17   my $ret;
18   my @control;
19
20 print "Build::Kiwi::parse IS NOT IMPLEMENTED ! \n";
21   return ;
22
23   # get arch and os from macros
24   my ($arch, $os);
25   for (@{$bconf->{'macros'} || []}) {
26     $arch = $1 if /^%define _target_cpu (\S+)/;
27     $os = $1 if /^%define _target_os (\S+)/;
28   }
29   # map to debian names
30   $os = 'linux' if !defined($os);
31   $arch = 'all' if !defined($arch) || $arch eq 'noarch';
32   $arch = 'i386' if $arch =~ /^i[456]86$/;
33   $arch = 'powerpc' if $arch eq 'ppc';
34   $arch = 'amd64' if $arch eq 'x86_64';
35
36   if (ref($fn) eq 'ARRAY') {
37     @control = @$fn;
38   } else {
39     local *F;
40     if (!open(F, '<', $fn)) {
41       $ret->{'error'} = "$fn: $!";
42       return $ret;
43     }
44     @control = <F>;
45     close F;
46     chomp @control;
47   }
48   splice(@control, 0, 3) if @control > 3 && $control[0] =~ /^-----BEGIN/;
49   my $name;
50   my $version;
51   my @deps;
52   while (@control) {
53     my $c = shift @control;
54     last if $c eq '';   # new paragraph
55     my ($tag, $data) = split(':', $c, 2);
56     next unless defined $data;
57     $tag = uc($tag);
58     while (@control && $control[0] =~ /^\s/) {
59       $data .= "\n".substr(shift @control, 1);
60     }
61     $data =~ s/^\s+//s;
62     $data =~ s/\s+$//s;
63     if ($tag eq 'VERSION') {
64       $version = $data;
65       $version =~ s/-[^-]+$//;
66     } elsif ($tag eq 'SOURCE') {
67       $name = $data;
68     } elsif ($tag eq 'BUILD-DEPENDS' || $tag eq 'BUILD-CONFLICTS' || $tag eq 'BUILD-IGNORE') {
69       my @d = split(/,\s*/, $data);
70       for my $d (@d) {
71         if ($d =~ /^(.*?)\s*\[(.*)\]$/) {
72           $d = $1;
73           my $isneg = 0;
74           my $bad;
75           for my $q (split('[\s,]', $2)) {
76             $isneg = 1 if $q =~ s/^\!//;
77             $bad = 1 if !defined($bad) && !$isneg;
78             if ($isneg) {
79               if ($q eq $arch || $q eq "$os-$arch") {
80                 $bad = 1;
81                 last;
82               }
83             } elsif ($q eq $arch || $q eq "$os-$arch") {
84               $bad = 0;
85             }
86           }
87           next if $bad;
88         }
89         $d =~ s/ \(([^\)]*)\)/ $1/g;
90         $d =~ s/>>/>/g;
91         $d =~ s/<</</g;
92         if ($tag eq 'BUILD-DEPENDS') {
93           push @deps, $d;
94         } else {
95           push @deps, "-$d";
96         }
97       }
98     }
99   }
100   $ret->{'name'} = $name;
101   $ret->{'version'} = $version;
102   $ret->{'deps'} = \@deps;
103   return $ret;
104 }
105
106 sub debq {
107   my ($fn) = @_;
108
109   print "Build::Kiwi::debq IS NOT IMPLEMENTED ! \n";
110   die();
111
112   return 1;
113 }
114
115 sub queryiso {
116   my ($handle, %opts) = @_;
117
118 #  $iso = Device::Cdio::ISO9660::IFS->new(-source=>'copying.iso');
119   my $src = '';
120   my $data = {
121     name => "DEFAULT_NAME",
122 #    hdrmd5 => Digest::MD5::md5_hex($handle); #FIXME create real checksum from iso
123   };
124 #  $data->{'source'} = $src if $src ne '';
125   if ($opts{'evra'}) {
126 #FIXME find out of iso:
127     my $arch = "i586";
128     $data->{'version'} = "0.1";
129     $data->{'release'} = "1";
130     $data->{'type'} = "iso";
131     $data->{'arch'} = $arch;
132   }
133   if ($opts{'filelist'}) {
134     print ("Build::KIWI query filelist not implemented !\n");
135     die();
136 #    $data->{'filelist'} = $res{'FILENAMES'};
137   }
138   if ($opts{'description'}) {
139     print ("Build::KIWI query description not implemented !\n");
140     die();
141 #    $data->{'summary'} = $res{'SUMMARY'}->[0];
142 #    $data->{'description'} = $res{'DESCRIPTION'}->[0];
143   }
144   return $data;
145 }
146
147 sub queryhdrmd5 {
148   my ($bin) = @_; 
149
150   print "Build::Kiwi::queryhdrmd5 IS NOT IMPLEMENTED ! \n";
151   die();
152
153 }
154
155 1;