Add VMS port updates from Hartmut Becker.

This commit is contained in:
Paul Smith 2013-09-22 00:48:05 -04:00
parent 7e77685bc3
commit 1a991ada47
17 changed files with 71 additions and 151 deletions

View File

@ -1,3 +1,24 @@
2013-09-22 Paul Smith <psmith@gnu.org>
VMS port updates by Hartmut Becker <becker.ismaning@freenet.de>
* makefile.com: Add output to the filelist.
* output.c (va_copy): Add an implementation of this macro for VMS.
* commands.c: Ensure filedef.h is #included before dep.h.
* dir.c: Ditto.
* file.c: Ditto.
* guile.c: Ditto.
* main.c: Ditto.
* misc.c: Ditto.
* read.c: Ditto.
* rule.c: Ditto.
* variable.c: Ditto.
* readme.vms: Renamed to README.VMS and updates for this release.
* Makefile.am: Ditto.
* NEWS: Ditto.
* README.template: Ditto.
* Makefile.DOS.template: Ditto.
2013-09-21 Paul Smith <psmith@gnu.org> 2013-09-21 Paul Smith <psmith@gnu.org>
* maintMakefile (check-alt-config): Create a target to test * maintMakefile (check-alt-config): Create a target to test

View File

@ -88,7 +88,7 @@ INCLUDES = -I$(srcdir)/glob -DLIBDIR=\"$(prefix)$(libdir)\" -DINCLUDEDIR=\"$(pre
BUILT_SOURCES = README build.sh-in BUILT_SOURCES = README build.sh-in
EXTRA_DIST = $(BUILT_SOURCES) $(man_MANS) README.customs remote-cstms.c make-stds.texi texinfo.tex SCOPTIONS SMakefile Makefile.ami README.Amiga config.ami amiga.c amiga.h NMakefile README.DOS configh.dos configure.bat makefile.com README.W32 build_w32.bat config.h-W32 subproc.bat make.lnk config.h-vms makefile.vms readme.vms vmsdir.h vmsfunctions.c vmsify.c gmk-default.scm gmk-default.h EXTRA_DIST = $(BUILT_SOURCES) $(man_MANS) README.customs remote-cstms.c make-stds.texi texinfo.tex SCOPTIONS SMakefile Makefile.ami README.Amiga config.ami amiga.c amiga.h NMakefile README.DOS configh.dos configure.bat makefile.com README.W32 build_w32.bat config.h-W32 subproc.bat make.lnk config.h-vms makefile.vms README.VMS vmsdir.h vmsfunctions.c vmsify.c gmk-default.scm gmk-default.h
SUBDIRS = glob doc SUBDIRS = glob doc
mkinstalldirs = ${exec_prefix}/bin/gmkdir -p mkinstalldirs = ${exec_prefix}/bin/gmkdir -p

View File

@ -82,7 +82,7 @@ EXTRA_DIST = README build.sh.in $(man_MANS) \
README.DOS Makefile.DOS configure.bat dosbuild.bat configh.dos\ README.DOS Makefile.DOS configure.bat dosbuild.bat configh.dos\
README.W32 NMakefile config.h.W32 build_w32.bat subproc.bat \ README.W32 NMakefile config.h.W32 build_w32.bat subproc.bat \
make_msvc_net2003.sln make_msvc_net2003.vcproj \ make_msvc_net2003.sln make_msvc_net2003.vcproj \
readme.vms makefile.vms makefile.com config.h-vms \ README.VMS makefile.vms makefile.com config.h-vms \
vmsdir.h vmsfunctions.c vmsify.c \ vmsdir.h vmsfunctions.c vmsify.c \
gmk-default.scm gmk-default.h gmk-default.scm gmk-default.h

4
NEWS
View File

@ -341,7 +341,7 @@ Version 3.81 (01 Apr 2006)
could be found on the system. could be found on the system.
* On VMS there is now support for case-sensitive filesystems such as ODS5. * On VMS there is now support for case-sensitive filesystems such as ODS5.
See the readme.vms file for information. See the README.VMS file for information.
* Parallel builds (-jN) no longer require a working Bourne shell on * Parallel builds (-jN) no longer require a working Bourne shell on
Windows platforms. They work even with the stock Windows shells, such Windows platforms. They work even with the stock Windows shells, such
@ -491,7 +491,7 @@ Version 3.79 (04 Apr 2000)
returned. returned.
* Hartmut Becker provided many updates for the VMS port of GNU make. * Hartmut Becker provided many updates for the VMS port of GNU make.
See the readme.vms file for more details. See the README.VMS file for more details.
Version 3.78 (22 Sep 1999) Version 3.78 (22 Sep 1999)

View File

@ -1,23 +1,33 @@
This is the VMS version of GNU Make, updated by Hartmut Becker This version of GNU make has been tested on
OpenVMS V8.3 (Alpha) and V8.4 (Integrity).
Changes are based on GNU make 3.82.
This version was built and tested on OpenVMS V7.3 (VAX), V7.3-2 (Alpha) and
V8.3-1H1 (I64).
Build instructions Build instructions
------------------
Make a 1st version Make a 1st version
$ @makefile.com ! ignore any compiler and/or linker warning $ @makefile.com ! ignore any compiler and/or linker warning
$ rena make.exe 1st-make.exe $ copy make.exe 1st-make.exe
Use the 1st version to generate a 2nd version Use the 1st version to generate a 2nd version
$ mc sys$disk:[]1st-make clean $ mc sys$disk:[]1st-make clean ! ignore any file not found messages
$ mc sys$disk:[]1st-make $ mc sys$disk:[]1st-make
Verify your 2nd version Verify your 2nd version
$ rena make.exe 2nd-make.exe $ copy make.exe 2nd-make.exe
$ mc sys$disk:[]2nd-make clean $ mc sys$disk:[]2nd-make clean
$ mc sys$disk:[]2nd-make $ mc sys$disk:[]2nd-make
Don't use the HP C V7.2-001 compiler, which has an incompatible change
how __STDC__ is defined. This results at least in compile time warnings.
Changes since GNU make 3.82
---------------------------
Changes (3.81.90) Fix build problems.
The new feature "Loadable objects" is not yet supported. If you need it,
please send a change request or submit a bug report.
The new option --output-sync (-O) is accepted but has no effect: GNU make
for VMS does not support running multiple commands simultaneously.
Changes for GNU make 3.82
Michael Gehre (at VISTEC-SEMI dot COM) supplied a fix for a problem with Michael Gehre (at VISTEC-SEMI dot COM) supplied a fix for a problem with
timestamps of object modules in OLBs. The timestamps were not correctly timestamps of object modules in OLBs. The timestamps were not correctly
@ -34,30 +44,6 @@ systems.
Build fixes for const-ified code in VMS specific sources. Build fixes for const-ified code in VMS specific sources.
Build notes:
- Try to avoid HP C V7.2-001, which has an incompatible change
how __STDC__ is defined. This results at least in compile time warnings.
- On V8.3-1H1, if you press Ctrl+C you may see a traceback, starting with
%SYSTEM-F-CONTROLC, operation completed under CTRL/C
%TRACE-F-TRACEBACK, symbolic stack dump follows
image module routine line rel PC abs PC
DECC$SHR C$SIGNAL gsignal 27991 0000000000001180
FFFFFFFF84AB2DA0
DECC$SHR C$SIGNAL raise 28048 0000000000001280
FFFFFFFF84AB2EA0
DECC$SHR C$SIGPENDING decc$$deliver_signals
12475 0000000000000890
FFFFFFFF84C13690
...
This looks like an incompatibility to the Alpha and VAX behavior, so it looks
like a problem in I64 VMS version(s).
- There is no clean build on VAX. In the environment I tested, I had to use GNU
make's alloca which produced a couple of compile time warnings. It seems too
much effort to work on a clean build on VAX.
A note on appending the redirected output. With this change, a simple mechanism A note on appending the redirected output. With this change, a simple mechanism
is implemented to make ">>" work in action lines. In VMS there is no simple is implemented to make ">>" work in action lines. In VMS there is no simple
feature like ">>" to have DCL command or program output redirected and appended feature like ">>" to have DCL command or program output redirected and appended
@ -78,117 +64,24 @@ happens. Pressing Ctrl+Y to abort make is one case. In case of Ctrl+Y the
associated command procedure is left in SYS$SCRATCH as well. Its name is associated command procedure is left in SYS$SCRATCH as well. Its name is
CMDxxxxx.COM. CMDxxxxx.COM.
Change in the Ctrl+Y handling Change in the Ctrl+Y handling. The CtrlY handler now uses $delprc to delete all
children. This way also actions with DCL commands will be stopped. As before
the CtrlY handler then sends SIGQUIT to itself, which is handled in common
code.
Ctrl+Y was: The CtrlY handler called $forcex for the current child. Change in deleteing temporary command files. Temporary command files are now
deleted in the vms child termination handler. That deletes them even if
Ctrl+Y changed: The CtrlY handler uses $delprc to delete all children. This way a Ctrl+C was pressed.
also actions with DCL commands will be stopped. As before Ctrl+Y then sends
SIGQUIT to itself, which is handled in common code.
Change in deleteing temporary command files
Temporary command files were deleted in the main line, after returning from the
vms child termination handler. If Ctrl+C was pressed, the handler is called but
did not return to main line.
Now, temporary command files are deleted in the vms child termination
handler. That deletes the them even if a Ctrl+C was pressed.
The behavior of pressing Ctrl+C is not changed. It still has only an effect, The behavior of pressing Ctrl+C is not changed. It still has only an effect,
after the current action is terminated. If that doesn't happen or takes too after the current action is terminated. If that doesn't happen or takes too
long, Ctrl+Y should be used instead. long, Ctrl+Y should be used instead.
Changes (3.80) Changes for GNU make 3.80
. In default.c define variable ARCH as IA64 for VMS on Itanium systems. . In default.c define variable ARCH as IA64 for VMS on Itanium systems.
. In makefile.vms avoid name collision for glob and globfree. . In makefile.vms avoid name collision for glob and globfree.
In newer version of the VMS CRTL there are glob and globfree implemented.
Compiling and linking may result in
%ILINK-W-MULDEFLNKG, symbol DECC$GLOBFREE has subsequent linkage definition
in module DECC$SHR file SYS$COMMON:[SYSLIB]DECC$SHR.EXE;1
%ILINK-W-MULDEF, symbol DECC$GLOBFREE multiply defined
in module DECC$SHR file SYS$COMMON:[SYSLIB]DECC$SHR.EXE;1
linker messages (and similar for DECC$GLOB). The messages just say, that
globfree is a known CRTL whose name was mapped by the compiler to
DECC$GLOBFREE. This is done in glob.c as well, so this name is defined
twice. One possible solution is to use the VMS versions of glob and
globfree. However, then the build environment needs to figure out if
there is a new CRTL supporting these or not. This adds complexity. Even
more, these functions return VMS file specifications, which is not
expected by the other make sources. There is a switch at run time (a VMS
logical DECC$GLOB_UNIX_STYLE), which can be set to get Unix style
names. This may conflict with other software. The recommended solution
for this is to set this switch just prior to calling main: in an
initialization routine. This adds more complexity and more VMS specific
code. It is easier to tell the compiler NOT to map the routine names
with a simple change in makefile.vms.
Some notes on case sensitive names in rules and on the disk. In the VMS
template for CONFIG.H case sensitive rules can be enabled with defining
WANT_CASE_SENSITIVE_TARGETS. For recent version of VMS there is a case
sensitive file system: ODS5. To make use of that, additionally un-defining
the HAVE_CASE_INSENSITIVE_FS is required. As these are C macros, different
versions of make need to be built to have any case sensitivity for VMS
working. Unfortunately, for ODS5 disks that's not all.
- Usually DCL upcases command line tokens (except strings) and usually the
file system is case blind (similar to how Windows systems work)
$ set proc/parse=extended/case=sensitive
preserves lower and UPPER on the command line and (for this process and all
sub-processes) enables case sensitivity in the file system
- Usually the CRTL tries to reverse what DCL did with command line tokens, it
lowercases all tokens (except strings)
$ define DECC$ARGV_PARSE_STYLE enable
passes (the now preserved) lower and UPPER from the command line to main()
- Usually the CRTL upcases the arguments to open() and friends
$ define DECC$EFS_CASE_PRESERVE enable
preserves the names as is.
It is important to know that not all VMS tools are ready for case sensitivity.
With this setup some tools may not work as expected. The setup should not
blindly be applied for all users in default login procedures.
Example? The poor coding gives a compiler message, showing that there are
different files:
$ dir
Directory ODS5DISK[HB]
A.c;1 B.c;1 c.c;1 X.c;1
x.c;1
Total of 5 files.
$ ods5make x.obj
cc /obj=x.obj x.c
foo(){lowercase_x();}
......^
%CC-I-IMPLICITFUNC, In this statement, the identifier "lowercase_x" is implicitly declared as a function.
at line number 1 in file ODS5DISK[HB]x.c;1
$ mc SYS$SYSDEVICE:[HARTMUT.MAKE_3_80P]ods5make X.obj
cc /obj=X.obj X.c
foo() {UPPERCASE_X();}
.......^
%CC-I-IMPLICITFUNC, In this statement, the identifier "UPPERCASE_X" is implicitly declared as a function.
at line number 1 in file ODS5DISK[HB]X.c;1
$ dir
Directory ODS5DISK[HB]
A.c;1 B.c;1 c.c;1 X.c;1
x.c;1 X.obj;1 x.obj;1
Total of 7 files.
$
This is the VMS port of GNU Make done by Hartmut.Becker@compaq.com. This is the VMS port of GNU Make done by Hartmut.Becker@compaq.com.

