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