1#!/bin/sh
2
3#++
4# NAME
5#	makedefs 1
6# SUMMARY
7#	makefile configuration utility
8# SYNOPSIS
9#	\fBmake makefiles \fIname=value...\fR
10# DESCRIPTION
11#	The \fBmakedefs\fR command identifies the compilation
12#	environment, and emits macro definitions on the standard output
13#	stream that can be prepended to template Makefiles.
14#
15#	Default settings can be overruled by specifying them as
16#	environment variables. Use quotes if variables contain
17#	whitespace or shell meta characters.
18# .IP \fBAUXLIBS=\fIobject_library...\fR
19#	Specifies one or more non-default object libraries.
20# .IP \fBCC=\fIcompiler_command\fR
21#	Specifies a non-default compiler. On many systems, the default
22#	is \fBgcc\fR.
23# .IP \fBCCARGS=\fIcompiler_arguments\fR
24#	Specifies non-default compiler arguments, for example, a non-default
25#	\fIinclude\fR directory.
26#	The following directives are special:
27# .RS
28# .IP \fB-DNO_DEVPOLL\fR
29#	Do not build with Solaris /dev/poll support.
30#	By default, /dev/poll support is compiled in on platforms that
31#	are known to support it.
32# .IP \fB-DNO_EPOLL\fR
33#	Do not build with Linux EPOLL support.
34#	By default, EPOLL support is compiled in on platforms that
35#	are known to support it.
36# .IP \fB-DNO_IPV6\fR
37#	Do not build with IPv6 support.
38#	By default, IPv6 support is compiled in on platforms that
39#	are known to have IPv6 support.
40#
41#	Note: this directive is for debugging and testing only. It
42#	is not guaranteed to work on all platforms.
43# .IP \fB-DNO_KQUEUE\fR
44#	Do not build with FreeBSD/NetBSD/OpenBSD/MacOSX KQUEUE support.
45#	By default, KQUEUE support is compiled in on platforms that
46#	are known to support it.
47# .IP \fB-DNO_PCRE\fR
48#	Do not build with PCRE support.
49#	By default, PCRE support is compiled in when the \fBpcre-config\fR
50#	utility is installed.
51# .IP \fB-DNO_SIGSETJMP\fR
52#	Use setjmp()/longjmp() instead of sigsetjmp()/siglongjmp().
53#	By default, Postfix uses sigsetjmp()/siglongjmp() when they
54#	appear to work.
55# .RE
56# .IP \fBDEBUG=\fIdebug_level\fR
57#	Specifies a non-default debugging level. The default is \fB-g\fR.
58#	Specify \fBDEBUG=\fR to turn off debugging.
59# .IP \fBOPT=\fIoptimization_level\fR
60#	Specifies a non-default optimization level. The default is \fB-O\fR.
61#	Specify \fBOPT=\fR to turn off optimization.
62# .IP \fBWARN=\fIwarning_flags\fR
63#	Specifies non-default gcc compiler warning options for use when
64#	"make" is invoked in a source subdirectory only.
65# LICENSE
66# .ad
67# .fi
68#	The Secure Mailer license must be distributed with this software.
69# AUTHOR(S)
70#	Wietse Venema
71#	IBM T.J. Watson Research
72#	P.O. Box 704
73#	Yorktown Heights, NY 10598, USA
74#--
75
76# Emit system-dependent Makefile macro definitions to standard output.
77
78# Defaults for most sane systems
79
80RANLIB=ranlib
81SYSLIBS=
82AR=ar
83ARFL=rv
84
85# Ugly function to make our error message more visible among the
86# garbage that is output by some versions of make(1).
87
88# By now all shells must have functions.
89
90error() {
91   # Alas, tput(1) is not portable so we can't use visual effects.
92   echo "ATTENTION:" 1>&2;
93   echo "ATTENTION:" $* 1>&2;
94   echo "ATTENTION:" 1>&2;
95   exit 1
96}
97
98case $# in
99 # Officially supported usage.
100 0) SYSTEM=`(uname -s) 2>/dev/null`
101    RELEASE=`(uname -r) 2>/dev/null`
102    VERSION=`(uname -v) 2>/dev/null`
103    case "$VERSION" in
104     dcosx*) SYSTEM=$VERSION;;
105    esac;;
106 # Unsupported debug-only mode. Not suitable for cross-platform tests.
107 2) SYSTEM="$1"; RELEASE="$2";;
108 *) echo usage: $0 [system release] 1>&2; exit 1;;
109esac
110
111case "$SYSTEM.$RELEASE" in
112   SCO_SV.3.2)	SYSTYPE=SCO5
113		# Use the native compiler by default
114		: ${CC="/usr/bin/cc -b elf"}
115		CCARGS="$CCARGS -DPIPES_CANT_FIONREAD $CCARGS"
116		SYSLIBS="-lsocket -ldbm"
117		RANLIB=echo
118		;;
119  UnixWare.5*)	SYSTYPE=UW7
120		# Use the native compiler by default
121		: ${CC=/usr/bin/cc}
122		RANLIB=echo
123		SYSLIBS="-lresolv -lsocket -lnsl"
124		;;
125  UNIX_SV.4.2*)	case "`uname -v`" in
126	      2.1*) SYSTYPE=UW21
127		    # Use the native compiler by default
128		    : ${CC=/usr/bin/cc}
129		    RANLIB=echo
130		    SYSLIBS="-lresolv -lsocket -lnsl -lc -L/usr/ucblib -lucb"
131		    ;;
132	      *) error "Seems to be UnixWare`uname -v`. Untested.";;
133		esac
134		;;
135  FreeBSD.2*)	SYSTYPE=FREEBSD2
136		;;
137  FreeBSD.3*)	SYSTYPE=FREEBSD3
138		;;
139  FreeBSD.4*)	SYSTYPE=FREEBSD4
140		;;
141  FreeBSD.5*)	SYSTYPE=FREEBSD5
142		;;
143  FreeBSD.6*)	SYSTYPE=FREEBSD6
144		;;
145  FreeBSD.7*)	SYSTYPE=FREEBSD7
146		;;
147  FreeBSD.8*)	SYSTYPE=FREEBSD8
148		;;
149  OpenBSD.2*)	SYSTYPE=OPENBSD2
150		;;
151  OpenBSD.3*)	SYSTYPE=OPENBSD3
152		;;
153  OpenBSD.4*)	SYSTYPE=OPENBSD4
154		;;
155  ekkoBSD.1*)	SYSTYPE=EKKOBSD1
156		;;
157   NetBSD.1*)	SYSTYPE=NETBSD1
158		;;
159   NetBSD.2*)	SYSTYPE=NETBSD2
160		;;
161   NetBSD.3*)	SYSTYPE=NETBSD3
162		;;
163   NetBSD.4*)	SYSTYPE=NETBSD4
164		;;
165   BSD/OS.2*)	SYSTYPE=BSDI2
166		;;
167   BSD/OS.3*)	SYSTYPE=BSDI3
168		;;
169   BSD/OS.4*)	SYSTYPE=BSDI4
170		;;
171 OSF1.V[3-5].*)	SYSTYPE=OSF1
172		# Use the native compiler by default
173		: ${CC=cc}
174		: ${DEBUG="-g3"}
175		case $RELEASE in
176		V[0-4].*) CCARGS="$CCARGS -DNO_IPV6";;
177		esac
178		;;
179    SunOS.4*)	SYSTYPE=SUNOS4
180		SYSLIBS=-lresolv
181		;;
182    SunOS.5*)	SYSTYPE=SUNOS5
183		RANLIB=echo
184		SYSLIBS="-lresolv -lsocket -lnsl"
185		# Stock awk breaks with >10 files.
186		test -x /usr/xpg4/bin/awk && AWK=/usr/xpg4/bin/awk
187		# Solaris 2.5 added usleep() and POSIX regular expressions
188		case $RELEASE in
189		    5.[0-4]) CCARGS="$CCARGS -DMISSING_USLEEP -DNO_POSIX_REGEXP";;
190		esac
191		# Solaris 8 added IPv6 and /dev/poll
192		case $RELEASE in
193		    5.[0-7]|5.[0-7].*) CCARGS="$CCARGS -DNO_IPV6 -DNO_DEVPOLL";;
194		esac
195		# Solaris 9 added closefrom(), futimesat() and /dev/*random
196		case $RELEASE in
197		    5.[0-8]|5.[0-8].*) CCARGS="$CCARGS -DNO_CLOSEFROM -DNO_DEV_URANDOM -DNO_FUTIMESAT";;
198		esac
199		# Work around broken str*casecmp(). Do it all here instead
200		# of having half the solution in the sys_defs.h file.
201		CCARGS="$CCARGS -Dstrcasecmp=fix_strcasecmp \
202		    -Dstrncasecmp=fix_strncasecmp"
203		STRCASE="strcasecmp.o"
204		# Avoid common types of braindamage
205		case "$LD_LIBRARY_PATH" in
206		?*) error "Don't set LD_LIBRARY_PATH";;
207		esac
208		case "${CC}" in
209		*" "*) ;;
210		*ucb*) error "Don't use /usr/ucb/cc or ucblib";;
211		  cc*) case `which ${CC}` in
212		*ucb*) error "Don't use /usr/ucb/cc or ucblib";;
213		  esac;;
214		esac
215		;;
216   ULTRIX.4*)	SYSTYPE=ULTRIX4
217		if [ -f /usr/local/lib/libdb.a ]; then
218		    SYSLIBS="$SYSLIBS -ldb"
219		    CCARGS="$CCARGS -DHAS_DB"
220		    if [ -d /usr/local/include/db ]; then
221			CCARGS="$CCARGS -I/usr/local/include/db"
222		    fi
223		fi
224		for l in syslog resolv; do
225		    if [ -f /usr/local/lib/lib$l.a ]; then
226			SYSLIBS="$SYSLIBS -l$l"
227		    fi
228		done
229		;;
230       AIX.*)	case "`uname -v`" in
231		5)	SYSTYPE=AIX5
232			case "$CC" in
233			cc|*/cc|xlc|*/xlc) CCARGS="$CCARGS -w -blibpath:/usr/lib:/lib:/usr/local/lib";;
234			esac
235			CCARGS="$CCARGS -D_ALL_SOURCE -DHAS_POSIX_REGEXP"
236			;;
237		4)	SYSTYPE=AIX4
238			# How embarrassing...
239			case "$CC" in
240			cc|*/cc|xlc|*/xlc) OPT=; CCARGS="$CCARGS -w -blibpath:/usr/lib:/lib:/usr/local/lib";;
241			esac
242			CCARGS="$CCARGS -D_ALL_SOURCE -DHAS_POSIX_REGEXP"
243			;;
244		3)	SYSTYPE=AIX3
245			# How embarrassing...
246			case "$CC" in
247			cc|*/cc|xlc|*/xlc) OPT=; CCARGS="$CCARGS -w";;
248			esac
249			CCARGS="$CCARGS -D_ALL_SOURCE"
250			;;
251		*)	error "Unknown AIX version: `uname -v`.";;
252		esac;;
253		# Tested with RedHat 3.03 on 20020729.
254    Linux.1*)	SYSTYPE=LINUX1
255		SYSLIBS="-ldb"
256		;;
257    Linux.2*)	SYSTYPE=LINUX2
258		# Postfix no longer needs DB 1.85 compatibility
259		if [ -f /usr/include/db.h ]
260		then
261		    : we are all set
262		elif [ -f /usr/include/db/db.h ]
263		then
264		    CCARGS="$CCARGS -I/usr/include/db"
265		else
266		    # No, we're not going to try db1 db2 db3 etc.
267		    # On a properly installed system, Postfix builds
268		    # by including <db.h> and by linking with -ldb
269		    echo "No <db.h> include file found." 1>&2
270		    echo "Install the appropriate db*-devel package first." 1>&2
271		    echo "See the RELEASE_NOTES file for more information." 1>&2
272		    exit 1
273		fi
274		# GDBM locks the DBM .pag file after open. This breaks postmap.
275		# if [ -f /usr/include/gdbm-ndbm.h ]
276		# then
277		#     CCARGS="$CCARGS -DHAS_DBM -DPATH_NDBM_H='<gdbm-ndbm.h>'"
278		#     GDBM_LIBS=gdbm
279		# elif [ -f /usr/include/gdbm/ndbm.h ]
280		# then
281		#     CCARGS="$CCARGS -DHAS_DBM -DPATH_NDBM_H='<gdbm/ndbm.h>'"
282		#     GDBM_LIBS=gdbm
283		# fi
284		SYSLIBS="-ldb"
285		for name in nsl resolv $GDBM_LIBS
286		do
287		    for lib in /usr/lib64 /lib64 /usr/lib /lib
288		    do
289			test -e $lib/lib$name.a -o -e $lib/lib$name.so && {
290			    SYSLIBS="$SYSLIBS -l$name"
291			    break
292			}
293		    done
294		done
295		# Kernel 2.4 added IPv6
296		case "$RELEASE" in
297		2.[0-3].*) CCARGS="$CCARGS -DNO_IPV6";;
298		esac
299		# Kernel 2.6 added EPOLL
300		case "$RELEASE" in
301		2.[0-5].*) CCARGS="$CCARGS -DNO_EPOLL";;
302		    # Workaround for retarded libc
303		    2.6.*)
304		       if [ `expr "X$CCARGS" : "X.*-DNO_EPOLL"` -gt 0 ]
305                       then
306                           :
307                       elif [ ! -e /usr/include/sys/epoll.h ]
308                       then
309                           echo CCARGS="$CCARGS -DNO_EPOLL"
310                       else
311			   trap 'rm -f makedefs.test makedefs.test.[co]' 1 2 3 15
312			   cat >makedefs.test.c <<'EOF'
313#include <sys/types.h>
314#include <sys/epoll.h>
315#include <errno.h>
316#include <stdio.h>
317#include <stdlib.h>
318
319int     main(int argc, char **argv)
320{
321    int     epoll_handle;
322
323    if ((epoll_handle = epoll_create(1)) < 0) {
324	perror("epoll_create");
325	exit(1);
326    }
327    exit(0);
328}
329EOF
330			   ${CC-gcc} -o makedefs.test makedefs.test.c || exit 1
331			   ./makedefs.test 2>/dev/null ||
332				CCARGS="$CCARGS -DNO_EPOLL"
333			   rm -f makedefs.test makedefs.test.[co]
334		       fi;;
335		esac
336		;;
337     GNU.0*|GNU/kFreeBSD.[567]*)
338     		SYSTYPE=GNU0
339		# Postfix no longer needs DB 1.85 compatibility
340		if [ -f /usr/include/db.h ]
341		then
342		    : we are all set
343		elif [ -f /usr/include/db/db.h ]
344		then
345		    CCARGS="$CCARGS -I/usr/include/db"
346		else
347		    # No, we're not going to try db1 db2 db3 etc.
348		    # On a properly installed system, Postfix builds
349		    # by including <db.h> and by linking with -ldb
350		    echo "No <db.h> include file found." 1>&2
351		    echo "Install the appropriate db*-devel package first." 1>&2
352		    echo "See the RELEASE_NOTES file for more information." 1>&2
353		    exit 1
354		fi
355		SYSLIBS="-ldb"
356		for name in nsl resolv
357		do
358		    for lib in /usr/lib64 /lib64 /usr/lib /lib
359		    do
360			test -e $lib/lib$name.a -o -e $lib/lib$name.so && {
361			    SYSLIBS="$SYSLIBS -l$name"
362			    break
363			}
364		    done
365		done
366		case "`uname -s`" in
367		GNU)
368			# currently no IPv6 support on Hurd
369			CCARGS="$CCARGS -DNO_IPV6"
370			;;
371		esac
372		;;
373     IRIX*.5.*)	SYSTYPE=IRIX5
374		# Use the native compiler by default
375		: ${CC=cc} ${DEBUG="-g3"}
376		RANLIB=echo
377		;;
378     IRIX*.6.*)	SYSTYPE=IRIX6
379		# Use the native compiler by default, and allow nested comments.
380		: ${CC="cc -woff 1009,1116,1412"}
381		RANLIB=echo
382		;;
383HP-UX.A.09.*)	SYSTYPE=HPUX9
384		SYSLIBS=-ldbm
385		CCARGS="$CCARGS -DMISSING_USLEEP"
386		if [ -f /usr/lib/libdb.a ]; then
387		    CCARGS="$CCARGS -DHAS_DB"
388		    SYSLIBS="$SYSLIBS -ldb"
389		fi
390		;;
391HP-UX.B.10.*)	SYSTYPE=HPUX10
392		CCARGS="$CCARGS `nm /usr/lib/libc.a 2>/dev/null |
393		    (grep usleep >/dev/null || echo '-DMISSING_USLEEP')`"
394		if [ -f /usr/lib/libdb.a ]; then
395		    CCARGS="$CCARGS -DHAS_DB"
396		    SYSLIBS=-ldb
397		fi
398		;;
399HP-UX.B.11.*)	SYSTYPE=HPUX11
400		SYSLIBS=-lnsl
401		if [ -f /usr/lib/libdb.a ]; then
402		    CCARGS="$CCARGS -DHAS_DB"
403		    SYSLIBS="$SYSLIBS -ldb"
404		fi
405		;;
406ReliantUNIX-?.5.43) SYSTYPE=ReliantUnix543
407		RANLIB=echo
408		SYSLIBS="-lresolv -lsocket -lnsl"
409		;;
410    Darwin.*)   SYSTYPE=MACOSX
411		# Use the native compiler by default
412		: ${CC=cc}
413		# Darwin > 1.3 uses awk and flat_namespace
414		case $RELEASE in
415		 1.[0-3]) AWK=gawk;;
416		       *) AWK=awk
417			  SYSLIBS=-flat_namespace;;
418		esac
419		# Darwin 7 adds IPv6 support, BIND_8_COMPAT, NO_NETINFO
420		case $RELEASE in
421		 [1-6].*) CCARGS="$CCARGS -DNO_IPV6";;
422		       *) CCARGS="$CCARGS -DBIND_8_COMPAT -DNO_NETINFO";;
423		esac
424		# Darwin 10.3.0 no longer has <nameser8_compat.h>.
425		case $RELEASE in
426		     ?.*) CCARGS="$CCARGS -DRESOLVE_H_NEEDS_NAMESER8_COMPAT_H";;
427		       *) CCARGS="$CCARGS -DRESOLVE_H_NEEDS_ARPA_NAMESER_COMPAT_H";;
428		esac
429		# kqueue and/or poll are broken up to and including MacOS X 10.5
430		CCARGS="$CCARGS -DNO_KQUEUE"
431#		# Darwin 8.11.1 has kqueue support, but let's play safe
432#		case $RELEASE in
433#		 [1-8].*) CCARGS="$CCARGS -DNO_KQUEUE";;
434#		       *) trap 'rm -f makedefs.test makedefs.test.[co]' 1 2 3 15
435#			  cat >makedefs.test.c <<'EOF'
436#/* Adapted from libevent. */
437#
438##include <sys/types.h>
439##include <sys/event.h>
440##include <sys/time.h>
441##include <string.h>
442##include <stdlib.h>
443##include <stdio.h>
444#
445##ifndef EV_SET
446##define EV_SET(kp, id, fi, fl, ffl, da, ud) do { \
447#	struct kevent *__kp = (kp); \
448#	__kp->ident = (id); \
449#	__kp->filter = (fi); \
450#	__kp->flags = (fl); \
451#	__kp->fflags = (ffl); \
452#	__kp->data = (da); \
453#	__kp->udata = (ud); \
454#    } while(0)
455##endif
456#
457#int     main(int argc, char **argv)
458#{
459#    int     kq;
460#    struct kevent test_change;
461#    struct kevent test_result;
462#
463#    if ((kq = kqueue()) < 0) {
464#	perror("kqueue");
465#	exit(1);
466#    }
467##define TEST_FD (-1)
468#
469#    EV_SET(&test_change, TEST_FD, EVFILT_READ, EV_ADD, 0, 0, 0);
470#    if (kevent(kq,
471#	       &test_change, sizeof(test_change) / sizeof(struct kevent),
472#	       &test_result, sizeof(test_result) / sizeof(struct kevent),
473#	       (struct timespec *) 0) != 1 ||
474#	test_result.ident != TEST_FD ||
475#	test_result.flags != EV_ERROR) {
476#	fprintf(stderr, "Error: kevent reports errors incorrectly\n");
477#	exit(1);
478#    }
479#    exit(0);
480#}
481#EOF
482#			  $CC -o makedefs.test makedefs.test.c || exit 1
483#			  ./makedefs.test 2>/dev/null ||
484#				CCARGS="$CCARGS -DNO_KQUEUE"
485#			  rm -f makedefs.test makedefs.test.[co];;
486#		esac
487		;;
488    dcosx.1*)	SYSTYPE=DCOSX1
489		RANLIB=echo
490		SYSLIBS="-lresolv -lsocket -lnsl -lc -lrpcsvc -L/usr/ucblib -lucb"
491		;;
492
493	 ".")	if [ -d /NextApps ]; then
494		    SYSTYPE=`hostinfo | sed -n \
495			's/^.*NeXT Mach 3.*$/NEXTSTEP3/;/NEXTSTEP3/{p;q;}'`
496		    if [ "$SYSTYPE" = "" ]; then
497			SYSTYPE=`hostinfo | sed -n \
498			    's/^.*NeXT Mach 4.*$/OPENSTEP4/;/OPENSTEP4/{p;q;}'`
499		    fi
500		    : ${CC=cc}
501		    RANLIB="sleep 5; ranlib"
502		else
503		    error "Unable to determine your system type."
504		fi
505		;;
506	   *)	error "Unknown system type: $SYSTEM $RELEASE";;
507esac
508
509#
510# sigsetjmp()/siglongjmp() can be "better" than setjmp()/longjmp()
511# if used wisely (that is: almost never, just like signals).
512# Unfortunately some implementations have been buggy in the past.
513#
514case "$CCARGS" in
515 *-DNO_SIGSETJMP*) ;;
516                *) trap 'rm -f makedefs.test makedefs.test.[co]' 1 2 3 15
517		   cat >makedefs.test.c <<'EOF'
518#include <setjmp.h>
519#include <stdlib.h>
520#include <stdio.h>
521
522static int count = 0;
523
524int     main(int argc, char **argv)
525{
526    sigjmp_buf env;
527    int     retval;
528
529    switch (retval = sigsetjmp(env, 1)) {
530    case 0:
531	siglongjmp(env, 12345);
532    case 12345:
533	break;
534    default:
535	fprintf(stderr, "Error: siglongjmp ignores second argument\n");
536	exit(1);
537    }
538
539    switch (retval = sigsetjmp(env, 1)) {
540    case 0:
541	if (count++ > 0) {
542	    fprintf(stderr, "Error: not overriding siglongjmp(env, 0)\n");
543	    exit(1);
544	}
545	siglongjmp(env, 0);
546    case 1:
547	break;
548    default:
549	fprintf(stderr, "Error: overriding siglongjmp(env, 0) with %d\n",
550		retval);
551	exit(1);
552    }
553    exit(0);
554}
555EOF
556		   ${CC-gcc} -o makedefs.test makedefs.test.c || exit 1
557		   ./makedefs.test 2>/dev/null ||
558			CCARGS="$CCARGS -DNO_SIGSETJMP"
559		   rm -f makedefs.test makedefs.test.[co]
560esac
561
562#
563# OpenSSL has no configuration query utility, but we don't try to
564# guess. We assume includes in /usr/include/openssl and libraries in
565# /usr/lib, or in their /usr/local equivalents. If the OpenSSL files
566# are in a non-standard place, their locations need to be specified.
567#
568#case "$CCARGS" in
569# *-DUSE_TLS*)	;;
570#  *-DNO_TLS*)	;;
571#           *)	CCARGS="$CCARGS -DUSE_TLS"
572#		AUXLIBS="$AUXLIBS -lssl -lcrypto"
573#		;;
574#esac
575
576#
577# PCRE 3.x has a pcre-config utility so we don't have to guess.
578#
579case "$CCARGS" in
580*-DHAS_PCRE*)	;;
581 *-DNO_PCRE*)	;;
582           *)	pcre_cflags=`(pcre-config --cflags) 2>/dev/null` &&
583		    pcre_libs=`(pcre-config --libs) 2>/dev/null` && {
584			CCARGS="$CCARGS -DHAS_PCRE $pcre_cflags"
585			AUXLIBS="$AUXLIBS $pcre_libs"
586		}
587		;;
588esac
589
590# Defaults that can be overruled (make makefiles CC=cc OPT=-O6 DEBUG=)
591# Disable optimizations by default when compiling for Purify. Disable
592# optimizations by default with gcc 2.8, until the compiler is known to
593# be OK. Those who dare can still overrule this (make makefiles OPT=-O).
594
595case "$CC" in
596 *purify*) : ${OPT=};;
597*/gcc|gcc) case `$CC -v` in
598	   "gcc version 2.8"*) : ${OPT=};;
599	   esac;;
600      *CC) error "Don't use CC. That's the C++ compiler";;
601        *) : ${OPT='-O'};;
602esac
603#
604# "gcc -W" 3.4.2 no longer reports functions that fail to return a
605# result.  Use "gcc -Wall -Wno-comment" instead. We'll figure out
606# later if the other -Wmumble options are really redundant. Having
607# een burned once by a compiler that lies about what warnings it
608# produces, not taking that chance again.
609
610: ${CC='gcc $(WARN)'} ${OPT='-O'} ${DEBUG='-g'} ${AWK=awk} \
611${WARN='-Wall -Wno-comment -Wformat -Wimplicit -Wmissing-prototypes \
612	-Wparentheses -Wstrict-prototypes -Wswitch -Wuninitialized \
613	-Wunused -Wno-missing-braces'}
614
615export SYSTYPE AR ARFL RANLIB SYSLIBS CC OPT DEBUG AWK OPTS
616
617# Snapshot only.
618#CCARGS="$CCARGS -DSNAPSHOT"
619
620# Non-production: needs thorough testing, or major changes are still
621# needed before the code stabilizes.
622#CCARGS="$CCARGS -DNONPROD"
623
624sed 's/  / /g' <<EOF
625SYSTYPE	= $SYSTYPE
626AR	= $AR
627ARFL	= $ARFL
628RANLIB	= $RANLIB
629SYSLIBS	= $AUXLIBS $SYSLIBS
630CC	= $CC $CCARGS
631OPT	= $OPT
632DEBUG	= $DEBUG
633AWK	= $AWK
634STRCASE = $STRCASE
635EXPORT	= AUXLIBS='$AUXLIBS' CCARGS='$CCARGS' OPT='$OPT' DEBUG='$DEBUG'
636WARN	= $WARN
637EOF
638