This section describes the command definition syntax used by VMake to get
the information, e.g., how to activate a compiler, from the configuration
file. Again a LISP syntax was selected. A command is defined by the using
defcommand.
The symbol can be one of the commands defined in Table E.4. The
information is then stored in the class variables of the associated file
classes (see Section 8.3).
Tabelle E.4: Command configuration
The keys which can be used for the different commands are listed in Table E.5-E.13. All values are one or multiple string values. Many of these strings are directly used as LISP format strings for output in command generation so that the developer has to take care of correct definition. In addition many keys are marked optional, but may be required to create a working configuration for your requirements.
Tabelle E.5: Command definition keys for compilers
In the Table E.5 the definition for command fortran90 is identical to fortran and for command fortran90/cpp to fortran/cpp. The F90 compiler is used for F77 files too, if only a F90 compiler exists for a configuration (backward compatibility). Since many FORTRAN compilers are not able to implicitly use the Cpp preprocessor to include files, the definition of the commands fortran/cpp and fortran90/cpp are allowed to be missing. In this case the Cpp run is made explicitly by VMake to create a temporary FORTRAN source file which is then compiled as usual. Some Cpp preprocessors are not suitable for converting FORTRAN sources because they combine multiple spaces to single ones and ignore so the requirements of FORTRAN, e.g., that six spaces must be at the beginning of a code line. There is no own command definition for pascal/cpp for PASCAL because the Cpp preprocessor run is made in front of the compilation.
The command cpp is allowed to be missing. In this case VMake uses a Cpp replacement written in LISP. The sysdefs for the Fortran-Target and Pascal-Target should be used to give some configuration and/or system dependent defines used by the LISP preprocessor.
The command definition keys are shown in Table E.6 for an archive library generator used by VMake.
Tabelle E.6: Command definition keys for library generation
For many systems it is possible to create shared libraries from objects, a
task which is also supported by VMake. In Table E.7 the keys to
implement shared libraries are shown.
This lowers the memory and disc space needed by an executable if the same
shared libraries are used multiple times by different executables. Since shared
libraries are sometimes very complex, for some configurations an optional
supporting module may be loaded, e.g., for AIX for IBM computers
a special module ``ibmshlib.lsp'' has to be loaded from
within the configuration. This can be done from within the configuration
definition file by using loadmodule.
The string is used as filename (given without extension). This file is then
loaded to add additional configuration dependent functionality to VMake
concerning some very specific configuration. For all other commands the keys
have enough functionality to allow adaption to all currently supported
configurations. To minimize build problems between different operating
systems no unresolved external function and variables are allowed in shared
libraries. This can be always be achieved by using function pointers to
allow overriding default functions. This requirement is needed for shared
libraries under the operating system AIX, since no unresolved external
symbols are allowed. In this case all required shared libraries must be
specified during creation of a new shared library. This problem is solved by
the key depends of Library-Target. For other operating
systems allowing unresolved externals the startup phase of the program is
faster.
Tabelle E.7: Command definition keys for shared library generation
Tabelle E.8: Command definition keys for installation
Tabelle E.9: Command definition keys for cleaning
Tabelle E.10: Command definition keys for program generation
Tabelle E.11: Command definition keys for language binding
Tabelle E.12: Command definition keys for automatic code generation
Tabelle E.13: Command definition keys for CVS