[comp.lang.c] Strange C-compiler message ...

jeff@cjsa.UUCP (C. Jeffery Small) (05/05/87)

I got a strange message while compiling a routine the other day and was
wondering if anyone could explain its meaning.

On an AT&T 3B1 (unix-pc) running SYS-V I issued a "make all" command which
generated the following compiler directive from "make" (shown broken across
two lines for readability):

        /bin/cc -c -O -I../hdrs -Doptional_arg=optarg -Dopt_index=optind \
					-Dget_options=getopt  newalias.c


The compiler ran for a time and then the following message was generates:

	$! nulled, predecessor circle

The compile finished without further event and "make" went on to complete the
remainder of its work.  The program loaded and worked properly.

The "$!" in the message seemed indicative of "make" but I find no reference
to a $! variable in my copy of the "make" documentation - so I have assumed
that the message was generated by the compiler.

Any ideas as to what this message means?  Thanks.
----
Jeffery Small          (203) 776-2000     UUCP:   ihnp4!---\
C. Jeffery Small and Associates	                            hsi!cjsa!jeff
123 York Street, New Haven, CT  06511          hao!noao!---/

ekb@ho7cad.ATT.COM (#ERIC K. BUSTAD) (05/07/87)

In article <214@cjsa.UUCP>, jeff@cjsa.UUCP (C. Jeffery Small) writes:
> 
> 	$! nulled, predecessor circle
> 
> [ Asks whether it comes from cc and what it means.]

The message is from make.  $! to be an undocumented make macro
which contains the names of all predecessors of the current
target.  If your makefile contains the following

	a: b

	b: c

	c: d

	d: bin
		echo $!

and you run "make a", you get this output:

		echo  d c b a 
	d c b a

The message seems to indicate a loop in the file dependencies,
such as

	a: b

	b: c

	c: a

= Eric

wagner@iaoobelix.UUCP (05/08/87)

> /***** iaoobelix:comp.lang.c / cjsa!jeff /  3:11 pm  May  5, 1987*/
> I got a strange message while compiling a routine the other day and was
> wondering if anyone could explain its meaning.
...
> The compiler ran for a time and then the following message was generates:
> 
> 	$! nulled, predecessor circle
> 

The message you got has nothing to do with the compiler. It comes from 'make'.
Try the following: write a file `Makefile' containing

	foo:	foo
		@echo this is foo.

Then say `make'. You will get something like

	% make
	$! nulled, predecessor circle
	this is foo.
	%

What I want to show is that you Makefile contains a cyclic reference (a file
depends on itself, and is non-existent). The cyclic reference is ignored
automatically ("nulled"), so the respective action is performed.

Juergen Wagner,		     (USENET) ...seismo!unido!iaoobel!wagner
("Gandalf")			 Fraunhofer Institute IAO, Stuttgart

cim2@pyuxv.UUCP (Robert L. Fair) (05/08/87)

jeff@cjsa.UUCP writes:
>...
>The compiler ran for a time and then the following message was generates:
>
>	$! nulled, predecessor circle
>
>The compile finished without further event and "make" went on to complete the
>remainder of its work.  The program loaded and worked properly.
>
>The "$!" in the message seemed indicative of "make" but I find no reference
>to a $! variable in my copy of the "make" documentation - so I have assumed
>that the message was generated by the compiler.

The message does indeed come from make, it is spewed out when make
realises that one of the things it needs to make depends on the thing
you are making.

There is some bug in your makefile dependencies so that there is
a circular definition i.e. 
	xxx: aaaa
	aaaa: bbb
	bbb: xxx
or similar. Check the makefile with a fine tooth comb.
The message is documented in ... the make source code of course ;-)

Rob. Fair
Bell Communications Research/CHC
ihnp4!pyuxvww!pyuxv!cim2