From 1a991ada47e0c98ddcb4b2d30b1cf14e4b6a949a Mon Sep 17 00:00:00 2001 From: Paul Smith Date: Sun, 22 Sep 2013 00:48:05 -0400 Subject: Add VMS port updates from Hartmut Becker. --- ChangeLog | 21 +++ Makefile.DOS.template | 2 +- Makefile.am | 2 +- NEWS | 4 +- README.VMS | 284 ++++++++++++++++++++++++++++++++++++ README.template | 2 +- commands.c | 2 +- dir.c | 1 + file.c | 2 +- guile.c | 1 + main.c | 2 +- makefile.com | 2 +- misc.c | 1 + output.c | 7 +- read.c | 2 +- readme.vms | 391 -------------------------------------------------- rule.c | 2 +- variable.c | 2 +- 18 files changed, 325 insertions(+), 405 deletions(-) create mode 100644 README.VMS delete mode 100644 readme.vms diff --git a/ChangeLog b/ChangeLog index 7db0910..8905116 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,24 @@ +2013-09-22 Paul Smith + + VMS port updates by Hartmut Becker + + * 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 * maintMakefile (check-alt-config): Create a target to test diff --git a/Makefile.DOS.template b/Makefile.DOS.template index a5c7ece..c8e7043 100644 --- a/Makefile.DOS.template +++ b/Makefile.DOS.template @@ -88,7 +88,7 @@ INCLUDES = -I$(srcdir)/glob -DLIBDIR=\"$(prefix)$(libdir)\" -DINCLUDEDIR=\"$(pre 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 mkinstalldirs = ${exec_prefix}/bin/gmkdir -p diff --git a/Makefile.am b/Makefile.am index 5fd1b62..5156f47 100644 --- a/Makefile.am +++ b/Makefile.am @@ -82,7 +82,7 @@ EXTRA_DIST = README build.sh.in $(man_MANS) \ README.DOS Makefile.DOS configure.bat dosbuild.bat configh.dos\ README.W32 NMakefile config.h.W32 build_w32.bat subproc.bat \ 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 \ gmk-default.scm gmk-default.h diff --git a/NEWS b/NEWS index b1ec073..fd0a563 100644 --- a/NEWS +++ b/NEWS @@ -341,7 +341,7 @@ Version 3.81 (01 Apr 2006) could be found on the system. * 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 Windows platforms. They work even with the stock Windows shells, such @@ -491,7 +491,7 @@ Version 3.79 (04 Apr 2000) returned. * 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) diff --git a/README.VMS b/README.VMS new file mode 100644 index 0000000..f7b064d --- /dev/null +++ b/README.VMS @@ -0,0 +1,284 @@ +This version of GNU make has been tested on +OpenVMS V8.3 (Alpha) and V8.4 (Integrity). + +Build instructions +------------------ +Make a 1st version + $ @makefile.com ! ignore any compiler and/or linker warning + $ copy make.exe 1st-make.exe + Use the 1st version to generate a 2nd version + $ mc sys$disk:[]1st-make clean ! ignore any file not found messages + $ mc sys$disk:[]1st-make + Verify your 2nd version + $ copy make.exe 2nd-make.exe + $ mc sys$disk:[]2nd-make clean + $ 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 +--------------------------- + +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 +timestamps of object modules in OLBs. The timestamps were not correctly +adjusted to GMT based time, if the local VMS time was using a daylight saving +algorithm and if daylight saving was switched off. + +John Eisenbraun (at HP dot COM) supplied fixes and and an enhancement to append +output redirection in action lines. + +Rework of ctrl+c and ctrl+y handling. + +Fix a problem with cached strings, which showed on case-insensitive file +systems. + +Build fixes for const-ified code in VMS specific sources. + +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 +feature like ">>" to have DCL command or program output redirected and appended +to a file. GNU make for VMS already implements the redirection of output. If +such a redirection is detected, an ">" on the action line, GNU make creates a +DCL command procedure to execute the action and to redirect its output. Based +on that, now ">>" is also recognized and a similar but different command +procedure is created to implement the append. The main idea here is to create a +temporary file which collects the output and which is appended to the wanted +output file. Then the temporary file is deleted. This is all done in the +command procedure to keep changes in make small and simple. This obviously has +some limitations but it seems good enough compared with the current ">" +implementation. (And in my opinion, redirection is not really what GNU make has +to do.) With this approach, it may happen that the temporary file is not yet +appended and is left in SYS$SCRATCH. The temporary file names look like +"CMDxxxxx.". Any time the created command procedure can not complete, this +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 +CMDxxxxx.COM. + +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. + +Change in deleteing temporary command files. Temporary command files are now +deleted in the vms child termination handler. That deletes them even if +a Ctrl+C was pressed. + +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 +long, Ctrl+Y should be used instead. + +Changes for GNU make 3.80 + +. In default.c define variable ARCH as IA64 for VMS on Itanium systems. + +. In makefile.vms avoid name collision for glob and globfree. + +This is the VMS port of GNU Make done by Hartmut.Becker@compaq.com. + +It is based on the specific version 3.77k and on 3.78.1. 3.77k was done +by Klaus Kämpf , the code was based on the VMS port of +GNU Make 3.60 by Mike Moretti. + +It was ported on OpenVMS/Alpha V7.1, DECC V5.7-006. It was re-build and +tested on OpenVMS/Alpha V7.2, OpenVMS/VAX 7.1 and 5.5-2. Different +versions of DECC were used. VAXC was tried: it fails; but it doesn't +seem worth to get it working. There are still some PTRMISMATCH warnings +during the compile. Although perl is working on VMS the test scripts +don't work. The function $shell is still missing. + +There is a known bug in some of the VMS CRTLs. It is in the shipped +versions of VMS V7.2 and V7.2-1 and in the currently (October 1999) +available ECOs for VMS V7.1 and newer versions. It is fixed in versions +shipped with newer VMS versions and all ECO kits after October 1999. It +only shows up during the daylight saving time period (DST): stat() +returns a modification time 1 hour ahead. This results in GNU make +warning messages. For a just created source you will see: + + $ gmake x.exe + gmake.exe;1: *** Warning: File 'x.c' has modification time in the future (940582863 > 940579269) + cc /obj=x.obj x.c + link x.obj /exe=x.exe + gmake.exe;1: *** Warning: Clock skew detected. Your build may be incomplete. + + +New in 3.78.1: + +Fix a problem with automatically remaking makefiles. GNU make uses an +execve to restart itself after a successful remake of the makefile. On +UNIX systems execve replaces the running program with a new one and +resets all signal handling to the default. On VMS execve creates a child +process, signal and exit handlers of the parent are still active, and, +unfortunately, corrupt the exit code from the child. Fix in job.c: +ignore SIGCHLD. + +Added some switches to reflect latest features of DECC. Modifications in +makefile.vms. + +Set some definitions to reflect latest features of DECC. Modifications in +config.h-vms (which is copied to config.h). + +Added extern strcmpi declaration to avoid 'implicitly declared' messages. +Modification in make.h. + +Default rule for C++, conditionals for gcc (GCC_IS_NATIVE) or DEC/Digital/ +Compaq c/c++ compilers. Modifications in default.c. + +Usage of opendir() and friends, suppress file version. Modifications in dir.c. + +Added VMS specific code to handle ctrl+c and ctrl+y to abort make. +Modifications in job.c. + +Added support to have case sensitive targets and dependencies but to +still use case blind file names. This is especially useful for Java +makefiles on VMS: + + .SUFFIXES : + .SUFFIXES : .class .java + .java.class : + javac "$< + HelloWorld.class : HelloWorld.java + +A new macro WANT_CASE_SENSITIVE_TARGETS in config.h-vms was introduced. +It needs to be enabled to get this feature; default is disabled. The +macro HAVE_CASE_INSENSITIVE_FS must not be touched: it is still enabled. +Modifications in file.c and config.h-vms. + +Bootstrap make to start building make is still makefile.com, but make +needs to be re-made with a make to make a correct version: ignore all +possible warnings, delete all objects, rename make.exe to a different +name and run it. + +Made some minor modifications to the bootstrap build makefile.com. + +This is the VMS port of GNU Make. + +It is based on the VMS port of GNU Make 3.60 by Mike Moretti. + +This port was done by Klaus Kämpf + +There is first-level support available from proGIS Software, Germany. +Visit their web-site at http://www.progis.de to get information +about other vms software and forthcoming updates to gnu make. + +New for 3.77: + +/bin/sh style I/O redirection is supported. You can now write lines like + mcr sys$disk:[]program.exe < input.txt > output.txt &> error.txt + +Makefile variables are looked up in the current environment. You can set +symbols or logicals in DCL and evaluate them in the Makefile via +$(). Variables defined in the Makefile +override VMS symbols/logicals ! + +Functions for file names are working now. See the GNU Make manual for +$(dir ...) and $(wildcard ...). Unix-style and VMS-style names are +supported as arguments. + +The default rules are set up for GNU C. Building an executable from a +single source file is as easy as 'make file.exe'. + +The variable $(ARCH) is predefined as ALPHA or VAX resp. Makefiles for +different VMS systems can now be written by checking $(ARCH) as in + ifeq ($(ARCH),ALPHA) + $(ECHO) "On the Alpha" + else + $(ECHO) "On the VAX" + endif + +Command lines of excessive length are correctly broken and written to a +batch file in sys$scratch for later execution. There's no limit to the +lengths of commands (and no need for .opt files :-) any more. + +Empty commands are handled correctly and don't end in a new DCL process. + + +New for 3.76: + +John W. Eaton has updated the VMS port to support libraries and VPATH. + + +To build Make, simply type @makefile. This should compile all the +necessary files and link Make. There is also a file called +makefile.vms. If you already have GNU Make built you can just use +Make with this makefile to rebuild. + +Here are some notes about GNU Make for VMS: + +The cd command is supported if it's called as $(CD). This invokes +the 'builtin_cd' command which changes the directory. +Calling 'set def' doesn't do the trick, since a sub-shell is +spawned for this command, the directory is changed *in this sub-shell* +and the sub-shell ends. + +Libraries are not supported. They were in GNU Make 3.60 but somehow I +didn't care porting the code. If there is enough interest, I'll do it at +some later time. + +The variable $^ separates files with commas instead of spaces (It's the +natural thing to do for VMS). + +See defaults.c for VMS default suffixes and my definitions for default +rules and variables. + +The shell function is not implemented yet. + +Load average routines haven't been implemented for VMS yet. + +The default include directory for including other makefiles is +SYS$SYSROOT:[SYSLIB] (I don't remember why I didn't just use +SYS$LIBRARY: instead; maybe it wouldn't work that way). + +The default makefiles make looks for are: makefile.vms, gnumakefile, +makefile., and gnumakefile. . + +The stat() function and handling of time stamps in VMS is broken, so I +replaced it with a hack in vmsfunctions.c. I will provide a full rewrite +somewhere in the future. Be warned, the time resolution inside make is +less than what vms provides. This might be a problem on the faster Alphas. + +You can use a : in a filename only if you precede it with a backslash ('\'). +E.g.- hobbes\:[bogas.files] + +Make ignores success, informational, or warning errors (-S-, -I-, or +-W-). But it will stop on -E- and -F- errors. (unless you do something +to override this in your makefile, or whatever). + +Remote stuff isn't implemented yet. + +Multiple line DCL commands, such as "if" statements, must be put inside +command files. You can run a command file by using \@. + + +VMS changes made for 3.74.3 + +Lots of default settings are adapted for VMS. See default.c. + +Long command lines are now converted to command files. + +Comma (',') as a separator is now allowed. See makefile.vms for an example. + +------------------------------------------------------------------------------- +Copyright (C) 1996-2013 Free Software Foundation, Inc. +This file is part of GNU Make. + +GNU Make is free software; you can redistribute it and/or modify it under the +terms of the GNU General Public License as published by the Free Software +Foundation; either version 3 of the License, or (at your option) any later +version. + +GNU Make is distributed in the hope that it will be useful, but WITHOUT ANY +WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR +A PARTICULAR PURPOSE. See the GNU General Public License for more details. + +You should have received a copy of the GNU General Public License along with +this program. If not, see . diff --git a/README.template b/README.template index 50d9e55..8458406 100644 --- a/README.template +++ b/README.template @@ -142,7 +142,7 @@ Ports - See README.customs for details on integrating GNU make with the 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. diff --git a/commands.c b/commands.c index e83cc9b..f910358 100644 --- a/commands.c +++ b/commands.c @@ -17,8 +17,8 @@ this program. If not, see . */ #include #include "makeint.h" -#include "dep.h" #include "filedef.h" +#include "dep.h" #include "variable.h" #include "job.h" #include "commands.h" diff --git a/dir.c b/dir.c index 0c93ac9..d046bd9 100644 --- a/dir.c +++ b/dir.c @@ -16,6 +16,7 @@ this program. If not, see . */ #include "makeint.h" #include "hash.h" +#include "filedef.h" #include "dep.h" #ifdef HAVE_DIRENT_H diff --git a/file.c b/file.c index c8e19e5..b209d88 100644 --- a/file.c +++ b/file.c @@ -18,8 +18,8 @@ this program. If not, see . */ #include -#include "dep.h" #include "filedef.h" +#include "dep.h" #include "job.h" #include "commands.h" #include "variable.h" diff --git a/guile.c b/guile.c index f5637fd..6c9fb75 100644 --- a/guile.c +++ b/guile.c @@ -18,6 +18,7 @@ this program. If not, see . */ #include "gnumake.h" #include "debug.h" +#include "filedef.h" #include "dep.h" #include "variable.h" diff --git a/main.c b/main.c index a180ee9..776ba7c 100644 --- a/main.c +++ b/main.c @@ -15,8 +15,8 @@ You should have received a copy of the GNU General Public License along with this program. If not, see . */ #include "makeint.h" -#include "dep.h" #include "filedef.h" +#include "dep.h" #include "variable.h" #include "job.h" #include "commands.h" diff --git a/makefile.com b/makefile.com index fee8d5e..6359c47 100644 --- a/makefile.com +++ b/makefile.com @@ -68,7 +68,7 @@ $ gosub check_cc_qual $ endif $ filelist = "alloca ar arscan commands default dir expand file function " + - "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" $ copy config.h-vms config.h $ n=0 diff --git a/misc.c b/misc.c index d915032..bc54ce6 100644 --- a/misc.c +++ b/misc.c @@ -15,6 +15,7 @@ You should have received a copy of the GNU General Public License along with this program. If not, see . */ #include "makeint.h" +#include "filedef.h" #include "dep.h" #include "debug.h" diff --git a/output.c b/output.c index f58b816..3cf7afb 100644 --- a/output.c +++ b/output.c @@ -52,9 +52,12 @@ unsigned int stdio_traced = 0; 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 useful version of vsnprintf() for Windows. */ +#ifdef __VMS +# define va_copy(_d, _s) ((_d) = (_s)) +#endif #ifdef _MSC_VER -#define va_copy(_d, _s) ((_d) = (_s)) -#define snprintf msc_vsnprintf +# define va_copy(_d, _s) ((_d) = (_s)) +# define snprintf msc_vsnprintf static int msc_vsnprintf (char *str, size_t size, const char *format, va_list ap) { diff --git a/read.c b/read.c index f8542b0..a4ca72d 100644 --- a/read.c +++ b/read.c @@ -20,8 +20,8 @@ this program. If not, see . */ #include -#include "dep.h" #include "filedef.h" +#include "dep.h" #include "job.h" #include "commands.h" #include "variable.h" diff --git a/readme.vms b/readme.vms deleted file mode 100644 index f985959..0000000 --- a/readme.vms +++ /dev/null @@ -1,391 +0,0 @@ -This is the VMS version of GNU Make, updated by Hartmut Becker - -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 -Make a 1st version - $ @makefile.com ! ignore any compiler and/or linker warning - $ rena make.exe 1st-make.exe -Use the 1st version to generate a 2nd version - $ mc sys$disk:[]1st-make clean - $ mc sys$disk:[]1st-make -Verify your 2nd version - $ rena make.exe 2nd-make.exe - $ mc sys$disk:[]2nd-make clean - $ mc sys$disk:[]2nd-make - -Changes (3.81.90) - -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 -adjusted to GMT based time, if the local VMS time was using a daylight saving -algorithm and if daylight saving was switched off. - -John Eisenbraun (at HP dot COM) supplied fixes and and an enhancement to append -output redirection in action lines. - -Rework of ctrl+c and ctrl+y handling. - -Fix a problem with cached strings, which showed on case-insensitive file -systems. - -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 -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 -to a file. GNU make for VMS already implements the redirection of output. If -such a redirection is detected, an ">" on the action line, GNU make creates a -DCL command procedure to execute the action and to redirect its output. Based -on that, now ">>" is also recognized and a similar but different command -procedure is created to implement the append. The main idea here is to create a -temporary file which collects the output and which is appended to the wanted -output file. Then the temporary file is deleted. This is all done in the -command procedure to keep changes in make small and simple. This obviously has -some limitations but it seems good enough compared with the current ">" -implementation. (And in my opinion, redirection is not really what GNU make has -to do.) With this approach, it may happen that the temporary file is not yet -appended and is left in SYS$SCRATCH. The temporary file names look like -"CMDxxxxx.". Any time the created command procedure can not complete, this -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 -CMDxxxxx.COM. - -Change in the Ctrl+Y handling - -Ctrl+Y was: The CtrlY handler called $forcex for the current child. - -Ctrl+Y changed: The CtrlY handler uses $delprc to delete all children. This way -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, -after the current action is terminated. If that doesn't happen or takes too -long, Ctrl+Y should be used instead. - -Changes (3.80) - -. In default.c define variable ARCH as IA64 for VMS on Itanium systems. - -. 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. - -It is based on the specific version 3.77k and on 3.78.1. 3.77k was done -by Klaus Kämpf , the code was based on the VMS port of -GNU Make 3.60 by Mike Moretti. - -It was ported on OpenVMS/Alpha V7.1, DECC V5.7-006. It was re-build and -tested on OpenVMS/Alpha V7.2, OpenVMS/VAX 7.1 and 5.5-2. Different -versions of DECC were used. VAXC was tried: it fails; but it doesn't -seem worth to get it working. There are still some PTRMISMATCH warnings -during the compile. Although perl is working on VMS the test scripts -don't work. The function $shell is still missing. - -There is a known bug in some of the VMS CRTLs. It is in the shipped -versions of VMS V7.2 and V7.2-1 and in the currently (October 1999) -available ECOs for VMS V7.1 and newer versions. It is fixed in versions -shipped with newer VMS versions and all ECO kits after October 1999. It -only shows up during the daylight saving time period (DST): stat() -returns a modification time 1 hour ahead. This results in GNU make -warning messages. For a just created source you will see: - - $ gmake x.exe - gmake.exe;1: *** Warning: File 'x.c' has modification time in the future (940582863 > 940579269) - cc /obj=x.obj x.c - link x.obj /exe=x.exe - gmake.exe;1: *** Warning: Clock skew detected. Your build may be incomplete. - - -New in 3.78.1: - -Fix a problem with automatically remaking makefiles. GNU make uses an -execve to restart itself after a successful remake of the makefile. On -UNIX systems execve replaces the running program with a new one and -resets all signal handling to the default. On VMS execve creates a child -process, signal and exit handlers of the parent are still active, and, -unfortunately, corrupt the exit code from the child. Fix in job.c: -ignore SIGCHLD. - -Added some switches to reflect latest features of DECC. Modifications in -makefile.vms. - -Set some definitions to reflect latest features of DECC. Modifications in -config.h-vms (which is copied to config.h). - -Added extern strcmpi declaration to avoid 'implicitly declared' messages. -Modification in make.h. - -Default rule for C++, conditionals for gcc (GCC_IS_NATIVE) or DEC/Digital/ -Compaq c/c++ compilers. Modifications in default.c. - -Usage of opendir() and friends, suppress file version. Modifications in dir.c. - -Added VMS specific code to handle ctrl+c and ctrl+y to abort make. -Modifications in job.c. - -Added support to have case sensitive targets and dependencies but to -still use case blind file names. This is especially useful for Java -makefiles on VMS: - - .SUFFIXES : - .SUFFIXES : .class .java - .java.class : - javac "$< - HelloWorld.class : HelloWorld.java - -A new macro WANT_CASE_SENSITIVE_TARGETS in config.h-vms was introduced. -It needs to be enabled to get this feature; default is disabled. The -macro HAVE_CASE_INSENSITIVE_FS must not be touched: it is still enabled. -Modifications in file.c and config.h-vms. - -Bootstrap make to start building make is still makefile.com, but make -needs to be re-made with a make to make a correct version: ignore all -possible warnings, delete all objects, rename make.exe to a different -name and run it. - -Made some minor modifications to the bootstrap build makefile.com. - -This is the VMS port of GNU Make. - -It is based on the VMS port of GNU Make 3.60 by Mike Moretti. - -This port was done by Klaus Kämpf - -There is first-level support available from proGIS Software, Germany. -Visit their web-site at http://www.progis.de to get information -about other vms software and forthcoming updates to gnu make. - -New for 3.77: - -/bin/sh style I/O redirection is supported. You can now write lines like - mcr sys$disk:[]program.exe < input.txt > output.txt &> error.txt - -Makefile variables are looked up in the current environment. You can set -symbols or logicals in DCL and evaluate them in the Makefile via -$(). Variables defined in the Makefile -override VMS symbols/logicals ! - -Functions for file names are working now. See the GNU Make manual for -$(dir ...) and $(wildcard ...). Unix-style and VMS-style names are -supported as arguments. - -The default rules are set up for GNU C. Building an executable from a -single source file is as easy as 'make file.exe'. - -The variable $(ARCH) is predefined as ALPHA or VAX resp. Makefiles for -different VMS systems can now be written by checking $(ARCH) as in - ifeq ($(ARCH),ALPHA) - $(ECHO) "On the Alpha" - else - $(ECHO) "On the VAX" - endif - -Command lines of excessive length are correctly broken and written to a -batch file in sys$scratch for later execution. There's no limit to the -lengths of commands (and no need for .opt files :-) any more. - -Empty commands are handled correctly and don't end in a new DCL process. - - -New for 3.76: - -John W. Eaton has updated the VMS port to support libraries and VPATH. - - -To build Make, simply type @makefile. This should compile all the -necessary files and link Make. There is also a file called -makefile.vms. If you already have GNU Make built you can just use -Make with this makefile to rebuild. - -Here are some notes about GNU Make for VMS: - -The cd command is supported if it's called as $(CD). This invokes -the 'builtin_cd' command which changes the directory. -Calling 'set def' doesn't do the trick, since a sub-shell is -spawned for this command, the directory is changed *in this sub-shell* -and the sub-shell ends. - -Libraries are not supported. They were in GNU Make 3.60 but somehow I -didn't care porting the code. If there is enough interest, I'll do it at -some later time. - -The variable $^ separates files with commas instead of spaces (It's the -natural thing to do for VMS). - -See defaults.c for VMS default suffixes and my definitions for default -rules and variables. - -The shell function is not implemented yet. - -Load average routines haven't been implemented for VMS yet. - -The default include directory for including other makefiles is -SYS$SYSROOT:[SYSLIB] (I don't remember why I didn't just use -SYS$LIBRARY: instead; maybe it wouldn't work that way). - -The default makefiles make looks for are: makefile.vms, gnumakefile, -makefile., and gnumakefile. . - -The stat() function and handling of time stamps in VMS is broken, so I -replaced it with a hack in vmsfunctions.c. I will provide a full rewrite -somewhere in the future. Be warned, the time resolution inside make is -less than what vms provides. This might be a problem on the faster Alphas. - -You can use a : in a filename only if you precede it with a backslash ('\'). -E.g.- hobbes\:[bogas.files] - -Make ignores success, informational, or warning errors (-S-, -I-, or --W-). But it will stop on -E- and -F- errors. (unless you do something -to override this in your makefile, or whatever). - -Remote stuff isn't implemented yet. - -Multiple line DCL commands, such as "if" statements, must be put inside -command files. You can run a command file by using \@. - - -VMS changes made for 3.74.3 - -Lots of default settings are adapted for VMS. See default.c. - -Long command lines are now converted to command files. - -Comma (',') as a separator is now allowed. See makefile.vms for an example. - -------------------------------------------------------------------------------- -Copyright (C) 1996-2013 Free Software Foundation, Inc. -This file is part of GNU Make. - -GNU Make is free software; you can redistribute it and/or modify it under the -terms of the GNU General Public License as published by the Free Software -Foundation; either version 3 of the License, or (at your option) any later -version. - -GNU Make is distributed in the hope that it will be useful, but WITHOUT ANY -WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR -A PARTICULAR PURPOSE. See the GNU General Public License for more details. - -You should have received a copy of the GNU General Public License along with -this program. If not, see . diff --git a/rule.c b/rule.c index 5991c80..cb35537 100644 --- a/rule.c +++ b/rule.c @@ -18,8 +18,8 @@ this program. If not, see . */ #include -#include "dep.h" #include "filedef.h" +#include "dep.h" #include "job.h" #include "commands.h" #include "variable.h" diff --git a/variable.c b/variable.c index 74e866a..2ff14b6 100644 --- a/variable.c +++ b/variable.c @@ -18,8 +18,8 @@ this program. If not, see . */ #include -#include "dep.h" #include "filedef.h" +#include "dep.h" #include "job.h" #include "commands.h" #include "variable.h" -- cgit v1.2.3