Home | History | Annotate | Download | only in make-3.81
      1 Port of GNU Make to 32-bit protected mode on MSDOS and MS-Windows.
      2 
      3 Builds with DJGPP v2 port of GNU C/C++ compiler and utilities.
      4 
      5 
      6 New (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 
     37 To 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 
     47 To 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 
    131 Notes:
    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 (a] 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 
    309 Bug 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 (a] 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 (a] is.elta.co.il>
    324 
    325 
    327 -------------------------------------------------------------------------------
    328 Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
    329 2006 Free Software Foundation, Inc.
    330 This file is part of GNU Make.
    331 
    332 GNU Make is free software; you can redistribute it and/or modify it under the
    333 terms of the GNU General Public License as published by the Free Software
    334 Foundation; either version 2, or (at your option) any later version.
    335 
    336 GNU Make is distributed in the hope that it will be useful, but WITHOUT ANY
    337 WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
    338 A PARTICULAR PURPOSE.  See the GNU General Public License for more details.
    339 
    340 You should have received a copy of the GNU General Public License along with
    341 GNU Make; see the file COPYING.  If not, write to the Free Software
    342 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
    343