Ce document nécessite quelques mises à jour !

1. Présentation:

Le répertoire "sources" contient quelques fichiers de ressources (images, icônes) et tous les fichiers sources C++ de WinCaml.
Son sous-répertoire "All" contient les fichiers sources C++ qui décrivent le fonctionnement de WinCaml indépendamment du système d'exploitation.
Son sous-répertoire "Qt" contient la passerelle Qt vers Linux, Mac OS X et Windows.
Son sous-répertoire "Win" contient la passerelle native vers Windows.
Son sous-répertoire "wx" contient la passerelle wxWidgets vers Linux, Mac OS X et Windows (utiliser wxWidgets-2.9.5 ou wxWidgets-3.x.y)

Les répertoires "MinGW" et "MSVC" contiennent dans leurs sous-répertoires divers scripts "build*.sh" ou "build*.bat" permettant de compiler WinCaml pour Windows.
Choisir le répertoire "MinGW" en cas d'utilisation d'un compilateur C++ MinGW (g++), le répertoire "MSVC" en cas d'utilisation d'un compilateur Microsoft (cl.exe).

Le répertoire "Qt" contient le fichier "WinCaml.pro" (projet Qt) et, dans ses sous-répertoires "lin", "mac", des scripts "build" permettant de compiler WinCaml respectivement pour Linux et Mac OS X munis de Qt SDK 5.12.2 . 
Il contient dans son sous-répertoire "win" des scripts "build*.sh" et "build*.bat" permettant de compiler WinCaml via Qt pour Windows.
Il contient aussi dans ses sous répertoires Qt/win/Qt5dlls5.15.2, Qt/lin/a/libamd64 et Qt/lin/a/libarm64 des bibliothèques compilées nécessaires au fonctionnement de WinCaml via Qt (Windows et Linux) depuis l'utilisation de Qt 5.15.2 . 

Le répertoire "WX" contient dans ses sous-répertoires "lin" et "mac" des scripts "build.sh" permettant de compiler WinCaml respectivement pour Linux et Mac OS X munis des bibliothèques wxWidgets.
Il contient dans son sous-répertoire "win" des scripts "build.sh" et "build*.bat" permettant de compiler WinCaml pour Windows muni des bibliothèques wxWidgets.

Le répertoire "caml" contient les documentations de Caml-Light et OCaml. Noter que caml-light, ocaml et leurs documentations sont sous copyright de L'INRIA. Il contient aussi des exemples et des bibliothèques graphiques adaptées à WinCaml. 

