source: soft/build_system/build_system/upload/robot/trunk/mkcd_ppc.pl @ 1

Last change on this file since 1 was 1, checked in by fasma, 13 years ago

Initial Import from Mandriva's soft revision 224062 and package revision 45733

File size: 5.6 KB
RevLine 
[1]1#!/usr/bin/perl
2#
3# warly <warly@mandriva.com>
4#
5# modified by Stew Benedict <sbenedict@mandriva.com>
6#
7my $version = "0.2.4-PPC";
8
9use strict;
10
11my ($rep,$iso) = @ARGV;
12$iso or usage();
13$::rep = $rep;
14$::ENV{PATH} = "/c/cooker/misc:$ENV{PATH}";
15$::ENV{PERLLIB} = "/c/cooker/misc:$ENV{PERLLIB}";
16unshift @::INC, "/c/cooker/misc";
17
18require "/c/cooker/misc/rpmtools.pm";
19
20my $pwd = `pwd`;
21chop $pwd;
22$iso =~ s/^([^\/])/$pwd\/$1/;
23
24my $arch = `uname -m`;
25chop $arch;
26
27if ($arch =~ /ppc/) {
28        my $hfsutils = system("rpm -q hfsutils");
29        die("Can't run without hfsutils!") if $hfsutils = '';
30}
31
32my $suffix = 'i586';
33$suffix = 'PPC' if $arch =~ /ppc/;
34       
35my $tmpdir = $ENV{TMPDIR} || "/tmp";
36-d $tmpdir or die "$tmpdir does not exist\n";
37my $work_dir = "$tmpdir/.build_hdlist";
38-d $work_dir or mkdir "$tmpdir/.build_hdlist";
39
40my @cd;
41open A, "$rep/Mandrake/base/rpmslist";
42my ($num,@a);
43my %list;
44while(<A>){
45        /<\/CD>/ and $num = 0;
46        /<CD num=(\d+)>/ and do { $num = $1; push @cd, $num};
47#       s/\+/\\\+/g;
48        /(?:<.*>)*([^<]*)\n/; 
49        $1 and do {
50                @a = split ' ', $1;
51                @list{@a} = map $num,@a;
52        }
53}
54
55my @rpms;
56my %name;
57my $dir = "$rep/Mandrake/RPMS";
58opendir DIR, $dir or die "unable to opendir $dir: !$\n";
59foreach (readdir DIR) {
60        my ($key, $name) = /(([^\/]*)-[^-]*-[^-]*\.[^\/\.]*)\.rpm$/ or next;
61        $name{$name} and next;
62        my $n = $list{$name};
63        push @{$rpms[$n]}, "$rep/Mandrake/RPMS/$_";
64        $name{$name} = 1;
65}
66
67#goto TOTO;
68
69open C, ">$work_dir/hdlists" or die "Could not open $work_dir/hdlists for writing: $!";
70my $params = new rpmtools();
71my @hdlist;
72foreach my $n (@cd){
73        print C "hdlist$n.cz Mandrake/RPMS$n CD $n Cooker\n";
74        my $hdlist = "$work_dir/hdlist$n.cz";
75        $hdlist[$n] = $hdlist;
76        $params->build_hdlist(1,9,$work_dir,"$work_dir/hdlist$n.cz",@{$rpms[$n]})
77}
78close C;
79foreach my $n (@cd){
80        $params->read_hdlists($hdlist[$n]);
81        $params->compute_depslist();
82}
83
84my @unresolved = $params->get_unresolved_provides_files();
85if (@unresolved > 0) {
86        $params->clean();
87
88        foreach my $n (@cd){
89                $params->read_hdlists($hdlist[$n]);
90        }
91        $params->keep_only_cleaned_provides_files();
92        foreach my $n (@cd){
93                $params->read_hdlists($hdlist[$n]);
94                $params->compute_depslist();
95        }
96}
97print "writing $work_dir/depslist.ordered\n";
98open F, ">$work_dir/depslist.ordered" or die "unable to write depslist file $work_dir/depslist.ordered\n";
99$params->write_depslist(\*F);
100close F;
101print "writing $work_dir/provides\n";
102open F, ">$work_dir/provides" or die "unable to write provides file $work_dir/provides\n";
103$params->write_provides(\*F);
104close F;
105print "writing $work_dir/compss\n";
106open F, ">$work_dir/compss" or die "unable to write compss file $work_dir/compss";
107$params->write_compss(\*F);
108close F;
109foreach my $n (@cd){
110        $params->build_hdlist(1,9,$work_dir,"$work_dir/hdlist$n.cz",@{$rpms[$n]})
111}
112
113#TOTO:
114
115my $mkiso = '';
116if ($arch =~ /ppc/) {
117    $mkiso = qq{$pwd/tools/ppc/mkhybrid-1.12b5.4 -part -hfs -r -l -J \\
118        -V "Cooker_CD_1" \\
119        -A "Linux-Mandrake" -P "MandrakeSoft" -abstract "README" \\
120        -sysid "PPC" -volset "Update" -volset-size 2 -volset-seqno 1 \\
121        -hfs-volid "Linux-Mandrake" \\
122        -map $pwd/tools/ppc/mapping \\
123        -magic $pwd/tools/ppc/magic -m "*.orig" \\
124        -hide '*.MacOS' -hide '*.DOS' \\
125        -hide-joliet '*.Unix' -hide-joliet '*.MacOS' \\
126        -hide-hfs '*.Unix' -hide-hfs '*.DOS' -pad \\
127        -o "$iso/1-Cooker-$suffix.iso" \\
128        Mandrake/base/=$work_dir/compss                         \\
129        Mandrake/base/=$work_dir/depslist.ordered               \\
130        Mandrake/base/=$work_dir/provides                       \\
131        Mandrake/base/=$work_dir/hdlists};
132} else {
133    $mkiso = qq{mkisofs -r -J -graft-points -nobak -V "Cooker_CD_1" -b images/cdrom.img -c images/boot.cat -o "$iso/1-Cooker-$suffix.iso" \\
134        Mandrake/base/=$work_dir/compss                         \\
135        Mandrake/base/=$work_dir/depslist.ordered               \\
136        Mandrake/base/=$work_dir/provides                       \\
137        Mandrake/base/=$work_dir/hdlists};
138}
139
140local *A; opendir A, "$rep";
141foreach (readdir A){
142        /~$/ and next;
143        /^(\.{1,2}|Mandrake)$/ and next;
144        -d "$rep/$_" and $mkiso .= "\\\n        /$_/=$rep/$_" and next;
145        $mkiso .= "\\\n /=$rep/$_" 
146}
147
148local *A; opendir A, "$rep/Mandrake";
149foreach (readdir A){
150        print "Mandrake -- $_\n";
151        /~$/ and next;
152        /(^(\.{1,2}|base)$|RPMS)/ and next;
153        -d "$rep/Mandrake/$_" and $mkiso .= "\\\n       Mandrake/$_/=$rep/Mandrake/$_" and next;
154        $mkiso .= "\\\n Mandrake/=$rep/Mandrake/$_"
155}
156
157local *A; opendir A, "$rep/Mandrake/base";
158foreach (readdir A){
159        /~$/ and next;
160        /(^(\.{1,2}|compss|provides|depslist.ordered)$|hdlist|cooker)/ and next;
161        -d "$rep/Mandrake/base/$_" and $mkiso .= "\\\n  Mandrake/base/$_/=$rep/Mandrake/base/$_" and next;
162        $mkiso .= "\\\n Mandrake/base/=$rep/Mandrake/base/$_"
163}
164
165#print "$mkiso\n";
166#exit;
167
168foreach (@cd) {
169        $mkiso .= "\\\n Mandrake/base/=$work_dir/hdlist$_.cz"
170}
171
172foreach (@{$rpms[1]}){
173        $mkiso .= "\\\n Mandrake/RPMS1/=$_" 
174}
175
176#print "$mkiso\n";
177#exit;
178system $mkiso;
179
180if ($arch =~ /ppc/) {
181        #Bless boot folder on CD1 so yaboot can boot
182        system("hmount $iso/1-Cooker-$suffix.iso");
183        system("hattrib -b boot");
184        system("hcd boot");
185        system("hattrib -t tbxi yaboot");
186        system("humount");
187}
188
189foreach my $n (@cd){
190        $n == 1 and next;
191        $mkiso = qq{mkisofs -r -J -graft-points -nobak -V "Cooker_CD_$n" -o "$iso/$n-Cooker-$suffix.iso"}; 
192        foreach (@{$rpms[$n]}){
193                $mkiso .= "\\\n Mandrake/RPMS$n/=$_"
194        }
195        #- on PPC, discard anything not on the list
196        if ($arch !~ /ppc/) {
197            $n == @cd and do { foreach (@{$rpms[0]}){
198                $mkiso .= "\\\n Mandrake/RPMS$n/=$_"   
199            }};
200        }
201        #       print "$mkiso\n";
202        system $mkiso;
203}
204
205# system("rm -rf $work_dir");
206
207foreach (@{$rpms[0]}){
208    if ($arch =~ /ppc/) {
209        print "WARNING: $_ not in lists, discarded!\n"
210    } else {
211        print "WARNING: $_ not in lists, added to last CD\n"
212    }
213}
214
215exit;
216
217sub usage{
218        print "mkcd.pl version $version
219        usage:
220        $0 <repository dir> <iso creation dir>\n";
221        exit
222}
Note: See TracBrowser for help on using the repository browser.