[alt.sources.d] Small introspective program

peter@ficc.ferranti.com (Peter da Silva) (03/14/91)

Better make the indicated changes or watch it barf on a strict ANSI
compiler.

In article <1991Mar13.001423.5194@Think.COM> dm@think.com (Dave Mankins) writes:
! #ifdef notdef /*
> 
>   cc $0 -g -o `basename $0 .c` -Ineeded-includes -lneeded-libraries 
> 
!   exit
+
+   */
> 
> #endif notdef
-- 
Peter da Silva.  `-_-'  peter@ferranti.com
+1 713 274 5180.  'U`  "Have you hugged your wolf today?"

ok@goanna.cs.rmit.oz.au (Richard A. O'Keefe) (03/14/91)

[About the hack for including a command to compile itself in a C program.]

Many years ago Tom Duff wrote a nifty little program called "com";
David Tilbrook added some options, and I later added another.

	com [-c$Escape] [-n] [-o | -x] file...

The program searches each file in turn for a comment
	/*% <command> \n
where % is the Escape chacter (which defaults to "%").  Any Escape
character occurring in the file is replaced by the file name from the
command line.  Then
    - if the -o flag appeared, the command is written to stdout, or
    - if the -x flag appeared, the command is written to stderr
    - if the -n flag did NOT appear, the command is given to system().
So the "com" program itself starts with a comment
	/*% cc -o com -O %
	*/
In an AWK script, one could have
	#/*% awk -f %

When 'make' come around I gradually stopped using 'com'.

> ! #ifdef notdef /*
> >   cc $0 -g -o `basename $0 .c` -Ineeded-includes -lneeded-libraries 
> !   exit
> +   */
> > #endif notdef

If you want to use the "shell-in-C" trick, though, it can be simplified:
#if 0 /*
exec cc -g -o `basename $0 .c` -Ineeded-includes $0 -lneeded-libraries 
*/
#endif
-- 
The purpose of advertising is to destroy the freedom of the market.

henry@zoo.toronto.edu (Henry Spencer) (03/15/91)

In article <DQ.90AA@xds13.ferranti.com> peter@ficc.ferranti.com (Peter da Silva) writes:
>Better make the indicated changes or watch it barf on a strict ANSI
>compiler.
>
>! #ifdef notdef /*

Why?  That is legal, strict ANSI C he had inside the #ifdef.

In general you can't get away with arbitrary trash in there, but nothing
he did was improper.  (If you're upset about the $ and `, they are
unlawful only when transformed from preprocessor tokens to real tokens,
and that never happens in this case.)
-- 
"But this *is* the simplified version   | Henry Spencer @ U of Toronto Zoology
for the general public."     -S. Harris |  henry@zoo.toronto.edu  utzoo!henry