1 MMS The Module Management System (MMS) is a tool that updates files by comparing the revision times of files you specify in a description file. If a "source" file (for example, an object module) is newer than its "target" (for example, an executable image), MMS updates the source by executing commands that you also supply in the description file. If some of the sources need updating, MMS updates them before building the target. If the target is newer than its sources, it is already up-to-date and MMS does not rebuild it. Format: $ MMS [qualifier...] [target,...] If you do not specify a target on the command line, MMS processes the first target in the description file. MMS can also generate a description file from a list of sources files. Format: $ MMS/GENERATE [qualifier...] source[,source...] 2 Parameters MMS accepts an optional list of targets to build. If you do not specify a target on the command line, and if you do not specify /NODESCRIPTION, MMS tries to build the first target in the description file. If you do not specify the name of a description file, MMS attempts to process the default description file DESCRIP.MMS; if it does not exist, MMS attempts to process MAKEFILE. If MAKEFILE. does not exist, MMS attempts to process target-name.MMS. If all these files exist, MMS uses only DESCRIP.MMS. If none of these files exist, MMS uses built-in rules to build the target. If you specify the target on the command line, MMS looks for a description file with the same name and builds that target directly. If you specify /NODESCRIPTION, MMS does not look for a description file but uses its built-in rules to build the target specified on the command line. When generating a description file, MMS accepts a list of sources that will be scanned for dependencies. 2 Qualifiers /ACTION /ACTION (D) /NOACTION Controls whether MMS executes the action lines in a description file. These qualifiers affect only the execution of action lines, not the behavior of MMS. The /ACTION qualifier displays action lines as they are invoked. MMS does not display any information on dependencies. If you specify /NOACTION, MMS does not execute the action lines, but instead writes them to an output file (either SYS$OUTPUT or the file specified by the /OUTPUT qualifier). /NOACTION is useful for determining what actions MMS would have executed had the system actually been built. You can also use /NOACTION in combination with the /OUTPUT qualifier to generate a command procedure (see the description of the /OUTPUT qualifier). /NOACTION overrides the Silent action-line prefix - @. Note that the $(MMS) reserved macro is executed even if you specify /NOACTION. Therefore, you can see what actions MMS would have executed in the subprocess. /NOACTION does not affect the /AUDIT qualifier that you can provide with references to CDD records. That is, if you suppress the execution of action lines with the /NOACTION qualifier, the remark you supply with /AUDIT is still written to the CDD history file. /CHANGED /CHANGED=(source1, source2,...) Directs MMS to treat only the specified sources as having been changed, regardless of their actual modification times. No date checking is performed at all; MMS simply rebuilds any targets that depend on one or more of the specified sources. This qualifier affects the behavior of MMS but not the execution of action lines. /CHECK_STATUS /CHECK_STATUS /NOCHECK_STATUS (D) Controls whether MMS returns a value in the symbol MMS$STATUS instead of updating a target. This symbol contains the status of the last action line executed by MMS. These qualifiers affect both the execution of action lines and the behavior of MMS. When you specify the /CHECK_STATUS qualifier, MMS checks whether a target is up-to-date by determining whether any actions would be executed if the /ACTION qualifier was specified. MMS issues an informational message and sets MMS$STATUS to 1 if no actions would be executed (that is, if the target is up-to-date). If the target needs to be updated, MMS sets the MMS$STATUS value to 0. /CHECK_STATUS has precedence over both the /ACTION and "/REVISE_ DATE" qualifiers if they appear on the same command line. In this case, only /CHECK_STATUS is processed. The /NOCHECK_STATUS qualifier directs MMS to process the description file as it normally would, executing action lines if necessary. /CMS /CMS /NOCMS (D) Controls whether MMS looks for source files, description files, and include files in the current default CMS library as well as in the specified directories. CMS must be installed on your system. These qualifiers affect both the execution of action lines and the behavior of MMS. For information on using the /CMS qualifier with the description-file generator, refer to the /GENERATE qualifier. When you specify the /CMS qualifier and the source in the CMS library is newer, MMS fetches it from the CMS library. If the source in the CMS library is older, MMS instead uses the source in the specified directory. /CMS also directs MMS to look in the current default CMS library for a description file and any files included with the .INCLUDE directive, or specified with the /RULES qualifier. If MMS does not find a description file in either the specified directory or the current default CMS library, it aborts execution. The /CMS qualifier also directs MMS to apply CMS built-in rules where appropriate. The /NOCMS qualifier directs MMS not to look in the current default CMS library for source files, description files, rules files, or include files. However, if any file specifications in the description file are followed by a tilde (~) to indicate specific CMS elements, MMS looks for the files in the CMS library regardless of whether /NOCMS is in effect. If you specify /NOCMS, or the combination /CMS/NORULES, and the sources do not exist in the specified directory, MMS aborts execution. /DESCRIPTION /DESCRIPTION[=filespec...](D) /NODESCRIPTION target Controls whether MMS looks for a description file to update the target. These qualifiers affect the behavior of MMS, but not the execution of action lines. The filespec is an OpenVMS file specification or a logical name that identifies the description file. The default file type is .MMS. If a tilde (~) follows the file specification, MMS fetches the description file from the default CMS library even if the description file exists in the default directory. The target is an OpenVMS file specification or a mnemonic name that designates the target to be built. When you specify more than one description file, separate the file specifications with either commas (,) or plus signs (+) and enclose them in parentheses or quotation marks. If you use commas, the description files are processed separately and the list of files must be enclosed in parentheses. For example: $ MMS/DESCRIPTION=(A, B) If you use plus signs, the description files are concatenated and processed as one file. The list of files must be enclosed in quotation marks. For example: $ MMS/DESCRIPTION="A + B" You can combine separate description files with description files to be concatenated and processed as one file. For example: $ MMS/DESCRIPTION=("A + B", CLEANUP) This command line directs MMS to process A.MMS and B.MMS as one file, and CLEANUP.MMS as another. In this case, there are two default targets: the first one is in either A.MMS or B.MMS (depending on the contents of the two files) and the second one is in CLEANUP.MMS. If you specify a list of description files in parentheses and a list of targets, the rules for updating all the listed targets must occur in all the listed description files. For example: $ MMS/DESC=(A,B) X,Y,Z In this case, the rules for updating X, Y, and Z must appear in both description files, A.MMS and B.MMS. If you specify a concatenated list of description files and a list of targets, the rules for updating all the listed targets must occur in the concatenated description file. For example: $ MMS/DESC="A + B" X,Y,Z In this case, the description file formed by the concatenation of A.MMS and B.MMS must contain the rules for updating X, Y, and Z. If you specify the /DESCRIPTION qualifier without a file specification or if you do not specify /DESCRIPTION, MMS looks first for the default description file DESCRIP.MMS. If it cannot locate that file, it looks for one called MAKEFILE.; if it cannot find MAKEFILE., it looks for target-name.MMS. If MMS finds target-name.MMS, it does not update the first target in the description file, but instead attempts to directly update the target indicated by target-name.MMS. For example: $ MMS MAIN.EXE In this example, if DESCRIP.MMS and MAKEFILE. are not present, MMS looks for a file named MAIN.MMS. If MAIN.MMS exists, MMS directly processes the target you specified on the command line, MAIN.EXE. If MMS cannot find any one of these files, it attempts to use built-in rules to build the target. If you use the /NODESCRIPTION qualifier, you must specify a target on the command line. /NODESCRIPTION directs MMS to ignore all description files and to build the target specified on the command line. For information on using the /DESCRIPTION qualifier with the description-file generator, refer to the /GENERATE qualifier. /EXTENDED_SYNTAX /EXTENDED_SYNTAX /NOEXTENDED_SYNTAX (D) The /EXTENDED_SYNTAX qualifier instructs MMS to enable the extension of MMS syntax, providing for the following: o Use of predefined MMS functions. o Macro redefinition. o Nested macro expansion. To enable the /EXTENDED_SYNTAX qualifier in DECwindows MMS, check the Extended Syntax check box in the Build Definitions/Directives Options dialog box. The /EXTENDED_SYNTAX qualifier will be used to include all future extensions to the MMS syntax. The inverse qualifier, the default /NOEXTENDED_SYNTAX, will continue to support the syntax of MMS Version 3.2. /FORCE /FORCE /NOFORCE(D) Controls whether MMS executes the action lines necessary to update one specific target. These qualifiers affect the behavior of MMS but not the execution of action lines. When you specify the /FORCE qualifier, MMS does not check whether the target or its sources are up-to-date, but simply rebuilds the specified target by executing the action lines. MMS also executes any .FIRST and .LAST directives associated with the target. The /FORCE qualifier is useful for quickly rebuilding a single target. /FROM_SOURCES /FROM_SOURCES /NOFROM_SOURCES (D) Directs MMS to build a target from its sources, regardless of whether the target is already up-to-date. This qualifier affects the execution of action lines and the behavior of MMS. When you specify the /FROM_SOURCES qualifier, MMS does not compare the revision times of the specified sources and target. Instead, it executes the action lines in the description file necessary to update the target. The /FROM_SOURCES qualifier is useful when you want to guarantee that an entire system is rebuilt, perhaps for an internal release. If you specify the /CMS and /FROM_SOURCES qualifiers on the MMS command line, MMS uses the sources found in the default CMS library. If you do not use /CMS, MMS uses the sources found in the specified directory. The /FROM_SOURCES qualifier overrides the /SKIP_INTERMEDIATE qualifier. /GENERATE /GENERATE [/qualifier[/...]] source_filespec[,...] Invokes the MMS description file generator. Select MMS subtopic 'Generating_Description_Files' for more information. /HELP /HELP[="topic"] Provides information about MMS and its qualifiers. The topic is an MMS topic on which you want information. The /HELP qualifier displays information about MMS on your terminal. If you specify the /HELP qualifier without a topic, MMS displays general information and a list of qualifiers. To get help on a specific topic, type /HELP with an equal sign (=) and the topic. The topic must be enclosed in quotation marks. For example: $ MMS/HELP="/RULES" /IDENTIFICATION /IDENTIFICATION Directs MMS to display an informational message with the version number and copyright date of the MMS image you are running. MMS does not process any description files or qualifiers; it simply displays an informational message on your screen. You should include the version number and copyright date with any MMS Software Performance Reports (SPRs) you submit. /IGNORE /IGNORE[=options] /NOIGNORE (D) Directs MMS to specify the severity levels of errors that MMS normally ignores when it executes action lines. The parameters correspond to the DCL severity levels W, E, and F. The /NOIGNORE qualifier directs MMS to abort execution when it finds an error. These qualifiers affect the execution of action lines but not the behavior of MMS. The options field can contain the keyword WARNING, ERROR, or FATAL. WARNING directs MMS to ignore W errors and continue processing, but to abort execution if it finds an E or F error. If you specify the /IGNORE qualifier without parameters, WARNING is the default. ERROR directs MMS to ignore both W and E errors, but to abort execution if it finds an F error. FATAL directs MMS to ignore all errors, and to continue processing the description file. This parameter is equivalent to the .IGNORE directive. When you specify the /IGNORE qualifier, the errors that MMS ignores are those generated by the execution of action lines. The only fatal errors MMS will not ignore are syntax errors. The /IGNORE qualifier does not stop MMS error messages from being generated or displayed. Informational messages are always displayed, regardless of whether you use the /IGNORE qualifier. NOTE Take caution when executing MMS with the /IGNORE qualifier; if errors occur during processing, the target might be updated but still contain errors of which you will not be aware. The .IGNORE directive and the Ignore action line prefix are similar to the /IGNORE=FATAL qualifier. However, instead of typing them on the command line, you include them in the description file. To override the .IGNORE directive contained in a description file, type the /IGNORE[=WARNING], /IGNORE=ERROR, or /IGNORE=FATAL qualifier explicitly on the MMS command line. You cannot override the Ignore action-line prefix on the MMS command line. /INTERFACE /INTERFACE[=DECWINDOWS] /INTERFACE[=CHARACTER_CELL] (D) Controls whether MMS invokes the DECwindows Motif user interface or the character-cell interface. The CHARACTER_CELL qualifier is the default. /LIST /LIST[=filespec] /NOLIST (D) Controls whether MMS writes dependencies and action lines to an output file as it processes the description file. These qualifiers affect the behavior of MMS, but not the execution of action lines. When you specify the /LIST qualifier, MMS creates a complete listing of all dependencies, dependents, and actions that need to be processed to update the target. MMS creates this listing as it processes the description file and writes the listing to the output file, or to SYS$OUTPUT if you did not specify a file. The /LIST qualifier is useful during the debugging of description files. You can also use /LIST in combination with the /NOACTION qualifier to display the dependency list and action lines without executing any actions. /LOG /LOG /NOLOG (D) Controls whether MMS displays informational messages as it processes the description file. These qualifiers affect the behavior of MMS, but not the execution of action lines. The /LOG qualifier directs MMS to write all informational messages to your terminal screen while it processes the description file. The /LOG qualifier is useful for debugging your description files. These messages indicate what MMS finds and what it assumes as it processes the description file. You should include these messages with any MMS Software Performance Reports (SPRs) you submit. To save these messages in a file, type the following: $ DEFINE SYS$OUTPUT MYFILE.LOG $ MMS/LOG . . . $ DEASSIGN SYS$OUTPUT The /NOLOG qualifier prevents MMS from displaying informational messages. However, if you specify /NOLOG/CHECK_STATUS on the same command line, MMS does display the informational message that reports the value of MMS$STATUS. /MACRO /MACRO=filespec | "macro", . . . Directs MMS to add to or override the macro definitions in the description file. This qualifier affects the behavior of MMS but not the execution of action lines. The filespec is an OpenVMS file specification or a logical name that identifies a file of macro definitions. The default file type is .MMS. The macro string is a macro definition enclosed in quotation marks. The definition of the macro should always assign a value to the macro. Use the same format as for macro definitions in description files, that is, name = "string". With the /MACRO qualifier, you can specify a macro definition on the MMS command line. You can also specify a file of macro definitions to use in your description file. You can define macros in three locations: o In a description file o In a macro definitions file o On the command line To specify more than one macro definition on the MMS command line, enclose the list of macros in parentheses. For example: $ MMS/MACRO=("A=MAC1", "B=MAC2") You can also specify both a macro definition and a file on the same command line. For example: $ MMS/MACRO=("A=MAC1", MACROS) /OUTPUT /OUTPUT=filespec Directs MMS to write action lines and output to the specified file. Error messages preceded by "%MMS" are not written to this output file, but instead are written to SYS$ERROR. The /OUTPUT qualifier affects the behavior of MMS, but not the execution of action lines. The filespec is an OpenVMS file specification or a logical name that identifies the output file. The default file type is .LOG. If you do not specify the /OUTPUT qualifier on the MMS command line, MMS writes all action lines, messages, and output to SYS$OUTPUT. If you specify the /NOVERIFY qualifier on the same MMS command line with /OUTPUT, MMS does not write action lines to the output file. If you specify /OUTPUT and your command-line interpreter is DCL, MMS automatically prefixes a dollar sign ($) to any action line that does not begin with one. Thus, you can use the file generated by /OUTPUT as a DCL command procedure. /OVERRIDE /OVERRIDE /NOOVERRIDE (D) Controls the order in which MMS applies definitions when it processes macros. These qualifiers affect the behavior of MMS, but not the execution of action lines. When you specify the /OVERRIDE qualifier, MMS overrides the macro definitions in the description file with CLI symbol definitions. To find the macro definitions that should have precedence, MMS looks at symbols defined by the CLI assignment statement, scanning the CLI symbol table for the body of the macro. If the body of the macro is not in the CLI symbol table, MMS substitutes a null string for all invocations of the macro. The /OVERRIDE qualifier imposes the following order of application when MMS processes macro definitions: 1. Command line 2. CLI symbol 3. Description file 4. Built-in Once MMS finds a definition for a macro, it does not search those locations farther down the list for more definitions. If MMS finds more than one definition in the same location (such as on a command line), it uses the last definition it processed, unless the location is a description file. MMS issues an error message if a macro is defined more than once in a description file. The /NOOVERRIDE qualifier imposes the following order, which is the default hierarchy: 1. Command-line 2. Description file 3. Built-in 4. CLI symbol /REVISE_DATE /REVISE_DATE /NOREVISE_DATE (D) Controls whether MMS changes only the revision dates of all targets that need updating, or performs the update. These qualifiers affect the behavior of MMS, not the execution of action lines. When you specify the /REVISE_DATE qualifier, MMS changes only the revision dates of targets that need updating; it does not direct MMS to execute the action lines that actually do the updating. If any files are missing, /REVISE_DATE causes MMS to create them. If MMS cannot create a missing file, or if it cannot update the revision date of an existing file, it issues an error message. The /REVISE_DATE qualifier is useful for reducing the number of superfluous compilations, for example, when you change only a comment line in a required file. However, /REVISE_DATE can defeat the purpose of using MMS, so use this qualifier with caution. As it changes the revision times, MMS writes the name of the revised files to an output file (or to SYS$OUTPUT if no file is specified). If you specify the /REVISE_DATE and /NOVERIFY qualifiers, the names of revised files are suppressed. Unless you specify a target on the command line, the /REVISE_ DATE qualifier causes MMS to revise the first target (and its sources) in the description file. If you specify multiple targets on the command line, those targets and their sources are revised. /REVISE_DATE does not change the value of MMS$STATUS. The /REVISE_DATE qualifier has precedence over the /ACTION qualifier if they both appear on the same command line. In that case, only /REVISE_DATE is processed. The /NOREVISE_DATE qualifier directs MMS to build the system by updating targets as necessary (as long as the /CHECK_STATUS qualifier is not specified on the same command line). /RULES /RULES[=filespec] (D) /NORULES Controls whether MMS applies user-defined built-in rules and a suffixes-precedence list when it builds a system. These qualifiers affect the behavior of MMS, but not the execution of action lines. The filespec is an OpenVMS file specification or a logical name that identifies the file of user-created rules that MMS is to use. When you supply a file specification with the /RULES qualifier, MMS replaces the built-in rules it normally uses with the built-in rules and suffixes list in the file you specify. The file specified with /RULES has precedence over the file represented by MMS$RULES. If you specify /RULES without a file specification, MMS translates the logical name MMS$RULES to locate the user-defined built-in rules file. If MMS$RULES is not defined, MMS uses its own built-in rules. The /NORULES qualifier prevents MMS from using its built-in rules or the suffixes-precedence list. It also prevents MMS from applying user-defined rules and default macros. When you specify /NORULES, MMS applies only the dependency rules contained in the description file. /SCA_LIBRARY /SCA_LIBRARY[=library-name] /NOSCA_LIBRARY (D) Controls whether MMS generates an SCA library during the build process. When you specify a library name with the /SCA_LIBRARY qualifier, MMS defines the macro $(SCALIBRARY) to be that library name. If you use /SCA_LIBRARY without specifying a library name, SCA$LIBRARY is the value of $(SCALIBRARY). If you do not specify /SCA_LIBRARY, /NOSCA_LIBRARY is the default. The macro $(SCA) is defined to be SCA regardless of the setting of the /SCA_LIBRARY qualifier. The macro $(MMSQUALIFIERS) contains the setting of the /SCA_ LIBRARY qualifier. When you specify the /SCA_LIBRARY qualifier, built-in rules for BASIC, BLISS-32, C, C++, COBOL, DIGITAL Fortran, MACRO, Pascal, PL/I, and SCAN change. NOTE You might choose to defer loading modules into the SCA library until after all compilations are completed. In this case, define the default rules for compilation in your description file to be the same as the default rule provided by MMS when the /NOSCA_LIBRARY qualifier is specified. You should also include a .LAST directive, which then loads the SCA database. For example: .LAST : $(SCA) SET LIBRARY $(SCALIBRARY) $(SCA) LOAD * /SHOW_DESCRIPTION_FILE /SHOW_DESCRIPTION_FILE (D) /[NO]SHOW_DESCRIPTION_FILE Controls whether MMS displays the current description file in the MMS description file area. When you specify the /SHOW_DESCRIPTION_FILE qualifier, if the DECwindows version of LSE is not presently invoked, MMS displays the current description file in the MMS description file area as read-only for browsing purposes. If the DECwindows version of LSE is currently invoked, MMS displays the description file in the MMS description file area in a modifiable LSE buffer. The /NOSHOW_DESCRIPTION_FILE qualifier directs MMS to hide the current description file from the MMS description file area. The default qualifier is /SHOW_DESCRIPTION_FILE. /SKIP_INTERMEDIATE /SKIP_INTERMEDIATE /NOSKIP_INTERMEDIATE (D) Controls whether MMS builds intermediate source or target files. These qualifiers affect the behavior of MMS, but not the execution of action lines. The /SKIP_INTERMEDIATE qualifier directs MMS to determine whether a target is up-to-date without rebuilding intermediate files, unless they need to be updated. MMS first checks the target date against the dates of its sources. If the target is newer than its sources, MMS determines that the target does not need to be rebuilt; if MMS cannot find some intermediate files, it acts as though they already exist, and skips over them to check their sources, and so on. For example, if you have a .C file and an .EXE file, but no .OBJ file, and the time of the .EXE file is more recent than that of the .C file, the /SKIP_INTERMEDIATE qualifier prevents MMS from building the .OBJ file and the .EXE file because the target is already up-to-date with regard to its nearest source. Using /SKIP_INTERMEDIATE saves time and disk space. If the target is older than its sources, MMS determines that the target does need to be rebuilt. It then ensures that all of the target's immediate sources exist; if any do not, MMS works from the bottom up by first rebuilding the missing sources, then rebuilding the target. If the sources contain include files that have changed, are located in a CMS library, or both, MMS also fetches the include files and recompiles the source files, then rebuilds the system. For example: ! ! SYSTEM2.MMS ! SYSTEM2 : MAIN.EXE, MOD.EXE MAIN.EXE : MAIN.OBJ MAIN.OBJ : MAIN.C, DEFS1.H, DEFS2.H MOD.OBJ : MOD.C, DEFS2.H If the include file DEFS1.H changes, MMS does the following when you specify the /SKIP_INTERMEDIATE qualifier: 1. Determines that one of the target's sources is newer than the target, and that the target must be rebuilt. 2. Verifies that MAIN.OBJ depends on MAIN.C, which contains the include files DEFS1.H and DEFS2.H. 3. Fetches MAIN.C, DEFS1.H, and DEFS2.H from the CMS library and recompiles MAIN.C. 4. Because MAIN.OBJ is now newer than MAIN.EXE, MMS rebuilds MAIN.EXE. 5. Because none of the sources for MOD.EXE have changed, MMS does not need to fetch them from CMS, and target SYSTEM2 is now up-to-date. The /NOSKIP_INTERMEDIATE qualifier directs MMS to ensure that all intermediate source files exist and are up-to-date. If any intermediate source files do not exist, MMS builds them. This is the default. /VERIFY /VERIFY (D) /NOVERIFY Controls whether MMS displays action lines before executing them. These qualifiers affect the behavior of MMS, but not the execution of action lines. The /VERIFY qualifier directs MMS to display each action line before executing it. MMS writes action lines either to SYS$OUTPUT or to a file you specify on the /OUTPUT qualifier. If you specify the /REVISE_DATE qualifier in combination with the /VERIFY qualifier, MMS displays the names of files whose dates have been revised. When you specify the /NOVERIFY qualifier, MMS suppresses the display (but not the execution) of action lines. Any error messages generated by the execution of action lines continue to be displayed. If you specify the /REVISE_DATE and /NOVERIFY qualifiers on the same command line, the names of files whose dates have been revised are not displayed. The behavior of the /NOVERIFY qualifier is identical to that of the Silent action-line prefix and the .SILENT directive. If a description file contains the .SILENT directive, to override it you must type the /VERIFY qualifier explicitly on the MMS command line. You cannot override the Silent action-line prefix from the MMS command line. 2 Generating_Description_Files MMS/GENERATE [/qualifier[/...]] source_filespec[,...] Controls whether MMS automatically generates a description file. The source_filespec specifies the source files to inspect for dependencies and from which the target will be built. The first file specified must contain the main module from which the target will be built. Otherwise, the source files can be specified in any order and wildcard characters can be used. Unless the /CMS qualifier has been specified, the description-file generator scans all the specified files for dependencies and generates an MMS description file for the target defined by the main module. For example, if the target is built from C files in the current default directory and from Bliss files in the subdirectory [.BLISS], and the file MAIN.C contains the main module, the following command generates the description file in DESCRIP.MMS: $ MMS/GENERATE MAIN.C,*.C,[.BLISS]*.BLI 3 Qualifiers /BUILTIN_RULES_APPLY /BUILTIN_RULES_APPLY /NOBUILTIN_RULES_APPLY (D) Controls whether MMS generates compilation actions lines. When /BUILTIN_RULES_APPLY is selected, no compilation action lines are included in the generated description file; the MMS built-in rules will be used to perform the compilations. /CMS /CMS /NOCMS (D) Controls whether MMS looks for source files and include files in the current default CMS library. CMS must be installed on your system. If a directory-spec is associated with a file, that is the directory into which MMS fetches the file when building the target. /DESCRIPTION /DESCRIPTION[=filespec] Specifies the file to which the generated description is written. When not specified, the description is written to the file DESCRIP.MMS in the current default directory. /FMS_LIBRARY /FMS_LIBRARY=forms-library-name Specifies an FMS library. This qualifier defaults to MMS$FLB.FLB. /INCLUDES /INCLUDES (D) /NOINCLUDES Indicates whether C include files are scanned for dependencies. This qualifier gives the same functionality as the Scan Include Files toggle button. /LINK_LIBRARY /LINK_LIBRARY=filespec[,...] Specifies additional object libraries to be included in the LINK command in the description file. /MAIN_MODULE /MAIN_MODULE=module-name Specifies the main module to be included from the object library during the Link process. The main module is that defined in the first source file specified and, by default, the module name is the same name as the file. This qualifier lets you specify a module name that is different from the file name. Note that if an appropriate language-dependent module name directive is detected within the first source file, the value specified by this qualifier is ignored. /OBJECT_LIBRARY /OBJECT_LIBRARY=filespec Specifies the object library to be included in the LINK command in the description file. Object files from the compilations are inserted into this object library. /OPTIONS_FILE /OPTIONS_FILE=filespec[,...] Specifies user-written options files to be included in the LINK command in the description file. /SWITCHES /SWITCHES=COMPILE="/qualifier..." /SWITCHES=LINK="/qualifier..." /SWITCHES=(COMPILE="/qualifier...",LINK="/qualifier...") Specifies additional command line qualifiers to be included in the generated description file for all compilation and/or link commands. Additional compilation switches can not be specified when /BUILTIN_RULES_APPLY has been specified. /TARGET /TARGET=name Specifies a name for the build target. If this qualifier is not specified, the target defaults to the first file specified. This lets you specify an executable name that is different from the file name. 2 Description_File The description file contains rules that describe how the components of your system are related and how MMS is to build them. You create and modify a description file with any text editor (or by using MMS/GENERATE); once the description file exists, you need issue only a simple MMS command to update your system. A description file contains dependency rules and can also contain macro definitions, directives, and user-defined rules. 3 Dependency_rules Dependency rules describe the relationships among the files in a software system and specify the actions MMS is to perform in updating those files. Format: target,... : source,... [! comment] action line [! comment] Targets and sources are OpenVMS file specifications or mnemonic names. A target is the file you want updated. A source is a file from which the target is built and can be optional. You must begin a target/source line in column 1 of the line, and you must include at least one space or tab on each side of the colon. A comment is simply a string of text that documents the description file. An action line contains a CLI command that specifies how the target is to be built from the source. An action line must be indented by at least one space or tab below the corresponding target/source line. When you run MMS, all action lines, including any comments you specified in the description file, are written to SYS$OUTPUT (or to the file specified by the /OUTPUT qualifier) as they are executed. MMS supplies some default, or "built-in," dependency rules. You can also define your own rules. 4 Built-in_Rules MMS uses built-in rules when you omit the action line or the source, or both, from a dependency rule. Built-in rules allow MMS to assume dependencies that are not stated in the description file and to perform actions necessary to update the target. To decide which built-in rule to apply to a dependency, MMS also uses the suffixes precedence list. Built-in rules also allow you to access files stored in OpenVMS, CMS, FMS libraries and records stored in the Common Data Dictionary. 4 User-defined_Rules You can define your own rules in a description file if MMS does not supply a built-in rule that meets your needs. Once you define a new rule, MMS uses it every time it builds your system with that description file. Format: .SRC.TAR [! comment] action line... [! comment] .SRC is the source file type, and .TAR is the target file type. The comment is a string of text that documents your rule. The action lines specify the CLI commands that MMS should execute to update a file of the target type from a file of the source type. Both the source and target file types must appear in the suffixes precedence list. 4 Suffixes_precedence_list The suffixes precedence list is a list of all the file types MMS recognizes, arranged in a predetermined order. MMS uses the list to decide which built-in rule to apply based on the order of the types in the list, the file type of the target currently being updated, and the existence of source files in the specified directory. You can alter the suffixes precedence list by using one of the .SUFFIXES... directives. 3 Macros A macro is a name that represents a character string. You can define a macro at the beginning of the description file or on the MMS command line and then use its name anywhere in the description file in place of the equivalent string. A macro must be defined before you use it. Format: name = string The name identifies the macro, and the string is the text that replaces the name when the macro is expanded. A macro definition must begin in column 1 of the line. To invoke a macro, type: $(name) You can define a macro on the command line with the /MACRO qualifier; you can also use a CLI symbol as a macro. If a macro is not defined in the description file, MMS looks in its environment for macro definitions. To find them, it looks at symbols defined by the CLI assignment statement, scanning the CLI symbol table for the body of the macro. If the body of the macro is not in the CLI symbol table, MMS substitutes a null string for all invocations of the macro. MMS supplies some default, or "built-in," macro definitions and some "special" macros for use in action lines. 3 Reserved-Macros MMS Used to invoke MMS from a description file. MMSALPHA Defined as 'Alpha' if MMS is running on Alpha. MMSARCH_NAME The architecture name on which MMS is running (i.e. 'IA64', 'Alpha' or 'VAX'). MMSDESCRIPTION_FILE The full file specification of the description file specified (or implied) by the command line. MMSIA64 Defined as 'IA64' if MMS is running on IA64. MMSQUALIFIERS The command line qualifiers used to invoke MMS. MMSTARGETS The target list specified on the command line. MMSVAX Defined as 'VAX' if MMS is running on VAX. Note: the MMSIA64, MMSVAX and MMSALPHA macros can be used with the .IF directive to include description file lines that should only be processed for the appropriate architecture. 3 Special-Macros MMS$TARGET $@ The current target MMS$TARGET_NAME $* The current target (excluding file type) MMS$SOURCE $< The source file specification MMS$SOURCE_LIST $+ Comma-separated list of all sources MMS$CHANGED_LIST $? Comma-separated list of sources that are newer than the current target MMS$TARGET_SPEC $> The current target If the target is a module in an OpenVMS library... MMS$LIB_ELEMENT $% Element spec (i.e., module=alias) MMS$TARGET $@ The library file specification MMS$TARGET_NAME $* The module name MMS$TARGET_SPEC $> The library file specification If the source is a CMS element... MMS$CMS_ELEMENT $< The CMS element MMS$CMS_GEN $& The CMS generation MMS$CMS_LIBRARY $@ The CMS library specification 3 Directives A directive is a word that instructs MMS to take a certain action as it processes a description file. A directive can appear on any line in the description file, but it affects how the entire description file is processed. A directive must start in column 1 of the line. The MMS directives and their functions are: Directive Function .ACTION_STATUS Introduces a user-defined severity rule; select 'Description_File' subtopic 'User_Defined_Severity' for more information. .DEFAULT Indicates actions to be performed if MMS built-in rules or user-defined rules do not specify how to update a target. .ELSE Causes subsequent lines of a description file to be processed if the boolean-expressions for the .IF and all the preceding .ELSIF directives are false. .ELSIF Causes subsequent lines of a description file to be processed if the boolean-expressions for the .IF and all the preceding .ELSIF directives are false and the specified boolean-expression is true. .ENDIF Terminates the set of lines in the description file whose processing is controlled by .IF, .ELSIF and .ELSE. .FIRST Indicates actions to be performed before MMS has executed any action lines to update the target. .IF Causes subsequent lines of a description file to be processed only if the specified boolean-expression is true; select 'Description_File' subtopic 'Using_Conditionals' for more information. .IFDEF Causes subsequent lines of a description file to be processed only if the specified macro is defined (obsolete, use .IF instead). .IGNORE Causes MMS to ignore all errors generated by all action lines and to continue processing the description file. .INCLUDE Includes the specified file in the description file. .LAST Indicates actions to be performed after MMS has executed all the action lines that update the target. .SILENT Suppresses the writing of all action lines to the output file (whether to SYS$OUTPUT or to the file specified by the /OUTPUT qualifier). .SUFFIXES Clears or appends to the suffixes-precedence list. .SUFFIXES_DELETE Clears or deletes types from the suffixes-precedence list. .SUFFIXES_AFTER Inserts types into the suffixes-precedence list after the first type specified. .SUFFIXES_BEFORE Inserts types into the suffixes-precedence list before the first type specified. 3 Action_line_prefixes An action line prefix is a modifier that controls the processing of a single action line in a description file. The action line prefixes are: Prefix Function - (Ignore) Causes MMS to ignore errors generated by the action line on which the prefix appears. @ (Silent) Suppresses the writing to the output file of the action line on which the prefix appears. (The output file can be either SYS$OUTPUT or the file specified by the /OUTPUT qualifier). ?name (Severity) Use named user-defined severity rule to convert the status returned by the action line to the equivalent OpenVMS severity. Select 'Description_File' subtopic 'User_Defined_Severity' for more information. An action line prefix must appear as the first character on an action line. The rest of the action line must be separated from the prefix by at least one space or tab. To use more than one prefix on the same action line, type them next to each other with no intervening spaces; they must be separated from the rest of the action line with at least one space or tab. 3 Predefined_functions Predefined functions can be used to perform text processing operations, operate on file specifications and determine the origin of macros. Note that, predefined functions can only be used if extended syntax has been enabled (use /EXTENDED_SYNTAX qualifier when invoking MMS or, in DECwindows MMS, check the Extended Syntax check box in the Build Definitions/Directives Options dialog box). Where a parameter to a function is considered to be a list of words, a word is defined as any sequence of characters, not containing white-space characters, that is terminated by a white-space character or ')'. White-space characters are space and tab. Functions that generate word lists will produce lists that are white-space compressed (i.e. no leading or trailing spaces and a single space character between each word in the list). 4 Text_operations The following functions perform text processing operations: 5 ADDPREFIX $(ADDPREFIX prefix,text) Prepends to text. 'prefix' is prepended to the start of each word in 'text'. 5 ADDSUFFIX $(ADDSUFFIX suffix,text) Appends to text. 'suffix' is appended to the end of each word in 'text'. 5 FILTER $(FILTER pattern...,text) Filters text. Any word in 'text' that does not match any 'pattern' word is removed. 'pattern' words may contain the wildcard characters * and %. 5 FILTER-OUT $(FILTER-OUT pattern...,text) Filters text. Any word in 'text' that matches any 'pattern' word is removed. 'pattern' words may contain the wildcard characters * and %. 5 FINDSTRING $(FINDSTRING find,text) String search. If 'find' occurs in 'text', the value is 'find'; otherwise, the value is empty. 5 FIRSTWORD $(FIRSTWORD text) Returns the first word in 'text'. 5 FOREACH $(FOREACH macro,list,text) Repeatedly expands text. For each word in 'list', 'text' is repeated with the value of 'macro' defined as the word from 'list'. 5 JOIN $(JOIN list,text) Concatenates word by word. Each word in 'text' is appended to the corresponding word in 'list' to form a word in the result. When the number of words in 'list' and 'text' are not the same, the remaining words from the longer list are simply appended to the result. 5 PATSUBST $(PATSUBST pattern...,to,text) Pattern substitution. Each word in 'text' that matches any 'pattern' word is replaced by 'to'. 'pattern' words may contain the wildcard characters * and %. If 'to' also contains wildcard characters, they will be replaced by the text that matched the wildcard characters in 'pattern'. 5 SORT $(SORT text) Sorts text. Words in 'text' are sorted into lexical order; duplicated words are removed. 5 STRIP $(STRIP text) White-space compression. Leading and trailing white-space is removed from 'text' and each internal sequence of white-space characters is replaced by a single space. 5 SUBST $(SUBST from,to,text) String substitution. Each occurrence of 'from' in 'text' is replaced by 'to'. 5 WORD $(WORD n,text) Returns the n'th word from 'text'. 'n' should be in the range 1 to the number of words in the list; when 'n' is not in this range, the result is empty. 5 WORDS $(WORDS text) Returns the number of words in 'text'. 4 File_operations The following functions operate on file specifications; each has a single parameter which is a list of words where each word is considered to be a file specification: 5 BASENAME $(BASENAME text) Returns directory and name part. For each file specification in 'text', returns that part of the file specification that is not the type or version. 5 DIR $(DIR text) Returns directory part. For each file specification in 'text', returns that part of the file specification that is not the name, type or version. 5 FILETYPE $(FILETYPE text) Returns type part. For each file specification in 'text', returns the type part of the file specification. 5 FILEVERSION $(FILEVERSION text) Returns version part. For each file specification in 'text', returns the version part of the file specification. 5 NOTDIR $(NOTDIR text) Returns name/type part. For each file specification in 'text', returns the name and type part of the file specification. 5 WILDCARD $(WILDCARD text) File search. Result is the name and type part of all existing files that match any of the file specifications in 'text'. The file specifications may contain the wildcard characters * and %. 4 Other_operations Other miscellaneous operations: 5 ORIGIN $(ORIGIN macro) Result is the origin of 'macro' as follows: "FILE" defined in a description file "COMMAND LINE" defined on the command line "SPECIAL" a special macro "DEFAULT" a default macro "CLI SYMBOL" a CLI symbol "TEMPORARY" defined by function FOREACH "UNDEFINED" 'macro' is not defined 3 User_Defined_Severity When an action line returns a value that is not a standard OpenVMS status, the .ACTION_STATUS directive can be used to define how the equivalent OpenVMS severity can be determined from the foreign status value. The action line prefix, ?name, indicates those action lines for which the severity must be determined according to the named ACTION_STATUS directive. The ACTION_STATUS directive has the following form: (use the line continuation character '-' if the directive uses more than one line) .ACTION_STATUS name [ .MASK m ] [ .SUCCESS { s1,s2,... | OTHERS } ] [ .INFORMATION { i1,i2,... | OTHERS } ] [ .WARNING { w1,w2,... | OTHERS } ] [ .ERROR { e1,e2,... | OTHERS } ] [ .FATAL { f1,f2,... | OTHERS } ] where, Name is any sequence of characters not starting with a punctuation character and terminated by comma, space or tab (punctuation characters are ! : ; , # ). m,s,i,w,e,f are decimal, octal or hex numbers (octal numbers are 0... and hex numbers are %x... or 0x...). Space, tab or comma can be used as the separators in a list of numbers. OTHERS can only be specified for one severity. If OTHERS is not specified, it will default to the least severe of any undefined severity (or ERROR if all severity values are defined). The directive is effective over the entire file. It is an error to specify two ACTION_STATUS directives with the same name. MMS will then interpret the status returned from an action line prefixed by ?name as follows: If mask is specified, extract value from the action line status using the mask value; the extracted value is shifted right to match the first bit in the mask. If mask is not specified, extracted value is the action line status. Determine the severity associated with the extracted value. MMS will then continue, treating this severity as if it were a standard OpenVMS $SEVERITY. 3 Using_Conditionals The directives .IF, .ELSIF, .ELSE and .ENDIF are used to instruct MMS to process selected lines in your description file. The .IF directive has the following format: .IF boolean-expression [description file line] ... {.ELSIF boolean-expression} [description file line] ... [.ELSE] [description file line] ... .ENDIF In this syntax, the "description file line" is zero or more description file lines that may include further .IF directives. The .IF directive may be followed by zero or any number of .ELSIF directives, and zero or one .ELSE directive. The .IF directive must always be accompanied by a matching .ENDIF directive. MMS evaluates the 'boolean-expression' specified with the .IF directive. If true, the lines of the description file between the .IF directive and a corresponding .ELSIF, .ELSE or .ENDIF are processed; then, if either .ELSIF or .ELSE were detected, all description file lines from this line to the corresponding .ENDIF directive are ignored. When the boolean-expression specified with the .IF directive is false, all description file lines from this point to a corresponding .ELSE, .ENDIF or .ELSIF whose associated 'boolean-expression' is true, are ignored. The 'boolean-expression' specified in .IF and .ELSIF directives is defined as follows: boolean-expression :== [ .NOT ] boolean-operation | [ .NOT ] boolean-operation boolean-operator boolean-expression boolean-operation :== ( boolean-expression ) | word | word comparison-operator word word :== null | any sequence of characters, terminated by space, and not starting with '.', '(' or ')'. boolean-operator :== .AND | .OR comparison-operator :== .EQ | .NE | .GE | .LE | .GT | .LT The operands in the 'boolean-expression' take one of two forms: .IF word or, .IF word1 .EQ word2 In the first case, MMS checks to see if 'word' is a macro that has been defined to a non-null value; the expression is true if it is, false otherwise. (NOTE: this is precisely the same functionality as that of the obsolete .IFDEF directive). For example, to check that the macro FRUIT is defined, write: .IF FRUIT In the second case, MMS performs the requested comparison between 'word1' and 'word2' to determine the expression value; the comparison operation is case-sensitive. Note that, when using macros and functions in expressions of this form, you must reference the macro or function in the standard way, in $(). For example, to check that the macro FRUIT is defined to be BANANAS, write: .IF $(FRUIT) .EQ BANANAS If you need to compare words that start with the characters '.', '(' or ')' or text containing layout characters then, enclose the words or text (on both sides of the comparison operator) in quotation-marks. For example, to check that the macro FILETYPE is defined as .MMS, and that the macro VERSION is not defined as 'Version 3.2', you must write: .IF "$(FILETYPE)" .EQ ".MMS" .AND "$(VERSION)" .NE "Version 3.2" 2 Examples 3 Description_File The following description file directs MMS to build MYPROG.EXE using the appropriate architecture-dependent *_DEFS.REQ: ! Macro definitions LIBRARYMODULES = A, B, C, D, E LIBRARIES = MYPROG.OLB($(LIBRARYMODULES)) - ! project library SYS$LIBRARY:CRTLIB.OLB ! C Runtime Library ! Dependencies MYPROG.EXE : $(LIBRARIES) LINK/EXEC=MYPROG MYPROG/LIB/INCLUDE=(A) .IF MMSIA64 A.OBJ, B.OBJ : IA64_DEFS.REQ .ELSIF MMSALPHA A.OBJ, B.OBJ : ALPHA_DEFS.REQ .ELSE A.OBJ, B.OBJ : VAX_DEFS.REQ .ENDIF D.OBJ, E.OBJ : COMMON.H E.OBJ : DATA.H If this file is named DESCRIP.MMS, the following command causes MMS to use the file to build MYPROG.EXE: $ MMS 3 MMS_Actions If the current default directory contains the following files: A.BLI;1 B.BLI;1 C.MAR;1 COMMON.H;1 D.C;1 DATA.H;1 DEFS.REQ;1 DESCRIP.MMS;1 E.C;1 MMS will execute the following actions as it processes the sample description file: BLISS A.BLI IF "''F$SEARCH("MYPROG.OLB")'" .EQS. "" THEN LIBRARY/CREATE MYPROG.OLB LIBRARY/REPLACE MYPROG.OLB A.OBJ BLISS B.BLI IF "''F$SEARCH("MYPROG.OLB")'" .EQS. "" THEN LIBRARY/CREATE MYPROG.OLB LIBRARY/REPLACE MYPROG.OLB B.OBJ MACRO C.MAR IF "''F$SEARCH("MYPROG.OLB")'" .EQS. "" THEN LIBRARY/CREATE MYPROG.OLB LIBRARY/REPLACE MYPROG.OLB C.OBJ CC /NOLIST D.C IF "''F$SEARCH("MYPROG.OLB")'" .EQS. "" THEN LIBRARY/CREATE MYPROG.OLB LIBRARY/REPLACE MYPROG.OLB D.OBJ CC /NOLIST E.C IF "''F$SEARCH("MYPROG.OLB")'" .EQS. "" THEN LIBRARY/CREATE MYPROG.OLB LIBRARY/REPLACE MYPROG.OLB E.OBJ LINK/EXEC=MYPROG MYPROG/LIB/INCLUDE=(A) These actions result in the production of all the intermediate files needed to produce MYPROG.EXE. If you then delete all the object files (.OBJ), and run MMS again using the /SKIP qualifier, MMS informs you that the target MYPROG.EXE is already up-to-date. 2 CMS If CMS is installed on your system and your source files are in the current default CMS library, MYPROG.EXE may be built from the CMS library when you issue the following command: $ MMS/CMS This command causes MMS to fetch the description file, if necessary, and source files from the CMS library, and perform the actions needed to create an up-to-date MYPROG.EXE. If a module, for example A.BLI, is replaced in the CMS library (by you or anyone else), thus causing a later version of A.BLI to exist in the library, the command $ MMS/CMS causes MMS to fetch the new CMS element A.BLI, compile it, add it to the MYPROG.OLB library, and produce a new MYPROG.EXE by executing the LINK command. 2 FMS If FMS (Forms Management System) is installed on your system, you can use MMS to access forms stored in FMS libraries. To specify an FMS form in a dependency rule, use the same syntax as for files in OpenVMS libraries. The file type .FLB after the library name informs FMS that the library contains FMS forms. The default file type for FMS forms is .FRM. The MMS default macro FMSFLAGS invokes FMS with the /REPLACE qualifier. MMS uses the insertion time of a form in an FMS library to determine whether a source is newer than the target. You cannot use the /REVISE_DATE qualifier with references to FMS forms. 2 MMS$STATUS Unless the qualifiers /CHECK_STATUS or /REVISE_DATE have been selected, when MMS completes, the symbol MMS$STATUS is set to the status value($STATUS) of the last action line executed. 2 MMS$SEVEREST_STATUS When MMS completes, the symbol MMS$SEVEREST_STATUS is set to the 'severest' status value($STATUS) of all action lines executed. If the status values of more than one action line have the same severity, then the resulting value of MMS$SEVEREST_STATUS will be that of the last of these action lines. 2 Oracle_CDD/Plus If the Oracle Common Data Dictionary (CDD/Plus) is installed on your system, you can use MMS to access records and other definitions stored in CDD/Plus. In a dependency rule, you follow the path name of a CDD/Plus definition with a caret (^) to inform MMS that the source is stored in CDD/Plus. For example: A.PAS : CDD$TOP.B.C.D.E^ ! CDD record that updates A.PAS ! action to update A.PAS To insert a remark in the CDD/Plus history list when MMS accesses a CDD/Plus definition, use the /AUDIT qualifier after the caret in the CDD/Plus specification. Follow the /AUDIT qualifier with a quoted string that contains the remark to be inserted in the CDD/Plus history file. For example: A : CDD$TOP.B.C.D.E^/AUDIT="Accessed by MMS to update A" ! action to update A The MMS default macro CDDFLAGS is initially defined to be the null string, but you can redefine it so that the same remark is written to the history file for all accesses to CDD/Plus entities. You cannot use the /REVISE_DATE qualifier with references to CDD/Plus definitions. The /NOACTION qualifier does not affect the /AUDIT qualifier; that is, remarks are written to the CDD/Plus history file even if action lines are not being executed. 2 Release_Notes The release notes for MMS Version 4.0 are contained in the file: SYS$HELP:MMS040.RELEASE_NOTES You can type or print this file to read the release note information. If you have installed prior versions of MMS, the associated release notes up to and including Version 4.0 can be found in SYS$HELP:MMSvvu.RELEASE_NOTES, where vv is the major version number, and u is the update number.