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