Pour être utilisés avec WinCaml, Ocaml et Caml-Light doivent lui être associés soit par menu 'Caml > Nouvelle distribution…' soit par 'Glisser-déposer'.
On peut trouver Caml-Light ainsi que quelques compilations d'OCaml à l'adresse https://wincaml7.fr.
Le moyen actuel le plus simple pour installer OCaml est sans doute 'opam' (https://opam.ocaml.org)    



2. Marche à suivre pour construire WinCaml:


2.1 Sous-répertoires du répertoire "MinGW":

Après avoir installé MSYS et MinGW (avec compilateur g++ ciblant l'architecture x86 ou x64):
- Choisir le script "build_xxxx_yy.sh" approprié: xxxx = 2000 pour Windows 2000, xxxx = XP-10 pour Windows XP et ultérieurs, yy = 32 pour l'architecture x86 et yy = 64 pour l'architecture x64
- Vérifier dans le script "build_xxxx_yy.sh", que les valeurs des variables TOOLCHAIN, GXX, WINDRES et STRIP correspondent bien à l'emplacement de MinGW (notamment dans le cas "win64").
- Ouvrir une fenêtre MSYS et positionner la ligne de commande sur le répertoire "MinGW" et exécuter ce script (i.e. entrer la commande: ./build_xxxx_yy.sh).
  ou bien
  demander à Windows d'exécuter les fichiers "*.sh" à l'aide du programme "sh.exe" de MSYS, puis lancer le script "build_xxxx_yy.sh" par double clic.


2.2 Sous-répertoires du répertoire "MSVC":

- En cas d'utilisation de l'ancien Microsoft Visual C++ 6, choisir le script "build_2000_32.bat".
  sinon, après avoir installé Microsoft Visual C++  pour disposer des outils de développement en ligne de commande de Microsoft (une édition express ou community suffit: les éditions 2008, 2010, 2012... - resp. vc9, vc10 et vc11... - fournissent chacune des compilateurs "cl.exe" pour les architectures x86 et x64),
- Choisir le script "build_xxxx_yy.bat" où xxxx est l'année (2008, 2010, 2012...) du compilateur utilisé et yy = 32 pour l'architecture x86, yy = 64 pour l'architecture x64
- Vérifier au début du script "build_xxxx_yy.bat" la validité du chemin du script "vcvarsall.bat" ou "vcvars32.bat"
- Exécuter le script "build_xxxx_yy.bat" par double clic
  (ou bien ouvrir une "Invite de commandes" Windows, positionner la ligne de commande sur le sous-répertoire choisi et exécuter le script en entrant la commande: build_xxxx_yy.bat).


2.3 Sous-répertoires du répertoire "Qt" (Linux, Mac OS X ou Windows): 

2.3.1 Linux, OS X:
Après avoir installé les outils de développement (notamment g++ et make sous Linux, Xcode sous OS X) et Qt SDK 5.x.y, ajuster les contenus des fichiers 'build' et 'WinCaml.pro' au choix de Qt SDK :
- Ouvrir une fenêtre de terminal bash.
- Placer la ligne de commande sur le sous-répertoire correspondant au système d'exploitation ("lin", "mac").
- Rendre si nécessaire le script "build" exécutable (chmod +x build).
- Vérifier la présence de "qmake" dans la variable d'environnement PATH (echo $PATH) ou attribuer son chemin complet à QMAKE dans le script "build".
- Exécuter le script "build" (i.e. entrer la commande: ./build).

2.3.2 Windows: après avoir installé Microsoft Visual C++ (une édition express ou community suffit) pour disposer des outils de développement en ligne de commande de Microsoft, installer Qt SDK x.y.z  (de préférence avec ces outils à partir des sources) correspondant à l'un des scripts build_Qt_x_y_z.bat et exécuter ce script après avoir vérifié son contenu (variable QTDIR notammment).


2.4 Sous-répertoires de "WX" (Linux ou Windows):

Décompresser l'archive wxWidgets-3.4.2.zip (Windows) ou wxWidgets-3.4.2.tar.bz2 (Linux) obtenue à http://www.wxWidgets.org: par exemple sous Windows son contenu pourra aller dans C:\wxWidgets-3.4.2 et sous Linux dans $HOME/wxWidgets-3.4.2 .
Après avoir compilé wxWidgets-3.4.2 dans un certain environnement, repérer dans les sous répertoires de "WX" le script "build.sh" (Linux, windows-MinGW-msys) ou "build*.bat" (Windows) correspondant à cet environnement. Y modifier si nécessaire la variable WXPATH (elle doit contenir la chemin du répertoire wxWidget-3.4.2 précédemment compilé). Exécuter ce script en ligne de commande (comme pour Qt ci-dessus) ou par double clic (Linux, Windows).
Sous Linux wxWidgets-3.4.2 doit être configuré pour l'utilisation de Gtk2 ou Gtk3 et le script "build.sh" peut nécessiter quelques modifications (variables INCLUDES et LIBS): il suppose l'utilisation de Gtk2; s'inspirer des variables INCLUDES et LIBS des "Makefile" des répertoires wxWidgets-3.4.2/samples/*. 

Pour Windows avec MinGW-msys, compiler wxWidgets-3.4.2 en utilisant la ligne de commande de msys comme suit ( en supposant la distribution dans C:\wxWidgets-3.4.2):
  cd /c/wxWidgets-3.4.2
  ./configure
  make

On peut préférer MSYS2 (voir pour plus de détails le fichier Alire du répertoire WX\WIN\MinGW).
  
Pour Windows muni d'un compilateur Microsoft "cl.exe", compiler de préférence wxWidgets-3.4.2 en utilisant la ligne de commande de ce compilateur à partir du répertoire wxWidgets-3.4.2\build\msw:
  nmake -f makefile.vc BUILD=release
(on peut aussi utiliser l'un des projets Visual C++ proposés par wxWidgets)



3. Résultat:

Dans tous les cas on doit finalement obtenir un répertoire "WinCaml7" contenant l'exécutable WinCaml (WinCaml.exe pour Windows, WinCaml.app pour Mac OS X)
prêt à fonctionner.

Sous Windows et Mac OS X Le répertoire WinCaml7 sera trouvé à côté du script utilisé; on pourra le déplacer vers tout endroit accessible en écriture.
Sous Windows, on pourra créer sur le bureau un raccourci vers l'application WinCaml.exe située dans le répertoire WinCaml7 ou épingler WinCaml.exe dans la barre des tâches.
Sous Mac OS X on pourra représenter l'application WinCaml.app par un raccourci sur le bureau ou faire glisser son icône dans le Dock.

Sous Linux, le script "build" transfère le répertoire "WinCaml7" dans le répertoire personnel $HOME puis, à partir du contenu du répertoire Qt/lin/a, crée dans les répertoires cachés $HOME/.config/autostart, $HOME/.local/share/applications et $HOME/.icons les fichiers "WinCaml.desktop", "wincamlunlock.desktop" et l'icône de WinCaml.
WinCaml sera alors représenté par son icône (le chameau à lunettes) dans le dash des Activités de Gnome 3 : si l'icône de WinCaml ne figure pas dans le "dash" des "Activités" (colonne d'icônes à gauche ou en bas de l'écran), cliquer sur l'élément "Afficher les applications" du dash des activités (icône représentant un carré de neuf points généralement située en bas du dash), et après avoir repéré l'icône de WinCaml dans le 'panneau des applications' qui vient d'apparaître, faire un clic droit sur cette icône puis cliquer sur le menu contextuel "Ajouter aux favoris". D'une autre façon, quand on lance WinCaml en utilisant Terminal ou par double clic, son icône devrait apparaître dans le 'Dash' de Gnome 3 où on pourra sans doute lui demander de rester par clic droit et menu contextuel 'Ajouter aux favoris'. 



4. Configuration de WinCaml et problèmes de démarrage:
 
L'application WinCaml utilise quelques fichiers temporaires, un fichier de configuration et deux autres fichiers nommés 'camlbase.txt' et 'ocamlbase.txt' contenant les chemins des distributions Caml Light et OCaml.

les fichiers temporaires sont 'lockfile' (Qt et WX uniquement) verrouillant le démarrage de WinCaml (pour empêcher le démarrage d'un second exemplaire de l'application) et dans le cas de (Qt,Linux) des fichiers nommés '0' ou '1' contenant les chemins des fichiers à ouvrir au démarrage .
Ces fichiers temporaires ne devraient plus exister quand WinCaml a quitté normalement
(de préférence, ne pas quitter la session ou éteindre en laissant WinCaml ouvert).
En cas de problèmes, effacer les fichiers temporaires (et le fichier de configuration s'il semble corrompu).
on pourra utiliser le script bash 'wincamlunlock' dans le cas de (Qt,Linux), l'utilitaire 'unlock.exe' et le script 'WinCamlInit.bat' dans le cas de Windows.
On peut aussi dans tous les cas forcer le démarrage de WinCaml par la ligne de commande "WinCaml init".

WinCaml.exe native pour Windows obtenue sans Qt et sans WX n'a pas de lockfile : elle utilise un mutex dans le même but et nécessite une sortie de session en cas de refus de démarrage. 

Tous ces fichiers temporaires ou de configuration sont dans un même répertoire qui dépend de la plateforme : 

- (Qt, Linux ou mac): WinCaml7/.$USER (chemin relatif à l'emplacement du répertoire WINCAML7)

- Windows XP: %HOMEPATH%\Local Settings\Application Data\WinCaml

- Windows 10 ou 11: %HOMEPATH%\AppData\Local\WinCaml


