root/trunk/jps2ps/jpshash.pl

Revision 4, 7.3 kB (checked in by jms, 7 months ago)

Chargement de jps2ps dans le SVN.

  • Property svn:executable set to *
Line 
1 #!/usr/bin/perl -w
2
3 #### le repertoire d'installation de BBgraf
4 #$BBGRAF_DIR = "/var/www/syracuse/bbgraf/";
5
6 ### le repertoire d'installation de jps2ps
7 ##$JPS2PS_DIR = $BBGRAF_DIR . "jps2ps/";
8 $JPS2PS_DIR = "/opt/syracuse/app/jps2ps/";
9
10 ### le repertoire d'installation des pps
11 $PPS_DIR = $JPS2PS_DIR . "pps/";
12
13 ### le repertoire d'installation des package
14 $PACKAGE_DIR = $JPS2PS_DIR . "package/";
15
16 ### les programmes utilises
17 $lit_cles = $JPS2PS_DIR . "lit_cles.pl";
18 $lit_appels = $JPS2PS_DIR . "lit_appels.pl";
19
20 ## affichage d'un tableau
21 sub affiche_tableau {
22     my ($reftableau) = @_ ;
23     foreach $mot (@$reftableau) {
24         print ("           " . $mot . "\n");
25     };
26 }
27
28 ## affichage d'un tableau
29 sub affiche_tableau_terminal {
30     my ($reftableau) = @_ ;
31     foreach $mot (@$reftableau) {
32         print ("\"$mot\", ");
33     };
34 }
35
36 ## affichage de la table de hachage %keytofile passee en argument
37 sub affiche_hachage {
38     my (%keytofile) = @_;
39     foreach $cle (keys %keytofile) {
40         print ("cle      : $cle\n");
41         print ("fichiers : \n");
42         &affiche_tableau ($keytofile {$cle});
43     };
44 }
45
46 ## affichage de la table de hachage %keytofile passee en argument
47 sub affiche_hachage_terminal {
48     my (%keytofile) = @_;
49     foreach $cle (keys %keytofile) {
50         print ("     \"$cle\" => [");
51         &affiche_tableau_terminal ($keytofile {$cle});
52         print ("],\n");
53     };
54 }
55
56
57 ##### creation du fichier listpps
58 sub cree_listpps_file {
59 $listpps_file = "/tmp/listpps.pl";
60
61 open (FILE, ">$listpps_file") or die "impossible d'ouvrir $listpps_file";
62 select (FILE);
63 print<<Fin_Code;
64 #!/usr/bin/perl
65
66 \$PPS_DIR = \$JPS2PS_DIR . "pps/";
67 \$PACKAGE_DIR = \$JPS2PS_DIR . "package/";
68
69 ##### ##### ##### ##### ##### ##### ##### #####
70 #####
71 ##### les fichiers .pps
72 #####
73 ##### ##### ##### ##### ##### ##### ##### #####
74 Fin_Code
75
76
77 ## on recup les noms des fichiers pps
78 @les_fichiers = `cd $PPS_DIR \; find ./ -name "*.pps"`;
79 foreach (@les_fichiers) {
80     $_ =~ s/\.\///;
81 };
82
83 foreach $element (@les_fichiers) {
84     $element =~ s/\n//;
85     $pps_name = $element;
86     $pps_name =~ s/\.pps//;
87     print ("\$" . $pps_name . " = \$PPS_DIR \. \"" . $element . "\";\n");
88 };
89
90 ## idem pour les packages
91
92 ## on recup les noms des fichiers pps
93 @les_package = `cd $PACKAGE_DIR \; find ./ -name "*.pps"`;
94 foreach (@les_package) {
95     $_ =~ s/\.\///;
96 };
97
98 foreach $element (@les_package) {
99     $element =~ s/\n//;
100     $pkg_name = $element;
101     $pkg_name =~ s/\.pps//;
102     print ("\$" . $pkg_name . " = \$PACKAGE_DIR \. \"" . $element . "\";\n");
103 };
104
105 print ("1;\n");
106 close (FILE);
107 };
108
109
110 ##### ##### ##### ##### ##### ##### ##### #####
111 #####
112 ##### creation du fichier priorite
113 #####
114 ##### ##### ##### ##### ##### ##### ##### #####
115 sub cree_priorite_file {
116 $priorite_file = "/tmp/priorite.pl";
117
118 open (FILE, ">$priorite_file") or die "impossible d'ouvrir $priorite_file";
119 select (FILE);
120 print<<Fin_Code;
121 #!/usr/bin/perl
122
123 ##### ##### ##### ##### ##### ##### ##### #####
124 #####
125 ##### On definit le tableau des ordres de priorite
126 ##### pour les _fichiers_ a inserer. Autrement dit,
127 ##### on ne trouve ici que des noms de fichier
128 ##### (definis dans listpps.pl)
129 #####
130 ##### ##### ##### ##### ##### ##### ##### #####
131
132 \@cles = (
133 Fin_Code
134
135 @les_fichiers = `cd $PPS_DIR \; find ./ -name "*.pps"`;
136 foreach (@les_fichiers) {
137     $_ =~ s/\.\///;
138 };
139 foreach $element (@les_fichiers) {
140     $element =~ s/\n//;
141     $pps_name = $element;
142     $pps_name =~ s/\.pps//;
143     print ("\"" . $pps_name . "\",\n");
144 };
145
146 @les_package = `cd $PACKAGE_DIR \; find ./ -name "*.pps"`;
147 foreach (@les_package) {
148     $_ =~ s/\.\///;
149 };
150 foreach $element (@les_package) {
151     $element =~ s/\n//;
152     $pkg_name = $element;
153     $pkg_name =~ s/\.pps//;
154     print ("\"" . $pkg_name . "\",\n");
155 };
156 print ("\);\n1;\n");
157 close (FILE);
158 };
159
160 ##############################################
161 ##############################################
162 ##############################################
163 ##############################################
164 ##############################################
165
166 &cree_listpps_file;
167 &cree_priorite_file;
168
169 %keytofile = ();
170 %filetoappels = ();
171 #$refhash = \%keytofile;
172
173 ## on lit les cles defs dans un fichier pps, et affecte
174 ## ce fichier en dependance pour chaque cle
175 foreach $pps (@les_fichiers) {
176     @cles = `cd $PPS_DIR \; $lit_cles $pps`;
177     $pps_name = $pps;
178     $pps_name =~ s/\.pps//;
179     $pps_name =~ s/\n//;
180     foreach $cle (@cles) {
181         $cle =~ s/\n//;
182         $keytofile {$cle} = ["$pps_name"];
183     };
184 };
185
186 foreach $pkg (@les_package) {
187     $pkg_name = $pkg;
188     $pkg_name =~ s/\.pps//;
189     $cle = "use" . "$pkg_name";
190     $keytofile {$cle} = ["$pkg_name"];
191 };
192 ##
193
194 ## maintenant on lit les appels ds chaque fichier
195 foreach $pps (@les_fichiers) {
196     @appels = `cd $PPS_DIR \; $lit_appels $pps`;
197     $pps_name = $pps;
198     $pps_name =~ s/\.pps//;
199     $pps_name =~ s/\n//;
200     foreach (@appels) {
201         $_ =~ s/\n//;
202     };
203     $filetoappels {$pps_name} = [ @appels ];
204 };
205
206 foreach $pkg (@les_package) {
207     @appels = `cd $PACKAGE_DIR \; $lit_appels $pkg`;
208     $pkg_name = $pkg;
209     $pkg_name =~ s/\.pps//;
210     $pkg_name =~ s/\n//;
211     foreach (@appels) {
212         $_ =~ s/\n//;
213     };
214     $filetoappels {$pkg_name} = [ @appels ];
215 };
216
217 #select (STDOUT);
218 #&affiche_hachage (%filetoappels);
219 #&affiche_hachage (%keytofile);
220
221 sub fait_une_passe {
222     $modif = 0;
223 foreach $word (keys %keytofile) {
224 #    print ("clé étudiée : $word\n");
225
226     ## fichier pps ou est stocke la def de arcnp
227     $pps_name = $keytofile {"$word"} [0];
228 #    print ("fichier de stockage : $pps_name\n");
229     
230     ## table des appels ds le fichier pps
231     $reftab = $filetoappels {"$pps_name"};
232     @tab = @$reftab;
233 #    &affiche_tableau ([ @$reftab ]);
234
235     $i = 0;
236     $n = 1 + $#tab;
237     while ($i < $n) {
238         ## appel no $i
239         $nom = @$reftab [$i];
240         if (exists ($keytofile{$nom})) {
241         @appel = ();
242         @appel = @{ $keytofile {"$word"} };
243         $taille1 = $#appel;
244         push (@{ $keytofile {"$word"}} , @{ $keytofile {"$nom"}});
245
246         ## ## maintenant on supprime les doublons ds un tableau du hachage
247         %deja_vu = ();
248         @uniques = ();
249         @appel = ();
250         @appel = @{ $keytofile {"$word"} };
251         foreach $objet (@appel) {
252             unless ($deja_vu{$objet}) {
253                 $deja_vu{$objet} = 1;
254                 push (@uniques, $objet);
255             }
256         }
257         $taille2 = $#uniques;
258
259         $keytofile {"$word"} = [ @uniques ];
260         if ($taille2 > $taille1) {
261             $modif = 1;
262         };
263
264 #           print ("$nom : $taille1 : $taille2\n");
265 #            $reftableau_dep = $keytofile {"$nom"};
266 #            @tableau_dep = @$reftableau_dep;
267 #            &affiche_tableau ([ @$reftableau_dep ]);
268         };
269         $i++;
270     }
271 ## le nombre de ces appels
272 #print ("$n\n");
273 };
274 };
275
276 ## le traitement des dependances
277 $modif = 1;
278 while ($modif =~ 1) {
279     &fait_une_passe ();
280 };
281
282
283
284 sub cree_dephash_file {
285 ##### creation du fichier dephash
286 $dephash_file = "/tmp/dephash.pl";
287
288 open (FILE, ">$dephash_file") or die "impossible d'ouvrir $dephash_file";
289 select (FILE);
290 print<<Fin_Code;
291 #!/usr/bin/perl
292
293 ##### ##### ##### ##### ##### ##### ##### #####
294 #####
295 ##### on definit le hachage des dependances
296 #####
297 ##### ##### ##### ##### ##### ##### ##### #####
298
299 %dependances = (
300 Fin_Code
301
302 &affiche_hachage_terminal (%keytofile);
303
304 print ("                \);\n 1;");
305 close (FILE);
306 };
307
308 ## select (STDOUT);
309 ## &affiche_hachage_terminal (%keytofile);
310
311 ## foreach (@cles) {
312 ##     print ($_ . ".\n");
313 ## };
314
315 &cree_dephash_file ();
316
317 `mv $dephash_file $JPS2PS_DIR`;
318 `mv $listpps_file $JPS2PS_DIR`;
319 `mv $priorite_file $JPS2PS_DIR`;
320
321 1;
Note: See TracBrowser for help on using the browser.