VirtualBox

source: kBuild/trunk/src/kmk/readme.vms@ 2657

Last change on this file since 2657 was 2591, checked in by bird, 13 years ago

kmk: Merged in changes from GNU make 3.82. Previous GNU make base version was gnumake-2008-10-28-CVS.

  • Property svn:eol-style set to native
File size: 15.8 KB
Line 
1This is the VMS version of GNU Make, updated by Hartmut Becker
2
3Changes are based on GNU make 3.82.
4
5This version was built and tested on OpenVMS V7.3 (VAX), V7.3-2 (Alpha) and
6V8.3-1H1 (I64).
7
8Build instructions
9Make a 1st version
10 $ @makefile.com ! ignore any compiler and/or linker warning
11 $ rena make.exe 1st-make.exe
12Use the 1st version to generate a 2nd version
13 $ mc sys$disk:[]1st-make clean
14 $ mc sys$disk:[]1st-make
15Verify your 2nd version
16 $ rena make.exe 2nd-make.exe
17 $ mc sys$disk:[]2nd-make clean
18 $ mc sys$disk:[]2nd-make
19
20Changes (3.81.90)
21
22Michael Gehre (at VISTEC-SEMI dot COM) supplied a fix for a problem with
23timestamps of object modules in OLBs. The timestamps were not correctly
24adjusted to GMT based time, if the local VMS time was using a daylight saving
25algorithm and if daylight saving was switched off.
26
27John Eisenbraun (at HP dot COM) supplied fixes and and an enhancement to append
28output redirection in action lines.
29
30Rework of ctrl+c and ctrl+y handling.
31
32Fix a problem with cached strings, which showed on case-insensitive file
33systems.
34
35Build fixes for const-ified code in VMS specific sources.
36
37Build notes:
38- Try to avoid HP C V7.2-001, which has an incompatible change
39how __STDC__ is defined. This results at least in compile time warnings.
40
41- On V8.3-1H1, if you press Ctrl+C you may see a traceback, starting with
42%SYSTEM-F-CONTROLC, operation completed under CTRL/C
43%TRACE-F-TRACEBACK, symbolic stack dump follows
44image module routine line rel PC abs PC
45
46DECC$SHR C$SIGNAL gsignal 27991 0000000000001180
47FFFFFFFF84AB2DA0
48DECC$SHR C$SIGNAL raise 28048 0000000000001280
49FFFFFFFF84AB2EA0
50DECC$SHR C$SIGPENDING decc$$deliver_signals
51 12475 0000000000000890
52FFFFFFFF84C13690
53...
54This looks like an incompatibility to the Alpha and VAX behavior, so it looks
55like a problem in I64 VMS version(s).
56
57- There is no clean build on VAX. In the environment I tested, I had to use GNU
58make's alloca which produced a couple of compile time warnings. It seems too
59much effort to work on a clean build on VAX.
60
61A note on appending the redirected output. With this change, a simple mechanism
62is implemented to make ">>" work in action lines. In VMS there is no simple
63feature like ">>" to have DCL command or program output redirected and appended
64to a file. GNU make for VMS already implements the redirection of output. If
65such a redirection is detected, an ">" on the action line, GNU make creates a
66DCL command procedure to execute the action and to redirect its output. Based
67on that, now ">>" is also recognized and a similar but different command
68procedure is created to implement the append. The main idea here is to create a
69temporary file which collects the output and which is appended to the wanted
70output file. Then the temporary file is deleted. This is all done in the
71command procedure to keep changes in make small and simple. This obviously has
72some limitations but it seems good enough compared with the current ">"
73implementation. (And in my opinion, redirection is not really what GNU make has
74to do.) With this approach, it may happen that the temporary file is not yet
75appended and is left in SYS$SCRATCH. The temporary file names look like
76"CMDxxxxx.". Any time the created command procedure can not complete, this
77happens. Pressing Ctrl+Y to abort make is one case. In case of Ctrl+Y the
78associated command procedure is left in SYS$SCRATCH as well. Its name is
79CMDxxxxx.COM.
80
81Change in the Ctrl+Y handling
82
83Ctrl+Y was: The CtrlY handler called $forcex for the current child.
84
85Ctrl+Y changed: The CtrlY handler uses $delprc to delete all children. This way
86also actions with DCL commands will be stopped. As before Ctrl+Y then sends
87SIGQUIT to itself, which is handled in common code.
88
89Change in deleteing temporary command files
90
91Temporary command files were deleted in the main line, after returning from the
92vms child termination handler. If Ctrl+C was pressed, the handler is called but
93did not return to main line.
94
95Now, temporary command files are deleted in the vms child termination
96handler. That deletes the them even if a Ctrl+C was pressed.
97
98The behavior of pressing Ctrl+C is not changed. It still has only an effect,
99after the current action is terminated. If that doesn't happen or takes too
100long, Ctrl+Y should be used instead.
101
102
103Changes (3.80)
104
105. In default.c define variable ARCH as IA64 for VMS on Itanium systems.
106
107. In makefile.vms avoid name collision for glob and globfree.
108
109In newer version of the VMS CRTL there are glob and globfree implemented.
110Compiling and linking may result in
111
112 %ILINK-W-MULDEFLNKG, symbol DECC$GLOBFREE has subsequent linkage definition
113 in module DECC$SHR file SYS$COMMON:[SYSLIB]DECC$SHR.EXE;1
114 %ILINK-W-MULDEF, symbol DECC$GLOBFREE multiply defined
115 in module DECC$SHR file SYS$COMMON:[SYSLIB]DECC$SHR.EXE;1
116
117linker messages (and similar for DECC$GLOB). The messages just say, that
118globfree is a known CRTL whose name was mapped by the compiler to
119DECC$GLOBFREE. This is done in glob.c as well, so this name is defined
120twice. One possible solution is to use the VMS versions of glob and
121globfree. However, then the build environment needs to figure out if
122there is a new CRTL supporting these or not. This adds complexity. Even
123more, these functions return VMS file specifications, which is not
124expected by the other make sources. There is a switch at run time (a VMS
125logical DECC$GLOB_UNIX_STYLE), which can be set to get Unix style
126names. This may conflict with other software. The recommended solution
127for this is to set this switch just prior to calling main: in an
128initialization routine. This adds more complexity and more VMS specific
129code. It is easier to tell the compiler NOT to map the routine names
130with a simple change in makefile.vms.
131
132Some notes on case sensitive names in rules and on the disk. In the VMS
133template for CONFIG.H case sensitive rules can be enabled with defining
134WANT_CASE_SENSITIVE_TARGETS. For recent version of VMS there is a case
135sensitive file system: ODS5. To make use of that, additionally un-defining
136the HAVE_CASE_INSENSITIVE_FS is required. As these are C macros, different
137versions of make need to be built to have any case sensitivity for VMS
138working. Unfortunately, for ODS5 disks that's not all.
139
140- Usually DCL upcases command line tokens (except strings) and usually the
141 file system is case blind (similar to how Windows systems work)
142 $ set proc/parse=extended/case=sensitive
143 preserves lower and UPPER on the command line and (for this process and all
144 sub-processes) enables case sensitivity in the file system
145
146- Usually the CRTL tries to reverse what DCL did with command line tokens, it
147 lowercases all tokens (except strings)
148 $ define DECC$ARGV_PARSE_STYLE enable
149 passes (the now preserved) lower and UPPER from the command line to main()
150
151- Usually the CRTL upcases the arguments to open() and friends
152 $ define DECC$EFS_CASE_PRESERVE enable
153 preserves the names as is.
154
155It is important to know that not all VMS tools are ready for case sensitivity.
156With this setup some tools may not work as expected. The setup should not
157blindly be applied for all users in default login procedures.
158
159Example? The poor coding gives a compiler message, showing that there are
160different files:
161
162$ dir
163
164Directory ODS5DISK[HB]
165
166A.c;1 B.c;1 c.c;1 X.c;1
167x.c;1
168
169Total of 5 files.
170$ ods5make x.obj
171cc /obj=x.obj x.c
172
173foo(){lowercase_x();}
174......^
175%CC-I-IMPLICITFUNC, In this statement, the identifier "lowercase_x" is implicitly declared as a function.
176at line number 1 in file ODS5DISK[HB]x.c;1
177$ mc SYS$SYSDEVICE:[HARTMUT.MAKE_3_80P]ods5make X.obj
178cc /obj=X.obj X.c
179
180foo() {UPPERCASE_X();}
181.......^
182%CC-I-IMPLICITFUNC, In this statement, the identifier "UPPERCASE_X" is implicitly declared as a function.
183at line number 1 in file ODS5DISK[HB]X.c;1
184$ dir
185
186Directory ODS5DISK[HB]
187
188A.c;1 B.c;1 c.c;1 X.c;1
189x.c;1 X.obj;1 x.obj;1
190
191Total of 7 files.
192$
193
194
195This is the VMS port of GNU Make done by [email protected].
196
197It is based on the specific version 3.77k and on 3.78.1. 3.77k was done
198by Klaus Kämpf <[email protected]>, the code was based on the VMS port of
199GNU Make 3.60 by Mike Moretti.
200
201It was ported on OpenVMS/Alpha V7.1, DECC V5.7-006. It was re-build and
202tested on OpenVMS/Alpha V7.2, OpenVMS/VAX 7.1 and 5.5-2. Different
203versions of DECC were used. VAXC was tried: it fails; but it doesn't
204seem worth to get it working. There are still some PTRMISMATCH warnings
205during the compile. Although perl is working on VMS the test scripts
206don't work. The function $shell is still missing.
207
208There is a known bug in some of the VMS CRTLs. It is in the shipped
209versions of VMS V7.2 and V7.2-1 and in the currently (October 1999)
210available ECOs for VMS V7.1 and newer versions. It is fixed in versions
211shipped with newer VMS versions and all ECO kits after October 1999. It
212only shows up during the daylight saving time period (DST): stat()
213returns a modification time 1 hour ahead. This results in GNU make
214warning messages. For a just created source you will see:
215
216 $ gmake x.exe
217 gmake.exe;1: *** Warning: File `x.c' has modification time in the future (940582863 > 940579269)
218 cc /obj=x.obj x.c
219 link x.obj /exe=x.exe
220 gmake.exe;1: *** Warning: Clock skew detected. Your build may be incomplete.
221
222
223New in 3.78.1:
224
225Fix a problem with automatically remaking makefiles. GNU make uses an
226execve to restart itself after a successful remake of the makefile. On
227UNIX systems execve replaces the running program with a new one and
228resets all signal handling to the default. On VMS execve creates a child
229process, signal and exit handlers of the parent are still active, and,
230unfortunately, corrupt the exit code from the child. Fix in job.c:
231ignore SIGCHLD.
232
233Added some switches to reflect latest features of DECC. Modifications in
234makefile.vms.
235
236Set some definitions to reflect latest features of DECC. Modifications in
237config.h-vms (which is copied to config.h).
238
239Added extern strcmpi declaration to avoid 'implicitly declared' messages.
240Modification in make.h.
241
242Default rule for C++, conditionals for gcc (GCC_IS_NATIVE) or DEC/Digital/
243Compaq c/c++ compilers. Modifications in default.c.
244
245Usage of opendir() and friends, suppress file version. Modifications in dir.c.
246
247Added VMS specific code to handle ctrl+c and ctrl+y to abort make.
248Modifications in job.c.
249
250Added support to have case sensitive targets and dependencies but to
251still use case blind file names. This is especially useful for Java
252makefiles on VMS:
253
254 .SUFFIXES :
255 .SUFFIXES : .class .java
256 .java.class :
257 javac "$<
258 HelloWorld.class : HelloWorld.java
259
260A new macro WANT_CASE_SENSITIVE_TARGETS in config.h-vms was introduced.
261It needs to be enabled to get this feature; default is disabled. The
262macro HAVE_CASE_INSENSITIVE_FS must not be touched: it is still enabled.
263Modifications in file.c and config.h-vms.
264
265Bootstrap make to start building make is still makefile.com, but make
266needs to be re-made with a make to make a correct version: ignore all
267possible warnings, delete all objects, rename make.exe to a different
268name and run it.
269
270Made some minor modifications to the bootstrap build makefile.com.
271
272
273This is the VMS port of GNU Make.
274
275It is based on the VMS port of GNU Make 3.60 by Mike Moretti.
276
277This port was done by Klaus Kämpf <[email protected]>
278
279There is first-level support available from proGIS Software, Germany.
280Visit their web-site at http://www.progis.de to get information
281about other vms software and forthcoming updates to gnu make.
282
283New for 3.77:
284
285/bin/sh style I/O redirection is supported. You can now write lines like
286 mcr sys$disk:[]program.exe < input.txt > output.txt &> error.txt
287
288Makefile variables are looked up in the current environment. You can set
289symbols or logicals in DCL and evaluate them in the Makefile via
290$(<name-of-symbol-or-logical>). Variables defined in the Makefile
291override VMS symbols/logicals !
292
293Functions for file names are working now. See the GNU Make manual for
294$(dir ...) and $(wildcard ...). Unix-style and VMS-style names are
295supported as arguments.
296
297The default rules are set up for GNU C. Building an executable from a
298single source file is as easy as 'make file.exe'.
299
300The variable $(ARCH) is predefined as ALPHA or VAX resp. Makefiles for
301different VMS systems can now be written by checking $(ARCH) as in
302 ifeq ($(ARCH),ALPHA)
303 $(ECHO) "On the Alpha"
304 else
305 $(ECHO) "On the VAX"
306 endif
307
308Command lines of excessive length are correctly broken and written to a
309batch file in sys$scratch for later execution. There's no limit to the
310lengths of commands (and no need for .opt files :-) any more.
311
312Empty commands are handled correctly and don't end in a new DCL process.
313
314
315New for 3.76:
316
317John W. Eaton has updated the VMS port to support libraries and VPATH.
318
319
320To build Make, simply type @makefile. This should compile all the
321necessary files and link Make. There is also a file called
322makefile.vms. If you already have GNU Make built you can just use
323Make with this makefile to rebuild.
324
325Here are some notes about GNU Make for VMS:
326
327The cd command is supported if it's called as $(CD). This invokes
328the 'builtin_cd' command which changes the directory.
329Calling 'set def' doesn't do the trick, since a sub-shell is
330spawned for this command, the directory is changed *in this sub-shell*
331and the sub-shell ends.
332
333Libraries are not supported. They were in GNU Make 3.60 but somehow I
334didn't care porting the code. If there is enough interest, I'll do it at
335some later time.
336
337The variable $^ separates files with commas instead of spaces (It's the
338natural thing to do for VMS).
339
340See defaults.c for VMS default suffixes and my definitions for default
341rules and variables.
342
343The shell function is not implemented yet.
344
345Load average routines haven't been implemented for VMS yet.
346
347The default include directory for including other makefiles is
348SYS$SYSROOT:[SYSLIB] (I don't remember why I didn't just use
349SYS$LIBRARY: instead; maybe it wouldn't work that way).
350
351The default makefiles make looks for are: makefile.vms, gnumakefile,
352makefile., and gnumakefile. .
353
354The stat() function and handling of time stamps in VMS is broken, so I
355replaced it with a hack in vmsfunctions.c. I will provide a full rewrite
356somewhere in the future. Be warned, the time resolution inside make is
357less than what vms provides. This might be a problem on the faster Alphas.
358
359You can use a : in a filename only if you preceed it with a backslash ('\').
360E.g.- hobbes\:[bogas.files]
361
362Make ignores success, informational, or warning errors (-S-, -I-, or
363-W-). But it will stop on -E- and -F- errors. (unless you do something
364to override this in your makefile, or whatever).
365
366Remote stuff isn't implemented yet.
367
368Multiple line DCL commands, such as "if" statements, must be put inside
369command files. You can run a command file by using \@.
370
371
372VMS changes made for 3.74.3
373
374Lots of default settings are adapted for VMS. See default.c.
375
376Long command lines are now converted to command files.
377
378Comma (',') as a separator is now allowed. See makefile.vms for an example.
379
380-------------------------------------------------------------------------------
381Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
3822006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc.
383This file is part of GNU Make.
384
385GNU Make is free software; you can redistribute it and/or modify it under the
386terms of the GNU General Public License as published by the Free Software
387Foundation; either version 3 of the License, or (at your option) any later
388version.
389
390GNU Make is distributed in the hope that it will be useful, but WITHOUT ANY
391WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
392A PARTICULAR PURPOSE. See the GNU General Public License for more details.
393
394You should have received a copy of the GNU General Public License along with
395this program. If not, see <http://www.gnu.org/licenses/>.
Note: See TracBrowser for help on using the repository browser.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette