[comp.sys.ibm.pc] A Unix-compatible "make" for MS-DOS

drk@athena.mit.edu (David R Kohr) (05/03/89)

I have been comparing the "make" program that comes with Borland
Turbo C 2.0 with the "make" on Sun Unix (v. 3.5) and have found it
to be largely incompatible.  Can anyone recommend a "make" that is
very closely compatible with Unix "make"?  I'd prefer something
that's public-domain or shareware, but I might consider commercial
offerings as well.  (The chief incompatibilities that I've encountered
are the syntax for file inclusion, lack of built-in implicit rules
like ".c.obj" in Borland's make, a serious bug in Borland's make
involving the definition of macros within !include'd files, and
the handling of shell commands--especially cd--within action lines.)
		David R. Kohr, M.I.T. Lincoln Laboratory
	email:	KOHR@LL.LL.MIT.EDU (preferred) OR drk@athena.mit.edu
	phone:	(617)981-0775 (work), (617)527-3908 (home)

brown@astroatc.UUCP (Vidiot) (05/03/89)

In article <11053@bloom-beacon.MIT.EDU> drk@athena.mit.edu (David R Kohr) writes:
<I have been comparing the "make" program that comes with Borland
<Turbo C 2.0 with the "make" on Sun Unix (v. 3.5) and have found it
<to be largely incompatible.  Can anyone recommend a "make" that is
<very closely compatible with Unix "make"?  I'd prefer something
<that's public-domain or shareware, but I might consider commercial
<offerings as well.  (The chief incompatibilities that I've encountered
<are the syntax for file inclusion, lack of built-in implicit rules
<like ".c.obj" in Borland's make, a serious bug in Borland's make
<involving the definition of macros within !include'd files, and
<the handling of shell commands--especially cd--within action lines.)

Check your local BBS for NDMAKE.  You can get it from BROWNBULL,
(608) 274-9275 24hrs/day, 300-1200-2400 w/MNP.  Details about OPUS make,
are attached below.









                                    OPUS Software
                                      presents
                                OPUS MAKE version 5.0



          _I_n_t_r_o_d_u_c_t_i_o_n

               In an effort to provide better  products  and  service,  the
          OPUS Software company has been created.  The first offering is an
          updated version of the shareware program NDMAKE.  OPUS MAKE  ver-
          sion  5.0  is  written by the same author as is NDMAKE.  The name
          change was necessary to distinguish the shareware from  the  com-
          mercial  version.   In  the  rest of this document, the name MAKE
          will refer to this version of OPUS MAKE.

          _F_e_a_t_u_r_e_s

               MAKE is available in two packages:  a  professional  version
          and  a  somewhat scaled down personal version.  MAKE includes all
          the features of NDMAKE 4.5 with the addition of:


           o+ Conditional directives.  _i_f/_e_l_s_e/_e_l_i_f/_e_n_d_i_f directives provide
             both  read-time  and  run-time control in MAKE.  If the condi-
             tional starts in the first column of the makefile,  it  is  in
             effect  when  the  makefile is read in.  If the conditional is
             part of the set of shell lines associated with updating a tar-
             get,  the conditional is evaluated at run-time.  An example of
             these is a compile-edit loop which  will  be  shown  a  little
             later.

           o+ Loop directives.  _f_o_r_e_a_c_h/_w_h_i_l_e/_b_r_e_a_k/_c_o_n_t_i_n_u_e/_e_n_d  directives
             provide  iteration  capability to MAKE.  Basically, they allow
             you to do shell lines a controllable number of times.

           o+ Include and error directives.  These allow MAKE the ability to
             read in other files and to abort the make under user control.

           o+ Internalized redirection.  Support  for  all  methods  of  DOS
             redirection  (except  pipes) have been internalized into MAKE.
             As well, MAKE supports the additional modes  >&  and  >>&  for
             redirecting standard error messages.  In conjunction with con-
             ditional and loop directives, it is possible to redirect error
             messages  into a file, and depending on the exit status of the
             compile (available with the _s_t_a_t_u_s macro), invoke an editor or
             remove the error file.

          Here is an example of the use of several  of  the  aforementioned
          features in an automatic compile-edit loop.
















          CV      =
          !if $(CV)                     # if CV is not null we use CodeView
          CFLAGS  = -Od -Zi
          !else
          CFLAGS  = -Ox
          !endif

          # A default rule for .c -> .obj files.  If the compile is successful,
          # break out of the enclosing loop (removing the error file).  Otherwise,
          # startup the BRIEF editor and use the next_error macro to find the
          # first error in the source file.  Note the use of >& redirection to
          # redirect error messages from the compiler into the error file.
          .c.obj:
                  !while 1              # Loop forever
                          - cl ${CFLAGS} -c $< >& $*.err
                          !if $(status) == 0
                                  !break# quit if no error
                          !endif
                          b -mnext_error $<# else start up BRIEF
                  !end
                  rm $*.err



           o+ Small and large model executables.  The small model executable
             has  a limit of 64K of data, which may not be enough for large
             or complicated makefiles.  The large model executable supports
             up to 1M of data.

           o+ Update to an OS/2 version for a nominal charge as soon  as  we
             have one.  We will be fully supporting OS/2.


          The following are available with the professional version:


           o+ Reduced memory usage.  MAKE uses a paging scheme to reduce its
             memory  usage from about 45000 bytes down to 2000 bytes.  This
             makes it feasible to run MAKE from inside an  editor  such  as
             BRIEF  without  running  into  memory shortage problems.  This
             feature is crutial for memory hunger applications.

           o+ Polytron PVCS support. MAKE can read Polytron PVCS  log  files
             to  determine  the  time  and date of files.  This ensures the
             correct time will be used when comparing  files  with  sources
             stored in the log files.

           o+ Automatic makefile generator.   To  ease  the  generation  and
             maintenance  of  makefiles, the MKMF program is also included.
             This collects a list of source files (you  determine  what  it
             considers  to be sources) from your working directory, option-
             ally scans them for include files and writes  out  an  updated














             makefile  with  several macros corrected (most notably, OBJS).
             MKMF also generates a list of dependencies of object files  on
             source files, including include files.

           o+ "Maximum work" flag.  In addition to the -k flag (keep  going,
             ignoring  errors),  there  is a -K flag which is slightly dif-
             ferent and more useful.  MAKE keeps track of which targets had
             errors  and  doesn't try to make targets which depend on these
             targets.  -K allows the most amount of work to be done safely.
             It is perfectly suited for long, unattended compilations.

           o+ Directory caching.  For  a  large  numbers  of  files  caching
             greatly  speeds  MAKE's lookup process.  Caching is controlled
             by a command line flag.


          _C_o_s_t

          The professional version of OPUS MAKE is available for $79, while
          the personal version costs $49.  Sales tax of 6 1/2 per cent must
          be added for California residents.  Each order is subject to a $3
          shipping  and handling fee.  We have volume discounts for profes-
          sional MAKE.  Please contact us for details.

          There is a 30-day money back guarentee.  If you aren't happy with
          the product, send it back to us and we will return your money.


          _U_p_g_r_a_d_e _p_o_l_i_c_y

          In recognition of its birth as the shareware product NDMAKE, OPUS
          MAKE  is available as an upgrade for registered owners of NDMAKE.
          The upgrade cost for the professional version  is  $44,  for  the
          personal version is $14.  This is subject to California sales tax
          of 6 1/2 per cent and a $3 shipping  and  handling  fee.   Volume
          discounts apply for upgrading to the professional version.


          _O_r_d_e_r_i_n_g _d_e_t_a_i_l_s

          To place an order, contact us at:

                                    OPUS Software
                                   1468 - 8th ave
                               San Francisco CA, 94122

                                phone: (415) 731-3108
                              (this number may change)


          If you can't reach us at that number and you have any  questions,
          contact us at:



                                     Don Kneller
                                    John Thomason
                        (415) 476-8291 (days) 759-8347 (home)
