# dsp => vmake

### Installation:

1. es ist Teil der normalen SAP DB Entwicklungstools

### Aufruf-Optionen:

zusätzlich zur Kommandozeile können diese auch in einer Environment-Variablen DSP2VMAKE_OPTION angegeben werde.

-inDEV <directory>
  das oberste Source-Verzeichnis (im allgemeinen $SRC)
-outSys <directory>
  $OWN/sys
-config <configFile>
  format: Python source. kann defaults für -inDEC und -outSys enthalten
-v
  verbose, schreibt die Namen der generierten Dateien nach Standardout.
-ignore <filename>
  eine Textdatei. Für alle Treffer in dieser Datei werden keine vmake-Descriptions generiert
  Der Treffer kann irgendwo innerhalb des Dateinamens erfolgen:
  - \aps\ berücksichtigt keine Verzeichnisse unterhalb von aps
  - xyz.dsp would exclude any file named xyz.dsp
-nodep
  generiert nicht #include-Anhängigkeiten (sollte nur zum Debugging verwendet werden)
-projectfiles <filename>
  add projects in file <filename>.
  - <filename> is relative to -inDEV
  - filenames inside this file are relative to -inDEV
  - # (hashmark) can be used as a comment
  - non-existant files abort the script
-globals <vmake def>
  generiert <vmake def> in every .com-Description (default: *.cpp -except)
-warn
  generiert Warnungen, wenn die gleiche Source-Datei mit unterschiedlichen Optionen benutzt wird.
-smartVariants
  Varianten wie ReleaseSim werden als eine Kombination der Varianten Release und Sim interpretiert. Dies funktioniert nur für Release und Debug.
-ignoreVariant <variant name>
  alles, was im Zusammenhang mit <variant name> steht, wird nicht in die generierten Dateien übernommen
-onlyVariant <variant name>
  nur hier angegebene Varianten werden generiert
-unifiedSys
  (veraltet, da $SRC == $DESC nunmehr der Default ist)
-cache
  (veraltet)
-dumbVariants
  (veraltet, siehe -smartVariants)

### Link-Descriptions:

- für jede .dsp-Datei in einem Verzeichnisbaum wird ein vmake-Description erzeugt (je nach # TARGTYPE .lib, .dll, .lnk, .mac), aus ltt\LTT.dps wird sys/desc/ltt/LTT.lib
- Es können auch Workspace-Dateien (.dsw) in der Kommandozeile angegeben werden, in diesem Fall werden alle in der Datei referenzierten .dsp-Dateien konvertiert
- Es können auch Projekt-Dateien (.dsp) in der Kommandozeile angegeben werden. Dies ist aber nur zum Debugging sinnvoll, da andernfalls die erzeugten .com-Descriptions nicht vollständig sind.
- Source-Dateien aus dem gleichen Verzeichnis werden über die 'defaultlayer'-Notation aufgeführt. Alle anderen Dateien werden vmake-absolut aufgeführt (d.h.relativ zu $SRC), die Dateien sind sortiert.
- von einer DLL genutzte .lib-Dateien werden
  - per '-lib=...' angegeben, wenn es sich um Systemlibs handelt
  - per '::path' angegeben, wenn es sich um eine selbst zu erzeugende Lib handelt. Dies wird dadurch entschieden, daß in einem ersten Schritt die namen und Typen von allen angesprochenen .dsp-Dateien ermittelt wird.
- das Kopieren der .lst-Dateien wird bislang nicht in die Descriptions übernommen.

### .com-Descriptions

- für jedes Verzeichnis wird eine .com-Description erzeugt, die alle .cpp-Dateien enthält
- intern wird imkdep aufgerufen, um die Abhängigkeiten zu pflegen.
- /I-Optionen werden nicht übernommen, wenn sie sich auf relative Verzeichnisse beziehen. Es wird davon ausgegangen, daß alle #include-Anweisungen künftig den Dateinamen relativ zu $SRC oder $SRC/APO enthalten.
- Sonstige Optionen werden auf den allgemeinen Fall (*) übertragen, wenn sie für alle Sourcen dieses Verzeichnisses gelten.(z.B. sys\desc\lcsim.com)

### Anpassungen

Die Datei $SRC/specialCases.py (alternative $TOOL/bin/specialCases.py) enthält zusätzliche Regeln, mit der man die Generierung der Descriptions beinflussen kann. Diese Datei ist eine Python-Source und exportiert die folgenden Variablen und Funktionen:

getAdditionalLayer ():
  liefert ein List von Verzeichnissen, für die .com-Description angelegt werden sollen, Dies sind z.B. Verzeichnisse, die nur Header-Dateien enthalten.
cases
  eine List mit Python-Objekten. Diese enthalten ein Attribut filename (auf diese Datei wird der case angewandt) und eine Methode apply. So sorgt z.B. ein Append-Objekt dafür, daß an bestimmte Descriptions noch ein festgelegter Text angehängt wird.
optionsToIgnore
  Compiler-Optionen, die nicht mit in die Descriptions übernommen werden (sie sind so allgemein, daß dsie in toolvars.pl gesetzt werden)
shortOptionsToIgnore
  siehe oben. Diese Optionen haben in der Regel noch ein angehängtes Argument ('/W' gilt für /W3, /W4 etc.
definesToIgnore
  /D Optionen, die nicht mit in die Descriptions übernommen werden sollen
specialLibraries
  eine Liste von Paaren (regular expression, replacement). Entspricht ein in der .dsp-Datei referenzierte Library einer der regular expression, so wird der Eintrag in der generierten Description durch das entsprechende replacement ersetzt:
  `(r'(?P<dir>.*)[/\\]liboms.lib', '-lib=%(dir)s/liboms')`
  aus `$(LC_LIB)/liboms.lib` wird `-lib=$(LC_LIB)/liboms`
filesToIgnore
  eine Liste von Filename-Pattern wie sie auch in der Datei für die Option -ignore angegeben werden können.

2002-03-12 Daniel Dittmar