• Home
  • History
  • Annotate
Name Date Size #Lines LOC

..18-Jul-2017-

config/H18-Jul-2017-11075

doc/H18-Jul-2017-11,4969,443

glob/H07-May-2022-2,6551,955

kmkbuiltin/H28-Nov-2017-20,74214,786

po/H18-Jul-2017-194144

tests/H18-Jul-2017-14,93010,932

w32/H28-Nov-2017-2,8211,773

.purifyH A D18-Jul-2017596 1311

AUTHORSH A D18-Jul-20172.8 KiB8465

COPYINGH A D18-Jul-201734.3 KiB675553

ChangeLogH A D18-Jul-2017149.6 KiB4,0192,965

ChangeLog.1H A D18-Jul-2017182.8 KiB5,0003,352

ChangeLog.2H A D18-Jul-2017245 KiB6,6554,672

INSTALLH A D18-Jul-20179.1 KiB232176

Makefile.DOS.templateH A D18-Jul-201719.2 KiB589469

Makefile.amH A D28-Nov-20179 KiB322221

Makefile.amiH A D18-Jul-201710.1 KiB308173

Makefile.kmkH A D28-Nov-201715.2 KiB707528

Makefile.os2H A D18-Jul-20171.2 KiB4832

NEWSH A D18-Jul-201747.3 KiB1,114816

NMakefile.templateH A D18-Jul-20173.9 KiB123106

README.AmigaH A D18-Jul-20172.7 KiB7957

README.DOS.templateH A D18-Jul-201715.6 KiB342262

README.OS2.templateH A D18-Jul-20176.5 KiB178128

README.W32.templateH A D18-Jul-201711.4 KiB290212

README.customsH A D18-Jul-20174.5 KiB11481

README.cvsH A D18-Jul-20177 KiB220143

README.templateH A D18-Jul-20177 KiB190130

SCOPTIONSH A D18-Jul-2017195 1413

SMakefile.templateH A D18-Jul-20176.6 KiB215178

TODO.privateH A D18-Jul-20176.8 KiB143112

acinclude.m4H A D18-Jul-20174.7 KiB130124

alloca.cH A D18-Jul-201713.9 KiB504292

alloccache.cH A D18-Jul-20177.5 KiB250162

amiga.cH A D18-Jul-20172.6 KiB11982

amiga.hH A D18-Jul-2017901 202

ar.cH A D18-Jul-20177.1 KiB288181

arscan.cH A D18-Jul-201721.5 KiB868592

build.templateH A D18-Jul-20172.6 KiB8340

build_w32.batH A D18-Jul-201721.4 KiB204201

commands.cH A D18-Jul-201724.6 KiB935679

commands.hH A D18-Jul-20172.8 KiB7144

config.ami.templateH A D18-Jul-20179.8 KiB345238

config.h-vms.templateH A D18-Jul-201712.4 KiB430307

config.h.W32.templateH A D18-Jul-201715 KiB523370

config.h.darwinH A D18-Jul-201712.4 KiB445305

config.h.freebsdH A D18-Jul-201712.1 KiB434298

config.h.haikuH A D18-Jul-201712.7 KiB460319

config.h.linuxH A D18-Jul-201713.1 KiB475329

config.h.netbsdH A D28-Nov-201712.7 KiB460319

config.h.os2H A D18-Jul-201713.1 KiB477328

config.h.solarisH A D18-Jul-201712.3 KiB440301

config.h.winH A D18-Jul-201716.3 KiB573410

configh.dos.templateH A D18-Jul-20173.6 KiB12282

configure.batH A D18-Jul-20172 KiB6251

configure.inH A D18-Jul-201714.9 KiB482407

debug.hH A D18-Jul-20172.3 KiB6834

default.cH A D18-Jul-201716.8 KiB625509

dep.hH A D18-Jul-20174 KiB12172

dir-nt-bird.cH A D18-Jul-201723.1 KiB725464

dir.cH A D28-Nov-201739 KiB1,5091,203

dosbuild.batH A D18-Jul-20173.2 KiB6461

electric.cH A D18-Jul-20174.9 KiB221170

electric.hH A D18-Jul-20171.7 KiB6633

expand.cH A D18-Jul-201737.3 KiB1,297881

expreval.cH A D28-Nov-201753 KiB2,1441,192

file.cH A D18-Jul-201738.8 KiB1,4241,066

filedef.hH A D18-Jul-201710.7 KiB248126

function.cH A D18-Jul-2017162.1 KiB6,0864,486

getloadavg.cH A D18-Jul-201725.5 KiB1,029678

getopt.cH A D18-Jul-201729.2 KiB1,031611

getopt.hH A D18-Jul-20174.5 KiB13348

getopt1.cH A D18-Jul-20174.3 KiB179113

gettext.hH A D18-Jul-20172.5 KiB5920

hash.cH A D18-Jul-201713.4 KiB539432

hash.hH A D18-Jul-20179.2 KiB252191

implicit.cH A D18-Jul-201733.1 KiB992604

incdep.cH A D28-Nov-201755 KiB1,8871,457

inlined_memchr.hH A D18-Jul-20174.5 KiB163157

job.cH A D28-Nov-2017105.5 KiB3,6522,504

job.hH A D18-Jul-20173.6 KiB11778

kbuild-object.cH A D28-Nov-201750.1 KiB1,410905

kbuild.cH A D28-Nov-201797.9 KiB2,8421,818

kbuild.hH A D18-Jul-20173.7 KiB7837

kbuildprf.cH A D18-Jul-2017837 5036

kdepdb.cH A D18-Jul-201730.9 KiB1,088612

kmk_cc_exec.cH A D18-Jul-2017249.3 KiB6,6104,075

kmk_cc_exec.hH A D18-Jul-20171.6 KiB4917

kmkbuiltin.cH A D28-Nov-201710.4 KiB340249

kmkbuiltin.hH A D28-Nov-20174.3 KiB10365

main.cH A D28-Nov-2017118.2 KiB4,1192,913

maintMakefileH A D18-Jul-20179.1 KiB289232

make.1H A D18-Jul-201710 KiB360359

make.hH A D03-May-202227.5 KiB996758

make_msvc_net2003.slnH A D18-Jul-2017923 2221

make_msvc_net2003.vcprojH A D18-Jul-20177.1 KiB318317

makefile.comH A D18-Jul-20174.8 KiB157156

makefile.vmsH A D18-Jul-20174.8 KiB15083

misc.cH A D28-Nov-201737.1 KiB1,5501,137

prepare_w32.batH A D18-Jul-2017325 76

read.cH A D18-Jul-2017114.4 KiB3,9672,761

readme.vmsH A D18-Jul-201715.8 KiB393291

remake.cH A D18-Jul-201762.6 KiB2,0461,363

remote-cstms.cH A D18-Jul-20178.2 KiB302182

remote-stub.cH A D18-Jul-20172.9 KiB10247

rule.cH A D18-Jul-201714.6 KiB549341

rule.hH A D18-Jul-20172.1 KiB6030

signame.cH A D18-Jul-20176.8 KiB257182

strcache.cH A D28-Nov-20177.7 KiB285178

strcache2.cH A D28-Nov-201738.9 KiB1,3281,026

strcache2.hH A D18-Jul-20176.9 KiB183119

subproc.batH A D18-Jul-2017967 2523

testcase-2ndtargetexp.kmkH A D18-Jul-20171.8 KiB6955

testcase-if1of.kmkH A D18-Jul-20171.7 KiB8171

testcase-includedep-sub.kmkH A D18-Jul-2017956 2925

testcase-includedep.kmkH A D18-Jul-20172.5 KiB9174

testcase-kBuild-define.kmkH A D18-Jul-20175.1 KiB142120

testcase-lazy-deps-vars.kmkH A D18-Jul-20172.3 KiB7360

testcase-libpath.kmkH A D18-Jul-20171.3 KiB2118

testcase-local.kmkH A D18-Jul-20172.8 KiB12898

testcase-math.kmkH A D18-Jul-20173.3 KiB9988

testcase-root.kmkH A D18-Jul-2017338 3122

testcase-stack.kmkH A D18-Jul-20172.8 KiB8780

testcase-which.kmkH A D18-Jul-201778 63

testcase-xargs.kmkH A D18-Jul-20172 KiB6048

variable.cH A D28-Nov-2017101.3 KiB3,3212,574

variable.hH A D28-Nov-201721.8 KiB543412

version.cH A D18-Jul-20171.3 KiB366

vmsdir.hH A D18-Jul-20171.8 KiB7844

vmsfunctions.cH A D18-Jul-20176.2 KiB263195

vmsify.cH A D18-Jul-201718.2 KiB1,006799

vmsjobs.cH A D18-Jul-201718 KiB726540

vpath.cH A D18-Jul-201717.8 KiB631362

README.Amiga

