[comp.software-eng] Anyone know of a "better" 'make' than vanilla System-V's?.

greyham@hades.ausonics.oz.au (Greyham Stoney) (10/03/90)

My company is working on a medium-to-large software project for which we use
standard System-V 'make' to specify the rules by which objects are made from
source files, and for specifying the source file dependancies.

There are some problems with this however, which lead me to ask if there is
anything better we could use; In particular, 'make' seems to have the following
annoying problems & deficencies:

* The Makefile is assumed to reside in the current directory and each Makefile
	must contain the rules saying how to make objects, since make's
	built-in rules aren't right. We have well over 100 Makefiles in
	one project; most of which contain basically the same information; but
	with minor differences. Eg: they all contain the same command to put
	an object in a library, although the library name differs. Changing the
	name of the librarian utility (if we needed to) would be impossible
	(have to change 100+ Makefiles just to do that).

* Dependancies must be explicitly listed in the Makefile; and they are never
	kept up to date: No ammount of forcing people is going to keep them up
	to date, and it's a pretty pointless exercise anyway. In order to
	control the rules with which our objects are made, we delta Makefiles
	which makes it even worse since to update the depenancies you have to
	get the thing for editing. Why can't the dependancies be discerned
	from the source file at make time?.

Are there any make-like systems that conquer these two basic problems?.

								Greyham.

-- 
/*  Greyham Stoney:                            Australia: (02) 428 6476
 *  greyham@hades.ausonics.oz.au - Ausonics Pty Ltd, Lane Cove, Sydney, Oz.
 *		Neurone Server: Brain Cell not Responding.
 */

flint@gistdev.gist.com (Flint Pellett) (10/03/90)

greyham@hades.ausonics.oz.au (Greyham Stoney) writes:

>My company is working on a medium-to-large software project for which we use
>standard System-V 'make' to specify the rules by which objects are made from
>source files, and for specifying the source file dependancies.

>There are some problems with this however, which lead me to ask if there is
>anything better we could use; In particular, 'make' seems to have the following
>annoying problems & deficencies:

>* The Makefile is assumed to reside in the current directory and each Makefile
>	must contain the rules saying how to make objects, since make's
>	built-in rules aren't right. We have well over 100 Makefiles in
>	one project; most of which contain basically the same information; but
>	with minor differences. Eg: they all contain the same command to put
>	an object in a library, although the library name differs. Changing the
>	name of the librarian utility (if we needed to) would be impossible
>	(have to change 100+ Makefiles just to do that).

You can "include" other files into your makefile to handle this: just put
all the stuff that every makefile uses into a makefile.h someplace, and
then add this line into all the makefiles:

include /wherever/makefile.h

