Add VMS updates from Martin Zinser.
[make.git] / readme.vms
blobd4a9667c4fc332e62e8c88bc2f1a2c10680f1b8b
1 This is the VMS port of GNU Make done by Hartmut.Becker@compaq.com.
3 It is based on the specific version 3.77k and on 3.78.1. 3.77k was done
4 by Klaus Kämpf <kkaempf@rmi.de>, the code was based on the VMS port of
5 GNU Make 3.60 by Mike Moretti.
7 It was ported on OpenVMS/Alpha V7.1, DECC V5.7-006. It was re-build and
8 tested on OpenVMS/Alpha V7.2, OpenVMS/VAX 7.1 and 5.5-2. Different
9 versions of DECC were used. VAXC was tried: it fails; but it doesn't
10 seem worth to get it working. There are still some PTRMISMATCH warnings
11 during the compile. Although perl is working on VMS the test scripts
12 don't work. The function $shell is still missing.
14 There is a known bug in some of the VMS CRTLs. It is in the shipped
15 versions of VMS V7.2 and V7.2-1 and in the currently (October 1999)
16 available ECOs for VMS V7.1 and newer versions. It is fixed in versions
17 shipped with newer VMS versions and all ECO kits after October 1999. It
18 only shows up during the daylight saving time period (DST): stat()
19 returns a modification time 1 hour ahead. This results in GNU make
20 warning messages. For a just created source you will see:
22  $ gmake x.exe
23  gmake.exe;1: *** Warning: File `x.c' has modification time in the future (940582863 > 940579269)
24  cc    /obj=x.obj x.c
25  link  x.obj    /exe=x.exe
26  gmake.exe;1: *** Warning:  Clock skew detected.  Your build may be incomplete.
29 New in 3.78.1:
31 Fix a problem with automatically remaking makefiles. GNU make uses an
32 execve to restart itself after a successful remake of the makefile. On
33 UNIX systems execve replaces the running program with a new one and
34 resets all signal handling to the default. On VMS execve creates a child
35 process, signal and exit handlers of the parent are still active, and,
36 unfortunately, corrupt the exit code from the child. Fix in job.c:
37 ignore SIGCHLD.
39 Added some switches to reflect latest features of DECC. Modifications in
40 makefile.vms.
42 Set some definitions to reflect latest features of DECC. Modifications in
43 config.h-vms (which is copied to config.h).
45 Added extern strcmpi declaration to avoid 'implicitly declared' messages.
46 Modification in make.h.
48 Default rule for C++, conditionals for gcc (GCC_IS_NATIVE) or DEC/Digital/
49 Compaq c/c++ compilers. Modifications in default.c.
51 Usage of opendir() and friends, suppress file version. Modifications in dir.c.
53 Added VMS specific code to handle ctrl+c and ctrl+y to abort make.
54 Modifications in job.c.
56 Added support to have case sensitive targets and dependencies but to
57 still use case blind file names. This is especially useful for Java
58 makefiles on VMS:
60         .SUFFIXES :
61         .SUFFIXES :     .class .java
62         .java.class :
63                 javac "$<
64         HelloWorld.class :      HelloWorld.java
66 A new macro WANT_CASE_SENSITIVE_TARGETS in config.h-vms was introduced.
67 It needs to be enabled to get this feature; default is disabled.  The
68 macro HAVE_CASE_INSENSITIVE_FS must not be touched: it is still enabled.
69 Modifications in file.c and config.h-vms.
71 Bootstrap make to start building make is still makefile.com, but make
72 needs to be re-made with a make to make a correct version: ignore all
73 possible warnings, delete all objects, rename make.exe to a different
74 name and run it.
76 Made some minor modifications to the bootstrap build makefile.com.
78 This is the VMS port of GNU Make.
80 It is based on the VMS port of GNU Make 3.60 by Mike Moretti.
82 This port was done by Klaus Kämpf <kkaempf@rmi.de>
84 There is first-level support available from proGIS Software, Germany.
85 Visit their web-site at http://www.progis.de to get information
86 about other vms software and forthcoming updates to gnu make.
88 New for 3.77:
90 /bin/sh style I/O redirection is supported. You can now write lines like
91         mcr sys$disk:[]program.exe < input.txt > output.txt &> error.txt
93 Makefile variables are looked up in the current environment. You can set
94 symbols or logicals in DCL and evaluate them in the Makefile via
95 $(<name-of-symbol-or-logical>).  Variables defined in the Makefile
96 override VMS symbols/logicals !
98 Functions for file names are working now. See the GNU Make manual for
99 $(dir ...)  and $(wildcard ...).  Unix-style and VMS-style names are
100 supported as arguments.
102 The default rules are set up for GNU C. Building an executable from a
103 single source file is as easy as 'make file.exe'.
105 The variable $(ARCH) is predefined as ALPHA or VAX resp. Makefiles for
106 different VMS systems can now be written by checking $(ARCH) as in
107   ifeq ($(ARCH),ALPHA)
108     $(ECHO) "On the Alpha"
109   else
110     $(ECHO) "On the VAX"
111   endif
113 Command lines of excessive length are correctly broken and written to a
114 batch file in sys$scratch for later execution. There's no limit to the
115 lengths of commands (and no need for .opt files :-) any more.
117 Empty commands are handled correctly and don't end in a new DCL process.
120 New for 3.76:
122 John W. Eaton has updated the VMS port to support libraries and VPATH.
125 To build Make, simply type @makefile.  This should compile all the
126 necessary files and link Make.  There is also a file called
127 makefile.vms.  If you already have GNU Make built you can just use
128 Make with this makefile to rebuild.
130 Here are some notes about GNU Make for VMS:
132 The cd command is supported if it's called as $(CD). This invokes
133 the 'builtin_cd' command which changes the directory.
134 Calling 'set def' doesn't do the trick, since a sub-shell is
135 spawned for this command, the directory is changed *in this sub-shell*
136 and the sub-shell ends.
138 Libraries are not supported. They were in GNU Make 3.60 but somehow I
139 didn't care porting the code. If there is enough interest, I'll do it at
140 some later time.
142 The variable $^ separates files with commas instead of spaces (It's the
143 natural thing to do for VMS).
145 See defaults.c for VMS default suffixes and my definitions for default
146 rules and variables.
148 The shell function is not implemented yet.
150 Load average routines haven't been implemented for VMS yet.
152 The default include directory for including other makefiles is
153 SYS$SYSROOT:[SYSLIB] (I don't remember why I didn't just use
154 SYS$LIBRARY: instead; maybe it wouldn't work that way).
156 The default makefiles make looks for are: makefile.vms, gnumakefile,
157 makefile., and gnumakefile. .
159 The stat() function and handling of time stamps in VMS is broken, so I
160 replaced it with a hack in vmsfunctions.c. I will provide a full rewrite
161 somewhere in the future. Be warned, the time resolution inside make is
162 less than what vms provides. This might be a problem on the faster Alphas.
164 You can use a : in a filename only if you preceed it with a backslash ('\').
165 E.g.- hobbes\:[bogas.files]
167 Make ignores success, informational, or warning errors (-S-, -I-, or
168 -W-).  But it will stop on -E- and -F- errors. (unless you do something
169 to override this in your makefile, or whatever).
171 Remote stuff isn't implemented yet.
173 Multiple line DCL commands, such as "if" statements, must be put inside
174 command files.  You can run a command file by using \@.
177 VMS changes made for 3.74.3
179 Lots of default settings are adapted for VMS. See default.c.
181 Long command lines are now converted to command files.
183 Comma (',') as a separator is now allowed. See makefile.vms for an example.