1Short: Port of GNU make with SAS/C (no ixemul.library required)
2Author: GNU, Amiga port by Aaron "Optimizer" Digulla
3Uploader: Aaron "Optimizer" Digulla (digulla@fh-konstanz.de)
4Type: dev/c
5
6This is a pure Amiga port of GNU make. It needs no extra libraries or
7anything. It has the following features (in addition to any features of
8GNU make):
9
10- Runs Amiga-Commands with SystemTags() (Execute)
11- Can run multi-line statements
12- Allows to use Device-Names in targets:
13
14	c:make : make.o
15
16    is ok. To distinguish between device-names and target : or ::, MAKE
17    looks for spaces. If there are any around :, it's taken as a target
18    delimiter, if there are none, it's taken as the name of a device. Note
19    that "make:make.o" tries to create "make.o" on the device "make:".
20- Replaces @@ by a newline in any command line:
21
22	if exists make @@\
23	    delete make.bak quiet @@\
24	    rename make make.bak @@\
25	endif @@\
26	$(CC) Link Make.o To make
27
28    works. Note that the @@ must stand alone (ie. "make@@\" is illegal).
29    Also be carefull that there is a space after the "\" (ie, at the
30    beginning of the next line).
31- Can be made resident to save space and time
32- Amiga specific wildcards can be used in $(wildcard ...)
33
34BUGS:
35- The line
36
37    dummy.h : src/*.c
38
39tries to make dummy.h from "src/*.c" (ie. no wildcard-expansion takes
40place). You have to use "$(wildcard src/*.c)" instead.
41
42COMPILING FROM SCRATCH
43----------------------
44
45To recompile, you need SAS/C 6.51. make itself is not neccessary, there
46is an smakefile.
47
481. Copy config.ami to config.h
492. If you use make to compie, copy Makefile.ami to Makefile and
50    glob/Makefile.ami to glob/Makefile. Copy make into the current
51    directory.
52
533. Run smake/make
54
55INSTALLATION
56
57Copy make somewhere in your search path (eg. sc:c or sc:bin).
58If you plan to use recursive makes, install make resident:
59
60    Resident make Add
61
62
63-------------------------------------------------------------------------------
64Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
652005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc.
66This file is part of GNU Make.
67
68GNU Make is free software; you can redistribute it and/or modify it under the
69terms of the GNU General Public License as published by the Free Software
70Foundation; either version 3 of the License, or (at your option) any later
71version.
72
73GNU Make is distributed in the hope that it will be useful, but WITHOUT ANY
74WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
75A PARTICULAR PURPOSE.  See the GNU General Public License for more details.
76
77You should have received a copy of the GNU General Public License along with
78this program.  If not, see <http://www.gnu.org/licenses/>.
79

README.DOS.template

1Port of GNU Make to 32-bit protected mode on MSDOS and MS-Windows.
2
3Builds with DJGPP v2 port of GNU C/C++ compiler and utilities.
4
5
6New (since 3.74) DOS-specific features:
7
8   1. Supports long filenames when run from DOS box on Windows 9x.
9
10   2. Supports both stock DOS COMMAND.COM and Unix-style shells
11      (details in ``Notes'' below).
12
13   3. Supports DOS drive letters in dependencies and pattern rules.
14
15   4. Better support for DOS-style backslashes in pathnames (but see
16      ``Notes'' below).
17
18   5. The $(shell) built-in can run arbitrary complex commands,
19      including pipes and redirection, even when COMMAND.COM is your
20      shell.
21
22   6. Can be built without floating-point code (see below).
23
24   7. Supports signals in child programs and restores the original
25      directory if the child was interrupted.
26
27   8. Can be built without (a previous version of) Make.
28
29   9. The build process requires only standard tools.  (Optional
30      targets like "install:" and "clean:" still need additional
31      programs, though, see below.)
32
33  10. Beginning with v3.78, the test suite works in the DJGPP
34      environment (requires Perl and auxiliary tools; see below).
35
36
37To install a binary distribution:
38
39   Simply unzip the makNNNb.zip file (where NNN is the version number)
40   preserving the directory structure (-d switch if you use PKUNZIP).
41   If you are installing Make on Windows 9X or Windows 2000, use an
42   unzip program that supports long filenames in zip files.  After
43   unzipping, make sure the directory with make.exe is on your PATH,
44   and that's all you need to use Make.
45
46
47To build from sources:
48
49   1. Unzip the archive, preserving the directory structure (-d switch
50      if you use PKUNZIP).  If you build Make on Windows 9X or Windows
51      2000, use an unzip program that supports long filenames in zip
52      files.
53
54      If you are unpacking an official GNU source distribution, use
55      either DJTAR (which is part of the DJGPP development
56      environment), or the DJGPP port of GNU Tar.
57
58   2. Invoke the `configure.bat' batch file.
59
60      If you are building Make in-place, i.e. in the same directory
61      where its sources are kept, just type "configure.bat" and press
62      [Enter].  Otherwise, you need to supply the path to the source
63      directory as an argument to the batch file, like this:
64
65	c:\djgpp\gnu\make-%VERSION%\configure.bat c:/djgpp/gnu/make-%VERSION%
66
67      Note the forward slashes in the source path argument: you MUST
68      use them here.
69
70   3. If configure.bat doesn't find a working Make, it will suggest to
71      use the `dosbuild.bat' batch file to build Make.  Either do as it
72      suggests or install another Make program (a pre-compiled binary
73      should be available from the usual DJGPP sites) and rerun
74      configure.bat.
75
76   4. If you will need to run Make on machines without an FPU, you
77      might consider building a version of Make which doesn't issue
78      floating-point instructions (they don't help much on MSDOS
79      anyway).  To this end, edit the Makefile created by
80      configure.bat and add -DNO_FLOAT to the value of CPPFLAGS.
81
82   5. Invoke Make.
83
84      If you are building from outside of the source directory, you
85      need to tell Make where the sources are, like this:
86
87	        make srcdir=c:/djgpp/gnu/make-%VERSION%
88
89      (configure.bat will tell you this when it finishes).  You MUST
90      use a full, not relative, name of the source directory here, or
91      else Make might fail.
92
93   6. After Make finishes, if you have a Unix-style shell installed,
94      you can use the `install' target to install the package.  You
95      will also need GNU Fileutils and GNU Sed for this (they should
96      be available from the DJGPP sites).
97
98      By default, GNU make will install into your DJGPP installation
99      area.  If you wish to use a different directory, override the
100      DESTDIR variable when invoking "make install", like this:
101
102		make install DESTDIR=c:/other/dir
103
104      This causes the make executable to be placed in c:/other/dir/bin,
105      the man pages in c:/other/dir/man, etc.
106
107      Without a Unix-style shell, you will have to install programs
108      and the docs manually.  Copy make.exe to a directory on your
109      PATH, make.i* info files to your Info directory, and update the
110      file `dir' in your Info directory by adding the following item
111      to the main menu:
112
113	* Make: (make.info).           The GNU make utility.
114
115      If you have the `install-info' program (from the GNU Texinfo
116      package), it will do that for you if you invoke it like this:
117
118	install-info --info-dir=c:/djgpp/info c:/djgpp/info/make.info
119
120      (If your Info directory is other than C:\DJGPP\INFO, change this
121      command accordingly.)
122
123   7. The `clean' targets also require Unix-style shell, and GNU Sed
124      and `rm' programs (the latter from Fileutils).
125
126   8. To run the test suite, type "make check".  This requires a Unix
127      shell (I used the DJGPP port of Bash 2.03), Perl, Sed, Fileutils
128      and Sh-utils.
129
130
131Notes:
132-----
133
134   1. The shell issue.
135
136      This is probably the most significant improvement, first
137      introduced in the port of GNU Make 3.75.
138
139      The original behavior of GNU Make is to invoke commands
140      directly, as long as they don't include characters special to
141      the shell or internal shell commands, because that is faster.
142      When shell features like redirection or filename wildcards are
143      involved, Make calls the shell.
144
145      This port supports both DOS shells (the stock COMMAND.COM and its
146      4DOS/NDOS replacements), and Unix-style shells (tested with the
147      venerable Stewartson's `ms_sh' 2.3 and the DJGPP port of `bash' by
148      Daisuke Aoyama <jack@st.rim.or.jp>).
149
150      When the $SHELL variable points to a Unix-style shell, Make
151      works just like you'd expect on Unix, calling the shell for any
152      command that involves characters special to the shell or
153      internal shell commands.  The only difference is that, since
154      there is no standard way to pass command lines longer than the
155      infamous DOS 126-character limit, this port of Make writes the
156      command line to a temporary disk file and then invokes the shell
157      on that file.
158
159      If $SHELL points to a DOS-style shell, however, Make will not
160      call it automatically, as it does with Unix shells.  Stock
161      COMMAND.COM is too dumb and would unnecessarily limit the
162      functionality of Make.  For example, you would not be able to
163      use long command lines in commands that use redirection or
164      pipes.  Therefore, when presented with a DOS shell, this port of
165      Make will emulate most of the shell functionality, like
166      redirection and pipes, and shall only call the shell when a
167      batch file or a command internal to the shell is invoked.  (Even
168      when a command is an internal shell command, Make will first
169      search the $PATH for it, so that if a Makefile calls `mkdir',
170      you can install, say, a port of GNU `mkdir' and have it called
171      in that case.)
172
173      The key to all this is the extended functionality of `spawn' and
174      `system' functions from the DJGPP library; this port just calls
175      `system' where it would invoke the shell on Unix.  The most
176      important aspect of these functions is that they use a special
177      mechanism to pass long (up to 16KB) command lines to DJGPP
178      programs.  In addition, `system' emulates some internal
179      commands, like `cd' (so that you can now use forward slashes
180      with it, and can also change the drive if the directory is on
181      another drive).  Another aspect worth mentioning is that you can
182      call Unix shell scripts directly, provided that the shell whose
183      name is mentioned on the first line of the script is installed
184      anywhere along the $PATH.  It is impossible to tell here
185      everything about these functions; refer to the DJGPP library
186      reference for more details.
187
188      The $(shell) built-in is implemented in this port by calling
189      `popen'.  Since `popen' calls `system', the above considerations
190      are valid for $(shell) as well.  In particular, you can put
191      arbitrary complex commands, including pipes and redirection,
192      inside $(shell), which is in many cases a valid substitute for
193      the Unix-style command substitution (`command`) feature.
194
195
196   2. "SHELL=/bin/sh" -- or is it?
197
198      Many Unix Makefiles include a line which sets the SHELL, for
199      those versions of Make which don't have this as the default.
200      Since many DOS systems don't have `sh' installed (in fact, most
201      of them don't even have a `/bin' directory), this port takes
202      such directives with a grain of salt.  It will only honor such a
203      directive if the basename of the shell name (like `sh' in the
204      above example) can indeed be found in the directory that is
205      mentioned in the SHELL= line (`/bin' in the above example), or
206      in the current working directory, or anywhere on the $PATH (in
207      that order).  If the basename doesn't include a filename
208      extension, Make will look for any known extension that indicates
209      an executable file (.exe, .com, .bat, .btm, .sh, and even .sed
210      and .pl).  If any such file is found, then $SHELL will be
211      defined to the exact pathname of that file, and that shell will
212      hence be used for the rest of processing.  But if the named
213      shell is *not* found, the line which sets it will be effectively
214      ignored, leaving the value of $SHELL as it was before.  Since a
215      lot of decisions that this port makes depend on the gender of
216      the shell, I feel it doesn't make any sense to tailor Make's
217      behavior to a shell which is nowhere to be found.
218
219      Note that the above special handling of "SHELL=" only happens
220      for Makefiles; if you set $SHELL in the environment or on the
221      Make command line, you are expected to give the complete
222      pathname of the shell, including the filename extension.
223
224      The default value of $SHELL is computed as on Unix (see the Make
225      manual for details), except that if $SHELL is not defined in the
226      environment, $COMSPEC is used.  Also, if an environment variable
227      named $MAKESHELL is defined, it takes precedence over both
228      $COMSPEC and $SHELL.  Note that, unlike Unix, $SHELL in the
229      environment *is* used to set the shell (since on MSDOS, it's
230      unlikely that the interactive shell will not be suitable for
231      Makefile processing).
232
233      The bottom line is that you can now write Makefiles where some
234      of the targets require a real (i.e. Unix-like) shell, which will
235      nevertheless work when such shell is not available (provided, of
236      course, that the commands which should always work, don't
237      require such a shell).  More important, you can convert Unix
238      Makefiles to MSDOS and leave the line which sets the shell
239      intact, so that people who do have Unixy shell could use it for
240      targets which aren't converted to DOS (like `install' and
241      `uninstall', for example).
242
243
244   3. Default directories.
245
246      GNU Make knows about standard directories where it searches for
247      library and include files mentioned in the Makefile.  Since
248      MSDOS machines don't have standard places for these, this port
249      will search ${DJDIR}/lib and ${DJDIR}/include respectively.
250      $DJDIR is defined automatically by the DJGPP startup code as the
251      root of the DJGPP installation tree (unless you've tampered with
252      the DJGPP.ENV file).  This should provide reasonable default
253      values, unless you moved parts of DJGPP to other directories.
254
255
256   4. Letter-case in filenames.
257
258      If you run Make on Windows 9x, you should be aware of the
259      letter-case issue.  Make is internally case-sensitive, but all
260      file operations are case-insensitive on Windows 9x, so
261      e.g. files `FAQ', `faq' and `Faq' all refer to the same file, as
262      far as Windows is concerned.  The underlying DJGPP C library
263      functions honor the letter-case of the filenames they get from
264      the OS, except that by default, they down-case 8+3 DOS filenames
265      which are stored in upper case in the directory and would break
266      many Makefiles otherwise.  (The details of which filenames are
267      converted to lower case are explained in the DJGPP libc docs,
268      under the `_preserve_fncase' and `_lfn_gen_short_fname'
269      functions, but as a thumb rule, any filename that is stored in
270      upper case in the directory, is a valid DOS 8+3 filename and
271      doesn't include characters invalid on MSDOS FAT filesystems,
272      will be automatically down-cased.)  User reports that I have
273      indicate that this default behavior is generally what you'd
274      expect; however, your input is most welcome.
275
276      In any case, if you hit a situation where you must force Make to
277      get the 8+3 DOS filenames in upper case, set FNCASE=y in the
278      environment or in the Makefile.
279
280
281   5. DOS-style pathnames.
282
283      There are a lot of places throughout the program sources which
284      make implicit assumptions about the pathname syntax.  In
285      particular, the directories are assumed to be separated by `/',
286      and any pathname which doesn't begin with a `/' is assumed to be
287      relative to the current directory.  This port attempts to
288      support DOS-style pathnames which might include the drive letter
289      and use backslashes instead of forward slashes.  However, this
290      support is not complete; I feel that pursuing this support too
291      far might break some more important features, particularly if
292      you use a Unix-style shell (where a backslash is a quote
293      character).  I only consider support of backslashes desirable
294      because some Makefiles invoke non-DJGPP programs which don't
295      understand forward slashes.  A notable example of such programs
296      is the standard programs which come with MSDOS.  Otherwise, you
297      are advised to stay away from backslashes whenever possible.  In
298      particular, filename globbing won't work on pathnames with
299      backslashes, because the GNU `glob' library doesn't support them
300      (backslash is special in filename wildcards, and I didn't want
301      to break that).
302
303      One feature which *does* work with backslashes is the filename-
304      related built-in functions such as $(dir), $(notdir), etc.
305      Drive letters in pathnames are also fully supported.
306
307
308
309Bug reports:
310-----------
311
312   Bugs that are clearly related to the MSDOS/DJGPP port should be
313   reported first on the comp.os.msdos.djgpp news group (if you cannot
314   post to Usenet groups, write to the DJGPP mailing list,
315   <djgpp@delorie.com>, which is an email gateway into the above news
316   group).  For other bugs, please follow the procedure explained in
317   the "Bugs" chapter of the Info docs.  If you don't have an Info
318   reader, look up that chapter in the `make.i1' file with any text
319   browser/editor.
320
321
322   Enjoy,
323			Eli Zaretskii <eliz@is.elta.co.il>
324
325
326-------------------------------------------------------------------------------
327Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
3282006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc.
329This file is part of GNU Make.
330
331GNU Make is free software; you can redistribute it and/or modify it under the
332terms of the GNU General Public License as published by the Free Software
333Foundation; either version 3 of the License, or (at your option) any later
334version.
335
336GNU Make is distributed in the hope that it will be useful, but WITHOUT ANY
337WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
338A PARTICULAR PURPOSE.  See the GNU General Public License for more details.
339
340You should have received a copy of the GNU General Public License along with
341this program.  If not, see <http://www.gnu.org/licenses/>.
342

README.OS2.template

1Port of GNU make to OS/2.
2
3Features of GNU make that do not work under OS/2:
4  - remote job execution
5  - dynamic load balancing
6
7
8Special features of the OS/2 version:
9
10Due to the fact that some people might want to use sh syntax in
11Makefiles while others might want to use OS/2's native shell cmd.exe,
12GNU make supports both shell types. The following list defines the order
13that is used to determine the shell:
14
15 1. The shell specified by the environment variable MAKESHELL.
16 2. The shell specified by the SHELL variable within a Makefile. Like
17    Unix, SHELL is NOT taken from the environment.
18 3. The shell specified by the COMSPEC environment variable.
19 4. The shell specified by the OS2_SHELL environment variable.
20 5. If none of the above is defined /bin/sh is used as default.  This
21    happens e.g. in the make testsuite.
22
23Note: - Points 3 and 4 can be turned off at compile time by adding
24        -DNO_CMD_DEFAULT to the CPPFLAGS.
25      - DOS support is not tested for EMX and therefore might not work.
26      - The UNIXROOT environment variable is supported to find /bin/sh
27        if it is not on the current drive.
28
29
30COMPILATION OF GNU MAKE FOR OS/2:
31
32I. ***** SPECIAL OPTIONS *****
33
34 - At compile time you can turn off that cmd is used as default shell
35   (but only /bin/sh). Simply set CPPFLAGS="-DNO_CMD_DEFAULT" and make
36   will not use cmd unless you cause it to do so by setting MAKESHELL to
37   cmd or by specifying SHELL=cmd in your Makefile.
38
39 - At compile time you can set CPPFLAGS="-DNO_CHDIR2" to turn off that
40   GNU make prints drive letters. This is necessary if you want to run
41   the testsuite.
42
43
44II. ***** REQUIREMENTS FOR THE COMPILATION *****
45
46A standard Unix like build environment:
47
48 - sh compatible shell (ksh, bash, ash, but tested only with pdksh 5.2.14
49   release 2)
50   If you use pdksh it is recommended to update to 5.2.14 release 2. Older
51   versions may not work! You can get this version at
52   http://www.math.ohio-state.edu/~ilya/software/os2/pdksh-5.2.14-bin-2.zip
53 - GNU file utilities (make sure that install.exe from the file utilities
54   is in front of your PATH before X:\OS2\INSTALL\INSTALL.EXE. I recommend
55   also to change the filename to ginstall.exe instead of install.exe
56   to avoid confusion with X:\OS2\INSTALL\INSTALL.EXE)
57 - GNU shell utilities
58 - GNU text utilities
59 - gawk
60 - grep
61 - sed
62 - GNU make 3.79.1 (special OS/2 patched version) or higher
63 - perl 5.005 or higher
64 - GNU texinfo (you can use 3.1 (gnuinfo.zip), but I recommend 4.0)
65
66If you want to recreate the configuration files (developers only!)
67you need also: GNU m4 1.4, autoconf 2.59, automake 1.9.6 (or compatible)
68
69
70III. ***** COMPILATION AND INSTALLATION *****
71
72 a) ** Developers only - Everyone else should skip this section **
73    To recreate the configuration files use:
74
75      export EMXSHELL=ksh
76      aclocal -I config
77      automake
78      autoconf
79      autoheader
80
81
82b) Installation into x:/usr
83
84   Note: Although it is possible to compile make using "./configure",
85         "make", "make install" this is not recommended.  In particular,
86         you must ALWAYS use LDFLAGS="-Zstack 0x6000" because the default
87         stack size is far to small and make will not work properly!
88
89Recommended environment variables and installation options:
90
91    export ac_executable_extensions=".exe"
92    export CPPFLAGS="-D__ST_MT_ERRNO__"
93    export CFLAGS="-O2 -Zomf -Zmt"
94    export LDFLAGS="-Zcrtdll -Zlinker /exepack:2 -Zlinker /pm:vio -Zstack 0x6000"
95    export RANLIB="echo"
96    ./configure --prefix=x:/usr --infodir=x:/usr/share/info --mandir=x:/usr/share/man --without-included-gettext
97    make AR=emxomfar
98    make install
99
100Note: If you use gcc 2.9.x I recommend to set also LIBS="-lgcc"
101
102Note: You can add -DNO_CMD_DEFAULT and -DNO_CHDIR2 to CPPFLAGS.
103      See section I. for details.
104
105
106IV. ***** NLS support *****
107
108GNU make has NLS (National Language Support), with the following
109caveats:
110
111 a) It will only work with GNU gettext, and
112 b) GNU gettext support is not included in the GNU make package.
113
114Therefore, if you wish to enable the internationalization features of
115GNU make you must install GNU gettext on your system before configuring
116GNU make.
117
118You can choose the languages to be installed. To install support for
119English, German and French only enter:
120
121  export LINGUAS="en de fr"
122
123If you don't specify LINGUAS all languages are installed.
124
125If you don't want NLS support (English only) use the option
126--disable-nls for the configure script.  Note if GNU gettext is not
127installed then NLS will not be enabled regardless of this flag.
128
129
130V. ***** Running the make test suite *****
131
132To run the included make test suite you have to set
133
134  CPPFLAGS="-D__ST_MT_ERRNO__ -DNO_CMD_DEFAULT -DNO_CHDIR2"
135
136before you compile make. This is due to some restrictions of the
137testsuite itself. -DNO_CMD_DEFAULT causes make to use /bin/sh as default
138shell in every case. Normally you could simply set MAKESHELL="/bin/sh"
139to do this but the testsuite ignores the environment. -DNO_CHDIR2 causes
140make not to use drive letters for directory names (i.e. _chdir2() and
141_getcwd2() are NOT used).  The testsuite interpretes the whole output of
142make, especially statements like make[1]: Entering directory
143`C:/somewhere/make-3.79.1/tests' where the testsuite does not expect the
144drive letter. This would be interpreted as an error even if there is
145none.
146
147To run the testsuite do the following:
148
149  export CPPFLAGS="-D__ST_MT_ERRNO__ -DNO_CMD_DEFAULT -DNO_CHDIR2"
150  export CFLAGS="-Zomf -O2 -Zmt"
151  export LDFLAGS="-Zcrtdll -s -Zlinker /exepack:2 -Zlinker /pm:vio -Zstack 0x6000"
152  export RANLIB="echo"
153  ./configure --prefix=x:/usr --disable-nls
154  make AR=emxomfar
155  make check
156
157All tests should work fine with the exception of one of the "INCLUDE_DIRS"
158tests which will fail if your /usr/include directory is on a drive different
159from the make source tree.
160
161
162-------------------------------------------------------------------------------
163Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free Software
164Foundation, Inc.
165This file is part of GNU Make.
166
167GNU Make is free software; you can redistribute it and/or modify it under the
168terms of the GNU General Public License as published by the Free Software
169Foundation; either version 3 of the License, or (at your option) any later
170version.
171
172GNU Make is distributed in the hope that it will be useful, but WITHOUT ANY
173WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
174A PARTICULAR PURPOSE.  See the GNU General Public License for more details.
175
176You should have received a copy of the GNU General Public License along with
177this program.  If not, see <http://www.gnu.org/licenses/>.
178

README.W32.template

1This version of GNU make has been tested on Microsoft Windows 2000/XP/2003.
2It has also been used on Windows 95/98/NT, and on OS/2.
3
4It builds with the MinGW port of GCC (tested with GCC 3.4.2).
5
6It also builds with MSVC 2.x, 4.x, 5.x, 6.x, and 2003 as well as
7with .NET 7.x and .NET 2003.
8
9The Windows 32-bit port of GNU make is maintained jointly by various
10people.  It was originally made by Rob Tulloh.
11
12
13Do this first, regardless of the build method you choose:
14---------------------------------------------------------
15
16 1. At the Windows command prompt run:
17
18      if not exist NMakefile copy NMakefile.template NMakefile
19      if not exist config.h copy config.h.W32 config.h
20
21    Then edit config.h to your liking (especially the few shell-related
22    defines near the end, or HAVE_CASE_INSENSITIVE_FS which corresponds
23    to './configure --enable-case-insensitive-file-system').
24
25
26Using make_msvc_net2003.vcproj
27------------------------------
28
29 2. Open make_msvc_net2003.vcproj in MSVS71 or MSVC71 or any compatible IDE,
30    then build this project as usual.  There's also a solution file for
31    Studio 2003.
32
33
34Building with (MinGW-)GCC using build_w32.bat
35---------------------------------------------
36
37 2. Open a W32 command prompt for your installed (MinGW-)GCC, setup a
38    correct PATH and other environment variables for it, then execute ...
39
40	build_w32.bat gcc
41
42    This produces gnumake.exe in the current directory.
43
44
45Building with (MSVC++-)cl using build_w32.bat or NMakefile
46----------------------------------------------------------
47
48 2. Open a W32 command prompt for your installed (MSVC++-)cl, setup a
49    correct PATH and other environment variables for it (usually via
50    executing vcvars32.bat or vsvars32.bat from the cl-installation,
51    e.g. "%VS71COMNTOOLS%vsvars32.bat"; or using a corresponding start
52    menue entry from the cl-installation), then execute EITHER ...
53
54	build_w32.bat
55
56    (this produces WinDebug/gnumake.exe and WinRel/gnumake.exe)
57
58    ... OR ...
59
60	nmake /f NMakefile
61
62    (this produces WinDebug/make.exe and WinRel/make.exe).
63
64
65-------------------
66-- Notes/Caveats --
67-------------------
68
69GNU make on Windows 32-bit platforms:
70
71	This version of make is ported natively to Windows32 platforms
72	(Windows NT 3.51, Windows NT 4.0, Windows 2000, Windows XP,
73	Windows 95, and Windows 98). It does not rely on any 3rd party
74	software or add-on packages for building. The only thing
75	needed is a Windows compiler.  Two compilers supported
76	officially are the MinGW port of GNU GCC, and the various
77	versions of the Microsoft C compiler.
78
79	Do not confuse this port of GNU make with other Windows32 projects
80	which provide a GNU make binary. These are separate projects
81	and are not connected to this port effort.
82
83GNU make and sh.exe:
84
85	This port prefers if you have a working sh.exe somewhere on
86	your system. If you don't have sh.exe, the port falls back to
87	MSDOS mode for launching programs (via a batch file).  The
88	MSDOS mode style execution has not been tested that carefully
89	though (The author uses GNU bash as sh.exe).
90
91	There are very few true ports of Bourne shell for NT right now.
92	There is a version of GNU bash available from Cygnus "Cygwin"
93	porting effort (http://www.cygwin.com/).
94	Other possibilities are the MKS version of sh.exe, or building
95        your own with a package like NutCracker (DataFocus) or Portage
96        (Consensys).  Also MinGW includes sh (http://mingw.org/).
97
98GNU make and brain-dead shells (BATCH_MODE_ONLY_SHELL):
99
100	Some versions of Bourne shell do not behave well when invoked
101	as 'sh -c' from CreateProcess().  The main problem is they seem
102	to have a hard time handling quoted strings correctly. This can
103	be circumvented by writing commands to be executed to a batch
104	file and then executing the command by calling 'sh file'.
105
106	To work around this difficulty, this version of make supports
107	a batch mode.  When BATCH_MODE_ONLY_SHELL is defined at compile
108	time, make forces all command lines to be executed via script
109	files instead of by command line.  In this mode you must have a
110	working sh.exe in order to use parallel builds (-j).
111
112	A native Windows32 system with no Bourne shell will also run
113	in batch mode.  All command lines will be put into batch files
114	and executed via $(COMSPEC) (%COMSPEC%).  However, parallel
115	builds ARE supported with Windows shells (cmd.exe and
116	command.com).  See the next section about some peculiarities
117	of parallel builds on Windows.
118
119Support for parallel builds
120
121	Parallel builds (-jN) are supported in this port, with 2
122	limitations:
123
124	  - The number of concurrent processes has a hard limit of 64,
125            due to the way this port implements waiting for its
126            subprocesses;
127
128	  - The job server method (available when Make runs on Posix
129            platforms) is not supported, which means you must pass an
130            explicit -jN switch to sub-Make's in a recursive Makefile.
131            If a sub-Make does not receive an explicit -jN switch, it
132            will default to -j1, i.e. no parallelism in sub-Make's.
133
134GNU make and Cygnus GNU Windows32 tools:
135
136	Good news! Make now has native support for Cygwin sh. To enable,
137	define the HAVE_CYGWIN_SHELL in config.h and rebuild make
138	from scratch. This version of make tested with B20.1 of Cygwin.
139	Do not define BATCH_MODE_ONLY_SHELL if you use HAVE_CYGWIN_SHELL.
140
141GNU make and the MKS shell:
142
143	There is now semi-official support for the MKS shell. To turn this
144	support on, define HAVE_MKS_SHELL in the config.h.W32 before you
145	build make.  Do not define BATCH_MODE_ONLY_SHELL if you turn
146	on HAVE_MKS_SHELL.
147
148GNU make handling of drive letters in pathnames (PATH, vpath, VPATH):
149
150	There is a caveat that should be noted with respect to handling
151	single character pathnames on Windows systems.	When colon is
152	used in PATH variables, make tries to be smart about knowing when
153	you are using colon as a separator versus colon as a drive
154	letter.	 Unfortunately, something as simple as the string 'x:/'
155	could be interpreted 2 ways: (x and /) or (x:/).
156
157	Make chooses to interpret a letter plus colon (e.g. x:/) as a
158	drive letter pathname.	If it is necessary to use single
159	character directories in paths (VPATH, vpath, Path, PATH), the
160	user must do one of two things:
161
162	 a. Use semicolon as the separator to disambiguate colon. For
163	    example use 'x;/' if you want to say 'x' and '/' are
164	    separate components.
165
166	 b. Qualify the directory name so that there is more than
167	    one character in the path(s) used. For example, none
168	    of these settings are ambiguous:
169
170	      ./x:./y
171	      /some/path/x:/some/path/y
172	      x:/some/path/x:x:/some/path/y
173
174	Please note that you are free to mix colon and semi-colon in the
175	specification of paths.	 Make is able to figure out the intended
176	result and convert the paths internally to the format needed
177	when interacting with the operating system, providing the path
178	is not within quotes, e.g. "x:/test/test.c".
179
180	You are encouraged to use colon as the separator character.
181	This should ease the pain of deciding how to handle various path
182	problems which exist between platforms.	 If colon is used on
183	both Unix and Windows systems, then no ifdef'ing will be
184	necessary in the makefile source.
185
186GNU make test suite:
187
188	I verified all functionality with a slightly modified version
189	of make-test-%VERSION% (modifications to get test suite to run
190	on Windows NT). All tests pass in an environment that includes
191	sh.exe.  Tests were performed on both Windows NT and Windows 95.
192
193Pathnames and white space:
194
195	Unlike Unix, Windows 95/NT systems encourage pathnames which
196	contain white space (e.g. C:\Program Files\). These sorts of
197	pathnames are valid on Unix too, but are never encouraged.
198	There is at least one place in make (VPATH/vpath handling) where
199	paths containing white space will simply not work. There may be
200	others too. I chose to not try and port make in such a way so
201	that these sorts of paths could be handled. I offer these
202	suggestions as workarounds:
203
204		1. Use 8.3 notation. i.e. "x:/long~1/", which is actually
205		   "x:\longpathtest".  Type "dir /x" to view these filenames
206		   within the cmd.exe shell.
207		2. Rename the directory so it does not contain white space.
208
209	If you are unhappy with this choice, this is free software
210	and you are free to take a crack at making this work. The code
211	in w32/pathstuff.c and vpath.c would be the places to start.
212
213Pathnames and Case insensitivity:
214
215	Unlike Unix, Windows 95/NT systems are case insensitive but case
216	preserving.  For example if you tell the file system to create a
217	file named "Target", it will preserve the case.  Subsequent access to
218	the file with other case permutations will succeed (i.e. opening a
219	file named "target" or "TARGET" will open the file "Target").
220
221	By default, GNU make retains its case sensitivity when comparing
222	target names and existing files or directories.  It can be
223	configured, however, into a case preserving and case insensitive
224	mode by adding a define for HAVE_CASE_INSENSITIVE_FS to
225	config.h.W32.
226
227	For example, the following makefile will create a file named
228	Target in the directory subdir which will subsequently be used
229	to satisfy the dependency of SUBDIR/DepTarget on SubDir/TARGET.
230	Without HAVE_CASE_INSENSITIVE_FS configured, the dependency link
231	will not be made:
232
233	subdir/Target:
234		touch $@
235
236	SUBDIR/DepTarget: SubDir/TARGET
237		cp $^ $@
238
239	Reliance on this behavior also eliminates the ability of GNU make
240	to use case in comparison of matching rules.  For example, it is
241	not possible to set up a C++ rule using %.C that is different
242	than a C rule using %.c.  GNU make will consider these to be the
243	same rule and will issue a warning.
244
245SAMBA/NTFS/VFAT:
246
247	I have not had any success building the debug version of this
248	package using SAMBA as my file server. The reason seems to be
249	related to the way VC++ 4.0 changes the case name of the pdb
250	filename it is passed on the command line. It seems to change
251	the name always to to lower case. I contend that the VC++
252	compiler should not change the casename of files that are passed
253	as arguments on the command line. I don't think this was a
254	problem in MSVC 2.x, but I know it is a problem in MSVC 4.x.
255
256	The package builds fine on VFAT and NTFS filesystems.
257
258	Most all of the development I have done to date has been using
259	NTFS and long file names. I have not done any considerable work
260	under VFAT. VFAT users may wish to be aware that this port of
261	make does respect case sensitivity.
262
263FAT:
264
265	Version 3.76 added support for FAT filesystems. Make works
266	around some difficulties with stat'ing of files and caching of
267	filenames and directories internally.
268
269Bug reports:
270
271	Please submit bugs via the normal bug reporting mechanism which
272	is described in the GNU make manual and the base README.
273
274-------------------------------------------------------------------------------
275Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
2762006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc.
277This file is part of GNU Make.
278
279GNU Make is free software; you can redistribute it and/or modify it under the
280terms of the GNU General Public License as published by the Free Software
281Foundation; either version 3 of the License, or (at your option) any later
282version.
283
284GNU Make is distributed in the hope that it will be useful, but WITHOUT ANY
285WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
286A PARTICULAR PURPOSE.  See the GNU General Public License for more details.
287
288You should have received a copy of the GNU General Public License along with
289this program.  If not, see <http://www.gnu.org/licenses/>.
290

README.customs

1                                                            -*-indented-text-*-
2
3GNU make can utilize the Customs library, distributed with Pmake, to
4provide builds distributed across multiple hosts.
5
6In order to utilize this capability, you must first download and build
7the Customs library.  It is contained in the Pmake distribution, which
8can be obtained at:
9
10  ftp://ftp.icsi.berkeley.edu/pub/ai/stolcke/software/
11
12This integration was tested (superficially) with Pmake 2.1.33.
13
14
15BUILDING CUSTOMS
16----------------
17
18First, build pmake and Customs.  You need to build pmake first, because
19Customs require pmake to build.  Unfortunately, this is not trivial;
20please see the pmake and Customs documentation for details.  The best
21place to look for instructions is in the pmake-2.1.33/INSTALL file.
22
23Note that the 2.1.33 Pmake distribution comes with a set of patches to
24GNU make, distributed in the pmake-2.1.33/etc/gnumake/ directory.  These
25patches are based on GNU make 3.75 (there are patches for earlier
26versions of GNU make, also).  The parts of this patchfile which relate
27directly to Customs support have already been incorporated into this
28version of GNU make, so you should _NOT_ apply the patch file.
29
30However, there are a few non-Customs specific (as far as I could tell)
31changes here which are not incorporated (for example, the modification
32to try expanding -lfoo to libfoo.so).  If you rely on these changes
33you'll need to re-apply them by hand.
34
35Install the Customs library and header files according to the
36documentation.  You should also install the man pages (contrary to
37comments in the documentation, they weren't installed automatically for
38me; I had to cd to the ``pmake-2.1.33/doc'' directory and run ``pmake
39install'' there directly).
40
41
42BUILDING GNU MAKE
43-----------------
44
45Once you've installed Customs, you can build GNU make to use it.  When
46configuring GNU make, merely use the ``--with-customs=DIR'' option.
47Provide the directory containing the ``lib'' and ``include/customs''
48subdirectories as DIR.  For example, if you installed the customs
49library in /usr/local/lib and the headers in /usr/local/include/customs,
50then you'd pass ``--with-customs=/usr/local'' as an option to configure.
51
52Run make (or use build.sh) normally to build GNU make as described in
53the INSTALL file.
54
55See the documentation for Customs for information on starting and
56configuring Customs.
57
58
59INVOKING CUSTOMS-IZED GNU MAKE
60-----------------------------
61
62One thing you should be aware of is that the default build environment
63for Customs requires root permissions.  Practically, this means that GNU
64make must be installed setuid root to use Customs.
65
66If you don't want to do this, you can build Customs such that root
67permissions are not necessary.  Andreas Stolcke <stolcke@speech.sri.com>
68writes:
69
70 > pmake, gnumake or any other customs client program is not required to
71 > be suid root if customs was compiled WITHOUT the USE_RESERVED_PORTS
72 > option in customs/config.h.  Make sure the "customs" service in
73 > /etc/services is defined accordingly (port 8231 instead of 1001).
74
75 > Not using USE_RESERVED_PORTS means that a user with programming
76 > skills could impersonate another user by writing a fake customs
77 > client that pretends to be someone other than himself.  See the
78 > discussion in etc/SECURITY.
79
80
81PROBLEMS
82--------
83
84SunOS 4.1.x:
85  The customs/sprite.h header file #includes the <malloc.h> header
86  files; this conflicts with GNU make's configuration so you'll get a
87  compile error if you use GCC (or any other ANSI-capable C compiler).
88
89  I commented out the #include in sprite.h:107:
90
91    #if defined(sun) || defined(ultrix) || defined(hpux) || defined(sgi)
92    /* #include <malloc.h> */
93    #else
94
95  YMMV.
96
97
98-------------------------------------------------------------------------------
99Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008,
1002009, 2010 Free Software Foundation, Inc.
101This file is part of GNU Make.
102
103GNU Make is free software; you can redistribute it and/or modify it under the
104terms of the GNU General Public License as published by the Free Software
105Foundation; either version 3 of the License, or (at your option) any later
106version.
107
108GNU Make is distributed in the hope that it will be useful, but WITHOUT ANY
109WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
110A PARTICULAR PURPOSE.  See the GNU General Public License for more details.
111
112You should have received a copy of the GNU General Public License along with
113this program.  If not, see <http://www.gnu.org/licenses/>.
114

