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