|
Name |
|
Date |
Size |
#Lines |
LOC |
| .. | | 18-Jul-2017 | - |
| config/ | H | 18-Jul-2017 | - | 110 | 75 |
| doc/ | H | 18-Jul-2017 | - | 11,496 | 9,443 |
| glob/ | H | 07-May-2022 | - | 2,655 | 1,955 |
| kmkbuiltin/ | H | 28-Nov-2017 | - | 20,742 | 14,786 |
| po/ | H | 18-Jul-2017 | - | 194 | 144 |
| tests/ | H | 18-Jul-2017 | - | 14,930 | 10,932 |
| w32/ | H | 28-Nov-2017 | - | 2,821 | 1,773 |
| .purify | H A D | 18-Jul-2017 | 596 | 13 | 11 |
| AUTHORS | H A D | 18-Jul-2017 | 2.8 KiB | 84 | 65 |
| COPYING | H A D | 18-Jul-2017 | 34.3 KiB | 675 | 553 |
| ChangeLog | H A D | 18-Jul-2017 | 149.6 KiB | 4,019 | 2,965 |
| ChangeLog.1 | H A D | 18-Jul-2017 | 182.8 KiB | 5,000 | 3,352 |
| ChangeLog.2 | H A D | 18-Jul-2017 | 245 KiB | 6,655 | 4,672 |
| INSTALL | H A D | 18-Jul-2017 | 9.1 KiB | 232 | 176 |
| Makefile.DOS.template | H A D | 18-Jul-2017 | 19.2 KiB | 589 | 469 |
| Makefile.am | H A D | 28-Nov-2017 | 9 KiB | 322 | 221 |
| Makefile.ami | H A D | 18-Jul-2017 | 10.1 KiB | 308 | 173 |
| Makefile.kmk | H A D | 28-Nov-2017 | 15.2 KiB | 707 | 528 |
| Makefile.os2 | H A D | 18-Jul-2017 | 1.2 KiB | 48 | 32 |
| NEWS | H A D | 18-Jul-2017 | 47.3 KiB | 1,114 | 816 |
| NMakefile.template | H A D | 18-Jul-2017 | 3.9 KiB | 123 | 106 |
| README.Amiga | H A D | 18-Jul-2017 | 2.7 KiB | 79 | 57 |
| README.DOS.template | H A D | 18-Jul-2017 | 15.6 KiB | 342 | 262 |
| README.OS2.template | H A D | 18-Jul-2017 | 6.5 KiB | 178 | 128 |
| README.W32.template | H A D | 18-Jul-2017 | 11.4 KiB | 290 | 212 |
| README.customs | H A D | 18-Jul-2017 | 4.5 KiB | 114 | 81 |
| README.cvs | H A D | 18-Jul-2017 | 7 KiB | 220 | 143 |
| README.template | H A D | 18-Jul-2017 | 7 KiB | 190 | 130 |
| SCOPTIONS | H A D | 18-Jul-2017 | 195 | 14 | 13 |
| SMakefile.template | H A D | 18-Jul-2017 | 6.6 KiB | 215 | 178 |
| TODO.private | H A D | 18-Jul-2017 | 6.8 KiB | 143 | 112 |
| acinclude.m4 | H A D | 18-Jul-2017 | 4.7 KiB | 130 | 124 |
| alloca.c | H A D | 18-Jul-2017 | 13.9 KiB | 504 | 292 |
| alloccache.c | H A D | 18-Jul-2017 | 7.5 KiB | 250 | 162 |
| amiga.c | H A D | 18-Jul-2017 | 2.6 KiB | 119 | 82 |
| amiga.h | H A D | 18-Jul-2017 | 901 | 20 | 2 |
| ar.c | H A D | 18-Jul-2017 | 7.1 KiB | 288 | 181 |
| arscan.c | H A D | 18-Jul-2017 | 21.5 KiB | 868 | 592 |
| build.template | H A D | 18-Jul-2017 | 2.6 KiB | 83 | 40 |
| build_w32.bat | H A D | 18-Jul-2017 | 21.4 KiB | 204 | 201 |
| commands.c | H A D | 18-Jul-2017 | 24.6 KiB | 935 | 679 |
| commands.h | H A D | 18-Jul-2017 | 2.8 KiB | 71 | 44 |
| config.ami.template | H A D | 18-Jul-2017 | 9.8 KiB | 345 | 238 |
| config.h-vms.template | H A D | 18-Jul-2017 | 12.4 KiB | 430 | 307 |
| config.h.W32.template | H A D | 18-Jul-2017 | 15 KiB | 523 | 370 |
| config.h.darwin | H A D | 18-Jul-2017 | 12.4 KiB | 445 | 305 |
| config.h.freebsd | H A D | 18-Jul-2017 | 12.1 KiB | 434 | 298 |
| config.h.haiku | H A D | 18-Jul-2017 | 12.7 KiB | 460 | 319 |
| config.h.linux | H A D | 18-Jul-2017 | 13.1 KiB | 475 | 329 |
| config.h.netbsd | H A D | 28-Nov-2017 | 12.7 KiB | 460 | 319 |
| config.h.os2 | H A D | 18-Jul-2017 | 13.1 KiB | 477 | 328 |
| config.h.solaris | H A D | 18-Jul-2017 | 12.3 KiB | 440 | 301 |
| config.h.win | H A D | 18-Jul-2017 | 16.3 KiB | 573 | 410 |
| configh.dos.template | H A D | 18-Jul-2017 | 3.6 KiB | 122 | 82 |
| configure.bat | H A D | 18-Jul-2017 | 2 KiB | 62 | 51 |
| configure.in | H A D | 18-Jul-2017 | 14.9 KiB | 482 | 407 |
| debug.h | H A D | 18-Jul-2017 | 2.3 KiB | 68 | 34 |
| default.c | H A D | 18-Jul-2017 | 16.8 KiB | 625 | 509 |
| dep.h | H A D | 18-Jul-2017 | 4 KiB | 121 | 72 |
| dir-nt-bird.c | H A D | 18-Jul-2017 | 23.1 KiB | 725 | 464 |
| dir.c | H A D | 28-Nov-2017 | 39 KiB | 1,509 | 1,203 |
| dosbuild.bat | H A D | 18-Jul-2017 | 3.2 KiB | 64 | 61 |
| electric.c | H A D | 18-Jul-2017 | 4.9 KiB | 221 | 170 |
| electric.h | H A D | 18-Jul-2017 | 1.7 KiB | 66 | 33 |
| expand.c | H A D | 18-Jul-2017 | 37.3 KiB | 1,297 | 881 |
| expreval.c | H A D | 28-Nov-2017 | 53 KiB | 2,144 | 1,192 |
| file.c | H A D | 18-Jul-2017 | 38.8 KiB | 1,424 | 1,066 |
| filedef.h | H A D | 18-Jul-2017 | 10.7 KiB | 248 | 126 |
| function.c | H A D | 18-Jul-2017 | 162.1 KiB | 6,086 | 4,486 |
| getloadavg.c | H A D | 18-Jul-2017 | 25.5 KiB | 1,029 | 678 |
| getopt.c | H A D | 18-Jul-2017 | 29.2 KiB | 1,031 | 611 |
| getopt.h | H A D | 18-Jul-2017 | 4.5 KiB | 133 | 48 |
| getopt1.c | H A D | 18-Jul-2017 | 4.3 KiB | 179 | 113 |
| gettext.h | H A D | 18-Jul-2017 | 2.5 KiB | 59 | 20 |
| hash.c | H A D | 18-Jul-2017 | 13.4 KiB | 539 | 432 |
| hash.h | H A D | 18-Jul-2017 | 9.2 KiB | 252 | 191 |
| implicit.c | H A D | 18-Jul-2017 | 33.1 KiB | 992 | 604 |
| incdep.c | H A D | 28-Nov-2017 | 55 KiB | 1,887 | 1,457 |
| inlined_memchr.h | H A D | 18-Jul-2017 | 4.5 KiB | 163 | 157 |
| job.c | H A D | 28-Nov-2017 | 105.5 KiB | 3,652 | 2,504 |
| job.h | H A D | 18-Jul-2017 | 3.6 KiB | 117 | 78 |
| kbuild-object.c | H A D | 28-Nov-2017 | 50.1 KiB | 1,410 | 905 |
| kbuild.c | H A D | 28-Nov-2017 | 97.9 KiB | 2,842 | 1,818 |
| kbuild.h | H A D | 18-Jul-2017 | 3.7 KiB | 78 | 37 |
| kbuildprf.c | H A D | 18-Jul-2017 | 837 | 50 | 36 |
| kdepdb.c | H A D | 18-Jul-2017 | 30.9 KiB | 1,088 | 612 |
| kmk_cc_exec.c | H A D | 18-Jul-2017 | 249.3 KiB | 6,610 | 4,075 |
| kmk_cc_exec.h | H A D | 18-Jul-2017 | 1.6 KiB | 49 | 17 |
| kmkbuiltin.c | H A D | 28-Nov-2017 | 10.4 KiB | 340 | 249 |
| kmkbuiltin.h | H A D | 28-Nov-2017 | 4.3 KiB | 103 | 65 |
| main.c | H A D | 28-Nov-2017 | 118.2 KiB | 4,119 | 2,913 |
| maintMakefile | H A D | 18-Jul-2017 | 9.1 KiB | 289 | 232 |
| make.1 | H A D | 18-Jul-2017 | 10 KiB | 360 | 359 |
| make.h | H A D | 03-May-2022 | 27.5 KiB | 996 | 758 |
| make_msvc_net2003.sln | H A D | 18-Jul-2017 | 923 | 22 | 21 |
| make_msvc_net2003.vcproj | H A D | 18-Jul-2017 | 7.1 KiB | 318 | 317 |
| makefile.com | H A D | 18-Jul-2017 | 4.8 KiB | 157 | 156 |
| makefile.vms | H A D | 18-Jul-2017 | 4.8 KiB | 150 | 83 |
| misc.c | H A D | 28-Nov-2017 | 37.1 KiB | 1,550 | 1,137 |
| prepare_w32.bat | H A D | 18-Jul-2017 | 325 | 7 | 6 |
| read.c | H A D | 18-Jul-2017 | 114.4 KiB | 3,967 | 2,761 |
| readme.vms | H A D | 18-Jul-2017 | 15.8 KiB | 393 | 291 |
| remake.c | H A D | 18-Jul-2017 | 62.6 KiB | 2,046 | 1,363 |
| remote-cstms.c | H A D | 18-Jul-2017 | 8.2 KiB | 302 | 182 |
| remote-stub.c | H A D | 18-Jul-2017 | 2.9 KiB | 102 | 47 |
| rule.c | H A D | 18-Jul-2017 | 14.6 KiB | 549 | 341 |
| rule.h | H A D | 18-Jul-2017 | 2.1 KiB | 60 | 30 |
| signame.c | H A D | 18-Jul-2017 | 6.8 KiB | 257 | 182 |
| strcache.c | H A D | 28-Nov-2017 | 7.7 KiB | 285 | 178 |
| strcache2.c | H A D | 28-Nov-2017 | 38.9 KiB | 1,328 | 1,026 |
| strcache2.h | H A D | 18-Jul-2017 | 6.9 KiB | 183 | 119 |
| subproc.bat | H A D | 18-Jul-2017 | 967 | 25 | 23 |
| testcase-2ndtargetexp.kmk | H A D | 18-Jul-2017 | 1.8 KiB | 69 | 55 |
| testcase-if1of.kmk | H A D | 18-Jul-2017 | 1.7 KiB | 81 | 71 |
| testcase-includedep-sub.kmk | H A D | 18-Jul-2017 | 956 | 29 | 25 |
| testcase-includedep.kmk | H A D | 18-Jul-2017 | 2.5 KiB | 91 | 74 |
| testcase-kBuild-define.kmk | H A D | 18-Jul-2017 | 5.1 KiB | 142 | 120 |
| testcase-lazy-deps-vars.kmk | H A D | 18-Jul-2017 | 2.3 KiB | 73 | 60 |
| testcase-libpath.kmk | H A D | 18-Jul-2017 | 1.3 KiB | 21 | 18 |
| testcase-local.kmk | H A D | 18-Jul-2017 | 2.8 KiB | 128 | 98 |
| testcase-math.kmk | H A D | 18-Jul-2017 | 3.3 KiB | 99 | 88 |
| testcase-root.kmk | H A D | 18-Jul-2017 | 338 | 31 | 22 |
| testcase-stack.kmk | H A D | 18-Jul-2017 | 2.8 KiB | 87 | 80 |
| testcase-which.kmk | H A D | 18-Jul-2017 | 78 | 6 | 3 |
| testcase-xargs.kmk | H A D | 18-Jul-2017 | 2 KiB | 60 | 48 |
| variable.c | H A D | 28-Nov-2017 | 101.3 KiB | 3,321 | 2,574 |
| variable.h | H A D | 28-Nov-2017 | 21.8 KiB | 543 | 412 |
| version.c | H A D | 18-Jul-2017 | 1.3 KiB | 36 | 6 |
| vmsdir.h | H A D | 18-Jul-2017 | 1.8 KiB | 78 | 44 |
| vmsfunctions.c | H A D | 18-Jul-2017 | 6.2 KiB | 263 | 195 |
| vmsify.c | H A D | 18-Jul-2017 | 18.2 KiB | 1,006 | 799 |
| vmsjobs.c | H A D | 18-Jul-2017 | 18 KiB | 726 | 540 |
| vpath.c | H A D | 18-Jul-2017 | 17.8 KiB | 631 | 362 |
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