|
1 use strict; |
|
2 use File::Find; |
|
3 |
|
4 my $appnum = shift; |
|
5 my $baseuid = 0xA000018A; |
|
6 my $baseuidstr = uid( 1 ); |
|
7 my $base = `cd`; |
|
8 $base =~s/(\s+)$//; #remove linefeed from end |
|
9 my $patternbase = $base."\\pattern"; |
|
10 my $globaliter = 0; |
|
11 |
|
12 generate(); |
|
13 |
|
14 sub generate() |
|
15 { |
|
16 my $i = 0; |
|
17 for ( $i=1; $i<=$appnum; $i++ ) |
|
18 { |
|
19 $globaliter = $i; |
|
20 createappdir($globaliter); |
|
21 find( \&reader, $patternbase ); |
|
22 } |
|
23 createpkg(); |
|
24 creategroup(); |
|
25 system "perl devide_sis.pl $appnum"; |
|
26 } |
|
27 |
|
28 sub uid |
|
29 { |
|
30 my $iter = shift; |
|
31 my $uuid = $baseuid + $iter -1; |
|
32 my $hu = sprintf '%#X', $uuid; |
|
33 $hu =~s/X/x/; |
|
34 return $hu; |
|
35 } |
|
36 |
|
37 sub reader() |
|
38 { |
|
39 my $file=$_; |
|
40 my $winpath=$File::Find::name; |
|
41 $winpath=~s/\//\\/g; |
|
42 my $nefilepath = ""; |
|
43 if ( -f $file && not($winpath =~/svn/) ) |
|
44 { |
|
45 $nefilepath = newpath( $winpath, $globaliter ); |
|
46 my $appuid = uid( $globaliter ); |
|
47 rewritefile( $winpath, $nefilepath, $globaliter, $appuid ); |
|
48 } |
|
49 } |
|
50 |
|
51 sub newpath() |
|
52 { |
|
53 my $patternpath = shift; |
|
54 my $iter = shift; |
|
55 my $appdir = "helloworldbasic".$iter; |
|
56 my $appbasicfilepath = "basic".$iter; |
|
57 my $appBasicfilepath = "Basic".$iter; |
|
58 $patternpath =~ s/basic1/$appbasicfilepath/; |
|
59 $patternpath =~ s/Basic1/$appBasicfilepath/; |
|
60 $patternpath =~ s/pattern/$appdir/; |
|
61 return $patternpath; |
|
62 } |
|
63 |
|
64 sub createappdir() |
|
65 { |
|
66 my $iter = shift; |
|
67 my $appdir = "helloworldbasic".$iter; |
|
68 my $src = $appdir."\\src"; |
|
69 my $inc = $appdir."\\inc"; |
|
70 my $data = $appdir."\\data"; |
|
71 my $sis = $appdir."\\sis"; |
|
72 my $group = $appdir."\\group"; |
|
73 system "mkdir $appdir"; |
|
74 system "mkdir $src"; |
|
75 system "mkdir $inc"; |
|
76 system "mkdir $data"; |
|
77 system "mkdir $sis"; |
|
78 system "mkdir $group"; |
|
79 } |
|
80 |
|
81 sub rewritefile() |
|
82 { |
|
83 my $input = shift; |
|
84 my $output = shift; |
|
85 my $iter = shift; |
|
86 my $uid = shift; |
|
87 my $basic = "basic".$iter; |
|
88 my $Basic = "Basic".$iter; |
|
89 my $World = "World".$iter; |
|
90 |
|
91 open FRI, $input or die "Couldn't open $input to read"; |
|
92 binmode FRI; |
|
93 open FWO, ">$output" or die "Couldn't open $output to write"; |
|
94 binmode FWO; |
|
95 while( <FRI> ) |
|
96 { |
|
97 my $line = $_; |
|
98 $line =~ s/basic1/$basic/g; |
|
99 $line =~ s/Basic1/$Basic/g; |
|
100 $line =~ s/World1/$World/g; |
|
101 $line =~ s/$baseuidstr/$uid/gi; |
|
102 print FWO $line; |
|
103 } |
|
104 close FRI; |
|
105 close FWO; |
|
106 } |
|
107 |
|
108 sub createpkg() |
|
109 { |
|
110 system "mkdir sis"; |
|
111 open FRS, ".\\pattern\\sis\\helloworldbasic_armv5.pkg" or die "Couldn't open pkg file to read"; |
|
112 binmode FRS; |
|
113 open FWS, ">sis\\helloworldbasic_armv5.pkg" or die "Couldn't open pkg file to write"; |
|
114 binmode FWS; |
|
115 my @exports; |
|
116 my $begin = 0; |
|
117 |
|
118 while ( <FRS> ) |
|
119 { |
|
120 my $line = $_; |
|
121 print FWS $line; |
|
122 if ($line =~ /;Files/) |
|
123 { |
|
124 $begin = 1; |
|
125 } |
|
126 if ($begin == 1) |
|
127 { |
|
128 push(@exports, $line); |
|
129 } |
|
130 } |
|
131 close FRS; |
|
132 |
|
133 for (my $i=2; $i<=$globaliter; $i++) |
|
134 { |
|
135 my $basic = "basic".$i; |
|
136 my $Basic = "Basic".$i; |
|
137 my $it = 0; |
|
138 while (defined($exports[$it])) |
|
139 { |
|
140 my $line = $exports[$it]; |
|
141 $line =~ s/basic1/$basic/g; |
|
142 $line =~ s/Basic1/$Basic/g; |
|
143 print FWS $line; |
|
144 $it++; |
|
145 } |
|
146 print FWS "\r\n\r\n"; |
|
147 } |
|
148 close FWS; |
|
149 } |
|
150 |
|
151 sub creategroup() |
|
152 { |
|
153 system "mkdir group"; |
|
154 open FWG, ">group\\bld.inf" or die "Couldn't open bld.inf file to write"; |
|
155 binmode FWG; |
|
156 for (my $i=1; $i<=$globaliter; $i++) |
|
157 { |
|
158 my $path = "../helloworldbasic".$i."/group/bld.inf"; |
|
159 print FWG "\#include \"$path\"\r\n"; |
|
160 } |
|
161 } |
|
162 close FWG; |