summaryrefslogtreecommitdiff
path: root/readme.vms
diff options
context:
space:
mode:
authorIgor Pashev <pashev.igor@gmail.com>2012-08-26 19:24:46 +0400
committerIgor Pashev <pashev.igor@gmail.com>2012-08-26 19:24:46 +0400
commite46c9ea201b4bad8f4c6d19ee6dfb3537bc9facd (patch)
tree26ae9736985be2ef61032e7808b9fb0e2155c71f /readme.vms
downloadmake.old-e46c9ea201b4bad8f4c6d19ee6dfb3537bc9facd.tar.gz
Imported GNU Make 3.81upstream/3.82upstream
Diffstat (limited to 'readme.vms')
-rw-r--r--readme.vms392
1 files changed, 392 insertions, 0 deletions
diff --git a/readme.vms b/readme.vms
new file mode 100644
index 0000000..ec3d624
--- /dev/null
+++ b/readme.vms
@@ -0,0 +1,392 @@
+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 <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.
+
+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 preceed 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, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
+2006, 2007, 2008, 2009, 2010 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/>.