| 1 | This is the VMS port of GNU Make done by Hartmut.Becker@compaq.com.
|
|---|
| 2 |
|
|---|
| 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.
|
|---|
| 6 |
|
|---|
| 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.
|
|---|
| 13 |
|
|---|
| 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:
|
|---|
| 21 |
|
|---|
| 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.
|
|---|
| 27 |
|
|---|
| 28 |
|
|---|
| 29 | New in 3.78.1:
|
|---|
| 30 |
|
|---|
| 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.
|
|---|
| 38 |
|
|---|
| 39 | Added some switches to reflect latest features of DECC. Modifications in
|
|---|
| 40 | makefile.vms.
|
|---|
| 41 |
|
|---|
| 42 | Set some definitions to reflect latest features of DECC. Modifications in
|
|---|
| 43 | config.h-vms (which is copied to config.h).
|
|---|
| 44 |
|
|---|
| 45 | Added extern strcmpi declaration to avoid 'implicitly declared' messages.
|
|---|
| 46 | Modification in make.h.
|
|---|
| 47 |
|
|---|
| 48 | Default rule for C++, conditionals for gcc (GCC_IS_NATIVE) or DEC/Digital/
|
|---|
| 49 | Compaq c/c++ compilers. Modifications in default.c.
|
|---|
| 50 |
|
|---|
| 51 | Usage of opendir() and friends, suppress file version. Modifications in dir.c.
|
|---|
| 52 |
|
|---|
| 53 | Added VMS specific code to handle ctrl+c and ctrl+y to abort make.
|
|---|
| 54 | Modifications in job.c.
|
|---|
| 55 |
|
|---|
| 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:
|
|---|
| 59 |
|
|---|
| 60 | .SUFFIXES :
|
|---|
| 61 | .SUFFIXES : .class .java
|
|---|
| 62 | .java.class :
|
|---|
| 63 | javac "$<
|
|---|
| 64 | HelloWorld.class : HelloWorld.java
|
|---|
| 65 |
|
|---|
| 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.
|
|---|
| 70 |
|
|---|
| 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.
|
|---|
| 75 |
|
|---|
| 76 | Made some minor modifications to the bootstrap build makefile.com.
|
|---|
| 77 | |
|---|
| 78 |
|
|---|
| 79 | This is the VMS port of GNU Make.
|
|---|
| 80 |
|
|---|
| 81 | It is based on the VMS port of GNU Make 3.60 by Mike Moretti.
|
|---|
| 82 |
|
|---|
| 83 | This port was done by Klaus Kämpf <kkaempf@rmi.de>
|
|---|
| 84 |
|
|---|
| 85 | There is first-level support available from proGIS Software, Germany.
|
|---|
| 86 | Visit their web-site at http://www.progis.de to get information
|
|---|
| 87 | about other vms software and forthcoming updates to gnu make.
|
|---|
| 88 |
|
|---|
| 89 | New for 3.77:
|
|---|
| 90 |
|
|---|
| 91 | /bin/sh style I/O redirection is supported. You can now write lines like
|
|---|
| 92 | mcr sys$disk:[]program.exe < input.txt > output.txt &> error.txt
|
|---|
| 93 |
|
|---|
| 94 | Makefile variables are looked up in the current environment. You can set
|
|---|
| 95 | symbols or logicals in DCL and evaluate them in the Makefile via
|
|---|
| 96 | $(<name-of-symbol-or-logical>). Variables defined in the Makefile
|
|---|
| 97 | override VMS symbols/logicals !
|
|---|
| 98 |
|
|---|
| 99 | Functions for file names are working now. See the GNU Make manual for
|
|---|
| 100 | $(dir ...) and $(wildcard ...). Unix-style and VMS-style names are
|
|---|
| 101 | supported as arguments.
|
|---|
| 102 |
|
|---|
| 103 | The default rules are set up for GNU C. Building an executable from a
|
|---|
| 104 | single source file is as easy as 'make file.exe'.
|
|---|
| 105 |
|
|---|
| 106 | The variable $(ARCH) is predefined as ALPHA or VAX resp. Makefiles for
|
|---|
| 107 | different VMS systems can now be written by checking $(ARCH) as in
|
|---|
| 108 | ifeq ($(ARCH),ALPHA)
|
|---|
| 109 | $(ECHO) "On the Alpha"
|
|---|
| 110 | else
|
|---|
| 111 | $(ECHO) "On the VAX"
|
|---|
| 112 | endif
|
|---|
| 113 |
|
|---|
| 114 | Command lines of excessive length are correctly broken and written to a
|
|---|
| 115 | batch file in sys$scratch for later execution. There's no limit to the
|
|---|
| 116 | lengths of commands (and no need for .opt files :-) any more.
|
|---|
| 117 |
|
|---|
| 118 | Empty commands are handled correctly and don't end in a new DCL process.
|
|---|
| 119 |
|
|---|
| 120 |
|
|---|
| 121 | New for 3.76:
|
|---|
| 122 |
|
|---|
| 123 | John W. Eaton has updated the VMS port to support libraries and VPATH.
|
|---|
| 124 |
|
|---|
| 125 |
|
|---|
| 126 | To build Make, simply type @makefile. This should compile all the
|
|---|
| 127 | necessary files and link Make. There is also a file called
|
|---|
| 128 | makefile.vms. If you already have GNU Make built you can just use
|
|---|
| 129 | Make with this makefile to rebuild.
|
|---|
| 130 |
|
|---|
| 131 | Here are some notes about GNU Make for VMS:
|
|---|
| 132 |
|
|---|
| 133 | The cd command is supported if it's called as $(CD). This invokes
|
|---|
| 134 | the 'builtin_cd' command which changes the directory.
|
|---|
| 135 | Calling 'set def' doesn't do the trick, since a sub-shell is
|
|---|
| 136 | spawned for this command, the directory is changed *in this sub-shell*
|
|---|
| 137 | and the sub-shell ends.
|
|---|
| 138 |
|
|---|
| 139 | Libraries are not supported. They were in GNU Make 3.60 but somehow I
|
|---|
| 140 | didn't care porting the code. If there is enough interest, I'll do it at
|
|---|
| 141 | some later time.
|
|---|
| 142 |
|
|---|
| 143 | The variable $^ separates files with commas instead of spaces (It's the
|
|---|
| 144 | natural thing to do for VMS).
|
|---|
| 145 |
|
|---|
| 146 | See defaults.c for VMS default suffixes and my definitions for default
|
|---|
| 147 | rules and variables.
|
|---|
| 148 |
|
|---|
| 149 | The shell function is not implemented yet.
|
|---|
| 150 |
|
|---|
| 151 | Load average routines haven't been implemented for VMS yet.
|
|---|
| 152 |
|
|---|
| 153 | The default include directory for including other makefiles is
|
|---|
| 154 | SYS$SYSROOT:[SYSLIB] (I don't remember why I didn't just use
|
|---|
| 155 | SYS$LIBRARY: instead; maybe it wouldn't work that way).
|
|---|
| 156 |
|
|---|
| 157 | The default makefiles make looks for are: makefile.vms, gnumakefile,
|
|---|
| 158 | makefile., and gnumakefile. .
|
|---|
| 159 |
|
|---|
| 160 | The stat() function and handling of time stamps in VMS is broken, so I
|
|---|
| 161 | replaced it with a hack in vmsfunctions.c. I will provide a full rewrite
|
|---|
| 162 | somewhere in the future. Be warned, the time resolution inside make is
|
|---|
| 163 | less than what vms provides. This might be a problem on the faster Alphas.
|
|---|
| 164 |
|
|---|
| 165 | You can use a : in a filename only if you preceed it with a backslash ('\').
|
|---|
| 166 | E.g.- hobbes\:[bogas.files]
|
|---|
| 167 |
|
|---|
| 168 | Make ignores success, informational, or warning errors (-S-, -I-, or
|
|---|
| 169 | -W-). But it will stop on -E- and -F- errors. (unless you do something
|
|---|
| 170 | to override this in your makefile, or whatever).
|
|---|
| 171 |
|
|---|
| 172 | Remote stuff isn't implemented yet.
|
|---|
| 173 |
|
|---|
| 174 | Multiple line DCL commands, such as "if" statements, must be put inside
|
|---|
| 175 | command files. You can run a command file by using \@.
|
|---|
| 176 |
|
|---|
| 177 |
|
|---|
| 178 | VMS changes made for 3.74.3
|
|---|
| 179 |
|
|---|
| 180 | Lots of default settings are adapted for VMS. See default.c.
|
|---|
| 181 |
|
|---|
| 182 | Long command lines are now converted to command files.
|
|---|
| 183 |
|
|---|
| 184 | Comma (',') as a separator is now allowed. See makefile.vms for an example.
|
|---|