Imported Upstream version 4.0
[platform/upstream/make.git] / README.VMS
1 This version of GNU make has been tested on
2 OpenVMS V8.3 (Alpha) and V8.4 (Integrity).
3
4 Build instructions
5 ------------------
6 Make a 1st version
7        $ @makefile.com  ! ignore any compiler and/or linker warning
8        $ copy make.exe 1st-make.exe
9   Use the 1st version to generate a 2nd version
10        $ mc sys$disk:[]1st-make clean  ! ignore any file not found messages
11        $ mc sys$disk:[]1st-make
12   Verify your 2nd version
13        $ copy make.exe 2nd-make.exe
14        $ mc sys$disk:[]2nd-make clean
15        $ mc sys$disk:[]2nd-make
16   Don't use the HP C V7.2-001 compiler, which has an incompatible change
17   how __STDC__ is defined. This results at least in compile time warnings.
18 \f
19 Changes since GNU make 3.82
20 ---------------------------
21
22 Fix build problems.
23
24 The new feature "Loadable objects" is not yet supported. If you need it,
25 please send a change request or submit a bug report.
26
27 The new option --output-sync (-O) is accepted but has no effect: GNU make
28 for VMS does not support running multiple commands simultaneously.
29 \f
30 Changes for GNU make 3.82
31
32 Michael Gehre (at VISTEC-SEMI dot COM) supplied a fix for a problem with
33 timestamps of object modules in OLBs. The timestamps were not correctly
34 adjusted to GMT based time, if the local VMS time was using a daylight saving
35 algorithm and if daylight saving was switched off.
36
37 John Eisenbraun (at HP dot COM) supplied fixes and and an enhancement to append
38 output redirection in action lines.
39
40 Rework of ctrl+c and ctrl+y handling.
41
42 Fix a problem with cached strings, which showed on case-insensitive file
43 systems.
44
45 Build fixes for const-ified code in VMS specific sources.
46
47 A note on appending the redirected output. With this change, a simple mechanism
48 is implemented to make ">>" work in action lines. In VMS there is no simple
49 feature like ">>" to have DCL command or program output redirected and appended
50 to a file. GNU make for VMS already implements the redirection of output. If
51 such a redirection is detected, an ">" on the action line, GNU make creates a
52 DCL command procedure to execute the action and to redirect its output. Based
53 on that, now ">>" is also recognized and a similar but different command
54 procedure is created to implement the append. The main idea here is to create a
55 temporary file which collects the output and which is appended to the wanted
56 output file. Then the temporary file is deleted. This is all done in the
57 command procedure to keep changes in make small and simple. This obviously has
58 some limitations but it seems good enough compared with the current ">"
59 implementation. (And in my opinion, redirection is not really what GNU make has
60 to do.) With this approach, it may happen that the temporary file is not yet
61 appended and is left in SYS$SCRATCH. The temporary file names look like
62 "CMDxxxxx.". Any time the created command procedure can not complete, this
63 happens. Pressing Ctrl+Y to abort make is one case. In case of Ctrl+Y the
64 associated command procedure is left in SYS$SCRATCH as well. Its name is
65 CMDxxxxx.COM.
66
67 Change in the Ctrl+Y handling. The CtrlY handler now uses $delprc to delete all
68 children. This way also actions with DCL commands will be stopped. As before
69 the CtrlY handler then sends SIGQUIT to itself, which is handled in common
70 code.
71
72 Change in deleteing temporary command files. Temporary command files are now
73 deleted in the vms child termination handler. That deletes them even if
74 a Ctrl+C was pressed.
75
76 The behavior of pressing Ctrl+C is not changed. It still has only an effect,
77 after the current action is terminated. If that doesn't happen or takes too
78 long, Ctrl+Y should be used instead.
79 \f
80 Changes for GNU make 3.80
81
82 . In default.c define variable ARCH as IA64 for VMS on Itanium systems.
83
84 . In makefile.vms avoid name collision for glob and globfree.
85 \f
86 This is the VMS port of GNU Make done by Hartmut.Becker@compaq.com.
87
88 It is based on the specific version 3.77k and on 3.78.1. 3.77k was done
89 by Klaus Kämpf <kkaempf@rmi.de>, the code was based on the VMS port of
90 GNU Make 3.60 by Mike Moretti.
91
92 It was ported on OpenVMS/Alpha V7.1, DECC V5.7-006. It was re-build and
93 tested on OpenVMS/Alpha V7.2, OpenVMS/VAX 7.1 and 5.5-2. Different
94 versions of DECC were used. VAXC was tried: it fails; but it doesn't
95 seem worth to get it working. There are still some PTRMISMATCH warnings
96 during the compile. Although perl is working on VMS the test scripts
97 don't work. The function $shell is still missing.
98
99 There is a known bug in some of the VMS CRTLs. It is in the shipped
100 versions of VMS V7.2 and V7.2-1 and in the currently (October 1999)
101 available ECOs for VMS V7.1 and newer versions. It is fixed in versions
102 shipped with newer VMS versions and all ECO kits after October 1999. It
103 only shows up during the daylight saving time period (DST): stat()
104 returns a modification time 1 hour ahead. This results in GNU make
105 warning messages. For a just created source you will see:
106
107  $ gmake x.exe
108  gmake.exe;1: *** Warning: File 'x.c' has modification time in the future (940582863 > 940579269)
109  cc    /obj=x.obj x.c
110  link  x.obj    /exe=x.exe
111  gmake.exe;1: *** Warning:  Clock skew detected.  Your build may be incomplete.
112
113
114 New in 3.78.1:
115
116 Fix a problem with automatically remaking makefiles. GNU make uses an
117 execve to restart itself after a successful remake of the makefile. On
118 UNIX systems execve replaces the running program with a new one and
119 resets all signal handling to the default. On VMS execve creates a child
120 process, signal and exit handlers of the parent are still active, and,
121 unfortunately, corrupt the exit code from the child. Fix in job.c:
122 ignore SIGCHLD.
123
124 Added some switches to reflect latest features of DECC. Modifications in
125 makefile.vms.
126
127 Set some definitions to reflect latest features of DECC. Modifications in
128 config.h-vms (which is copied to config.h).
129
130 Added extern strcmpi declaration to avoid 'implicitly declared' messages.
131 Modification in make.h.
132
133 Default rule for C++, conditionals for gcc (GCC_IS_NATIVE) or DEC/Digital/
134 Compaq c/c++ compilers. Modifications in default.c.
135
136 Usage of opendir() and friends, suppress file version. Modifications in dir.c.
137
138 Added VMS specific code to handle ctrl+c and ctrl+y to abort make.
139 Modifications in job.c.
140
141 Added support to have case sensitive targets and dependencies but to
142 still use case blind file names. This is especially useful for Java
143 makefiles on VMS:
144
145         .SUFFIXES :
146         .SUFFIXES :     .class .java
147         .java.class :
148                 javac "$<
149         HelloWorld.class :      HelloWorld.java
150
151 A new macro WANT_CASE_SENSITIVE_TARGETS in config.h-vms was introduced.
152 It needs to be enabled to get this feature; default is disabled.  The
153 macro HAVE_CASE_INSENSITIVE_FS must not be touched: it is still enabled.
154 Modifications in file.c and config.h-vms.
155
156 Bootstrap make to start building make is still makefile.com, but make
157 needs to be re-made with a make to make a correct version: ignore all
158 possible warnings, delete all objects, rename make.exe to a different
159 name and run it.
160
161 Made some minor modifications to the bootstrap build makefile.com.
162 \f
163 This is the VMS port of GNU Make.
164
165 It is based on the VMS port of GNU Make 3.60 by Mike Moretti.
166
167 This port was done by Klaus Kämpf <kkaempf@rmi.de>
168
169 There is first-level support available from proGIS Software, Germany.
170 Visit their web-site at http://www.progis.de to get information
171 about other vms software and forthcoming updates to gnu make.
172
173 New for 3.77:
174
175 /bin/sh style I/O redirection is supported. You can now write lines like
176         mcr sys$disk:[]program.exe < input.txt > output.txt &> error.txt
177
178 Makefile variables are looked up in the current environment. You can set
179 symbols or logicals in DCL and evaluate them in the Makefile via
180 $(<name-of-symbol-or-logical>).  Variables defined in the Makefile
181 override VMS symbols/logicals !
182
183 Functions for file names are working now. See the GNU Make manual for
184 $(dir ...)  and $(wildcard ...).  Unix-style and VMS-style names are
185 supported as arguments.
186
187 The default rules are set up for GNU C. Building an executable from a
188 single source file is as easy as 'make file.exe'.
189
190 The variable $(ARCH) is predefined as ALPHA or VAX resp. Makefiles for
191 different VMS systems can now be written by checking $(ARCH) as in
192   ifeq ($(ARCH),ALPHA)
193     $(ECHO) "On the Alpha"
194   else
195     $(ECHO) "On the VAX"
196   endif
197
198 Command lines of excessive length are correctly broken and written to a
199 batch file in sys$scratch for later execution. There's no limit to the
200 lengths of commands (and no need for .opt files :-) any more.
201
202 Empty commands are handled correctly and don't end in a new DCL process.
203
204
205 New for 3.76:
206
207 John W. Eaton has updated the VMS port to support libraries and VPATH.
208
209
210 To build Make, simply type @makefile.  This should compile all the
211 necessary files and link Make.  There is also a file called
212 makefile.vms.  If you already have GNU Make built you can just use
213 Make with this makefile to rebuild.
214
215 Here are some notes about GNU Make for VMS:
216
217 The cd command is supported if it's called as $(CD). This invokes
218 the 'builtin_cd' command which changes the directory.
219 Calling 'set def' doesn't do the trick, since a sub-shell is
220 spawned for this command, the directory is changed *in this sub-shell*
221 and the sub-shell ends.
222
223 Libraries are not supported. They were in GNU Make 3.60 but somehow I
224 didn't care porting the code. If there is enough interest, I'll do it at
225 some later time.
226
227 The variable $^ separates files with commas instead of spaces (It's the
228 natural thing to do for VMS).
229
230 See defaults.c for VMS default suffixes and my definitions for default
231 rules and variables.
232
233 The shell function is not implemented yet.
234
235 Load average routines haven't been implemented for VMS yet.
236
237 The default include directory for including other makefiles is
238 SYS$SYSROOT:[SYSLIB] (I don't remember why I didn't just use
239 SYS$LIBRARY: instead; maybe it wouldn't work that way).
240
241 The default makefiles make looks for are: makefile.vms, gnumakefile,
242 makefile., and gnumakefile. .
243
244 The stat() function and handling of time stamps in VMS is broken, so I
245 replaced it with a hack in vmsfunctions.c. I will provide a full rewrite
246 somewhere in the future. Be warned, the time resolution inside make is
247 less than what vms provides. This might be a problem on the faster Alphas.
248
249 You can use a : in a filename only if you precede it with a backslash ('\').
250 E.g.- hobbes\:[bogas.files]
251
252 Make ignores success, informational, or warning errors (-S-, -I-, or
253 -W-).  But it will stop on -E- and -F- errors. (unless you do something
254 to override this in your makefile, or whatever).
255
256 Remote stuff isn't implemented yet.
257
258 Multiple line DCL commands, such as "if" statements, must be put inside
259 command files.  You can run a command file by using \@.
260
261
262 VMS changes made for 3.74.3
263
264 Lots of default settings are adapted for VMS. See default.c.
265
266 Long command lines are now converted to command files.
267
268 Comma (',') as a separator is now allowed. See makefile.vms for an example.
269
270 -------------------------------------------------------------------------------
271 Copyright (C) 1996-2013 Free Software Foundation, Inc.
272 This file is part of GNU Make.
273
274 GNU Make is free software; you can redistribute it and/or modify it under the
275 terms of the GNU General Public License as published by the Free Software
276 Foundation; either version 3 of the License, or (at your option) any later
277 version.
278
279 GNU Make is distributed in the hope that it will be useful, but WITHOUT ANY
280 WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
281 A PARTICULAR PURPOSE.  See the GNU General Public License for more details.
282
283 You should have received a copy of the GNU General Public License along with
284 this program.  If not, see <http://www.gnu.org/licenses/>.