-- 
	        harvard\     att!nicmad\
Vidiot            ucbvax!uwvax..........!astroatc!brown
	        rutgers/  decvax!nicmad/
	ARPA/INTERNET: brown%astroatc.UUCP@spool.cs.wisc.edu

hollen@eta.megatek.uucp (Dion Hollenbeck) (05/04/89)

From article <11053@bloom-beacon.MIT.EDU>, by drk@athena.mit.edu (David R Kohr):
> I have been comparing the "make" program that comes with Borland
> Turbo C 2.0 with the "make" on Sun Unix (v. 3.5) and have found it
> to be largely incompatible.  Can anyone recommend a "make" that is
> very closely compatible with Unix "make"?  I'd prefer something
> that's public-domain or shareware, but I might consider commercial
> offerings as well.  (The chief incompatibilities that I've encountered
> are the syntax for file inclusion, lack of built-in implicit rules
> like ".c.obj" in Borland's make, a serious bug in Borland's make
> involving the definition of macros within !include'd files, and
> the handling of shell commands--especially cd--within action lines.)
> 		David R. Kohr, M.I.T. Lincoln Laboratory
> 	email:	KOHR@LL.LL.MIT.EDU (preferred) OR drk@athena.mit.edu
> 	phone:	(617)981-0775 (work), (617)527-3908 (home)
NDMAKE by Don Kneller is wonderful and is seriously compatible with
UNIX make.  I have ported many makefiles (very complicated) over from
UNIX (I do cross-compilations there most of the time) to my PC and
use NDMAKE.  I have not had to change a single line of code in the
make file to be compatible.  

NDMAKE is shareware and is worth more than the $35 which I was asked to
pay for it.  It has many additional features which I wish were in
UNIX make.  The last time I had an address for Don it was:

	kneller@ucsfcgl

If you cannot reach him in this way, I will look through my archives
at home and dredge a USNAIL address for him.

	Dion Hollenbeck             (619) 455-5590 x2814
	Megatek Corporation, 9645 Scranton Road, San Diego, CA  92121

                                seismo!s3sun!megatek!hollen
                                ames!scubed/