VirtualBox

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

Last change on this file since 2074 was 1993, checked in by bird, 16 years ago

Merged in current GNU Make code (CVS from 2008-10-28). Ref #55.

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