Im Wurzelverzeichnis der Agentensystems befindet sich das Master-Makefile, das alle Aktionen initiert und koordiniert. Daneben werden in Makefile.DEF einige prinzipielle Einstellungen bezüglich einiger benötigter Verzeichnisse gemacht (siehe Tabelle A.1). Beide Dateien enthalten Einstellungen, die unspezifisch für Tools oder Betriebssystemplattform sind und ausschließlich für das Basis-System verwendet werden.
Im Verzeichnis config/ befinden sich nun u.a. jene Makefiles, die werkzeug- oder plattformspezifische Einstellungen enthalten. Diese werden automatisch vom Master-Makefile eingebunden:
Dabei enthalten jene Dateien mit der Endung .MNM vordefinierte Einstellungen für die Arbeit am Lehrstuhl-Cluster. Diese werden automatisch benutzt, wenn an einem Rechner am Lehrstuhl gearbeitet wird. Für die Arbeit an Rechnern, die nicht im Lehrstuhl-Cluster eingebunden sind, werden die Pendants dieser Makefiles benutzt. Diese sind dann gegebenenfalls an die lokalen Gegebenheiten anzupassen.
Alle Makefiles in config/ werden nicht nur für die Übersetzung
des Basis-Systems benutzt, sie werden auch von den
Produktionsumgebungen der Agenten eingebunden. D. h. daß alle
Einstellungen bezüglich Compiler, Toolkits, etc. nur einmalig und
zentral getroffen werden müssen, womit eine konsistente Übersetzungs-
und Laufzeitumgebung für Basis-System und Agenten gewährleistet wird.
Neben den Makefile in config/ befindet sich noch ein weiteres im Verzeichnis prod.java/, welches den eigentlichen Übersetzungsvorgang steuert.
Eine Aufstellung konkreter Kommandos, die das Master-Makefile unterstützt, ist in der Datei INSTALL enthalten.
Nachfolgend soll die zum Agentensystem gehörende Verzeichnisstruktur kurz beschrieben werden. Dabei sind Namen und Ort der einzelnen Unterverzeichnisse teilweise nicht fest eingestellt, sie werden vielmehr über Makefile.DEF festgelegt. Die Namen der Variablen, die dort belegt und wodurch die Datei- und Verzeichnisnamen festgelegt werden, sind Tabelle A.1 zu entnehmen.
|
Die Struktur, wie sie in A.1 dargestellt ist, entspricht den Voreinstellungen aus Makefile.DEF.
Hier sind Hilfsprogramme enthalten, die zur Übersetzung des Agentensystems, oder zur Erstellung spezieller Dateien benutzt werden. Diese sind meist als Shell-Skripten realisiert und greifen selbst wiederum auf Einstellungen zurück, die in den Makefiles getroffen wurden. Im einzelnen:
Die Vorlagen für die zu erzeugenden Dateien sind jeweils in den gen...-Scripts selbst enthalten.
Dieses Verzeichnis enthält in einer Reihe von Unterverzeichnissen ausschließlich jene Quelltexte, die von Hand (also nicht durch Tools wie den IDL-nach-Java Übersetzer) erstellt wurden. Die Struktur in diesem Verzeichnis entspricht der relativen Java package-Hierarchie der Klassen ohne den gemeinsamen Präfix (vgl. Abbildung A.3).
Hier werden Änderungen an den Quelltexten vorgenommen.
Enthält eine Reihe von Makefiles, die in Kapitel A.2.1 näher erläutert werden.
Enthält Dateien die im CVS-Repository gespeichert werden sollen, aber noch nicht an ihrem endgültigen Bestimmungsort abgelegt werden können, da dieser erst später erzeugt wird. Beispiel: statische HTML-Seiten, die erst später in das install/ Verzeichnis kopiert werden.
In diesem Verzeichnis befinden sich alle Quelltexte, die durch den Präprozessor generiert oder durch Tools automatisch erstellt wurden, sowie die daraus übersetzten .class-Dateien. Dieses Verzeichnis wird ausschließlich zur Übersetzung des Agentensystems benutzt. Änderungen an den Quelltexten werden immer im src/ Verzeichnis vorgenommen, ausgeführt wird das Agentensystem im install/ Verzeichnis.
Das Verzeichnis install/ enthält alle zur Ausführung des Agentensystems notwendigen Komponenten, mit Ausnahme der zum ORB, JCE und Swing gehörenden .jar-Dateien:
Alle Datei und Verzeichnisnamen sind nicht fest vergeben und können in system/config/Makefile.masaconf eingestellt werden. Die hierzu benutzten Variablen sind der Tabelle A.2 zu entnehmen. Weiterhin gibt die Tabelle Aufschluß darüber, in welchen Java Properties die entsprechenden Dateien und Verzeichnisse dem Agentensystem bekannt gegeben werden.
|
Soll das Agentensystem übersetzt werden, so werden zunächst alle im Verzeichnis src/idl/ enthaltenen IDL-Quelltexte durch den IDL-nach-Java Übersetzer in die entsprechenden Java-Quelltexte übersetzt, welche im Verzeichnis prod.java/ abgelegt werden.
Anschließend werden die Java-Quelldateien aus src/, gesteuert von den sich dort ebenfalls befindenden Makefiles, durch den Präprozessor gefiltert. Die erzeugten Dateien werden dann im Verzeichnis prod.java/ entsprechend der kompletten package-Hierarchie abgelegt. Diese setzt sich dabei aus dem in Makefile.masaconf/, in der Variablen __MASA_PACKAGE__ gesetzen Basis-package und der relativen Hierarchie, wie sie durch die Anordnung in src gegeben ist, zusammen. Abbildung A.3 stellt diesen Vorgang dar.
Bei der Bearbeitung durch den Präprozessor werden im Fall von MASA hauptsächlich zwei Schritte durchgeführt:
Quelltextblöcke, die durch ein #ifdef <ident>/#endif Konstrukt gekapselt sind, werden nur dann eingefügt, wenn ein Wert <ident> gesetzt ist.
So wird beispielsweise das Fragment
#ifdef ORBACUS311 agentSystemService = new _AgentSystemServiceImplBase_tie( agentSystem); boa.obj_is_ready( agentSystemService, null); #endif
nur dann ausgegeben, wenn in Makefile.masaconf durch die Zeile
export ORB_TYPE := ORBACUS311
und der Definition
export CPP_OPT := -C -P -D$(ORB_TYPE)
in Makefile.toolconfig dieser Wert für den Präprozessor definiert wurde.
Quelltextteile, die im Präprozessor als Macro definiert sind, werden durch den im Macro definierten Wert ersetzt.
Beispielsweise wird mittels der Macro-Definition (aus Makefile.toolconfig)
export CPP_PACKAGE_MACROS := ... "-D__MASA_PACKAGE__(x)=$(MASA_PACKAGE).\#\#x" ...
und der Definition (aus Makefile.masaconf)
export MASA_PACKAGE := de.unimuenchen.informatik.mnm.masa
das Quelltextstück
package __MASA_PACKAGE__(tools);
als
package de.unimuenchen.informatik.mnm.masa.tools;
ausgegeben, womit die oben angesprochene dynamische Festlegung des Java Basis-Packages im Java Quelltext erfolgt.
Abschließend werden, gesteuert durch das Makefile in prod.java/, alle dort enthaltenen Quelldateien übersetzt.