etclkit

 

Archive (dérivée de zip) créé (avec l'applet wrap) d'eTcl contenant autant de script(s) Tcl et/ou Tk, paquet(s), image(s), etc.. que nécessaire au bon fonctionnement de l'application qu'elle contient.

Principe d'utilisation :

On exécute tout simplement l'etclkit avec eTcl et l'application se lance.

Pour créer un etclkit ou un etclpack on doit utiliser l'applet wrap.

Pour voir le contenu d'un etclkit ou d'un etclpack on doit utiliser l'applet unwrap.

Intérêts :

Le principal intérêt d'un etclkit est qu'il permet de distribuer facilement un application et toutes les extensions, images, fichiers qu'elle requiert dans un seul fichier. Il n'y a donc rien à installer ou à désinstaller pour le destinataire en dehors d'eTcl lui même pour exécuter l'etclkit.

Dans le cas d'un etclpack, l'exécutable eTcl n'a même plus besoin d'être installé puisqu'il est intégré dans l'etclpack (la contre-partie étant qu'un etclkit marche partout alors qu'un etclpack devient dépendant de la plate-forme pour lequel il est conçu).

On peut également utiliser un etclkit pour stocker plusieurs paquets.

Fonctionnement interne :

Le fonctionnement est identique pour un etclkit ou un etclpack :

  1. eTcl se lance
  2. eTcl monte le réperoire virtuel (VFS)
  3. eTcl exécute le fichier main.tcl placé à la racine du VFS

Vous avez des exemples d'etclkit sur la page d'accueil d'eTcl : [1] et dans le répertoire lib d'eTcl.

Limitation :

Un VFS en cours de fonctionnement est en lecture seule.



Astuces :


L'extension par défaut d'un etclkit est .etk, mais on peut ma renommer en .zip pour l'extraire avec un utilitaire de décompression classique.


On peut verrouiller l'auto_path d'un etclkit à l'intérieur du VFS grâce au petit script suivant :

 # Initialisation eTclKit :
 if {![info exists ::etcl::topdir]} {
	set ::etcl::topdir [file join [::etcl::etcl vfspath] main]
	set oldpath $::auto_path
	set ::auto_path {}
	foreach p $oldpath {
		if {[string first [info name] $p] != -1} {lappend ::auto_path $p}
	}
	unset oldpath p
	if {[file isdirectory [file join $::etcl::topdir lib]]} {
		if {[lsearch -exact $::auto_path [file join $::etcl::topdir lib]] < 0} {
			set ::auto_path [linsert $::auto_path 0 [file join $::etcl::topdir lib]]
		}
	}
 }

Le principal intérêt de ce "verrouillage" est d'éviter d'utiliser dans son etclkit un paquet installé sur le poste de développement qui risque de ne pas être disponible (ou dans une version différente) sur le poste de destination.

L'autre intérêt de ce script est de déclarer une variable ::etcl::topdir qui correspond à la racine du VFS, ce qui facile grandement la vie par la suite :

 source [file join $::etc::topdir misc.tcl]
 image create photo Kroc -file [file join $::etc::topdir images kroc.png]


Voir également :


Catégorie eTcl