View File

@ -142,7 +142,7 @@ Ports
- See README.customs for details on integrating GNU make with the - See README.customs for details on integrating GNU make with the
Customs distributed build environment from the Pmake distribution. Customs distributed build environment from the Pmake distribution.
- See readme.vms for details about GNU Make on OpenVMS. - See README.VMS for details about GNU Make on OpenVMS.
- See README.Amiga for details about GNU Make on AmigaDOS. - See README.Amiga for details about GNU Make on AmigaDOS.

View File

@ -17,8 +17,8 @@ this program. If not, see <http://www.gnu.org/licenses/>. */
#include <dlfcn.h> #include <dlfcn.h>
#include "makeint.h" #include "makeint.h"
#include "dep.h"
#include "filedef.h" #include "filedef.h"
#include "dep.h"
#include "variable.h" #include "variable.h"
#include "job.h" #include "job.h"
#include "commands.h" #include "commands.h"

1
dir.c
View File

@ -16,6 +16,7 @@ this program. If not, see <http://www.gnu.org/licenses/>. */
#include "makeint.h" #include "makeint.h"
#include "hash.h" #include "hash.h"
#include "filedef.h"
#include "dep.h" #include "dep.h"
#ifdef HAVE_DIRENT_H #ifdef HAVE_DIRENT_H

