?RCS: $Id$
?RCS:
?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
?RCS:
?RCS: You may redistribute only under the terms of the Artistic License,
?RCS: as specified in the README file that comes with the distribution.
?RCS: You may reuse parts of this distribution only within the terms of
?RCS: that same Artistic License; a copy of which may be found at the root
?RCS: of the source tree for dist 4.0.
?RCS:
?RCS: $Log: prototype.U,v $
?RCS: Revision 3.0.1.3  1994/05/06  15:11:49  ram
?RCS: patch23: ensure cc flags used when looking for prototype support
?RCS:
?RCS: Revision 3.0.1.2  1994/01/24  14:15:36  ram
?RCS: patch16: prototype handling macros now appear only when needed
?RCS:
?RCS: Revision 3.0.1.1  1993/08/25  14:03:12  ram
?RCS: patch6: defines were referring to non-existent VOID symbol
?RCS:
?RCS: Revision 3.0  1993/08/18  12:09:36  ram
?RCS: Baseline for dist 3.0 netwide release.
?RCS:
?MAKE:prototype: Myread Oldconfig cat +cc +ccflags rm Setvar
?MAKE:	-pick add $@ %<
?S:prototype:
?S:	This variable holds the eventual value of CAN_PROTOTYPE, which
?S:	indicates the C compiler can handle funciton prototypes.
?S:.
?C:CAN_PROTOTYPE ~ %<:
?C:	If defined, this macro indicates that the C compiler can handle
?C:	function prototypes.
?C:.
?C:DOTS:
?C:	This macro is used to specify the ... in function prototypes which
?C:	have arbitrary additional arguments.
?C:.
?C:NXT_ARG:
?C:	This macro is used to separate arguments in the declared argument list.
?C:.
?C:P_FUNC:
?C:	This macro is used to declare "private" (static) functions.
?C:	It takes three arguments: the function type and name, a parenthesized
?C:	traditional (comma separated) argument list, and the declared argument
?C:	list (in which arguments are separated with NXT_ARG, and additional
?C:	arbitrary arguments are specified with DOTS).  For example:
?C:
?C:		P_FUNC(int foo, (bar, baz), int bar NXT_ARG char *baz[])
?C:.
?C:P_FUNC_VOID:
?C:	This macro is used to declare "private" (static) functions that have
?C:	no arguments.  The macro takes one argument: the function type and name.
?C:	For example:
?C:
?C:		P_FUNC_VOID(int subr)
?C:.
?C:V_FUNC:
?C:	This macro is used to declare "public" (non-static) functions.
?C:	It takes three arguments: the function type and name, a parenthesized
?C:	traditional (comma separated) argument list, and the declared argument
?C:	list (in which arguments are separated with NXT_ARG, and additional
?C:	arbitrary arguments are specified with DOTS).  For example:
?C:
?C:		V_FUNC(int main, (argc, argv), int argc NXT_ARG char *argv[])
?C:.
?C:V_FUNC_VOID:
?C:	This macro is used to declare "public" (non-static) functions that have
?C:	no arguments.  The macro takes one argument: the function type and name.
?C:	For example:
?C:
?C:		V_FUNC_VOID(int fork)
?C:.
?C:_ (P):
?C:	This macro is used to declare function parameters for folks who want
?C:	to make declarations with prototypes using a different style than
?C:	the above macros.  Use double parentheses.  For example:
?C:
?C:		int main _((int argc, char *argv[]));
?C:.
?H:?%<:#$prototype	CAN_PROTOTYPE	/**/
?H:?%<:#ifdef CAN_PROTOTYPE
?H:?NXT_ARG:#define	NXT_ARG ,
?H:?DOTS:#define	DOTS , ...
?H:?V_FUNC:#define	V_FUNC(name, arglist, args)name(args)
?H:?P_FUNC:#define	P_FUNC(name, arglist, args)static name(args)
?H:?V_FUNC_VOID:#define	V_FUNC_VOID(name)name(void)
?H:?P_FUNC_VOID:#define	P_FUNC_VOID(name)static name(void)
?H:?_:#define	_(args) args
?H:?%<:#else
?H:?NXT_ARG:#define	NXT_ARG ;
?H:?DOTS:#define	DOTS
?H:?V_FUNC:#define	V_FUNC(name, arglist, args)name arglist args;
?H:?P_FUNC:#define	P_FUNC(name, arglist, args)static name arglist args;
?H:?V_FUNC_VOID:#define	V_FUNC_VOID(name)name()
?H:?P_FUNC_VOID:#define	P_FUNC_VOID(name)static name()
?H:?_:#define	_(args) ()
?H:?%<:#endif
?H:.
?W:%<:NXT_ARG DOTS V_FUNC P_FUNC V_FUNC_VOID P_FUNC_VOID _
?LINT:set prototype
: Cruising for prototypes
echo " "
echo "Checking out function prototypes..." >&4
$cat >prototype.c <<'EOCP'
int main(int argc, char *argv[]) {
	exit(0);}
EOCP
if $cc $ccflags -c prototype.c >prototype.out 2>&1 ; then
	echo "Your C compiler appears to support function prototypes."
	val="$define"
else
	echo "Your C compiler doesn't seem to understand function prototypes."
	val="$undef"
fi
set prototype
eval $setvar
$rm -f prototype*

