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