2
file.c
View File

@ -18,8 +18,8 @@ this program. If not, see <http://www.gnu.org/licenses/>. */
#include <assert.h> #include <assert.h>
#include "dep.h"
#include "filedef.h" #include "filedef.h"
#include "dep.h"
#include "job.h" #include "job.h"
#include "commands.h" #include "commands.h"
#include "variable.h" #include "variable.h"

View File

@ -18,6 +18,7 @@ this program. If not, see <http://www.gnu.org/licenses/>. */
#include "gnumake.h" #include "gnumake.h"
#include "debug.h" #include "debug.h"
#include "filedef.h"
#include "dep.h" #include "dep.h"
#include "variable.h" #include "variable.h"

2
main.c
View File

@ -15,8 +15,8 @@ You should have received a copy of the GNU General Public License along with
this program. If not, see <http://www.gnu.org/licenses/>. */ this program. If not, see <http://www.gnu.org/licenses/>. */
#include "makeint.h" #include "makeint.h"
#include "dep.h"
#include "filedef.h" #include "filedef.h"
#include "dep.h"
#include "variable.h" #include "variable.h"
#include "job.h" #include "job.h"
#include "commands.h" #include "commands.h"

View File

@ -68,7 +68,7 @@ $ gosub check_cc_qual
$ endif $ endif
$ filelist = "alloca ar arscan commands default dir expand file function " + - $ filelist = "alloca ar arscan commands default dir expand file function " + -
"hash implicit job load main misc read remake remote-stub rule " + - "hash implicit job load main misc read remake remote-stub rule " + -
"signame variable version vmsfunctions vmsify vpath " + - "output signame variable version vmsfunctions vmsify vpath " + -
"[.glob]glob [.glob]fnmatch getopt1 getopt strcache" "[.glob]glob [.glob]fnmatch getopt1 getopt strcache"
$ copy config.h-vms config.h $ copy config.h-vms config.h
$ n=0 $ n=0