README.cvs

1                                                                     -*-text-*-
2
3-------------------------------------------------------------------------------
4Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free
5Software Foundation, Inc.  This file is part of GNU Make.
6
7GNU Make is free software; you can redistribute it and/or modify it under the
8terms of the GNU General Public License as published by the Free Software
9Foundation; either version 3 of the License, or (at your option) any later
10version.
11
12GNU Make is distributed in the hope that it will be useful, but WITHOUT ANY
13WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
14A PARTICULAR PURPOSE.  See the GNU General Public License for more details.
15
16You should have received a copy of the GNU General Public License along with
17this program.  If not, see <http://www.gnu.org/licenses/>.
18-------------------------------------------------------------------------------
19
20Obtaining CVS Code
21------------------
22
23This seems redundant, since if you're reading this you most likely have
24already performed this step; however, for completeness, you can obtain
25the GNU make source code via anonymous CVS from the FSF's Savannah
26project <http://savannah.gnu.org/projects/make/>:
27
28  $ cvs -d:pserver:anoncvs@cvs.savannah.gnu.org:/sources/make co make
29
30You might want to use the "-z3" option to get compression, and you most
31certainly will want the -P option to avoid unneeded directories
32cluttering up your source.  Personally I add these (as well as -dP for
33update) to my ~/.cvsrc file.
34
35
36If you have an older version of CVS, you might have to login first.
37There is no password; just hit the ENTER key if you are asked for one.
38
39
40Building From CVS
41-----------------
42
43To build GNU make from CVS, you will need Autoconf, Automake, and
44Gettext, and any tools that those utilities require (GNU m4, Perl,
45etc.).  See the configure.in file to find the minimum versions of each
46of these tools.  You will also need a copy of wget.
47
48When building from CVS you must build in the source directory: "VPATH
49builds" from remote directories are not supported.  Once you've created
50a distribution, of course, you can unpack it and do a VPATH build from
51there.
52
53After checking out the code, you will need to perform these steps to get
54to the point where you can run "make".
55
56
57 1) $ autoreconf -i
58
59    This rebuilds all the things that need rebuilding, installing
60    missing files as symbolic links.
61
62    You may get warnings here about missing files like README, etc.
63    Ignore them, they are harmless.
64
65
66 2) $ ./configure
67
68    Generate a Makefile
69
70
71 3) $ make update
72
73    Use wget to retrieve various other files that GNU make relies on,
74    but does not keep in its own source tree.
75
76    NB: You may need GNU make to correctly perform this step; if you use
77    a platform-local make you may get problems with missing files in doc/.
78
79
80At this point you have successfully brought your CVS copy of the GNU
81make source directory up to the point where it can be treated
82more-or-less like the official package you would get from ftp.gnu.org.
83That is, you can just run:
84
85  $ make && make check && make install
86
87to build and install GNU make.
88
89
90Windows builds from CVS
91-----------------------
92
93If you have a UNIX emulation like CYGWIN you can opt to run the general
94build procedure above; it will work.  Be sure to read
95README.W32.template for information on options you might want to use
96when running ./configure.
97
98If you can't or don't want to do that, then rename the file
99README.W32.template to README.W32 and follow those instructions.
100
101
102Creating a Package
103------------------
104
105Once you have performed the above steps (including the configuration and
106build) you can create a GNU make package.  This is very simple, just
107run:
108
109  $ make dist-gzip
110
111and, if you like:
112
113  $ make dist-bzip2
114
115Even better, you should run this:
116
117  $ make distcheck
118
119Which will build both .gz and .bz2 package files, then unpack them into
120a temporary location, try to build them, and repack them, verifying that
121everything works, you get the same results, _and_ no extraneous files
122are left over after the "distclean" rule--whew!!  Now, _that_ is why
123converting to Automake is worth the trouble!  A big "huzzah!" to Tom
124T. and the AutoToolers!
125
126
127Steps to Release
128----------------
129
130Here are the things that need to be done (in more or less this order)
131before making an official release:
132
133  * Update the configure.in file with the new release number.
134  * Update the NEWS file with the release number and date.
135  * Create the new release in the Savannah "Bugs" Administration for
136    both the "Component Version" and "Fixed Release" fields.
137  * Create the new release in the Savannah "Patches" Administration for
138    the "Fixed Release" field.
139  * Update the Savannah bug list URL in the NEWS file to use the correct
140    "Fixed Release" ID number.
141  * Run "make distcheck" to be sure it all works.
142  * Commit everything.
143  * cvs tag <RTAG> where RTAG is constructed by replacing each "." in
144    the version with "-" and prefixing it with "make-".
145
146
147Publishing a Package
148--------------------
149
150In order to publish a package on the FSF FTP site, either the release
151site ftp://ftp.gnu.org, or the prerelease site ftp://alpha.gnu.org, you
152first need to have my GPG private key and my passphrase to unlock it.
153And, you can't have them!  So there!  But, just so I remember here's
154what you do:
155
156  Make sure the "Steps to Release" are complete and committed and tagged.
157
158  cvs -d :pserver:anonymous@cvs.savannah.gnu.org:/sources/make \
159     export -r<RTAG> -d make-release make
160
161  cd make-release
162
163  <run the commands above to build the release>
164
165  make upload-alpha             # for alpha.gnu.org (pre-releases)
166       -OR-
167  make upload-ftp               # for ftp.gnu.org (official releases)
168
169It will ask for the GPG passphrase _THREE_ times.  Sigh.
170
171
172For both final releases and pre-releases, send an email with the URL of
173the package to the GNU translation robot to allow the translators to
174work on it:
175
176     <translation@iro.umontreal.ca>
177
178
179Where to Announce
180-----------------
181
182Create the announcement in a text file, then sign it with GPG.
183
184  gpg --clearsign <announcement.txt>
185
186Upload to gnu.org, then login and send from my account there.
187
188Email to: make-alpha@gnu.org, bug-make@gnu.org, help-make@gnu.org, make-w32@gnu.org.
189Email to: info-gnu@gnu.org
190
191Add a news item to the Savannah project site.
192
193Add an update to freshmeat.net.
194
195
196Appendix A - For The Brave
197--------------------------
198
199For those of you who trust me implicitly, or are just brave (or
200foolhardy), here is a canned sequence of commands to build a GNU make
201distribution package from a virgin CVS source checkout (assuming all the
202prerequisites are available of course).
203
204This list is eminently suitable for a quick swipe o' the mouse and a
205swift click o' mouse-2 into an xterm.  Go for it!
206
207autoreconf -i
208./configure
209make update
210make
211make check
212
213Or, for a debugging version:
214
215autoreconf -i && ./configure CFLAGS=-g && make update && make && make check
216
217Or, all-in-one:
218
219autoreconf -i && ./configure && make update && make && make check
220

