|
|
|
|
Bonjour
Je suis nouveau sur le forum.
Je suis actuellement en stage de fin de première année de bts IRIS.
Dans le cadre de ce projet, je suis ammené a vérifier le bon déroulement de la compilation d'assemblages.
j'ai un programme perl qui lance une commande d'assemblage, celle ci s'exécute identifie chaque source de l'assemblage, les compiles, crée les packetages .epkg , les installes avant de compiler l'assemblage en lui même et d'en créer le packetage.
cette commande renvoie sur STDOUT et SDTERR un ensemble d'informations que je traite ligne a ligne afin de savoir quelle source est traitée de quel assemblage ( avec les différentes versions) et a quel stade en est le traitement.
je souhaiterai créer un tableau qui comporterait les assemblages principaux en values (dont le nom est contenu par des variables et dont le nombre est variable d'une exécution a l'autre du programme perl)
et je souhaiterais que ces values renvoient à des tableaux repertoriant les sources en values (dont le nom est contenu par des variables et dont le nombre est variable d'une exécution a l'autre du programme perl) et que ces values renvoient a une table de hash dont les clefs seraient les suivantes avec les values suivantes représentant lesdiférents stades:
Assembly => Not Engaged / Engaged / Ok
Build => Not Engaged / Engaged / Ok
Package => Not Engaged / Engaged / Ok
Install => Not Engaged / Engaged / Ok
je ne sais pas si je suis tres clair :
-------------------EXEMPLE------------------------------------------
si je compile le projet calculette 1.0 (sources : calc1.0 mult1.0 et add1.0) et calculette 1.1 (sources : calc1.1 mult1.0 et add1.0 soust1.0)
on aurait un @Assemblies
[0] | calculette_1.0
[1] | calculette_1.1
et
seraient crées
un @calculette_1.0
[0] | mult_1.0
[1] | add_1.0
[2] | calc_1.0
un @calculette_1.1
[0] | mult_1.0
[1] | add_1.0
[2] | soust_1.0
[3] | calc_1.1
et les tables de hash
%mult_1.0
Assembly => Ok
Build => Ok
Package => Ok
Install => Ok
%add_1.0
Assembly => Ok
Build => Ok
Package => Engaged
Install => Not Engaged
et ect avec toutes les sources (ici sept)
l'idée est que je puisse par la suite dans le programme accéder a l'information en disposant des éléments suivant :
quelle est l'état du packaging de la source add1.0 de l'assemblage calc1.10 (ici "Engaged)
####################################
En plus simple et en résumé je souhaite accéder à une valeur qui dépend de trois paramètres (assemblage, source, stade)
sachant que le nombre d'assemblages varie leur nom aussi, idem pour les sources seul le nom et les valeurs des stades reste les même d'un éxécution a l'autre.
je dispose de variable contenant les noms des assemblages des sources et les versions et je ne voit pas comment créer des tableaux et des tables de hash dynamiquement
Merci de votre aide
Salut,
|
Stderr est redirigée vers sdtout et le tout est lié a EBUILD
my $Comand = "ebuild -b $BuildDir -B release -n $Prog -v $Version 2>&1" ; #the ebuild comand witch will build and install the project
print "\nRunning: $Comand\n";
if ( ! open EBUILD, "$Comand |")
{
....
}
Extrait de ce que j'ai a traiter checking for strip... strip checking for nm... nm checking if make is GNU make... yes checking for dependency tracking method... gcc configure: creating ./config.status config.status: creating Makefile OK add--1.0: running build (cd build && make) make[1]: Entering directory `/home/expand/Desktop/ExpandLauSeb/Expand/log/sources/add--1.0/projects/add/unix/build' ./bk-deps g++ -c -o add10_add.o -I../../../../cpp/pinclude -I../../../../cpp/include -DUNIX -DLINUX -fPIC -DPIC -O3 -Wall -Wno-sign-compare -D_UNIX ../../../../cpp/src/add.cpp mon algo de traitement des lignes (extrait)
if ( ! open EBUILD, "$Comand |") #execute the comand $Comand and link ebuild sdtout with the EBUILD filehandle
{
die "Cannot open the ebuild filehandle : $!";
}
my $ctxt = {};
while ( defined($Line = <EBUILD>))
{
chomp($Line);
if ( $Line =~ /^building assembly/i ) #call the handle witch manage the assembling
{
handle_what_it_assembly($ctxt, $Line);
}
if ( $Line =~ /running build$/i ) #call the handle witch manage the building
{
handle_building($ctxt, $Line);
}
if ( $Line =~ /running package$/i ) #call the handle witch manage the packaging
{
handle_packaging($ctxt, $Line);
}
if ( $Line =~ /^Installing packages/i ) #call the handle witch look at the package wich is installed
{
handle_installing($ctxt, $Line);
}
if ($Line =~ /^OK$/i ) #store the result of the build in a hash table($BuildReport)
{
handle_build_ok($Line);
}
if ( $Line =~ /Package successfully installed/i ) #print the install result g
{
handle_success_inst($Line);
}
if ($Line =~ /error/i) #call the handle witch manage the errors
{
handle_error($Line);
}
if ($Line =~ /^EBUILD : FAILED$/i) #call the handle witch manage the builds failures
{
handle_build_FAILED($ctxt,$Line);
}
$ctxt->{MostPreviousLine} = $ctxt->{PreviousLine}; #store the previous and the most previous lines
$ctxt->{PreviousLine} = $Line;
}
close EBUILD; #close the filehandle LOGFILE
Ensuite les sous fonctions traitent l'affichage écran pour que l'utilisateur ai un "résumé" de ce qui s'est passé lors de la compilation. afin de savoir dans quel ordre se sont déroulées les étapes d'assemblage et si elles se sont bien déroulées . je souhaite par la suite pour d'autres fonctionnalité de ce programme pouvoir accéder à l'état d'avance ment de chacune de ces étapes (Engaged, Not Egaged, Ok)en fonction de trois paramètres : _l'étape d'avancement concernée (assembly, build, package, install) _le ficher source (versionné) auquel il correspond _l'assemblage auquel le fichier source appartient |
D'accord, tu me montre ton algo, mais il utilise des fonctions dont je n'ai pas le code
|
Le truc c'est que ça va etre dur de te décrire ce que fait chacune des fonction parce que c'est un oeu compliqué a expliquer le tout du tout donc jvai essayer de t'aiclairer en te donnant ce que je souhaite que fasse en plus les fontions :
|
Je crois que on s'est mal compris
|
Ce que je doit obtenir c'est le moyen d'accéder (a nimporte quel moment de l'éxécution du programme ) a un listing de ce qui c'est passé pour chaque assemblage, cad que par exemple a un moment si j'ai besoins de reprendre toutes ces information pour les stocker dans une base de donnée sql afin d'effectuer des statistique de compilation pour afficher sur une page web.Donc je veu pouvoir stocker toutes les informations de compilation de l'assemblage dans des variables pour les rendre facilement accecible. afin de pouvoir les traiter. |