source: soft/build_system/build_system/mkcd/tags/V3_3_6_1mdk/mkcd.pl @ 1

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

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

File size: 4.2 KB
Line 
1#!/usr/bin/perl
2#
3# warly <warly@mandrakesoft.com>
4#
5
6my $version = "0.2.3";
7
8use strict;
9
10my ($rep,$iso) = @ARGV;
11$iso or usage();
12$::rep = $rep;
13$::ENV{PATH} = "$rep/misc:$ENV{PATH}";
14$::ENV{PERLLIB} = "$rep/misc:$ENV{PERLLIB}";
15unshift @::INC, "$rep/misc";
16
17require "$rep/misc/rpmtools.pm";
18
19my $pwd = `pwd`;
20chop $pwd;
21$iso =~ s/^([^\/])/$pwd\/$1/;
22
23my $tmpdir = $ENV{TMPDIR} || "/tmp";
24-d $tmpdir or die "$tmpdir does not exist\n";
25my $work_dir = "$tmpdir/.build_hdlist";
26-d $work_dir or mkdir "$tmpdir/.build_hdlist";
27
28my @cd;
29open A, "$rep/Mandrake/base/rpmslist";
30my ($num,@a);
31my %list;
32while(<A>){
33        /<\/CD>/ and $num = 0;
34        /<CD num=(\d+)>/ and do { $num = $1; push @cd, $num};
35#       s/\+/\\\+/g;
36        /(?:<.*>)*([^<]*)\n/; 
37        $1 and do {
38                @a = split ' ', $1;
39                @list{@a} = map $num,@a;
40        }
41}
42
43my @rpms;
44my %name;
45my $dir = "$rep/Mandrake/RPMS";
46opendir DIR, $dir or die "unable to opendir $dir: !$\n";
47foreach (readdir DIR) {
48        my ($key, $name) = /(([^\/]*)-[^-]*-[^-]*\.[^\/\.]*)\.rpm$/ or next;
49        $name{$name} and next;
50        my $n = $list{$name};
51        push @{$rpms[$n]}, "$rep/Mandrake/RPMS/$_";
52        $name{$name} = 1;
53}
54
55#goto TOTO;
56
57open C, ">$work_dir/hdlists" or die "Could not open $work_dir/hdlists for writing: $!";
58my $params = new rpmtools();
59my @hdlist;
60foreach my $n (@cd){
61        print C "hdlist$n.cz Mandrake/RPMS$n CD $n Cooker\n";
62        my $hdlist = "$work_dir/hdlist$n.cz";
63        $hdlist[$n] = $hdlist;
64        $params->build_hdlist(1,9,$work_dir,"$work_dir/hdlist$n.cz",@{$rpms[$n]})
65}
66close C;
67foreach my $n (@cd){
68        $params->read_hdlists($hdlist[$n]);
69        $params->compute_depslist();
70}
71
72my @unresolved = $params->get_unresolved_provides_files();
73if (@unresolved > 0) {
74        $params->clean();
75
76        foreach my $n (@cd){
77                $params->read_hdlists($hdlist[$n]);
78        }
79        $params->keep_only_cleaned_provides_files();
80        foreach my $n (@cd){
81                $params->read_hdlists($hdlist[$n]);
82                $params->compute_depslist();
83        }
84}
85print "writing $work_dir/depslits.ordered\n";
86open F, ">$work_dir/depslist.ordered" or die "unable to write depslist file $work_dir/depslist.ordered\n";
87$params->write_depslist(\*F);
88close F;
89print "writing $work_dir/provides\n";
90open F, ">$work_dir/provides" or die "unable to write provides file $work_dir/provides\n";
91$params->write_provides(\*F);
92close F;
93print "writing $work_dir/compss\n";
94open F, ">$work_dir/compss" or die "unable to write compss file $work_dir/compss";
95$params->write_compss(\*F);
96close F;
97foreach my $n (@cd){
98        $params->build_hdlist(1,9,$work_dir,"$work_dir/hdlist$n.cz",@{$rpms[$n]})
99}
100
101#TOTO:
102
103my $mkiso = qq{mkisofs -r -J -graft-points -nobak -V "Cooker_CD_1" -b images/cdrom.img -c images/boot.cat -o "$iso/1-Cooker-i586.iso" \\
104        Mandrake/base/=$work_dir/compss                         \\
105        Mandrake/base/=$work_dir/depslist.ordered               \\
106        Mandrake/base/=$work_dir/provides                       \\
107        Mandrake/base/=$work_dir/hdlists};
108
109local *A; opendir A, "$rep";
110foreach (readdir A){
111        /~$/ and next;
112        /^(\.{1,2}|Mandrake)$/ and next;
113        -d "$rep/$_" and $mkiso .= "\\\n        /$_/=$rep/$_" and next;
114        $mkiso .= "\\\n /=$rep/$_" 
115}
116
117local *A; opendir A, "$rep/Mandrake";
118foreach (readdir A){
119        print "Mandrake -- $_\n";
120        /~$/ and next;
121        /(^(\.{1,2}|base)$|RPMS)/ and next;
122        -d "$rep/Mandrake/$_" and $mkiso .= "\\\n       Mandrake/$_/=$rep/Mandrake/$_" and next;
123        $mkiso .= "\\\n Mandrake/=$rep/Mandrake/$_"
124}
125
126local *A; opendir A, "$rep/Mandrake/base";
127foreach (readdir A){
128        /~$/ and next;
129        /(^(\.{1,2}|compss|provides|depslist.ordered)$|hdlist|cooker)/ and next;
130        -d "$rep/Mandrake/base/$_" and $mkiso .= "\\\n  Mandrake/base/$_/=$rep/Mandrake/base/$_" and next;
131        $mkiso .= "\\\n Mandrake/base/=$rep/Mandrake/base/$_"
132}
133
134#print "$mkiso\n";
135#exit;
136
137foreach (@cd) {
138        $mkiso .= "\\\n Mandrake/base/=$work_dir/hdlist$_.cz"
139}
140
141foreach (@{$rpms[1]}){
142        $mkiso .= "\\\n Mandrake/RPMS1/=$_" 
143}
144
145#print "$mkiso\n";
146#exit;
147system $mkiso;
148
149foreach my $n (@cd){
150        $n == 1 and next;
151        $mkiso = qq{mkisofs -r -J -graft-points -nobak -V "Cooker_CD_$n" -o "$iso/$n-Cooker-i586.iso"}; 
152        foreach (@{$rpms[$n]}){
153                $mkiso .= "\\\n Mandrake/RPMS$n/=$_"
154        }
155        $n == @cd and do { foreach (@{$rpms[0]}){
156                $mkiso .= "\\\n Mandrake/RPMS$n/=$_"   
157        }};
158        #       print "$mkiso\n";
159        system $mkiso;
160}
161
162# system("rm -rf $work_dir");
163
164foreach (@{$rpms[0]}){
165        print "WARNING: $_ not in lists, added to last CD\n"
166}
167
168exit;
169
170sub usage{
171        print "mkcd.pl version $version
172        usage:
173        $0 <repository dir> <iso creation dir>\n";
174        exit
175}
Note: See TracBrowser for help on using the repository browser.