1
misc.c
View File

@ -15,6 +15,7 @@ You should have received a copy of the GNU General Public License along with
this program. If not, see <http://www.gnu.org/licenses/>. */ this program. If not, see <http://www.gnu.org/licenses/>. */
#include "makeint.h" #include "makeint.h"
#include "filedef.h"
#include "dep.h" #include "dep.h"
#include "debug.h" #include "debug.h"

View File

@ -52,6 +52,9 @@ unsigned int stdio_traced = 0;
especially for non-UNIX platforms: how to get bootstrapping to work, etc. especially for non-UNIX platforms: how to get bootstrapping to work, etc.
I don't want to take the time to do it right now. Use a hack to get a I don't want to take the time to do it right now. Use a hack to get a
useful version of vsnprintf() for Windows. */ useful version of vsnprintf() for Windows. */
#ifdef __VMS
# define va_copy(_d, _s) ((_d) = (_s))
#endif
#ifdef _MSC_VER #ifdef _MSC_VER
# define va_copy(_d, _s) ((_d) = (_s)) # define va_copy(_d, _s) ((_d) = (_s))
# define snprintf msc_vsnprintf # define snprintf msc_vsnprintf

2
read.c
View File

@ -20,8 +20,8 @@ this program. If not, see <http://www.gnu.org/licenses/>. */
#include <glob.h> #include <glob.h>
#include "dep.h"
#include "filedef.h" #include "filedef.h"
#include "dep.h"
#include "job.h" #include "job.h"
#include "commands.h" #include "commands.h"
#include "variable.h" #include "variable.h"

2
rule.c
View File

@ -18,8 +18,8 @@ this program. If not, see <http://www.gnu.org/licenses/>. */
#include <assert.h> #include <assert.h>
#include "dep.h"
#include "filedef.h" #include "filedef.h"
#include "dep.h"
#include "job.h" #include "job.h"
#include "commands.h" #include "commands.h"
#include "variable.h" #include "variable.h"

View File

@ -18,8 +18,8 @@ this program. If not, see <http://www.gnu.org/licenses/>. */
#include <assert.h> #include <assert.h>
#include "dep.h"
#include "filedef.h" #include "filedef.h"
#include "dep.h"
#include "job.h" #include "job.h"
#include "commands.h" #include "commands.h"
#include "variable.h" #include "variable.h"