README.template

1This directory contains the %VERSION% release of GNU Make.
2
3See the file NEWS for the user-visible changes from previous releases.
4In addition, there have been bugs fixed.
5
6Please check the system-specific notes below for any caveats related to
7your operating system.
8
9For general building and installation instructions, see the file INSTALL.
10
11If you need to build GNU Make and have no other `make' program to use,
12you can use the shell script `build.sh' instead.  To do this, first run
13`configure' as described in INSTALL.  Then, instead of typing `make' to
14build the program, type `sh build.sh'.  This should compile the program
15in the current directory.  Then you will have a Make program that you can
16use for `./make install', or whatever else.
17
18Some systems' Make programs are broken and cannot process the Makefile for
19GNU Make.  If you get errors from your system's Make when building GNU
20Make, try using `build.sh' instead.
21
22
23GNU Make is free software.  See the file COPYING for copying conditions.
24
25
26Downloading
27-----------
28
29GNU Make can be obtained in many different ways.  See a description here:
30
31  http://www.gnu.org/software/software.html
32
33
34Documentation
35-------------
36
37GNU make is fully documented in the GNU Make manual, which is contained
38in this distribution as the file make.texinfo.  You can also find
39on-line and preformatted (PostScript and DVI) versions at the FSF's web
40site.  There is information there about ordering hardcopy documentation.
41
42  http://www.gnu.org/
43  http://www.gnu.org/doc/doc.html
44  http://www.gnu.org/manual/manual.html
45
46
47Development
48-----------
49
50GNU Make development is hosted by Savannah, the FSF's online development
51management tool.  Savannah is here:
52
53  http://savannah.gnu.org
54
55And the GNU Make development page is here:
56
57  http://savannah.gnu.org/projects/make/
58
59You can find most information concerning the development of GNU Make at
60this site.
61
62
63Bug Reporting
64-------------
65
66You can send GNU make bug reports to <bug-make@gnu.org>.  Please see the
67section of the GNU make manual entitled `Problems and Bugs' for
68information on submitting useful and complete bug reports.
69
70You can also use the online bug tracking system in the Savannah GNU Make
71project to submit new problem reports or search for existing ones:
72
73  http://savannah.gnu.org/bugs/?group=make
74
75If you need help using GNU make, try these forums:
76
77  help-make@gnu.org
78  help-utils@gnu.org
79  news:gnu.utils.help
80  news:gnu.utils.bug
81
82  http://savannah.gnu.org/support/?group=make
83
84You may also find interesting patches to GNU Make available here:
85
86  http://savannah.gnu.org/patch/?group=make
87
88Note these patches are provided by our users as a service and we make no
89statements regarding their correctness.  Please contact the authors
90directly if you have a problem or suggestion for a patch available on
91this page.
92
93
94CVS Access
95----------
96
97The GNU make source repository is available via anonymous CVS from the
98GNU Subversions CVS server; look here for details:
99
100  http://savannah.gnu.org/cvs/?group=make
101
102Please note: you won't be able to build GNU make from CVS without
103installing appropriate maintainer's tools, such as GNU m4, automake,
104autoconf, Perl, GNU make, and GCC.  See the README.cvs file for hints on
105how to build GNU make once these tools are available.  We make no
106guarantees about the contents or quality of the latest code in the CVS
107repository: it is not unheard of for code that is known to be broken to
108be checked in.  Use at your own risk.
109
110
111System-specific Notes
112---------------------
113
114It has been reported that the XLC 1.2 compiler on AIX 3.2 is buggy such
115that if you compile make with `cc -O' on AIX 3.2, it will not work
116correctly.  It is said that using `cc' without `-O' does work.
117
118The standard /bin/sh on SunOS 4.1.3_U1 and 4.1.4 is broken and cannot be
119used to configure GNU make.  Please install a different shell such as
120bash or pdksh in order to run "configure".  See this message for more
121information:
122  http://mail.gnu.org/archive/html/bug-autoconf/2003-10/msg00190.html
123
124One area that is often a problem in configuration and porting is the code
125to check the system's current load average.  To make it easier to test and
126debug this code, you can do `make check-loadavg' to see if it works
127properly on your system.  (You must run `configure' beforehand, but you
128need not build Make itself to run this test.)
129
130Another potential source of porting problems is the support for large
131files (LFS) in configure for those operating systems that provide it.
132Please report any bugs that you find in this area.  If you run into
133difficulties, then as a workaround you should be able to disable LFS by
134adding the `--disable-largefile' option to the `configure' script.
135
136On systems that support micro- and nano-second timestamp values and
137where stat(2) provides this information, GNU make will use it when
138comparing timestamps to get the most accurate possible result.  However,
139note that many current implementations of tools that *set* timestamps do
140not preserve micro- or nano-second granularity.  This means that "cp -p"
141and other similar tools (tar, etc.) may not exactly duplicate timestamps
142with micro- and nano-second granularity on some systems.  If your build
143system contains rules that depend on proper behavior of tools like "cp
144-p", you should consider using the .LOW_RESOLUTION_TIME pseudo-target to
145force make to treat them properly.  See the manual for details.
146
147
148Ports
149-----
150
151  - See README.customs for details on integrating GNU make with the
152    Customs distributed build environment from the Pmake distribution.
153
154  - See readme.vms for details about GNU Make on OpenVMS.
155
156  - See README.Amiga for details about GNU Make on AmigaDOS.
157
158  - See README.W32 for details about GNU Make on Windows NT, 95, or 98.
159
160  - See README.DOS for compilation instructions on MS-DOS and MS-Windows
161    using DJGPP tools.
162
163    A precompiled binary of the MSDOS port of GNU Make is available as part
164    of DJGPP; see the WWW page http://www.delorie.com/djgpp/ for more
165    information.
166
167Please note there are two _separate_ ports of GNU make for Microsoft
168systems: a native Windows tool built with (for example) MSVC or Cygwin,
169and a DOS-based tool built with DJGPP.  Please be sure you are looking
170at the right README!
171
172
173-------------------------------------------------------------------------------
174Copyright (C) 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997,
1751998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009,
1762010 Free Software Foundation, Inc.
177This file is part of GNU Make.
178
179GNU Make is free software; you can redistribute it and/or modify it under the
180terms of the GNU General Public License as published by the Free Software
181Foundation; either version 3 of the License, or (at your option) any later
182version.
183
184GNU Make is distributed in the hope that it will be useful, but WITHOUT ANY
185WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
186A PARTICULAR PURPOSE.  See the GNU General Public License for more details.
187
188You should have received a copy of the GNU General Public License along with
189this program.  If not, see <http://www.gnu.org/licenses/>.
190

