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-3.81\configure.bat c:/djgpp/gnu/make-3.81
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-3.81
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 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 2, or (at your option) any later version.
334
335GNU Make is distributed in the hope that it will be useful, but WITHOUT ANY
336WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
337A PARTICULAR PURPOSE.  See the GNU General Public License for more details.
338
339You should have received a copy of the GNU General Public License along with
340GNU Make; see the file COPYING.  If not, write to the Free Software
341Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
342