(Note: it is not a #include, as that would be a comment.)  Appropriate
use of environment variables in the .h file, (like to contain the library
name in your example) should allow your one .h file to handle a lot of
the overhead in the other makefiles.  Deciding what to put in this .h
is something you need to think over carefully though.

>* Dependancies must be explicitly listed in the Makefile; and they are never
>	kept up to date: No ammount of forcing people is going to keep them up
>	to date, and it's a pretty pointless exercise anyway. In order to
>	control the rules with which our objects are made, we delta Makefiles
>	which makes it even worse since to update the depenancies you have to
>	get the thing for editing. Why can't the dependancies be discerned
>	from the source file at make time?.

I've always though that at least something of this level should be possible.
At the very least, figuring out what .h files a file depends upon, by
scanning it for #include commands, could be done at make time.  But you
wouldn't want make to always do that, because it would slow down the
process too much.  (Maybe an option to test dependancies, and then
optionally add them into the makefile when it finds missing ones, would
be a good addition.)  Unfortunately, I don't know of anything that does
this right now- the closest things are things that will create a makefile
for you by figuring out the dependancies, and those are pretty much
worthless when you already have a complex makefile existing.

-- 
Flint Pellett, Global Information Systems Technology, Inc.
1800 Woodfield Drive, Savoy, IL  61874     (217) 352-1165
uunet!gistdev!flint or flint@gistdev.gist.com

blm@6sceng.UUCP (Brian Matthews) (10/04/90)

In article <1990Oct3.000440.5275@hades.ausonics.oz.au> greyham@hades.ausonics.oz.au (Greyham Stoney) writes:
|* The Makefile is assumed to reside in the current directory and each Makefile
|must contain the rules saying how to make objects, since make's
|built-in rules aren't right.

You don't mention what version of System V you're running, but I believe
make from Version 2 on up has understood the include statement.  I can't
recall the exact syntax, but at my last job we had a file containing all
of the special rules we needed, then each makefile just included it.
For things that couldn't be handled by inference rules, we came up with
a set of variables that were set in the include file and used by all of
the makefiles.  This worked pretty well, and allowed changes to be made
in one place.  It also allowed our integration group to have a different
included file that did things they needed to do, but to use everyone's
makefiles unchanged.

|* Dependancies must be explicitly listed in the Makefile; and they are never
|kept up to date: No ammount of forcing people is going to keep them up
|to date, and it's a pretty pointless exercise anyway. [...]
|Why can't the dependancies be discerned from the source file at
|make time?.

You can do this with make as well.  There are a number of ways, but
you basically want the makefile to depend on all of the sources.  If
a source file changes, run a program that extracts include dependencies
and builds a new makefile.

|Are there any make-like systems that conquer these two basic problems?.

Both can be handled fairly easily by make already.
-- 
Brian L. Matthews	blm@6sceng.UUCP

davidm@uunet.UU.NET (David S. Masterson) (10/04/90)

In article <1990Oct3.000440.5275@hades.ausonics.oz.au>
greyham@hades.ausonics.oz.au (Greyham Stoney) writes:

   My company is working on a medium-to-large software project for which we
   use standard System-V 'make' to specify the rules by which objects are made
   from source files, and for specifying the source file dependancies.

   There are some problems with this however, which lead me to ask if there is
   anything better we could use; In particular, 'make' seems to have the 
   following annoying problems & deficencies:

   * The Makefile is assumed to reside in the current directory and each
   Makefile must contain the rules saying how to make objects, since make's
   built-in rules aren't right. We have well over 100 Makefiles in one
   project; most of which contain basically the same information; but
   with minor differences. Eg: they all contain the same command to put
   an object in a library, although the library name differs. Changing the
   name of the librarian utility (if we needed to) would be impossible (have
   to change 100+ Makefiles just to do that).

A couple of things in the standard MAKE can help this situation:

1.  You can redefine the standard built-in rules to anything you want by
redefining the SUFFIXES list and creating new suffix rules (of the form
'.suf1.suf2:').  These 'new' standard rules could then be put into a Makefile
include file and use M4(1) to build the Makefile at run-time from the
Makefile.m4 file and the include file.  One of the standard rules that you
would add, for instance, is the rule to make a Makefile from a Makefile.m4.

2.  Good use of MACROS can make the Makefile extremely flexible.  For
instance, "LIBUTIL=ar" and "LIBUTILFLAGS=rv" could be defined to make your
standard library utility AR(1), but these macros could be redefined at anytime
on the MAKE command line, if you need to change your library utility on a
temporary basis.  If you need to make it permanent, then these MACROS could
also be put in the include file (see 1) so that you would only make the change
in one place.

   * Dependancies must be explicitly listed in the Makefile; and they are
   never kept up to date: No ammount of forcing people is going to keep them up
   to date, and it's a pretty pointless exercise anyway. In order to control
   the rules with which our objects are made, we delta Makefiles which makes
   it even worse since to update the depenancies you have to get the thing for
   editing. Why can't the dependancies be discerned from the source file at
   make time?.

The Sun extensions to the standard MAKE for SVR4 will actually do this (when
set up properly).  There was a "depends" program floating around somewhere
(probably Berkeley) that could read C programs and determine its dependencies
in a form that could be put into the Makefile.  I forget how it worked
exactly, but it was mostly a shell script using GREP and AWK to find
"#include" statements.  These were then massaged into a Makefile form which
was then con'CAT'ted onto the end of the Makefile.  This was a standard rule
that was executed first thing via a "make depend" command (it shouldn't need
to be run that often -- how often do you add a new dependency to a file?).  If
you can't find "depends", it shouldn't be that hard to make yourself (its not
terribly complex).  BTW, with this approach, you only delta the Makefile.m4
file (which doesn't have dependency lists).

   Are there any make-like systems that conquer these two basic problems?.

Does this help?
--
====================================================================
David Masterson					Consilium, Inc.
uunet!cimshop!davidm				Mtn. View, CA  94043
====================================================================
"If someone thinks they know what I said, then I didn't say it!"

rick@tetrauk.UUCP (Rick Jones) (10/04/90)

In article <1990Oct3.000440.5275@hades.ausonics.oz.au> greyham@hades.ausonics.oz.au (Greyham Stoney) writes:
>My company is working on a medium-to-large software project for which we use
>standard System-V 'make' to specify the rules by which objects are made from
>source files, and for specifying the source file dependancies.

I built a specialised development environment for my company's own products,
which used standard "make", but relied on driving it from a shell script.
Since "make" imports environment variables into its parameter set, the script
can use shell logic to assign appropriate values to environment variables, so
that one standard makefile can serve everyone.  I.e. the script invokes "make"
in the form "make -f $TOOLS/make.master" where TOOLS contains the path of the
appropriate directory.  The make.master file of course defines almost
everything in terms of variable parameters.

In my case this was further enhanced by the main "make" calling a secondary
"make" using a local makefile, and the local makefile was constructed
automatically by a makefile generator program!  This was solely to cater for
the problem of building libraries, which is a real kludge in "make".  This
allowed the programmer to define his library members in a simple ASCII text
file, rather than have to get makefile syntax right.  I didn't do include-file
dependency analysis because we didn't really need it, but you could use this
approach.

The makefile generator takes a while to get right, but the first step above of
combining shell and make is not too hard, and considerably augments the
effective power of "make" with relatively little effort.

-- 
Rick Jones			The definition of atomic:
Tetra Ltd.				from the Greek meaning "indivisible"
Maidenhead, Berks, UK		So what is:
rick@tetrauk.uucp			an atomic explosion?

tomr@ashtate (Tom Rombouts) (10/05/90)

>In article <1990Oct3.000440.5275@hades.ausonics.oz.au> greyham@hades.ausonics.oz.au (Greyham Stoney) writes:
>
|* Dependancies must be explicitly listed in the Makefile; and they are never
|kept up to date: No ammount of forcing people is going to keep them up
|to date, and it's a pretty pointless exercise anyway. [...]
|Why can't the dependancies be discerned from the source file at
|make time?.

Just for information, Zortech's C++ compiler includes a MAKEDEP
utility that "...will automatically produce dependency lists for
you."  You essentially include a list of source files and then
direct the output to a file "...which can then be used as the basis
for a makefile."  I have not used this, however, but I would also
suspect that similar tools must exist for the *nix world.    


Tom Rombouts  Torrance Techie  tomr@ashtate.A-T.com  V:(213) 538-7108

alan@cwi.UUCP (Alan Wright ) (10/06/90)

In article <1015@gistdev.gist.com>, flint@gistdev.gist.com (Flint Pellett) writes:
> greyham@hades.ausonics.oz.au (Greyham Stoney) writes:
> 
> >My company is working on a medium-to-large software project for which we use
> >standard System-V 'make' to specify the rules by which objects are made from
> >source files, and for specifying the source file dependancies.
> 
> >There are some problems with this however, which lead me to ask if there is
> >anything better we could use; 

YES! You might wish to check into our product, Amplify Control(TM) from
Caseware.  It is specifically designed to provide a highly general and
flexible build capability which exceeds the capabilities of make
(and variants). All of the problems mentioned in these articles have
straightforward solutions under Amplify. (Incidentally, the build
procedure is specified both algorithmically and by graphical
description of the data flow involved.)

I should also mention that Amplify incorporates advanced configuration
management features, and thus may replace both make and SCCS.


> >* Dependancies must be explicitly listed in the Makefile; and they are never
> >	kept up to date: No ammount of forcing people is going to keep them up
> >	to date, and it's a pretty pointless exercise anyway.

> I've always though that at least something of this level should be possible.
> At the very least, figuring out what .h files a file depends upon, by
> scanning it for #include commands, could be done at make time.  But you

Amplify also includes an operation called "reconfigure", which updates both
the dependencies and version selection for a configuration, using user
defined rules for both. Such rules can, for example, require that changes
to source files (such as addition or deletion of include lines) cause
the update of dependency information.


> Unfortunately, I don't know of anything that does
> this right now-

Amplify does!


> Flint Pellett, Global Information Systems Technology, Inc.
> 1800 Woodfield Drive, Savoy, IL  61874     (217) 352-1165
> uunet!gistdev!flint or flint@gistdev.gist.com


For information about Amplify you may contact:

	Caseware, Inc.
	3530 Hyland Ave. #115
	Costa Mesa, CA 92626

or send e-mail to:

	amplify@cwi.com


Please note that although I work for Caseware, my opinions do not
necessarily reflect those of my employer.

kjj@varese.UUCP (Kevin Johnson) (10/07/90)

In article <1990Oct3.000440.5275@hades.ausonics.oz.au> greyham@hades.ausonics.oz.au (Greyham Stoney) writes:
>* The Makefile is assumed to reside in the current directory and each Makefile
>	must contain the rules saying how to make objects, since make's
>	built-in rules aren't right. We have well over 100 Makefiles in
>[...]

Yes, the default location for make's dep-file is the current directory,
but it's changeable on the command line.  This is nothing an alias won't solve.

Another trick is to do what imake does and provide a mechanism where
a front-end dep-file file is preprocessed with cpp, m4 or whatever...

Out of curiosity, in what way are make's builtin rules 'not right'?

>* Dependancies must be explicitly listed in the Makefile; and they are never
>	kept up to date: No ammount of forcing people is going to keep them up
>	to date, and it's a pretty pointless exercise anyway. In order to
>	control the rules with which our objects are made, we delta Makefiles
>	which makes it even worse since to update the depenancies you have to
>	get the thing for editing. Why can't the dependancies be discerned
>	from the source file at make time?.

Well, if you weren't concerned about the overhead of checking
dependancies at make-time I guess you do it that way...
I just run makedepend whenever I modify the include directives in a module...

>Are there any make-like systems that conquer these two basic problems?.

I've starting using dmake, which I got off one of the source groups on
USENET (sorry, I don't remember which one).  I've been it for about a month
now with no real problems.  It's a considerable improvement over trad make.
I think it's well worth looking into.

I got it off on the source groups on USENET.  The author's name is
Dennis Vadura.  The version I got on USENET has a GNU LICENCE file - so.
I'm sure some archive has snarfed a copy.

#include <standard_disclaimer>
.-----------------------------------------------------------------------------.
| Kevin Johnson                                      ...!mcdphx!QIS1!kjj      |
| QIS System Administrator  Motorola MCD             kjj@phx.mcd.mot.com      |

robert@isgtec.UUCP (Robert A. Osborne) (10/09/90)

In article <1990Oct3.000440.5275@hades.ausonics.oz.au> greyham@hades.ausonics.oz.au (Greyham Stoney) writes:
>My company is working on a medium-to-large software project for which we use
>standard System-V 'make' to specify the rules by which objects are made from
>source files, and for specifying the source file dependancies.
We're working  on  a  large  software  project  that  has  to  be
supported  on  several  platforms  (SGI,  Sun, Dec) and are using
Imake (a tool that comes with X) to define our makefiles.   Imake
uses  cpp  and  some  template files to create a Makefile from an
Imakefile.  We only need one Imakefile; the  proper  makefile  is
created for each platform.

>	they [his makefiles] all contain the same command to put
>	an object in a library, although the library name differs. Changing the
>	name of the librarian utility (if we needed to) would be impossible
>	(have to change 100+ Makefiles just to do that).
The Imakefile would have a rule, say InstallLibrary, that would look like:

	InstallLibrary(library_name,a.o b.o c.o)

This rule could handle everything (the Imakefile might consist of only this
line)  including installing, compiling debug/optimized, 'clean'ing, making
tags, prototypes, etc.  When the librarian utility changes a single line is
changed in a defaults file and away you go.

>	Why can't the dependancies be discerned from the source file at make time?.
Imake includes 'makedepend' which finds source dependancies (including
nested .h's).  It can be used to make these dependancies at make time.

I would recommend getting a hold of these tools!
Rob.
-- 
Robert A. Osborne   ...uunet!utai!lsuc!isgtec!robert or robert@isgtec.uucp

pcg@cs.aber.ac.uk (Piercarlo Grandi) (10/10/90)

On 3 Oct 90 00:04:40 GMT, greyham@hades.ausonics.oz.au (Greyham Stoney) said:

greyham> My company is working on a medium-to-large software project for
greyham> which we use standard System-V 'make' [ ... ]

greyham> There are some problems with this however, which lead me to ask
greyham> if there is anything better we could use; In particular, 'make'
greyham> seems to have the following annoying problems & deficencies:

greyham> * The Makefile is assumed to reside in the current directory
greyham> * Dependancies must be explicitly listed in the Makefile

greyham> Are there any make-like systems that conquer these two basic
greyham> problems?.


There are several better makes around. My favourite ones (they are
free and very good) are:

cake	It is a kind of logic programming make. it is exceptionally
	flexible and solves both your problems above quite well. Be
	warned though that I don't know whether it is in active
	development, and the documentation is fairly obscure (there is
	a much nicer article in some EUUG proceedings). It is completely
	different from make.

dmake	It is fully compatible with make, under active development, and
	well documented. I find it a bit slow (it is implemented in some
	funny way, using C as a string processing language), and much
	less elegant than cake, even if it is far less unfamiliar. You
	can use dmake to solve both problems above, but the second with
	less ease than cake.

I have been very undecided between the two. Cake is clearly more
elegant, but I would want to add a couple of things that I think would
make it more efficient. Dmake is clearly more backwards compatible, and
it is under active development, and better documented.

Another alternative is GNU make; it is somehow similar in cope to dmake,
but, as most GNU things, it is more complicated and less structured than
dmake.

All these makes are available at finer archive sites (there is a large
scale example of cake at vgr.brl.mil, for example).

	
--
Piercarlo "Peter" Grandi           | ARPA: pcg%uk.ac.aber.cs@nsfnet-relay.ac.uk
Dept of CS, UCW Aberystwyth        | UUCP: ...!mcsun!ukc!aber-cs!pcg
Penglais, Aberystwyth SY23 3BZ, UK | INET: pcg@cs.aber.ac.uk

fjs@bonz.ogo.dec.com (Jay Shields) (10/11/90)

In article <1990Oct3.000440.5275@hades.ausonics.oz.au>
greyham@hades.ausonics.oz.au (Greyham Stoney) writes:
>* Dependancies must be explicitly listed in the Makefile; and they are never
>	kept up to date: No ammount of forcing people is going to keep them up
>	to date, and it's a pretty pointless exercise anyway. [...]
>	Why can't the dependancies be discerned from the source file at 
>	make time?

If you don't have Imake or any of the other tools mentioned, and if you just
want
to improve your current makefiles, the sample makefile below containes an
example
of the "depend" target that a few other articles have mentioned.  It's a pretty
simplistic
example, of course, but it should give you the basic idea. The "depend" target
can be
used pretty much as-is in your Makefiles if you just define the macros
correctly.

BTW, just in case it's not totally clear from the example below, when you 
run "make depend", the Makefile will be regenerated with a new set of
dependencies for each source file. The old Makefile will be stored in a
file called makeback. If there is no difference in the old and new
Makefiles, makeback will not be created.

Assumptions, Limitations, Notes and other stuff:
1. This works for C code only! 
2. Your C preprocessor must support the -M switch
   (some compilers allow you to get the same results using: cc -Em)
3. The use of @- on the depend rule line may be dangerous. The - (which
ignores errors) is needed because the cmp function returns a value of 1
if the two makefiles are different, which will stop the make if the -
is not there. If you remove the - for safety reasons, be sure to remove
the check for differences between the two makefiles.
4. Lots of others, but give it a shot! 
5. No warrantee expressed or implied!  8-)>

Makefile:
########################################################################

# CSRC macro defines all of the C programs in you current directory
CSRC = fake_prog.c

# Use CPP to define your C pre-processor 
CPP  = /lib/cpp

# Some cc options should be passed on to the pre-processor (such as -D).
# Others (Such as -l) should not. CFLAGS could then be composed of CPP_FLAGS
# plus misc. flags.
CPP_FLAGS = -Dfakedefine

# INCLUDE_LIBS tells the C pre-processor where to look for include files. You 
# really should have such a macro already defined for use with cc.
INCLUDE_LIBS = -I/usr/src/include_dir

# Here's the depend target. 
depend:
	@-sed '/^###DEPENDENCIES/,$$d' < Makefile > tmp_make ; \
	echo "###DEPENDENCIES Follow. Do not delete this line" >> tmp_make ; \
	echo >> tmp_make ; \
	for i in $(CSRC); \
	do \
		$(CPP) -M $(CPP_FLAGS) $$i $(INCLUDE_LIBS) | sort -r | uniq >> tmp_make ; \
		echo >> tmp_make ; \
	done >> tmp_make ; \
	echo >> tmp_make ; \
	echo "# End of Dependency list" >> tmp_make ; \
	echo "# Anything after this line will be deleted" >> tmp_make ; \
	echo "# when the next \"make depend\" is done." >> tmp_make ; \
	cmp Makefile tmp_make > tmp_compare ; \
	if [ -s tmp_compare ] ; then \
	   mv Makefile makeback ; \
	   mv tmp_make Makefile  ; \
	else \
	   rm -f tmp_make ; \
	fi ; \
	rm -f tmp_compare ; \
	chmod 664 Makefile

#
###DEPENDENCIES Follow. Do not delete this line

fake_prog.o: fake_prog.c
fake_prog.o: /usr/include/stdio.h
fake_prog.o: /usr/include/sys/types.h
fake_prog.o: /usr/src/include_dir/fake_inc.h


# End of Dependency list
# Anything after this line will be deleted
# when the next "make depend" is done.

########################################################################

The list of dependencies below the ###DEPENDENCIES line are just an example
of the type of list generated for each source file. 

Hope this helps!

--
F. Jay Shields		"I know how to make friends. How do imake friends?"
Digital Equipment Corporation
Littleton, MA
fjs@bonz.ogo.dec.com
(508) 952-3238

locke@nike.paradyne.com (Richard Locke) (10/12/90)

I've heard a rumor that AT&T will be marketing an previously internal
version of an improved, new 'make' sometime in the foreseeable future.

My intention is to not speak for the company; I don't know if this is
an announced product, etc.  My best advice is to call your Unix
vendor and ask about the new make.  If you run into a brick wall,
send me some e-mail and I'll see if I can put you in touch with
someone who can answer questions.

-dick

lowell@tc.fluke.COM (Lowell Skoog) (10/13/90)

In article <1990Oct3.000440.5275@hades.ausonics.oz.au> greyham@hades.ausonics.oz.au (Greyham Stoney) writes:

>	We have well over 100 Makefiles in
>	one project; most of which contain basically the same information; but
>	with minor differences. 

Several respondents have mentioned the "include" directive of make.
I second this recommendation.  I recently developed a set of include
files for SunOS make that we use at Fluke to maintain local
software.  These include files define our basic software maintenance
process.  The working makefiles in each software package inherit the
basic process definition and adapt it as needed, usually by just
specifying input files and destination directories (using make
macros).  The include files have all sorts of defaults built in,
which can be overridden by any working makefile.  If we need to
change a default in the future, all working makefiles will
automatically be updated.  This approach has been a real boon.

>* Dependancies must be explicitly listed in the Makefile; and they are never
>	kept up to date

SunOS 4.0 make has a `.KEEP_STATE' feature, which I have seen in no
other version of make (unfortunately).  When you enable this feature,
make automatically creates a state file that records include file
dependencies during the make run.  It also records command
dependencies, so if you run make with CFLAGS=-g, then run it again
with CFLAGS=-O, every target that depended on the previous setting of
CFLAGS will be automatically rebuilt.  I think this is a great
feature.

----------------------------------------------------------------------
Lowell Skoog  M/S 223B                             lowell@tc.fluke.COM
John Fluke Mfg. Co. Inc.        {uw-beaver,microsoft,sun}!fluke!lowell
P.O. Box 9090
Everett, WA, USA  98206-9090                            (206) 356-5283

meissner@osf.org (Michael Meissner) (10/15/90)

In article <1990Oct12.171347.28996@tc.fluke.COM> lowell@tc.fluke.COM
(Lowell Skoog) writes:

| >	We have well over 100 Makefiles in
| >	one project; most of which contain basically the same information; but
| >	with minor differences. 
| 
| Several respondents have mentioned the "include" directive of make.
| I second this recommendation.  ....

The only real problem with 'include' is the way it was hacked into
make prevents you from having a rule such as:

	include.o: include.c hdr.h

Whoops....
--
Michael Meissner	email: meissner@osf.org		phone: 617-621-8861
Open Software Foundation, 11 Cambridge Center, Cambridge, MA, 02142

Do apple growers tell their kids money doesn't grow on bushes?

sartin@hplabsz.HPL.HP.COM (Rob Sartin) (10/16/90)

In article <1990Oct12.124029.6545@pdn.paradyne.com> locke@nike.paradyne.com (Richard Locke) writes:
>I've heard a rumor that AT&T will be marketing an previously internal
>version of an improved, new 'make' sometime in the foreseeable future.

Actually, AT&T already markets nmake (the "new make"), though not
vigorously, through the AT&T Toolchest.  Call AT&T for more info.  I
swear by nmake far more often than I swear at it (though I do
occasionally swear at it).

Rob

hopper@ntmtv.UUCP (Ian Hopper) (10/16/90)

From article <1990Oct3.000440.5275@hades.ausonics.oz.au>, by greyham@hades.ausonics.oz.au (Greyham Stoney):
I've been tracking the followups to this but have not seen any
mention of the following:
 
	Most Unix C compilers support running CPP in a mode that reports 
	all dependencies within a source file. (Transitive #include's) 
 
	GNU make comes with source, so you can change it as needed.
		It has a lot of additional features built in.  This is the
		easiest apptoach, if the additional features are sufficient.
 
	imake - from the people who wrote X Windows.
		This is a thinly-veiled covering over the C pre-processor.
		Essentially your make file is maintained as a CPP input file,
		you use all of the features of CPP to "generate" your actual
		makefile. Nice approach if you are already comfortable with 
		weird CPP coding.
 
We are contemplating using options 2 and 3 to maintain 600K+ of code. I would 
be interested in people's experiences with these approaches.

-- 
Ian Hopper		{amdahl.com,ames.arpa,hplabs}!ntmtv!hopper
Northern Telecom Inc.	[Clever comment under construction.]

roger@wrs.com (Roger Rohrbach) (10/18/90)

locke@nike.paradyne.com (Richard Locke) writes:

> I've heard a rumor that AT&T will be marketing an previously internal
> version of an improved, new 'make' sometime in the foreseeable future.


  This improved make has been available through the AT&T Toolchest since
1985 as "nmake".  I used it for several years to build a huge DBMS on scores
of Unix systems.  We had to port it to do so, and the code was crappy, and
it was a pain.  But the GREAT improvement in functionality and the ad vantage
of having uniform behavior everywhere makes this the only way to go.


lowell@tc.fluke.COM (Lowell Skoog) writes:

> SunOS 4.0 make has a `.KEEP_STATE' feature, which I have seen in no
> other version of make (unfortunately).
> It also records command dependencies


  Nmake does both of these as well.


  I think GNU make may incorporate a lot of these ideas; if so, it's
a cheap alternative.

-- 
Roger Rohrbach                                  sun!wrs!roger    roger@wrs.com
- Eddie sez: ----------------------------------------------- (c) 1986, 1990 -.
|   {o >o                                                                     |
|    \<>) "If I were a gas, I'd be inert!"                                    |