L’une des façons de maintenir un numéro de version de votre projet est d’incrémenter un nombre dans un fichier lors de chaque compilation. Pour effectuer cette tâche, un script doit parse le fichier pour localiser le numéro, l’incrémenter, puis le réécrire avec le nouveau numéro. Si le fichier est court et contient peu d’autre que le nombre, le script peut simplement écrire un nouveau fichier de toutes pièces chaque fois qu’il fonctionne. Cependant, si le fichier est un fichier de conception long, il peut être plus pratique de modifier la ligne avec le numéro de version au lieu d’écrire un nouveau fichier à partir de zéro.
Localiser le numéro
Le script utilise une expression régulière pour localiser le numéro dans le fichier. La ligne avec le numéro doit avoir un format unique, sinon plusieurs lignes peuvent correspondre à l’expression régulière. Un moyen de faire un format unique est d’inclure un commentaire unique sur la ligne avec le numéro. L’expression régulière peut inclure ce commentaire unique. Vous trouverez ci-dessous un exemple de ligne d’un fichier de conception possédant une ligne de numéro de version comprenant un commentaire spécial et l’expression régulière commande Tcl qui la correspond.
Ligne de fichiers de conception
data_out < = 16'h41 ; Numéro de version de la conception
Expression régulière
regexp {^\s+data_out <= \d+'h ([[:x≥it:]]+) ; // Design Version Number$} \ $line match version_number
Le([:xituit:]]+) correspond à un numéro hexociétique avec au moins un chiffre et le enregistre dans une variable de correspondance appelée version_number.
Incrément du numéro
Vous pouvez incrémenter les nombres hexculocys dans Tcl. Dans Tcl, les nombres hexculociaux sont indiqués avec un numéro 0x en tête. Si votre numéro de version ne commence pas par 0x, il peut être plus facile de convertir le numéro en base 10 avant de l’incrémenter. Pour un nombre hexocidique, les commandes suivantes montrent un exemple de conversion d’une chaîne hexocidique à la base 10, en l’incrémentant et en la convertissant en hexocidique.
définissez hex_value analyse « AA » $hex_value « %x » decimal_value incr decimal_value définie new_hex_value [format « %X » $decimal_value] # $new_hex_value est maintenant « AB »
Réécriture du fichier
Si le fichier de conception est court et contient des informations uniquement sur le numéro de version, vous pouvez utiliser une série de commandes puts pour écrire un nouveau fichier avec le numéro incrémenté.
Si le fichier de conception est long, il est généralement plus facile de ne modifier que la ligne avec le numéro de version, car le codage dur du contenu du fichier dans le script Tcl serait peu pratique.
La procédure suivante analyse un fichier de conception et met à jour la ligne avec les informations de version. Les lignes qui ne correspondent pas à l’expression régulière sont écrites dans un nouveau fichier, non modifié. La ligne correspondant à l’expression régulière est incrémentée par le numéro de version, puis écrite dans le nouveau fichier.
proc update_version_number { input_file output_file} { Si le fichier d’entrée ne peut pas être ouvert, retournez une erreur. si {[capture {open $input_file} ] } {erreur de retour de code $input } } Si le fichier de sortie ne peut pas être ouvert, renvoyez une erreur si {capture {open $output_file w} output] } { erreur de retour de code $output } # Lisez à la fois dans le fichier d’entrée une ligne tandis que {-1 != [obtient $input ligne] } { {Cette expression régulière est spécifique à la ligne de fichiers # de conception située en haut de la page Web. Nb. Vous devez le modifier selon les besoins de votre fichier. si {[regexp {^\s+data_out <= \d+'h([[:x≥it:]]+) ; // Design Version Number$} \ $line match version_number] } { { # Convert the hex≥ciiku version number to base ten and increment it. scan $version_number « %x » decimal_value incr decimal_value défini new_version_number [format « %X » $decimal_value] # Se faire une place dans le nouveau numéro de version de l’ancien fichier régresseur h{version_number} $line ligne h{new_version_number} } # Écrire la ligne dans le nouveau fichier met $output $line } fermez $input fermez $output }</pré>
Dans un script Tcl, vous pouvez appeler la procédure comme illustré dans l’exemple suivant. L’exemple est écrit en supposant que vous exécutez le script Tcl à une invite de commande système et fournissez le nom du fichier à mettre à jour en tant qu’argument pour le script.
set file_name [$quartus(args) 0] définissez output_file_name ${file_name}.updated_version_number si {capture {{update_version_number $file_name $output_file_name } res] } { post_message -type critical_warning « Impossible de mettre à jour le numéro de version : $res » } d’autre { si {[catch {file renommez -force $output_file_name $file_name } res ] } { post_message -type critical_warning \ « Impossible de mettre à jour le numéro de version : } $res »