.\" -*- mode: troff; coding: utf-8 -*- .\" Automatically generated by Pod::Man v6.0.2 (Pod::Simple 3.45) .\" .\" Standard preamble: .\" ======================================================================== .de Sp \" Vertical space (when we can't use .PP) .if t .sp .5v .if n .sp .. .de Vb \" Begin verbatim text .ft CW .nf .ne \\$1 .. .de Ve \" End verbatim text .ft R .fi .. .\" \*(C` and \*(C' are quotes in nroff, nothing in troff, for use with C<>. .ie n \{\ . ds C` "" . ds C' "" 'br\} .el\{\ . ds C` . ds C' 'br\} .\" .\" Escape single quotes in literal strings from groff's Unicode transform. .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" .\" If the F register is >0, we'll generate index entries on stderr for .\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index .\" entries marked with X<> in POD. Of course, you'll have to process the .\" output yourself in some meaningful fashion. .\" .\" Avoid warning from groff about undefined register 'F'. .de IX .. .nr rF 0 .if \n(.g .if rF .nr rF 1 .if (\n(rF:(\n(.g==0)) \{\ . if \nF \{\ . de IX . tm Index:\\$1\t\\n%\t"\\$2" .. . if !\nF==2 \{\ . nr % 0 . nr F 2 . \} . \} .\} .rr rF .\" .\" Required to disable full justification in groff 1.23.0. .if n .ds AD l .\" ======================================================================== .\" .IX Title "ExtUtils::MM_VMS 3" .TH ExtUtils::MM_VMS 3 2025-06-24 "perl v5.42.0" "Perl Programmers Reference Guide" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l .nh .SH NAME ExtUtils::MM_VMS \- methods to override UN*X behaviour in ExtUtils::MakeMaker .SH SYNOPSIS .IX Header "SYNOPSIS" .Vb 3 \& Do not use this directly. \& Instead, use ExtUtils::MM and it will figure out which MM_* \& class to use for you. .Ve .SH DESCRIPTION .IX Header "DESCRIPTION" See ExtUtils::MM_Unix for a documentation of the methods provided there. This package overrides the implementation of these methods, not the semantics. .SS "Methods always loaded" .IX Subsection "Methods always loaded" .IP wraplist 4 .IX Item "wraplist" Converts a list into a string wrapped at approximately 80 columns. .SS Methods .IX Subsection "Methods" Those methods which override default MM_Unix methods are marked "(override)", while methods unique to MM_VMS are marked "(specific)". For overridden methods, documentation is limited to an explanation of why this method overrides the MM_Unix method; see the ExtUtils::MM_Unix documentation for more details. .IP "guess_name (override)" 4 .IX Item "guess_name (override)" Try to determine name of extension being built. We begin with the name of the current directory. Since VMS filenames are case\-insensitive, however, we look for a \fI.pm\fR file whose name matches that of the current directory (presumably the \*(Aqmain\*(Aq \fI.pm\fR file for this extension), and try to find a \f(CW\*(C`package\*(C'\fR statement from which to obtain the Mixed::Case package name. .IP "find_perl (override)" 4 .IX Item "find_perl (override)" Use VMS file specification syntax and CLI commands to find and invoke Perl images. .IP "_fixin_replace_shebang (override)" 4 .IX Item "_fixin_replace_shebang (override)" Helper routine for MM\->\fBfixin()\fR, overridden because there\*(Aqs no such thing as an actual shebang line that will be interpreted by the shell, so we just prepend \&\f(CW$Config\fR{startperl} and preserve the shebang line argument for any switches it may contain. .IP "maybe_command (override)" 4 .IX Item "maybe_command (override)" Follows VMS naming conventions for executable files. If the name passed in doesn\*(Aqt exactly match an executable file, appends \fI.Exe\fR (or equivalent) to check for executable image, and \fI.Com\fR to check for DCL procedure. If this fails, checks directories in DCL$PATH and finally \fISys$System:\fR for an executable file having the name specified, with or without the \fI.Exe\fR\-equivalent suffix. .IP "pasthru (override)" 4 .IX Item "pasthru (override)" The list of macro definitions to be passed through must be specified using the /MACRO qualifier and must not add another /DEFINE qualifier. We prepend our own comma here to the contents of $(PASTHRU_DEFINE) because it is often empty and a comma always present in CCFLAGS would generate a missing qualifier value error. .IP "pm_to_blib (override)" 4 .IX Item "pm_to_blib (override)" VMS wants a dot in every file so we can\*(Aqt have one called \*(Aqpm_to_blib\*(Aq, it becomes \*(Aqpm_to_blib.\*(Aq and MMS/K isn\*(Aqt smart enough to know that when you have a target called \*(Aqpm_to_blib\*(Aq it should look for \*(Aqpm_to_blib.\*(Aq. .Sp So in VMS its pm_to_blib.ts. .IP "perl_script (override)" 4 .IX Item "perl_script (override)" If name passed in doesn\*(Aqt specify a readable file, appends \fI.com\fR or \&\fI.pl\fR and tries again, since it\*(Aqs customary to have file types on all files under VMS. .IP replace_manpage_separator 4 .IX Item "replace_manpage_separator" Use as separator a character which is legal in a VMS\-syntax file name. .IP init_DEST 4 .IX Item "init_DEST" (override) Because of the difficulty concatenating VMS filepaths we must pre\-expand the DEST* variables. .IP init_DIRFILESEP 4 .IX Item "init_DIRFILESEP" No separator between a directory path and a filename on VMS. .IP "init_main (override)" 4 .IX Item "init_main (override)" .PD 0 .IP "init_tools (override)" 4 .IX Item "init_tools (override)" .PD Provide VMS\-specific forms of various utility commands. .Sp Sets DEV_NULL to nothing because I don\*(Aqt know how to do it on VMS. .Sp Changes EQUALIZE_TIMESTAMP to set revision date of target file to one second later than source file, since MMK interprets precisely equal revision dates for a source and target file as a sign that the target needs to be updated. .IP "init_platform (override)" 4 .IX Item "init_platform (override)" Add PERL_VMS, MM_VMS_REVISION and MM_VMS_VERSION. .Sp MM_VMS_REVISION is for backwards compatibility before MM_VMS had a \&\f(CW$VERSION\fR. .IP platform_constants 4 .IX Item "platform_constants" .PD 0 .IP "init_VERSION (override)" 4 .IX Item "init_VERSION (override)" .PD Override the *DEFINE_VERSION macros with VMS semantics. Translate the MAKEMAKER filepath to VMS style. .IP "constants (override)" 4 .IX Item "constants (override)" Fixes up numerous file and directory macros to insure VMS syntax regardless of input syntax. Also makes lists of files comma\-separated. .IP special_targets 4 .IX Item "special_targets" Clear the default .SUFFIXES and put in our own list. .IP "cflags (override)" 4 .IX Item "cflags (override)" Bypass shell script and produce qualifiers for CC directly (but warn user if a shell script for this extension exists). Fold multiple /Defines into one, since some C compilers pay attention to only one instance of this qualifier on the command line. .IP "const_cccmd (override)" 4 .IX Item "const_cccmd (override)" Adds directives to point C preprocessor to the right place when handling #include directives. Also constructs CC command line a bit differently than MM_Unix method. .IP "tools_other (override)" 4 .IX Item "tools_other (override)" Throw in some dubious extra macros for Makefile args. .Sp Also keep around the old $(SAY) macro in case somebody\*(Aqs using it. .IP "init_dist (override)" 4 .IX Item "init_dist (override)" VMSish defaults for some values. .Sp .Vb 1 \& macro description default \& \& ZIPFLAGS flags to pass to ZIP \-Vu \& \& COMPRESS compression command to gzip \& use for tarfiles \& SUFFIX suffix to put on \-gz \& compressed files \& \& SHAR shar command to use vms_share \& \& DIST_DEFAULT default target to use to tardist \& create a distribution \& \& DISTVNAME Use VERSION_SYM instead of $(DISTNAME)\-$(VERSION_SYM) \& VERSION for the name .Ve .IP "c_o (override)" 4 .IX Item "c_o (override)" Use VMS syntax on command line. In particular, $(DEFINE) and $(PERL_INC) have been pulled into $(CCCMD). Also use MM[SK] macros. .IP "xs_c (override)" 4 .IX Item "xs_c (override)" Use MM[SK] macros. .IP "xs_o (override)" 4 .IX Item "xs_o (override)" Use MM[SK] macros, and VMS command line for C compiler. .IP "_xsbuild_replace_macro (override)" 4 .IX Item "_xsbuild_replace_macro (override)" There is no simple replacement possible since a qualifier and all its subqualifiers must be considered together, so we use our own utility routine for the replacement. .IP "_xsbuild_value (override)" 4 .IX Item "_xsbuild_value (override)" Convert the extension spec to Unix format, as that\*(Aqs what will match what\*(Aqs in the XSBUILD data structure. .IP "dlsyms (override)" 4 .IX Item "dlsyms (override)" Create VMS linker options files specifying universal symbols for this extension\*(Aqs shareable image(s), and listing other shareable images or libraries to which it should be linked. .IP xs_obj_opt 4 .IX Item "xs_obj_opt" Override to fixup \-o flags. .IP "dynamic_lib (override)" 4 .IX Item "dynamic_lib (override)" Use VMS Link command. .IP "xs_make_static_lib (override)" 4 .IX Item "xs_make_static_lib (override)" Use VMS commands to manipulate object library. .IP "static_lib_pure_cmd (override)" 4 .IX Item "static_lib_pure_cmd (override)" Use VMS commands to manipulate object library. .IP xs_static_lib_is_xs 4 .IX Item "xs_static_lib_is_xs" .PD 0 .IP extra_clean_files 4 .IX Item "extra_clean_files" .PD Clean up some OS specific files. Plus the temp file used to shorten a lot of commands. And the name mangler database. .IP zipfile_target 4 .IX Item "zipfile_target" .PD 0 .IP tarfile_target 4 .IX Item "tarfile_target" .IP shdist_target 4 .IX Item "shdist_target" .PD Syntax for invoking shar, tar and zip differs from that for Unix. .IP "install (override)" 4 .IX Item "install (override)" Work around DCL\*(Aqs 255 character limit several times,and use VMS\-style command line quoting in a few cases. .IP "perldepend (override)" 4 .IX Item "perldepend (override)" Use VMS\-style syntax for files; it\*(Aqs cheaper to just do it directly here than to have the MM_Unix method call \f(CW\*(C`catfile\*(C'\fR repeatedly. Also, if we have to rebuild Config.pm, use MM[SK] to do it. .IP "makeaperl (override)" 4 .IX Item "makeaperl (override)" Undertake to build a new set of Perl images using VMS commands. Since VMS does dynamic loading, it\*(Aqs not necessary to statically link each extension into the Perl image, so this isn\*(Aqt the normal build path. Consequently, it hasn\*(Aqt really been tested, and may well be incomplete. .IP "maketext_filter (override)" 4 .IX Item "maketext_filter (override)" Ensure that colons marking targets are preceded by space, in order to distinguish the target delimiter from a colon appearing as part of a filespec. .IP "prefixify (override)" 4 .IX Item "prefixify (override)" prefixifying on VMS is simple. Each should simply be: .Sp .Vb 1 \& perl_root:[some.dir] .Ve .Sp which can just be converted to: .Sp .Vb 1 \& volume:[your.prefix.some.dir] .Ve .Sp otherwise you get the default layout. .Sp In effect, your search prefix is ignored and \f(CW$Config\fR{vms_prefix} is used instead. .IP cd 4 .IX Item "cd" .PD 0 .IP oneliner 4 .IX Item "oneliner" .IP \fBecho\fR 4 .IX Item "echo" .PD perl trips up on "" thinking it\*(Aqs an input redirect. So we use the native Write command instead. Besides, it\*(Aqs faster. .IP quote_literal 4 .IX Item "quote_literal" .PD 0 .IP escape_dollarsigns 4 .IX Item "escape_dollarsigns" .PD Quote, don\*(Aqt escape. .IP escape_all_dollarsigns 4 .IX Item "escape_all_dollarsigns" Quote, don\*(Aqt escape. .IP escape_newlines 4 .IX Item "escape_newlines" .PD 0 .IP max_exec_len 4 .IX Item "max_exec_len" .PD 256 characters. .IP init_linker 4 .IX Item "init_linker" .PD 0 .IP "catdir (override)" 4 .IX Item "catdir (override)" .IP "catfile (override)" 4 .IX Item "catfile (override)" .PD Eliminate the macros in the output to the MMS/MMK file. .Sp (File::Spec::VMS used to do this for us, but it\*(Aqs being removed) .IP eliminate_macros 4 .IX Item "eliminate_macros" Expands MM[KS]/Make macros in a text string, using the contents of identically named elements of \f(CW%$self\fR, and returns the result as a file specification in Unix syntax. .Sp NOTE: This is the canonical version of the method. The version in File::Spec::VMS is deprecated. .IP fixpath 4 .IX Item "fixpath" .Vb 2 \& my $path = $mm\->fixpath($path); \& my $path = $mm\->fixpath($path, $is_dir); .Ve .Sp Catchall routine to clean up problem MM[SK]/Make macros. Expands macros in any directory specification, in order to avoid juxtaposing two VMS\-syntax directories when MM[SK] is run. Also expands expressions which are all macro, so that we can tell how long the expansion is, and avoid overrunning DCL\*(Aqs command buffer when MM[KS] is running. .Sp \&\fBfixpath()\fR checks to see whether the result matches the name of a directory in the current default directory and returns a directory or file specification accordingly. \f(CW$is_dir\fR can be set to true to force \fBfixpath()\fR to consider the path to be a directory or false to force it to be a file. .Sp NOTE: This is the canonical version of the method. The version in File::Spec::VMS is deprecated. .IP os_flavor 4 .IX Item "os_flavor" VMS is VMS. .IP "is_make_type (override)" 4 .IX Item "is_make_type (override)" None of the make types being checked for is viable on VMS, plus our \f(CW$self\fR\->{MAKE} is an unexpanded (and unexpandable) macro whose value is known only to the make utility itself. .IP "make_type (override)" 4 .IX Item "make_type (override)" Returns a suitable string describing the type of makefile being written. .SH AUTHOR .IX Header "AUTHOR" Original author Charles Bailey \fIbailey@newman.upenn.edu\fR .PP Maintained by Michael G Schwern \fIschwern@pobox.com\fR .PP See ExtUtils::MakeMaker for patching and contact information.