1 Reflexions sur l'archi de bbtk et des packages
2 ----------------------------------------------
4 *STRUCTURE DU SOURCE TREE :
5 ---------------------------
7 La lib bbtk devrait être dans un rep à part entiere et chaque package
8 de la distrib standard à part avec la même structure qu'un package utilisateur
10 donc dans le rep racine des sources :
14 creation rep "kernel" qui correspond au toolkit bbtk (lib+appli)
16 kernel/src/ accueille src/kernel/
17 kernel/doc/ accueille doc/
18 kernel/installer/ accueille install/
19 kernel/cmake/ accueille cmake/
20 kernel/appli/ accueille appli/
22 creation rep packages/ qui accueille chaque package de la distrib standard
29 la structure de chaque package sera identique et identique à celle créée par bbCreatePackage pour les utilisateurs :
31 A la racine des sources d'un package, je propose :
32 src/ : sources (ce qui est actuellement en vrac dans /src/packages/std/ par ex.)
34 doc/bbdoc : rep pour creation de la doc du package par bbdoc (bbi à terme ? cf. ci-dessous) incluant les images si besoin
35 doc/doxygen : doc doxygen
36 bbs/ : scripts associés au package
39 cmake/ : fichiers cmake pour build/install
41 * PROPOSITION : TOUT EST BLACK BOX ET PACKAGE !
42 -----------------------------------------------
44 A l'heure actuelle, du point de vue de l'utilisateur ou du createur
46 - les packages (libraries dynamiques) :
47 - utilisés avec 'load' dans bbi
49 - en texte par 'help' dans bbi
50 - en html par l'appli bbdoc (créée automatiquement lors du build)
51 ces doc html sont référencées dans la doc html du package 'user' générée par 'graph' dans bbi (cf. ci-dessous)
52 - les scripts (.bbs) :
53 - utilisés avec 'include' dans bbi
54 - documentés dans bbi par 'graph' qui documente le package 'user'
55 Les scripts sont de deux types :
56 - scripts de définition de complex boxes (define/endefine)
57 - scripts d'appli (appli finale, de test, de demo, ...)
59 Quand un utilisateur crée un nouveau package,
60 ce package comprend à la fois une librarie dynamique
61 (mais pas forcément, lire la suite ...) et des scripts (idem).
62 Evidemment, il a envie :
63 - que tout soit utilisable (donc que les chemins pour trouver sa lib et ses scripts soient connus de bbi).
64 - que tout soit documenté et référençable (i.e. que les chemins pour référencer les doc de ses boites soient connus des autres packages).
67 - les complex boxes définies par des scripts fassent partie à part entière du package (et de sa doc).
69 1) dans bbi, quand on définit une boite par 'define', on peut spécifier le package dans lequel elle va être placée,
70 ex. : "define XOR std" dit que la boite XOR va dans le package std.
71 Si ce package existe (déja loadé ou précédent 'define TOTO std') : ok l'insère. Sinon crée un nouveau package.
72 => Déja mis en place et testé : cf scripts/test/testDefine.bbs
73 Autre manière de faire : nouveaux mots-clés de bbi 'package/endpackage'.
76 > description "mon magnifique package"
77 > author "foo@bar.com"
85 toutes les boites définies entre 'package/endpackage' vont dans le package
86 (de la même manière que toutes les instances créés par 'new' entre
87 'define/endefine' vont dans la complex box courante).
88 Ici, mybox et mybox2 seront dans mypack.
89 Intérêt du bloc 'package/endpackage' : pouvoir documenter le package
90 grace aux commandes standard 'description/author' ...
91 (REM : finalement, le package 'user' et la boite 'workspace'
92 peuvent se voir comme si au lancement, bbi exécutait les commandes
93 "package user" puis "define workspace". Ca donne des idées pour avoir plusieurs workspaces...)
95 Revenons maintenant aux scripts de complex boxes d'un package.
96 2) Un package utilisateur (ou standard bbtk)
97 sera fournit **AVEC SON SCRIPT DE CHARGEMENT**.
98 Par ex: std.bbs sera le script de chargement du package std.
100 # Load the 'atomic' boxes compiled in dyn lib :
102 # Include the complex boxes scripts (which can load other packages...)
106 Donc un utilisateur final mettra 'include std' dans ses scripts pour
107 utiliser le package std (simple & complex boxes).
110 A) Un utilisateur "lambda" utilisera toujours 'include' et ne verra
111 que des boxes (simple ou complex). Un utilisateur "averti" pourra toujours
112 ne loader que la lib ou n'inclure que certains scripts.
113 B) La doc sera générée automatiquement via bbi.
114 Il faut bêtement étendre la commande 'graph' pour que l'on puisse lui
115 spécifier le nom du package dont on veut générer la doc
116 (A l'heure actuelle graph cherche à documenter une boite du package 'user'
117 ou une instance de 'workspace' et génère systématiquement la doc du
118 package 'user' pour les références.
119 En passant, voir aussi la réflexion ci-dessous
120 sur les rôles ambigus des commandes help et graph).
121 (La génération auto de la doc pourra se faire
122 de manière quasiment identique à ce qui est fait à l'heure actuelle
123 dans la macro BBTK_DOCUMENT_SCRIPTS de cmake/bbtkMacro.cmake :
124 cela revient à lancer bbi sur un script du type :
125 "include packagename"
126 "graph packagename good-parameters")
127 Donc plus d'appli bbdoc : tout est fait par bbi !
129 3) Doc des appli (.bbs) :
130 Idem que ci-dessus avec un script du type :
141 >graph std-demo [good-params]
142 bbtk doit fournir aux utilisateurs une macro cmake pour générer ce type de
143 script, les targets qui vont bien et l'installation de la doc au même endroit
144 que toutes les autres doc, i.e. dans /packages/<package-name>/bbdoc.
145 Ainsi toutes les refs croisées sont bonnes, on n'a que des packages
146 documentés qui contiennent des boites (éventuellement d'applications)...
150 Finalement on aura la structure de package :
159 * BUILD TREE ET INSTALLATION
160 ----------------------------
162 On doit pouvoir utiliser bbtk ou n'importe quel package aussi bien en tant que package bbi (load/include) ou que librairie c++ (via cmake)
163 à la fois dans le build tree et dans l'install tree.
164 De plus, un install tree doit pouvoir être déplacé et rester utilisable modulo la spécification explicite du répertoire quand on lance cmake.
165 En effet, FindBBTK.cmake ou Find[PackageName].cmake :
166 1) Ne sont pas installés dans l'install tree mais dans le rep de cmake donc ne sont pas copiés si on copie l'install tree (le Find*.cmake est le seul fichier installé hors install tree à ma connaissance. D'autres ? Ca poserait problème...)
167 2) Même si on installe "à la main" FindBBTK.cmake, le code qu'il contient ne recherche les install de bbtk qu'à des endroits "canoniques" donc si on pose l'install tree dans un endroit "exotique", il ne le trouvera pas et le chemin devra être entré manuellement.
173 Structure des build/install trees :
176 PREFIX = build_tree_path, /usr, /usr/local
177 PREFIX_SHARE = PREFIX/share/bbtk
179 PREFIX = PREFIX_SHARE = build_tree_path, C:/ProgramFiles/bbtk
181 PREFIX/bin : bbi, etc.
182 PREFIX/lib : libbbtk.so, libbstd.so, etc.
183 PREFIX/lib/bbtk : UseBBTK.cmake, etc.
184 PREFIX/lib/bbstd : UseBBSTD.cmake, etc.
185 PREFIX/include/bbtk : bbtkSystem.h, etc.
186 PREFIX/include/bbstd : bbstdAdd.h, etc.
189 PREFIX_SHARE/doc/bbtkWebSite
193 PREFIX_SHARE/doc/bbdoc/std : index.html, *.png, etc.
201 PREFIX_SHARE/doc/doxygen/std : index.html, *.png, etc.
205 PREFIX_SHARE/bbs/std/