Add VMS port updates from Hartmut Becker.
authorPaul Smith <psmith@gnu.org>
Sun, 22 Sep 2013 04:48:05 +0000 (00:48 -0400)
committerPaul Smith <psmith@gnu.org>
Sun, 22 Sep 2013 21:10:34 +0000 (17:10 -0400)
18 files changed:
ChangeLog
Makefile.DOS.template
Makefile.am
NEWS
README.VMS [new file with mode: 0644]
README.template
commands.c
dir.c
file.c
guile.c
main.c
makefile.com
misc.c
output.c
read.c
readme.vms [deleted file]
rule.c
variable.c

index 7db09104361de5b2a73e57ba350a76c65a000f02..8905116fb93a5e906867355d4de34191fce565dd 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -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>
 
        * maintMakefile (check-alt-config): Create a target to test
index a5c7ece9f8a585bdc951c2c2f3d78ea6a1585b59..c8e7043b76917f9901850f34bd8d97761b37f271 100644 (file)
@@ -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
index 5fd1b62ec7efaf4515833d4993f2379d360ab8cc..5156f4743fe58b0fedc6179b3debabd7376b07ee 100644 (file)
@@ -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 b1ec0734a0aa7fabe153558444b22eb152c40b98..fd0a563a4389fa3f004507353ce4a86a696abe06 100644 (file)
--- 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.
 \f
 Version 3.78 (22 Sep 1999)
 
diff --git a/README.VMS b/README.VMS
new file mode 100644 (file)
index 0000000..f7b064d
--- /dev/null
@@ -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.
+\f
+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.
+\f
+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.
+\f
+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.
+\f
+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 <kkaempf@rmi.de>, 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.
+\f
+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 <kkaempf@rmi.de>
+
+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
+$(<name-of-symbol-or-logical>).  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 <http://www.gnu.org/licenses/>.
index 50d9e5509ca88413e3813cd0dc93557c74faffad..8458406b26ee2cba09e5c25af8bfa3b3966ac777 100644 (file)
@@ -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.
 
index e83cc9b5127fd685298b5f51c83c7cf0dfdbef05..f91035845bea7720c16fc6e4b2e44c023c048c06 100644 (file)
@@ -17,8 +17,8 @@ this program.  If not, see <http://www.gnu.org/licenses/>.  */
 #include <dlfcn.h>
 
 #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 0c93ac9c4d81b0f98d233ddd933726baef93ec7b..d046bd9a0d5e5e298195920705a6a7acbf200036 100644 (file)
--- a/dir.c
+++ b/dir.c
@@ -16,6 +16,7 @@ this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
 #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 c8e19e580651dc151e15644abf8b4652aaf86f2b..b209d880a9942190eb9d6439a94849a7be552ba2 100644 (file)
--- a/file.c
+++ b/file.c
@@ -18,8 +18,8 @@ this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
 #include <assert.h>
 
-#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 f5637fd2eb431945ae846df45be60362fc990352..6c9fb7539aeec8a88f86cbdff8181c025fc56380 100644 (file)
--- a/guile.c
+++ b/guile.c
@@ -18,6 +18,7 @@ this program.  If not, see <http://www.gnu.org/licenses/>.  */
 #include "gnumake.h"
 
 #include "debug.h"
+#include "filedef.h"
 #include "dep.h"
 #include "variable.h"
 
diff --git a/main.c b/main.c
index a180ee9c97198b4e505878553a75ecbcfa647663..776ba7ce704e21133a457c298c9aaa5f6c75e00a 100644 (file)
--- 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 <http://www.gnu.org/licenses/>.  */
 
 #include "makeint.h"
-#include "dep.h"
 #include "filedef.h"
+#include "dep.h"
 #include "variable.h"
 #include "job.h"
 #include "commands.h"
index fee8d5e60f20d824bde03d90bc001f31a6ce7fe8..6359c47aacad0cb830c6db93b04b01442fe14ad9 100644 (file)
@@ -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 d91503258b88cdcd359b7f6f7da91521d509cb87..bc54ce649ca52bd6b1b2c9e9933889669af268df 100644 (file)
--- 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 <http://www.gnu.org/licenses/>.  */
 
 #include "makeint.h"
+#include "filedef.h"
 #include "dep.h"
 #include "debug.h"
 
index f58b8166037ebcf5e5e31294daa0a21b6e51f8e5..3cf7afb507b1c505f76728fa374e48466fa8fac3 100644 (file)
--- 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 f8542b0fb960b1cba2f6b61b34d62268de88db95..a4ca72d6522086c9835509196c2be0f2376272f5 100644 (file)
--- a/read.c
+++ b/read.c
@@ -20,8 +20,8 @@ this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
 #include <glob.h>
 
-#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 (file)
index f985959..0000000
+++ /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.
-\f
-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.
-$
-\f
-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 <kkaempf@rmi.de>, 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.
-\f
-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 <kkaempf@rmi.de>
-
-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
-$(<name-of-symbol-or-logical>).  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 <http://www.gnu.org/licenses/>.
diff --git a/rule.c b/rule.c
index 5991c80f1a14a578b481a83e02d1a914d760d8ec..cb355376028cd0eb26d2962107745f3b182dacf6 100644 (file)
--- a/rule.c
+++ b/rule.c
@@ -18,8 +18,8 @@ this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
 #include <assert.h>
 
-#include "dep.h"
 #include "filedef.h"
+#include "dep.h"
 #include "job.h"
 #include "commands.h"
 #include "variable.h"
index 74e866aeb46d6e2ad85cf2cdf6c58852c2770931..2ff14b648621827f205724a07014c4754431d994 100644 (file)
@@ -18,8 +18,8 @@ this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
 #include <assert.h>
 
-#include "dep.h"
 #include "filedef.h"
+#include "dep.h"
 #include "job.h"
 #include "commands.h"
 #include "variable.h"