#!/usr/bin/python
# -*- coding: utf-8 -*-

import os, sys, shutil, tarfile, glob, locale, string, subprocess#, urllib

# Uniquement pour windows
if os.name == 'nt':
	"#! "+sys.executable
	
	
####################################################################
# Script pour transformer la version de développement du dépôt d'EKD
# (à voir ici): http://fr.lprod.org/wiki/doku.php?id=video:ekd:ekd_svn
# utilisable uniquement sous Linux, en version Windows, afin que les
# utilisateurs Windows puissent tester les dernières versions de
# développement d'EKD. Script écrit par Lama Angelo et mis en GPL v3.
####################################################################
#
# ------------------------------------------------
# Téléchargement de Subversion (SVN) pour Windows
# ------------------------------------------------
# 
# Téléchargez et installez Subversion pour Windows, ici:
# http://subversion.tigris.org/servlets/ProjectDocumentList?folderID=8100
# (http://subversion.tigris.org/getting.html#windows)
#
# --------------------------------------------
# Téléchargement/mise en place du kit windows:
# --------------------------------------------
#
# 1) Téléchargez le kit windows ici:
# http://ekd.tuxfamily.org/index.php/Documents/KitWindows
# --> le lien kit windows (le fichier kit_windows.zip)
#
# 2) Dézippez cette archive kit_windows.zip, quelque part sur votre
# disque dur, vous obtiendrez le répertoire kit_windows.
#
# --------------------------------------------------------
# Mise en place (sur le disque dur) du kit (installation):
# --------------------------------------------------------
#
# Si vous avez bien suivi toutes les indications, dans le répertoire
# kit_windows, vous allez voir les répertoires suivants:
# * dependances_windows
# * windows
# ... les fichiers suivants:
# * creation_version_windows_comment_faire.txt
# * gpl_v3.0.rtf
# * icone_ekd_desinstallation_is.ico
# * icone_ekd.ico
# * icone_ekd_installation_is.ico
# * kit_windows.py
# * README_LISEZMOI.rtf
# --> l'archive (sera automatiquement téléchargée dans la foulée):
# * trunk.tar.gz
#
# a) Si vous mettez en place le kit sous Linux:
# ---------------------------------------------
#
# Ouvrez un terminal et tapez;
# cd /home/user/chemin...vers...le...répertoire...kit_windows
# ... ensuite, dans ce même terminal, tapez:
# python kit_windows.py
# ... et suivez la procédure proposée (décrite plus bas dans Différentes 
# possibilités vous sont offertes)
# * Remplacez user par votre nom d'utilisateur
#
# b) Si vous mettez en place le kit sous Windows:
# -----------------------------------------------
#
# Ouvrez la fenêtre MS-DOS et tapez:
# cd C:\chemin...vers...le...répertoire...kit_windows
# (ou dans tout autre lecteur que C:)
# ... ensuite dans cette même fenêtre MS-DOS, tapez (si vous
# avez installé Python 2.6): 
# C:\Python26\python.exe kit_windows.py
#
# --------------------------------------------
# Différentes possibilités vous sont offertes:
# --------------------------------------------
#
# 1) L'installation elle-même ou la mise à jour:
# * Tapez 1 sur le clavier pour installer/mettre à jour le kit windows
#
# 2) Pour connaître tous les fichiers contenus dans l'arborescence
# (un fichier chemins_ekd_arborescence.txt sera crée), sélectionnez:
# * Tapez 2 sur le clavier pour conserver la liste des fichiers
#
# --------------------------------------------
# Lancer EKD sous Windows:
# --------------------------------------------
# Après avoir mis en place le kit, vous pouvez bien evidemment
# démarrer la version du kit windows, pour ce faire, allez dans
# répertoire où se trouve le kit, et double-cliquez sur le fichier
# ekd_gui, ou alors en mode fenêtre MS-DOS (tapez dans celle-ci):
# cd C:\chemin...vers...le...répertoire...kit_windows
# ... puis:
# C:\Python26\python.exe ekd_gui.py
# Dans un premier temps il va falloir procéder ainsi (repérage des
# dépendances par EKD):
# http://ekd.tuxfamily.org/index.php/Telechargement/Windows
# --> regarder uniquement de l'Etape 1 à l'Etape 3, c'est à dire
# les images:
# http://download.tuxfamily.org/ekdforum/ekd/uploads/Telechargement/install_dependances_et_ekd_win_009.jpg
# http://download.tuxfamily.org/ekdforum/ekd/uploads/Telechargement/install_dependances_et_ekd_win_010.jpg
# http://download.tuxfamily.org/ekdforum/ekd/uploads/Telechargement/install_dependances_et_ekd_win_011.jpg
# ... une fois toutes les dépendances repérées, va redémarrer et 
# vous pourrez lancer EKD sans aucun souci, pour ce faire, retournez
# où se trouve le kit, et double-cliquez sur le fichier ekd_gui, 
# ou alors, comme précisé plus haut, en mode fenêtre MS-DOS (tapez 
# dans celle-ci):
# cd C:\chemin...vers...le...répertoire...kit_windows
# ... puis:
# C:\Python26\python.exe ekd_gui.py
####################################################################
	
	
class EKD_Kit_Windows(object):
	def __init__(self):
		
		"""
		Attention dans la version windows, de nombreux problèmes empechent de faire un certain 
		nombre de choses, par exemple lors de la mise à jour, on tombe sur ce genre d'erreur:
		
		À la révision 628.
		Traceback (most recent call last):
		File "kit_windows.py", line 420, in <module>
		main =      EKD_Kit_Windows()
		File "kit_windows.py", line 202, in __init__
		self.install_maj_kit()
		File "kit_windows.py", line 298, in install_maj_kit
		for parc_fich_cour in liste_fichs: shutil.copy('trunk' + os.sep + parc_fich_
		cour, parc_fich_cour)
		File "C:\Python26\lib\shutil.py", line 88, in copy
		copyfile(src, dst)
		File "C:\Python26\lib\shutil.py", line 53, in copyfile
		fdst = open(dst, 'wb')
		IOError: [Errno 13] Permission denied: '.svn\\dir-prop-base'
		
		--> IOError: [Errno 13] Permission denied: '.svn\\dir-prop-base' !!!
		
		Donc iil était mpossible de traiter avec les repertoires .svn, il a fallu trouver une autre
		strategie. Apres mes changements tout fonctionne sous windows. 
		
		La stratégie trouvée est de mettre une exception dans la fonction: install_maj_kit
		(aux lignes 330-331)
		==>
		try: shutil.copy('trunk' + os.sep + parc_fich_cour, parc_fich_cour)
		except: pass
		"""
		
		################################################################################
		# PARTIES A RENSEIGNER PAR L'UTILISATEUR
		################################################################################
		# Chemin vers l'executable d'EKD sous windows (a adapter suivant 
		# l'install et la version de Python)
		self.chemin_python_windows = 'C:' + os.sep + 'Python27' + os.sep + 'python.exe'
		# Nom
		self.nom = 'EKD'
		# Version
		self.version = '3.1.2'
		# Commande de récupération de la version SVN
		self.commandeSvn = 'svn checkout http://svn.codingteam.net/ekd/trunk '
		################################################################################
		
		# Version de la locale (fr pour langue française)
		self.langue = locale.getdefaultlocale()[0][:2]
		
		self.oi = os.getcwd()
		
		self.archiv_kit_windows = self.oi + os.sep + 'kit_ekd_portable.tar.gz'
		
		self.grande_barre = "==================================================================="
		self.petite_barre = "-------------------------------------------------------------------"
		
		# Conditions pour la langue (et textes dans les variables)

		if self.langue == 'fr': # français
			
			# Menu
			entete_1 = "KIT %s PORTABLE SOUS WINDOWS (EN VERSION %s)"
			entete_2_1 = u"Pour mettre en place le kit, vous devez avoir une connexion"
			entete_2_2 = u"internet fonctionnelle (assurez-vous de son bon fonctionnement)"
			annonce_inst_maj = u"* Tapez 1 sur le clavier pour installer/mettre à jour le kit windows"
			annonce_liste_fich = u"* Tapez 2 sur le clavier pour conserver la liste des fichiers"
			annonce_quitter = u"* Tapez 0 sur le clavier pour QUITTER sans rien faire"
			annonce_choix = u"Quel est votre choix ; 1, 2 ou 0 (?):"
			
			self.erreur_connex_int_1 = u"Le telechargement du dépôt svn ne peut aboutir,"
			self.erreur_connex_int_2 = u"assurez-vous de la validite de votre connexion. Il"
			self.erreur_connex_int_3 = u"se peut aussi que le serveur de telechargement soit"
			self.erreur_connex_int_4 = u"momentanement indisponible ... dans ce cas, veuillez" 
			self.erreur_connex_int_5 = u"recommencer ulterieurement."
			
			self.telecharg_en_cours_1 = u"Telechargement du dépôt svn en cours, veuillez patienter s'il"
			self.telecharg_en_cours_2 = u"vous plait ..."
			
			self.m_en_pl_kit_reussie = u"Mise en place du kit reussie !!!"
			
		else: # pour les autres langues ce sera en anglais
		
			# Menu
			entete_1 = "PORTABLE KIT %s FOR WINDOWS (VERSION %s)"
			entete_2_1 = u"To set up the kit, you must have a functional"
			entete_2_2 = u"web connection (please verify before running)"
			annonce_inst_maj = u"* Type 1 on the keyboard to install/update the windows kit"
			annonce_liste_fich = u"* Type 2 on the keyboard to preserve the list of the files"
			annonce_quitter = u"* Type 0 on the keyboard to QUIT discarding changes"
			annonce_choix = u"Type your choice; 1, 2 or 0 (?):"
			
			self.erreur_connex_int_1 = u"Download from SVN repository cannot achieve,"
			self.erreur_connex_int_2 = u"Make sure your network is up and running. It"
			self.erreur_connex_int_3 = u"may be possible that the remote server is"
			self.erreur_connex_int_4 = u"temporaly unavailable ... in that case," 
			self.erreur_connex_int_5 = u"please, retry later."
			
			self.telecharg_en_cours_1 = u"Download from SVN repository is still in progress,"
			self.telecharg_en_cours_2 = u"please wait ..."
			
			self.m_en_pl_kit_reussie = u"Implementation of the kit well done !!!"
			
		# ---------------------------------------------------------------------------------
		# MENU PRINCIPAL DU SCRIPT 
		# ---------------------------------------------------------------------------------	
		print
		print self.grande_barre
		print entete_1 % (self.nom, self.version)
		print self.grande_barre
		print entete_2_1
		print entete_2_2
		print self.grande_barre
		print annonce_inst_maj
		print self.petite_barre
		print annonce_liste_fich
		print self.petite_barre
		print annonce_quitter
		print self.petite_barre
		choix = input(annonce_choix)
		if choix == 1:
			# Sous windows, si le répertoire trunk existe déjà (c'est à dire pour une mise à jour), 
			# simplement les fonctions telechargement_trunk et install_maj_kit sont executees
			if os.name == 'nt' and os.path.exists(self.oi + os.sep + 'trunk') is True:
				self.telechargement_trunk()
				self.install_maj_kit()
				self.compil_po_mo()
				self.arbo_version_portable()
			# Pour l'autre cas (c'est à dire) la 1ère fois que le kit 
			# est mis en place, les 2 fonctions sont executees
			elif os.name == 'nt' and os.path.exists(self.oi + os.sep + 'trunk') is False:
				self.telechargement_trunk()
				self.install_maj_kit()
				self.compil_po_mo()
				self.arbo_version_portable()
			# Sous Linux ou MacOSX les 3 
			# fonctions sont executees
			if os.name in ['posix', 'mac']:
				self.supp_arbo_kit()
				self.telechargement_trunk()
				self.install_maj_kit()
				self.compil_po_mo()
				self.arbo_version_portable()
		elif choix == 2: self.liste_fich_kit()
		elif choix == 0: sys.exit()
		print
		
		
	def telechargement_trunk(self):
		
		try:
			print
			print self.petite_barre
			print self.telecharg_en_cours_1
			print self.telecharg_en_cours_2
			print self.petite_barre
			print
			
			# Pour windows
			if os.name == 'nt':
				# Si le répertoire trunk existe déja
				if os.path.exists(self.oi + os.sep + 'trunk') is True: 
					# Si le répertoire trunk contient bien des fichiers ...
					contenuTrunk = glob.glob(self.oi + os.sep + 'trunk' + os.sep + '*.*')
					if contenuTrunk > 0:
						# Mise à jour du SVN (par la syntaxe svn)
						os.system('svn up')
				else:
					# S'il n'existe pas ...
					# Création du répertoire trunk
					os.mkdir(self.oi + os.sep + 'trunk')
					# Rapatriement du dépôt svn (par la syntaxe svn)
					os.system(self.commandeSvn + self.oi + os.sep + 'trunk')
			
			# Pour Linux et MacOSX
			elif os.name in ['posix', 'mac']:
				if os.path.exists('trunk'):
					shutil.rmtree('trunk', ignore_errors=0, onerror=None)
				else:
					# Création du répertoire trunk
					os.mkdir(self.oi + os.sep + 'trunk')
					# Rapatriement du dépôt svn (par la syntaxe svn)
					os.system(self.commandeSvn + self.oi + os.sep + 'trunk')

		except:
			print
			print self.erreur_connex_int_1
			print self.erreur_connex_int_2
			print self.erreur_connex_int_3
			print self.erreur_connex_int_4
			print self.erreur_connex_int_5
			print
			# On ferme l'execution du script
			sys.exit(0)

	
	def install_maj_kit(self):
		
		# Uniquement pour Linux ou MacOSX
		if os.name in ['posix', 'mac']:
			# Repérage et destruction de tous les répertoires .svn (et
			# des fichiers contenus) -->  uniquement sous Linux ou MacOSX
			for rep_cour_0, sous_reps_0, fich_0 in os.walk('trunk'):
				if ".svn" in sous_reps_0:
					# Elimination de tous les répertoires .svn à la racine
					sous_reps_0.remove('.svn')
					# Elimination de tous les répertoires .svn (et de tout
					# ce qu'ils contiennent) contenus dans les chemins
					shutil.rmtree(os.path.join(rep_cour_0, '.svn'))
		
		# Copie/création des fichiers contenus à la racine du répertoire trunk 
		# (une fois décompacté) --> seulement les fichiers .py
		fichpy_seul = glob.glob('trunk' + os.sep + '*.py')
		for parc_fichpy in fichpy_seul:
			if parc_fichpy != 'trunk' + os.sep + 'install_ekd_linux_admin.py':
				shutil.copy(parc_fichpy, parc_fichpy[6:])
					
		# Copie/création des fichiers contenus à la racine du répertoire trunk 
		# (une fois décompacté) --> seulement les fichiers .png. En fait il 
		# n'y a que icone_ekd.png
		fichpng_seul = glob.glob('trunk' + os.sep + '*.png')
		for parc_fichpng in fichpng_seul: shutil.copy(parc_fichpng, parc_fichpng[6:])
		
		# Uniquement pour windows
		if os.name == 'nt': 
			# On regarde si une partie de l'arborescence d'EKD est deja presente 
			# (on fait le test sur le repertoire videoporama) --> ds le cas de la 
			# 1ère install du kit (uniquement)
			if os.path.exists(self.oi + os.sep + 'videoporama') is False:
				# Copie/création des répertoires contenus dans le répertoire trunk
				# (--> seulement les répertoires, pas les fichiers)
				liste_reps = [rep_cour_1[6:] for rep_cour_1, sous_reps_1, fich_1 in os.walk('trunk') if rep_cour_1[6:] != '']
				for parc_rep_cour_1 in liste_reps: 
					try: os.makedirs(parc_rep_cour_1)
					except: pass
		# Uniquement pour Linux ou MacOSX
		elif os.name in ['posix', 'mac']:			
			# Copie/création des répertoires contenus dans le répertoire trunk
			# (--> seulement les répertoires, pas les fichiers)
			liste_reps = [rep_cour_1[6:] for rep_cour_1, sous_reps_1, fich_1 in os.walk('trunk') if rep_cour_1[6:] != '']
			for parc_rep_cour_1 in liste_reps: os.makedirs(parc_rep_cour_1)
		
		# Uniquement pour windows
		if os.name == 'nt': 
			# Uniquement si le repertoire trunk existe (ds le cas uniquement
			# d'une mise a jour du depot --> sous windows)
			if os.path.exists(self.oi + os.sep + 'trunk') is True:
				# Copie/création des fichiers contenus dans les répertoires et sous-répertoires (contenus 
				# dans l'arborescence d'EKD en fait) --> les chemins -- répertoires+fichiers
				liste_fichs = [rep_cour_2[6:]+os.sep+fich_3 for rep_cour_2, sous_reps_2, fich_2 in os.walk('trunk') for fich_3 in fich_2 if rep_cour_2[6:] != '']
				for parc_fich_cour in liste_fichs: 
					try: shutil.copy('trunk' + os.sep + parc_fich_cour, parc_fich_cour)
					except: pass
			# Dans le cas de la  1ère install du kit (uniquement)
			else:
				# Copie/création des fichiers contenus dans les répertoires et sous-répertoires (contenus 
				# dans l'arborescence d'EKD en fait) (--> les chemins -- répertoires+fichiers)
				liste_fichs = [rep_cour_2[6:]+os.sep+fich_3 for rep_cour_2, sous_reps_2, fich_2 in os.walk('trunk') for fich_3 in fich_2 if rep_cour_2[6:] != '']
				for parc_fich_cour in liste_fichs:  shutil.copy('trunk' + os.sep + parc_fich_cour, parc_fich_cour)
	
		# Uniquement pour Linux ou MacOSX
		elif os.name in ['posix', 'mac']:
				# Copie/création des fichiers contenus dans les répertoires et sous-répertoires (contenus 
				# dans l'arborescence d'EKD en fait) (--> les chemins -- répertoires+fichiers)
				liste_fichs = [rep_cour_2[6:]+os.sep+fich_3 for rep_cour_2, sous_reps_2, fich_2 in os.walk('trunk') for fich_3 in fich_2 if rep_cour_2[6:] != '']
				for parc_fich_cour in liste_fichs:  shutil.copy('trunk' + os.sep + parc_fich_cour, parc_fich_cour)
			
		# Si l'archive kit_windows.tar.gz se trouve bien dans le répertoire, elle est eliminée
		if os.path.exists(self.archiv_kit_windows) is True: os.remove(self.archiv_kit_windows)
			
		#####################################################
		# On supprime le rep. langues_inst_deb
		# et ce qu'il contient
		#if os.path.exists('langues_inst_deb'): shutil.rmtree('langues_inst_deb')
		#####################################################

		# Uniquement pour Linux ou MacOSX
		if os.name in ['posix', 'mac']:
			# Tous les fichiers restant dans trunk sont éliminés
			fich_rest = glob.glob('trunk' + os.sep + '*.*')
			for parc_rest in fich_rest: os.remove(parc_rest)
			
			# L'arborescence complète des reps. devenus 
			# inutiles est complètement éliminée
			if os.path.exists('trunk'):
				shutil.rmtree('trunk', ignore_errors=0, onerror=None)
			if os.path.exists('debian'):
				shutil.rmtree('debian', ignore_errors=0, onerror=None)
			if os.path.exists('langues_inst_deb'):
				shutil.rmtree('langues_inst_deb', ignore_errors=0, onerror=None)
			
		# Uniquement pour windows
		# L'arborescence complete des reps. devenus inutiles est completement 
		# eliminee. Le rep. trunk doit etre enleve a la main car cela pose un
		# probleme de droit sous windows
		if os.name == 'nt':
			if os.path.exists('debian'):
				shutil.rmtree('debian', ignore_errors=0, onerror=None)
			if os.path.exists('langues_inst_deb'):
				shutil.rmtree('langues_inst_deb', ignore_errors=0, onerror=None)

		print
		print self.petite_barre
		print self.m_en_pl_kit_reussie
		print self.petite_barre
		print
		
		
	def arbo_version_portable(self):
	  
		# Supression de quelques chemins s'ils existaient déjà
		if os.path.exists('windist'+os.sep+'gui_modules_image'):
			shutil.rmtree('windist'+os.sep+'gui_modules_image', ignore_errors=0, onerror=None)
		if os.path.exists('windist'+os.sep+'gui_modules_lecture'):
			shutil.rmtree('windist'+os.sep+'gui_modules_lecture', ignore_errors=0, onerror=None)
		if os.path.exists('windist'+os.sep+'Icones'):
			shutil.rmtree('windist'+os.sep+'Icones', ignore_errors=0, onerror=None)
		if os.path.exists('windist'+os.sep+'locale'):
			shutil.rmtree('windist'+os.sep+'locale', ignore_errors=0, onerror=None)
		if os.path.exists('windist'+os.sep+'masques'):
			shutil.rmtree('windist'+os.sep+'masques', ignore_errors=0, onerror=None)
		if os.path.exists('windist'+os.sep+'menu_et_toolbar'):
			shutil.rmtree('windist'+os.sep+'menu_et_toolbar', ignore_errors=0, onerror=None)
		if os.path.exists('windist'+os.sep+'videoporama'):
			shutil.rmtree('windist'+os.sep+'videoporama', ignore_errors=0, onerror=None)

		# Copie de toute l'arborescence du rep. gui_modules_lecture/affichage_image dans le rep. windist/gui_modules_lecture/affichage_image
		shutil.copytree('gui_modules_lecture'+os.sep+'affichage_image', 'windist'+os.sep+'gui_modules_lecture'+os.sep+'affichage_image')
		# Elimination des fichiers .py contenus dans ce répertoire
		rep_affich_img = glob.glob('windist'+os.sep+'gui_modules_lecture'+os.sep+'affichage_image'+os.sep+'*.py')
		for rem_py_aff_img in rep_affich_img: os.remove(rem_py_aff_img)
		# Copie de toute l'arborescence du rep. Icones dans le rep. windist/Icones
		shutil.copytree('Icones', 'windist'+os.sep+'Icones')
		# Copie de toute l'arborescence du rep. locale dans le rep. windist/locale
		shutil.copytree('locale', 'windist'+os.sep+'locale')
		# Copie de toute l'arborescence du rep. masques dans le rep. windist/masques
		shutil.copytree('masques', 'windist'+os.sep+'masques')
		# Copie de toute l'arborescence du rep. menu_et_toolbar dans le rep. windist/menu_et_toolbar
		shutil.copytree('menu_et_toolbar', 'windist'+os.sep+'menu_et_toolbar')
		# Copie de toute l'arborescence du rep. videoporama dans le rep. windist/videoporama
		shutil.copytree('videoporama', 'windist'+os.sep+'videoporama')
		# Elimination des fichiers .py contenus dans ce répertoire
		rep_videoporama = glob.glob('windist'+os.sep+'videoporama'+os.sep+'*.py')
		for rem_py_videoporama in rep_videoporama: os.remove(rem_py_videoporama)
		# Elimination d'un fichier .wav contenus dans ce répertoire
		rep_videoporama_template = glob.glob('windist'+os.sep+'videoporama'+os.sep+'template'+os.sep+'*.wav')
		for rem_wav_videoporama_template in rep_videoporama_template: os.remove(rem_wav_videoporama_template)

		# ------------------------------------------------------------
		# Solution trouvée ici (et adaptée pour le besoins du script): 
		# http://python.developpez.com/faq/?page=Fichier
		# ------------------------------------------------------------
		# Trouver les chemins (dans le répertoire windist) qui ne comportent aucun 
		# fichier dans les répertoires et sous-répertoires de son arborescence. 
		# Quand cela est détecté un fichier texte vide y est alors écrit. 
		# Indispensable pour la compilation avec InnoSetup
		for root, dirs, files in os.walk(self.oi+os.sep+'windist'):
			for i in dirs:
				chemin = os.path.join(root, i)
				# On vérifie que c'est bien un répertoire
				if os.path.isdir(chemin):
					if len(glob.glob(chemin+os.sep+'*.*')) == 0:
						ecr = open(chemin+os.sep+'fichier_vide.txt', 'w')
						ecr.write('')
						ecr.close()
		
		
	def supp_arbo_kit(self):

		'''
		# Liste des répertoires (et sous-reps) contenus dans le rep. trunk. Cette liste est (bien sûr)
		# la même que celle qui a été mise en place à la racine du répertoire --> sous cette forme
		# (car .split(os.sep)): 
		# [['moteur_modules_common'], ['gui_modules_image'], ['gui_modules_image', 'masque_alpha_3d'], 
		# ['gui_modules_image', 'transitions'], ['gui_modules_image', 'divers'], ['gui_modules_image',
		# 'filtres_images'], ['gui_modules_music_son'], ['locale'], ['locale', 'es_ES'], ['locale', 
		# 'es_ES', 'LC_MESSAGES'], ['locale', 'translations'], ['locale', 'en_EN'], ['locale', 'en_EN',
		# 'LC_MESSAGES'], ['langues_inst_deb'], ['gui_modules_animation'], ['gui_modules_lecture'],
		# ['gui_modules_lecture', 'affichage_image'], ['menu_et_toolbar'], ['Filtre_vf'], ['Filtre_vf',
		# 'Poussier'], ['gui_modules_common'], ['gui_modules_sequentiel'], ['videoporama'], 
		# ['videoporama', 'template'], ['videoporama', 'luma'], ['moteur_modules_animation'], 
		# ['Icones'], ['Icones', 'Exemples']]
		liste_reps = [rep_cour_1[6:].split(os.sep) for rep_cour_1, sous_reps_1, fich_1 in os.walk('trunk') if rep_cour_1[6:] != '']
			
		liste_rep_uniq_pre = []
		# Remplissage de la liste liste_rep_uniq_pre par la 1ère occurence des chemins
		for uniq_pre in liste_reps: liste_rep_uniq_pre.append(uniq_pre[0])
		# Elimination des doublons dans la liste
		liste_rep_uniq_final = list(set(liste_rep_uniq_pre))
			
		# Elimination totale de tous les répertoires et sous-reps (sauf dependances_windows et
		# windows du kit windows) et tous les fichiers qui s'y trouvent
		for parc_rep_1 in liste_rep_uniq_final: shutil.rmtree(parc_rep_1)
		'''
		
		# Liste des répertoires pre
		liste_arbo = glob.glob(self.oi+os.sep+'*')
		
		for larbo in liste_arbo:
			# Uniquement pour Linux ou MacOSX
			if os.name in ['posix', 'mac']:
				# Prise en compte de la version portable
				if os.path.isdir(larbo) and larbo not in [self.oi+os.sep+'windist', self.oi+os.sep+'trunk']:
					shutil.rmtree(larbo)
			# Uniquement pour windows
			elif os.name == 'nt':
				# Prise en compte de la version portable
				if os.path.isdir(larbo) and larbo not in [self.oi+os.sep+'windist']:
					shutil.rmtree(larbo)
		
		'''
		# Elimination totale de l'arborescence contenue dans le répertoire trunk
		for rep_cour, sous_reps, fich in os.walk('trunk'):
			if rep_cour != '':
				shutil.rmtree(rep_cour)
		'''
		
		# Elimination de tous les fichiers .py sauf kit_windows.py
		py = glob.glob(self.oi + os.sep + '*.py')
		py_select = [select for select in py if select != self.oi+os.sep+'kit_windows.py']
		for supp in py_select: os.remove(supp)
			
		# Pour finir on supprime fichier chemins_ekd_arborescence.txt
		# s'il existe
		if os.path.exists('chemins_ekd_arborescence.txt') is True:
			os.remove('chemins_ekd_arborescence.txt')
                
                      
	def liste_fich_kit(self):

		if os.path.exists(self.oi+os.sep+'chemins_ekd_arborescence.txt'):
        		os.remove(self.oi+os.sep+'chemins_ekd_arborescence.txt')

		# Afficher tous les fichiers d'une arborescence precise
		# http://wikipython.flibuste.net/moin.py/CodeSystemeDeFichier

		debut = self.oi
		repertoires = [debut]

		listeChemins=[]

		while len(repertoires)>0:
        		repertoire = repertoires.pop()
        		for nom in os.listdir(repertoire):
                		chemin = os.path.join(repertoire, nom)
                		if os.path.isfile(chemin):
					if chemin.endswith('.pyc') or chemin.endswith('.py~'):
						os.remove(chemin)
                        		listeChemins.append(chemin)
                        		# Ecriture dans le fichier (sauvegarde ds l'arbo d'EKD --> à la base)
                        		ecrCheminFich=open(self.oi+os.sep+'chemins_ekd_arborescence.txt', 'a')
                        		ecrCheminFich.write(chemin+'\n')
                        		ecrCheminFich.close()
			
                		elif os.path.isdir(chemin):
                        		repertoires.append(chemin)  # C'est un repertoire et il n'est pas affiche
			
		print
		print "Nbre de fichiers en tout (avant supression des"
		print ".pyc et/ou .py~), s'ils existent:", len(listeChemins)
		print
		
		
	def compil_po_mo(self):
		
		# Uniquement pour windows
		# On ne passe pas par le script mo_compile.py (qui appelle lui-même le script msgfmt.py)
		# mais on passe directement par msgfmt.py pour une compilation *.po --> *.mo directe.
		if os.name == 'nt':
			# Find *.po
			source_files = glob.glob("locale/??_??/LC_MESSAGES/*.po")
			# Generate *.mo files
			for po_file in source_files :
				mo_file = "%s.mo" % po_file.split('.')[0]
				if not os.path.exists(mo_file) or os.stat(po_file).st_mtime > os.stat(mo_file).st_mtime:
					print "Updating %s" % mo_file
					os.system("msgfmt.py -o %s %s" % (mo_file, po_file))
					
			# Mise en place de toutes les traductions
			os.system(self.chemin_python_windows+' gestion_des_langues_en_local.py')
					
			print
			print self.grande_barre
			print "* Compilation des fichiers langue *.po en *.mo --> OK"
			print self.grande_barre
			print
		
		# Uniquement pour Linux ou MacOSX
		# Là on appelle le script mo_compile.py
		elif os.name in ['posix', 'mac']: 
			os.system("python mo_compile.py")
			# Mise en place de toutes les traductions
			os.system('python gestion_des_langues_en_local.py')
			
			print
			print self.grande_barre
			print "* Compilation des fichiers langue *.po en *.mo --> OK"
			print self.grande_barre
			print
		
# Appel de la classe
main = EKD_Kit_Windows()