detobel36

Compilation

Mar 20th, 2015
336
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 4.50 KB | None | 0 0
  1. # -*- coding:Utf8 -*-
  2.  
  3. ###########################################
  4. # Programme Python type                   #
  5. # Bruxelles, 2015                         #
  6. ###########################################
  7.  
  8. ##################################
  9. #   =>  Projet: compile.py  <=   #
  10. ##################################
  11.  
  12. # Utilisation: python3 compile.py <nom>
  13. # Il ne faut pas mettre le .asm
  14.  
  15. import os
  16. import os.path
  17. import sys
  18.  
  19. argument = sys.argv;
  20.  
  21. # Calcules des espacements pour un bel affichage
  22. def calcule_espace(string, nbrReference):
  23.     return string + " "*(nbrReference-len(string) -1) + "|"
  24.  
  25. # Si aucun fichier n'a été spécifié
  26. if(len(argument) == 1):
  27.     print("-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=\n" \
  28.           "| Vous devez rentrer le nom du programme de cette manière: |\n" \
  29.           "| >> python3 compile.py <nom>                              |\n" \
  30.           "| Et ce, sans le .asm                                      |\n" \
  31.           "-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=")
  32.  
  33. # Si l'utilisateur à spécifié l'extention
  34. elif(".asm" in argument[1] or ".cpp" in argument[1]):
  35.     print("-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=\n" \
  36.           "| Vous ne devez pas rentrer l'extention du programme.    |\n" \
  37.           "| Voici comment utiliser le programme:                   |\n" \
  38.           "| >> python3 compile.py <nom>                            |\n" \
  39.           "-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=")
  40.  
  41. # Si il manque le fichier IO.cpp
  42. elif(not os.path.exists("IO.cpp")):
  43.     print("-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=\n" \
  44.           "| Vous avez besoin du fichier IO.cpp disponible sur l'uv |\n" \
  45.           "| Lien: http://bit.ly/1MTjYnx                            |\n" \
  46.           "-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=")
  47.  
  48. # Si le fichier spécifié pas l'utilisateur n'existe pas
  49. elif(not os.path.exists(argument[1]+".asm")):
  50.     print("-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=\n" \
  51.           "| Le fichier que vous désirez lancer n'existe pas. |\n" \
  52.           "-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=")
  53.  
  54. # Si tout est bon, on y va ->
  55. else:
  56.  
  57.     # Initialisation des messages
  58.     str_ligne     = "-=-";
  59.     str_nom       = "| Compilation de " + argument[1] + ".asm";
  60.     str_dossier   = "| Se trouvant dans le dossier: " + sys.path[0];
  61.     str_nasm      = "| Lancement de la commande: nasm -f elf " + argument[1] + \
  62.                     " .asm "
  63.     str_g         = "| Lancement de la commande: g++ IO.cpp " + argument[1] + \
  64.                     " .o -m32 -o exec "
  65.     str_execusion = "| Exécution..."
  66.     # Message d'erreur
  67.     str_erreur_asm    = "| Une erreur c'est produite lors de l'exécution " \
  68.                         "de la commande nasm "
  69.     str_erreur_compil = "| Une erreur c'est produit lors de la compilation"
  70.  
  71.     # Calcule du nombre de caractère
  72.     # On regarde pour tous les messages, si jamais ils sont modifiés...
  73.     nbr_max = max(len(str_nom), len(str_dossier), len(str_nasm), \
  74.                 len(str_g), len(str_erreur_asm), len(str_erreur_compil));
  75.  
  76.     # Calcule de la longeur que l'on va utilisé partout
  77.     str_ligne = (str_ligne*((nbr_max//3) + 1))
  78.  
  79.     nbr_caracter = len(str_ligne)
  80.     str_nom = calcule_espace(str_nom, nbr_caracter)
  81.     str_dossier = calcule_espace(str_dossier, nbr_caracter)
  82.     str_nasm = calcule_espace(str_nasm, nbr_caracter)
  83.     str_g = calcule_espace(str_g, nbr_caracter)
  84.     str_execusion = calcule_espace(str_execusion, nbr_caracter)
  85.     str_erreur_asm = calcule_espace(str_erreur_asm, nbr_caracter)
  86.     str_erreur_compil = calcule_espace(str_erreur_compil, nbr_caracter)
  87.  
  88.  
  89.     # Message de démarrage
  90.     print(str(str_ligne) + "\n" + \
  91.           str(str_nom) + "\n" + \
  92.           str(str_dossier))
  93.  
  94.     ##########################
  95.     # Première commande:
  96.     print(str(str_nasm))
  97.     os.system('nasm -f elf ' + argument[1] + '.asm')
  98.  
  99.     if(os.path.exists(argument[1] + ".o")): # Si la première commande fonctionne
  100.  
  101.         ##################
  102.         # Seconde commande
  103.         print(str(str_g))
  104.         os.system('g++ IO.cpp ' + argument[1] + '.o -m32 -o exec')
  105.  
  106.         if(os.path.exists("./exec")):
  107.             print(str(str_execusion))
  108.             os.system('./exec')
  109.         else:
  110.             print(str(str_erreur_compil))
  111.  
  112.     else: # Si le fichier .o n'a pas été créé
  113.         print(str(str_erreur_asm))
  114.  
  115.     print(str(str_ligne))
Advertisement
Add Comment
Please, Sign In to add comment