.\" -*- mode: troff; coding: utf-8 -*-
.\" Automatically generated by Pod::Man v6.0.2 (Pod::Simple 3.47)
.\"
.\" 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 2026-01-17 "perl v5.42.0" "User Contributed Perl Documentation"
.\" 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 <sys/foo.h> 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 "<foo>" 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.