readme.vms

1This is the VMS version of GNU Make, updated by Hartmut Becker
2
3Changes are based on GNU make 3.82.
4
5This version was built and tested on OpenVMS V7.3 (VAX), V7.3-2 (Alpha) and
6V8.3-1H1 (I64).
7
8Build instructions
9Make a 1st version
10       $ @makefile.com  ! ignore any compiler and/or linker warning
11       $ rena make.exe 1st-make.exe
12Use the 1st version to generate a 2nd version
13       $ mc sys$disk:[]1st-make clean
14       $ mc sys$disk:[]1st-make
15Verify your 2nd version
16       $ rena make.exe 2nd-make.exe
17       $ mc sys$disk:[]2nd-make clean
18       $ mc sys$disk:[]2nd-make
19
20Changes (3.81.90)
21
22Michael Gehre (at VISTEC-SEMI dot COM) supplied a fix for a problem with
23timestamps of object modules in OLBs. The timestamps were not correctly
24adjusted to GMT based time, if the local VMS time was using a daylight saving
25algorithm and if daylight saving was switched off.
26
27John Eisenbraun (at HP dot COM) supplied fixes and and an enhancement to append
28output redirection in action lines.
29
30Rework of ctrl+c and ctrl+y handling.
31
32Fix a problem with cached strings, which showed on case-insensitive file
33systems.
34
35Build fixes for const-ified code in VMS specific sources.
36
37Build notes:
38- Try to avoid HP C V7.2-001, which has an incompatible change
39how __STDC__ is defined. This results at least in compile time warnings.
40
41- On V8.3-1H1, if you press Ctrl+C you may see a traceback, starting with
42%SYSTEM-F-CONTROLC, operation completed under CTRL/C
43%TRACE-F-TRACEBACK, symbolic stack dump follows
44image     module    routine               line      rel PC           abs PC
45
46DECC$SHR  C$SIGNAL  gsignal              27991 0000000000001180
47FFFFFFFF84AB2DA0
48DECC$SHR  C$SIGNAL  raise                28048 0000000000001280
49FFFFFFFF84AB2EA0
50DECC$SHR  C$SIGPENDING  decc$$deliver_signals
51                                         12475 0000000000000890
52FFFFFFFF84C13690
53...
54This looks like an incompatibility to the Alpha and VAX behavior, so it looks
55like a problem in I64 VMS version(s).
56
57- There is no clean build on VAX. In the environment I tested, I had to use GNU
58make's alloca which produced a couple of compile time warnings. It seems too
59much effort to work on a clean build on VAX.
60
61A note on appending the redirected output. With this change, a simple mechanism
62is implemented to make ">>" work in action lines. In VMS there is no simple
63feature like ">>" to have DCL command or program output redirected and appended
64to a file. GNU make for VMS already implements the redirection of output. If
65such a redirection is detected, an ">" on the action line, GNU make creates a
66DCL command procedure to execute the action and to redirect its output. Based
67on that, now ">>" is also recognized and a similar but different command
68procedure is created to implement the append. The main idea here is to create a
69temporary file which collects the output and which is appended to the wanted
70output file. Then the temporary file is deleted. This is all done in the
71command procedure to keep changes in make small and simple. This obviously has
72some limitations but it seems good enough compared with the current ">"
73implementation. (And in my opinion, redirection is not really what GNU make has
74to do.) With this approach, it may happen that the temporary file is not yet
75appended and is left in SYS$SCRATCH. The temporary file names look like
76"CMDxxxxx.". Any time the created command procedure can not complete, this
77happens. Pressing Ctrl+Y to abort make is one case. In case of Ctrl+Y the
78associated command procedure is left in SYS$SCRATCH as well. Its name is
79CMDxxxxx.COM.
80
81Change in the Ctrl+Y handling
82
83Ctrl+Y was: The CtrlY handler called $forcex for the current child.
84
85Ctrl+Y changed: The CtrlY handler uses $delprc to delete all children. This way
86also actions with DCL commands will be stopped. As before Ctrl+Y then sends
87SIGQUIT to itself, which is handled in common code.
88
89Change in deleteing temporary command files
90
91Temporary command files were deleted in the main line, after returning from the
92vms child termination handler. If Ctrl+C was pressed, the handler is called but
93did not return to main line.
94
95Now, temporary command files are deleted in the vms child termination
96handler. That deletes the them even if a Ctrl+C was pressed.
97
98The behavior of pressing Ctrl+C is not changed. It still has only an effect,
99after the current action is terminated. If that doesn't happen or takes too
100long, Ctrl+Y should be used instead.
101
102Changes (3.80)
103
104. In default.c define variable ARCH as IA64 for VMS on Itanium systems.
105
106. In makefile.vms avoid name collision for glob and globfree.
107
108In newer version of the VMS CRTL there are glob and globfree implemented.
109Compiling and linking may result in
110
111  %ILINK-W-MULDEFLNKG, symbol DECC$GLOBFREE has subsequent linkage definition
112       in module DECC$SHR file SYS$COMMON:[SYSLIB]DECC$SHR.EXE;1
113  %ILINK-W-MULDEF, symbol DECC$GLOBFREE multiply defined
114       in module DECC$SHR file SYS$COMMON:[SYSLIB]DECC$SHR.EXE;1
115
116linker messages (and similar for DECC$GLOB). The messages just say, that
117globfree is a known CRTL whose name was mapped by the compiler to
118DECC$GLOBFREE.  This is done in glob.c as well, so this name is defined
119twice. One possible solution is to use the VMS versions of glob and
120globfree. However, then the build environment needs to figure out if
121there is a new CRTL supporting these or not. This adds complexity. Even
122more, these functions return VMS file specifications, which is not
123expected by the other make sources. There is a switch at run time (a VMS
124logical DECC$GLOB_UNIX_STYLE), which can be set to get Unix style
125names. This may conflict with other software. The recommended solution
126for this is to set this switch just prior to calling main: in an
127initialization routine. This adds more complexity and more VMS specific
128code. It is easier to tell the compiler NOT to map the routine names
129with a simple change in makefile.vms.
130
131Some notes on case sensitive names in rules and on the disk. In the VMS
132template for CONFIG.H case sensitive rules can be enabled with defining
133WANT_CASE_SENSITIVE_TARGETS. For recent version of VMS there is a case
134sensitive file system: ODS5. To make use of that, additionally un-defining
135the HAVE_CASE_INSENSITIVE_FS is required. As these are C macros, different
136versions of make need to be built to have any case sensitivity for VMS
137working. Unfortunately, for ODS5 disks that's not all.
138
139- Usually DCL upcases command line tokens (except strings) and usually the
140  file system is case blind (similar to how Windows systems work)
141	$ set proc/parse=extended/case=sensitive
142  preserves lower and UPPER on the command line and (for this process and all
143  sub-processes) enables case sensitivity in the file system
144
145- Usually the CRTL tries to reverse what DCL did with command line tokens, it
146  lowercases all tokens (except strings)
147	$ define DECC$ARGV_PARSE_STYLE enable
148  passes (the now preserved) lower and UPPER from the command line to main()
149
150- Usually the CRTL upcases the arguments to open() and friends
151	$ define DECC$EFS_CASE_PRESERVE enable
152  preserves the names as is.
153
154It is important to know that not all VMS tools are ready for case sensitivity.
155With this setup some tools may not work as expected. The setup should not
156blindly be applied for all users in default login procedures.
157
158Example? The poor coding gives a compiler message, showing that there are
159different files:
160
161$ dir
162
163Directory ODS5DISK[HB]
164
165A.c;1               B.c;1               c.c;1               X.c;1
166x.c;1
167
168Total of 5 files.
169$ ods5make x.obj
170cc    /obj=x.obj x.c
171
172foo(){lowercase_x();}
173......^
174%CC-I-IMPLICITFUNC, In this statement, the identifier "lowercase_x" is implicitly declared as a function.
175at line number 1 in file ODS5DISK[HB]x.c;1
176$ mc SYS$SYSDEVICE:[HARTMUT.MAKE_3_80P]ods5make X.obj
177cc    /obj=X.obj X.c
178
179foo() {UPPERCASE_X();}
180.......^
181%CC-I-IMPLICITFUNC, In this statement, the identifier "UPPERCASE_X" is implicitly declared as a function.
182at line number 1 in file ODS5DISK[HB]X.c;1
183$ dir
184
185Directory ODS5DISK[HB]
186
187A.c;1               B.c;1               c.c;1               X.c;1
188x.c;1               X.obj;1             x.obj;1
189
190Total of 7 files.
191$
192
193This is the VMS port of GNU Make done by Hartmut.Becker@compaq.com.
194
195It is based on the specific version 3.77k and on 3.78.1. 3.77k was done
196by Klaus K�mpf <kkaempf@rmi.de>, the code was based on the VMS port of
197GNU Make 3.60 by Mike Moretti.
198
199It was ported on OpenVMS/Alpha V7.1, DECC V5.7-006. It was re-build and
200tested on OpenVMS/Alpha V7.2, OpenVMS/VAX 7.1 and 5.5-2. Different
201versions of DECC were used. VAXC was tried: it fails; but it doesn't
202seem worth to get it working. There are still some PTRMISMATCH warnings
203during the compile. Although perl is working on VMS the test scripts
204don't work. The function $shell is still missing.
205
206There is a known bug in some of the VMS CRTLs. It is in the shipped
207versions of VMS V7.2 and V7.2-1 and in the currently (October 1999)
208available ECOs for VMS V7.1 and newer versions. It is fixed in versions
209shipped with newer VMS versions and all ECO kits after October 1999. It
210only shows up during the daylight saving time period (DST): stat()
211returns a modification time 1 hour ahead. This results in GNU make
212warning messages. For a just created source you will see:
213
214 $ gmake x.exe
215 gmake.exe;1: *** Warning: File `x.c' has modification time in the future (940582863 > 940579269)
216 cc    /obj=x.obj x.c
217 link  x.obj    /exe=x.exe
218 gmake.exe;1: *** Warning:  Clock skew detected.  Your build may be incomplete.
219
220
221New in 3.78.1:
222
223Fix a problem with automatically remaking makefiles. GNU make uses an
224execve to restart itself after a successful remake of the makefile. On
225UNIX systems execve replaces the running program with a new one and
226resets all signal handling to the default. On VMS execve creates a child
227process, signal and exit handlers of the parent are still active, and,
228unfortunately, corrupt the exit code from the child. Fix in job.c:
229ignore SIGCHLD.
230
231Added some switches to reflect latest features of DECC. Modifications in
232makefile.vms.
233
234Set some definitions to reflect latest features of DECC. Modifications in
235config.h-vms (which is copied to config.h).
236
237Added extern strcmpi declaration to avoid 'implicitly declared' messages.
238Modification in make.h.
239
240Default rule for C++, conditionals for gcc (GCC_IS_NATIVE) or DEC/Digital/
241Compaq c/c++ compilers. Modifications in default.c.
242
243Usage of opendir() and friends, suppress file version. Modifications in dir.c.
244
245Added VMS specific code to handle ctrl+c and ctrl+y to abort make.
246Modifications in job.c.
247
248Added support to have case sensitive targets and dependencies but to
249still use case blind file names. This is especially useful for Java
250makefiles on VMS:
251
252	.SUFFIXES :
253	.SUFFIXES :	.class .java
254	.java.class :
255		javac "$<
256	HelloWorld.class :      HelloWorld.java
257
258A new macro WANT_CASE_SENSITIVE_TARGETS in config.h-vms was introduced.
259It needs to be enabled to get this feature; default is disabled.  The
260macro HAVE_CASE_INSENSITIVE_FS must not be touched: it is still enabled.
261Modifications in file.c and config.h-vms.
262
263Bootstrap make to start building make is still makefile.com, but make
264needs to be re-made with a make to make a correct version: ignore all
265possible warnings, delete all objects, rename make.exe to a different
266name and run it.
267
268Made some minor modifications to the bootstrap build makefile.com.
269
270This is the VMS port of GNU Make.
271
272It is based on the VMS port of GNU Make 3.60 by Mike Moretti.
273
274This port was done by Klaus K�mpf <kkaempf@rmi.de>
275
276There is first-level support available from proGIS Software, Germany.
277Visit their web-site at http://www.progis.de to get information
278about other vms software and forthcoming updates to gnu make.
279
280New for 3.77:
281
282/bin/sh style I/O redirection is supported. You can now write lines like
283	mcr sys$disk:[]program.exe < input.txt > output.txt &> error.txt
284
285Makefile variables are looked up in the current environment. You can set
286symbols or logicals in DCL and evaluate them in the Makefile via
287$(<name-of-symbol-or-logical>).  Variables defined in the Makefile
288override VMS symbols/logicals !
289
290Functions for file names are working now. See the GNU Make manual for
291$(dir ...)  and $(wildcard ...).  Unix-style and VMS-style names are
292supported as arguments.
293
294The default rules are set up for GNU C. Building an executable from a
295single source file is as easy as 'make file.exe'.
296
297The variable $(ARCH) is predefined as ALPHA or VAX resp. Makefiles for
298different VMS systems can now be written by checking $(ARCH) as in
299  ifeq ($(ARCH),ALPHA)
300    $(ECHO) "On the Alpha"
301  else
302    $(ECHO) "On the VAX"
303  endif
304
305Command lines of excessive length are correctly broken and written to a
306batch file in sys$scratch for later execution. There's no limit to the
307lengths of commands (and no need for .opt files :-) any more.
308
309Empty commands are handled correctly and don't end in a new DCL process.
310
311
312New for 3.76:
313
314John W. Eaton has updated the VMS port to support libraries and VPATH.
315
316
317To build Make, simply type @makefile.  This should compile all the
318necessary files and link Make.  There is also a file called
319makefile.vms.  If you already have GNU Make built you can just use
320Make with this makefile to rebuild.
321
322Here are some notes about GNU Make for VMS:
323
324The cd command is supported if it's called as $(CD). This invokes
325the 'builtin_cd' command which changes the directory.
326Calling 'set def' doesn't do the trick, since a sub-shell is
327spawned for this command, the directory is changed *in this sub-shell*
328and the sub-shell ends.
329
330Libraries are not supported. They were in GNU Make 3.60 but somehow I
331didn't care porting the code. If there is enough interest, I'll do it at
332some later time.
333
334The variable $^ separates files with commas instead of spaces (It's the
335natural thing to do for VMS).
336
337See defaults.c for VMS default suffixes and my definitions for default
338rules and variables.
339
340The shell function is not implemented yet.
341
342Load average routines haven't been implemented for VMS yet.
343
344The default include directory for including other makefiles is
345SYS$SYSROOT:[SYSLIB] (I don't remember why I didn't just use
346SYS$LIBRARY: instead; maybe it wouldn't work that way).
347
348The default makefiles make looks for are: makefile.vms, gnumakefile,
349makefile., and gnumakefile. .
350
351The stat() function and handling of time stamps in VMS is broken, so I
352replaced it with a hack in vmsfunctions.c. I will provide a full rewrite
353somewhere in the future. Be warned, the time resolution inside make is
354less than what vms provides. This might be a problem on the faster Alphas.
355
356You can use a : in a filename only if you preceed it with a backslash ('\').
357E.g.- hobbes\:[bogas.files]
358
359Make ignores success, informational, or warning errors (-S-, -I-, or
360-W-).  But it will stop on -E- and -F- errors. (unless you do something
361to override this in your makefile, or whatever).
362
363Remote stuff isn't implemented yet.
364
365Multiple line DCL commands, such as "if" statements, must be put inside
366command files.  You can run a command file by using \@.
367
368
369VMS changes made for 3.74.3
370
371Lots of default settings are adapted for VMS. See default.c.
372
373Long command lines are now converted to command files.
374
375Comma (',') as a separator is now allowed. See makefile.vms for an example.
376
377-------------------------------------------------------------------------------
378Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
3792006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc.
380This file is part of GNU Make.
381
382GNU Make is free software; you can redistribute it and/or modify it under the
383terms of the GNU General Public License as published by the Free Software
384Foundation; either version 3 of the License, or (at your option) any later
385version.
386
387GNU Make is distributed in the hope that it will be useful, but WITHOUT ANY
388WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
389A PARTICULAR PURPOSE.  See the GNU General Public License for more details.
390
391You should have received a copy of the GNU General Public License along with
392this program.  If not, see <http://www.gnu.org/licenses/>.
393