configure
上传用户:weiyuanprp
上传日期:2020-05-20
资源大小:1169k
文件大小:135k
源码类别:

传真(Fax)编程

开发平台:

C/C++

  1. #!/bin/sh
  2. # $Id: configure,v 1.64 2009/05/25 18:41:23 faxguy Exp $
  3. #
  4. # HylaFAX Facsimile Software
  5. #
  6. # Copyright (c) 1988-1996 Sam Leffler
  7. # Copyright (c) 1991-1996 Silicon Graphics, Inc.
  8. # HylaFAX is a trademark of Silicon Graphics
  9. # Permission to use, copy, modify, distribute, and sell this software and 
  10. # its documentation for any purpose is hereby granted without fee, provided
  11. # that (i) the above copyright notices and this permission notice appear in
  12. # all copies of the software and related documentation, and (ii) the names of
  13. # Sam Leffler and Silicon Graphics may not be used in any advertising or
  14. # publicity relating to the software without the specific, prior written
  15. # permission of Sam Leffler and Silicon Graphics.
  16. # THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND, 
  17. # EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY 
  18. # WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.  
  19. # IN NO EVENT SHALL SAM LEFFLER OR SILICON GRAPHICS BE LIABLE FOR
  20. # ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND,
  21. # OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
  22. # WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF 
  23. # LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE 
  24. # OF THIS SOFTWARE.
  25. #
  26. # Configuration script for HylaFAX (tm) (aka FlexFAX)
  27. #
  28. # Shell script to setup machine-dependent files in
  29. # preparation for building HylaFax source.
  30. #
  31. #
  32. # Setup general configuration parameters.
  33. #
  34. DIR_BIN=/usr/local/bin
  35. DIR_SBIN=/usr/local/sbin
  36. DIR_LIBDATA=/usr/local/lib/fax
  37. DIR_LIB=/usr/local/lib
  38. DIR_LIBEXEC=$DIR_SBIN
  39. DIR_SPOOL=/var/spool/hylafax
  40. DIR_CGI=/var/httpd/cgi-bin
  41. PATH_DPSRIP=$DIR_LIBEXEC/ps2fax.exe
  42. PATH_IMPRIP=/usr/lib/print/psrip
  43. CGIPATH=/cgi-bin
  44. DEFVRES=98
  45. PAGESIZE="North American Letter"
  46. FAXUID=uucp
  47. FAXGID=
  48. SYSUID=bin
  49. SYSGID=
  50. DSO=auto
  51. GETTY=auto
  52. PS=auto
  53. SYSVINIT=auto
  54. FAXQ_SERVER=yes # init script starts faxq
  55. HFAXD_SERVER=yes # init script starts hfaxd
  56. HFAXD_SNPP_SERVER=no # don't start paging protocol
  57. SGI2FAX=auto
  58. PORT=auto
  59. LIBMALLOC=auto
  60. LOCKS=auto
  61. DPS=no
  62. GS=no
  63. IMP=no
  64. UTMP=auto
  65. OPTIMIZER="-O"
  66. LIBTIFF="-ltiff"
  67. TIFFINC=
  68. TIFFBIN=
  69. LIBZ=-lz
  70. ZLIBINC=
  71. REGEX=yes
  72. LIBREGEX='-L${DEPTH}/regex -lregex'
  73. REGEXINC='-I${DEPTH}/${TOPSRCDIR}/regex'
  74. FAXD=
  75. LIBFAXSERVER='libfaxserver.${DSO}'
  76. LIBUTIL='${UTIL}/libfaxutil.${DSO}'
  77. CONFIG_OSFCNH=auto
  78. MANNUM4_5=4F
  79. MANNUM1_8=1M
  80. INSTALLROOT=/
  81. # SVR4 packaging stuff
  82. PKG_ARCH= # ARCH variable in pkginfo file
  83. PKG_EMAIL=someone@somehost.somedomain # EMAIL variable in pkginfo file
  84. PKG_VENDOR="Your Name Here" # VENDOR variable in pkginfo file
  85. : ${MAKE=make} # make to use
  86. # screws up the test of `-f -'
  87. unset MAKEFLAGS
  88. RM="rm -f"
  89. #
  90. # Note VARX parameters cannot contain more that 100 entries as it
  91. # breaks HP's sed
  92. #
  93. VAR1="ANSICPP
  94. ANSICXXPP
  95. AR
  96. AROPTS
  97. AWK
  98. BIN DIR_BIN
  99. CAT
  100. CGIDIR DIR_CGI
  101. CGIPATH
  102. CHGRP
  103. CHMOD
  104. CHOWN
  105. CC
  106. CCOMPILER
  107. CMP
  108. COL
  109. CP
  110. CXX
  111. CXXCOMPILER
  112. CXXFILE
  113. DATE
  114. DEFPAGESIZE
  115. DEFVRES
  116. DIST_ALPHA
  117. DIST_MAJOR
  118. DIST_MINOR
  119. DIST_TYPE
  120. DPS
  121. DPSRIP  PATH_DPSRIP
  122. DSO
  123. DSOSUF
  124. DSODELAY
  125. DSOOPTS
  126. ECHO
  127. ENCODING
  128. ENVOPTS
  129. FAXD
  130. FAXGID
  131. FAXUID
  132. FAXQ_SERVER
  133. FILECMD
  134. FILLORDER
  135. FONTMAP
  136. FONTPATH PATH_AFM
  137. FUSER
  138. GCOPTS
  139. GCXXOPTS
  140. GENDIST
  141. GETTY
  142. GREP
  143. GS
  144. GSRIP  PATH_GSRIP
  145. HFAXD_SERVER
  146. HFAXD_SNPP_SERVER
  147. IMP
  148. IMPRIP PATH_IMPRIP
  149. INSTALL
  150. INSTALLROOT
  151. LIBDATA DIR_LIBDATA
  152. LIBDIR DIR_LIB
  153. LIBEXEC DIR_LIBEXEC
  154. LIBFAXSERVER
  155. LIBPORT
  156. LIBREGEX
  157. LIBTIFF
  158. LIBUTIL
  159. LIBZ
  160. LLDOPTS
  161. LN
  162. LN_S
  163. HAVE_PAM
  164. PAMLIBS
  165. HAVE_JBIG
  166. HAVE_JBIGTIFF
  167. LIBJBIG
  168. HAVE_LDAP
  169. LDAPLIBS"
  170. VAR2="MACHDEPLIBS
  171. MAKECXXOVERRIDE
  172. MAKEDEPINCLUDE
  173. MAKEDSOINCLUDE
  174. MAKEINCLUDE
  175. MAKELQUOTE
  176. MAKERQUOTE
  177. MAN
  178. MANDIR DIR_MAN
  179. MANAPPS
  180. MANCAPPNAME
  181. MANCFILENAME
  182. MANCVT
  183. MANFILES
  184. MANNUM4_5
  185. MANNUM1_8
  186. MANSAPPNAME
  187. MANSCHEME
  188. MANSFILENAME
  189. MANSYS
  190. MIMENCODE
  191. MKDEPCOPTS
  192. MKDEPCXXOPTS
  193. MKDEPEND
  194. MKDIR
  195. MKFIFO
  196. MV
  197. MV_F
  198. NOCLOBBER_OFF
  199. NOCLOBBER_ON
  200. OPTIMIZER
  201. PAGESIZE
  202. PATHGETTY PATH_GETTY
  203. PATHVGETTY PATH_VGETTY
  204. PATHEGETTY PATH_EGETTY
  205. PCL6CMD
  206. PKG_ARCH
  207. PKG_EMAIL
  208. PKG_VENDOR
  209. PORT
  210. PORTFUNCS
  211. PROTOTYPES
  212. PSPACKAGE PS
  213. PWDCMD
  214. RANLIB
  215. REGEX
  216. REGEXINC
  217. RM RMCMD
  218. SBIN DIR_SBIN
  219. SCRIPT_SH
  220. SED
  221. SENDMAIL PATH_SENDMAIL
  222. SETMAKE
  223. SGI2FAX
  224. SHDLIBC
  225. SORT
  226. SPOOL DIR_SPOOL
  227. SRCDIR
  228. STRIP
  229. SYSGID
  230. SYSUID
  231. SYSVINIT
  232. SYSVINITDIR DIR_SYSVINIT
  233. SYSVINITSTARTDIR DIR_SYSVINITSTART
  234. SYSVINITSTARTNAME NAME_SYSVINITSTART
  235. SYSVINITSTOPDIR DIR_SYSVINITSTOP
  236. SYSVINITSTOPNAME NAME_SYSVINITSTOP
  237. TARGET
  238. TIFF2PDF
  239. TIFFBIN
  240. TIFFINC
  241. TTYCMD
  242. UTMP
  243. UUCP_LOCKDIR DIR_LOCKS
  244. UUCP_LOCKTYPE LOCKS
  245. UUENCODE
  246. VERSION
  247. WARNING
  248. ZLIBINC"
  249. dumpvars()
  250. {
  251.     (for i do echo "$i"; done) |
  252. while read a b; do eval c=$${b:-$a}; echo "/@$a@/s;;$c;g"; done
  253. }
  254. dumpvals()
  255. {
  256.     (echo "$VAR1"; echo "$VAR2") |
  257. while read a b; do eval c=$${b:-$a}; echo "${b:-$a}='$c'"; done
  258. }
  259. #
  260. # We expect the PATH to point to trusted programs.  However,
  261. # because we appear to need it, we add to the PATH to help
  262. # some systems along.
  263. #
  264. PATH=$PATH:/bin:/usr/bin:/etc
  265. test -d /usr/ccs/bin && PATH=$PATH:/usr/ccs/bin # SVR4/Solaris2
  266. test -d /usr/sbin && PATH=$PATH:/usr/sbin # SGI and others
  267. test -d /usr/bsd && PATH=$PATH:/usr/bsd # SGI
  268. test -d /usr/ucb && PATH=$PATH:/usr/ucb # Sun and others
  269. test -d /usr/contrib/bin && PATH=$PATH:/usr/contrib/bin # BSDi
  270. test -d /usr/5bin && PATH=/usr/5bin:$PATH:/usr/etc # Sun and others
  271. test -d /usr/local/bin && PATH=$PATH:/usr/local/bin # for GNU stuff
  272. POSIXLY_CORRECT=1; export POSIXLY_CORRECT # disable GNU extensions
  273. LC_ALL=C; export LC_ALL # set a common language
  274. #
  275. # Error diagnostics that should go to the terminal are
  276. # done with this interface (or cat).
  277. #
  278. bitch()
  279. {
  280.     echo "$@" 1>&2
  281. }
  282. die()
  283. {
  284.     kill -1 $$ # use kill so trap handler is called
  285. }
  286. #
  287. # This is the preferred interface for
  288. # configure to terminate abnormally.
  289. #
  290. boom()
  291. {
  292.     bitch ""
  293.     bitch "Unrecoverable error!  Once you've corrected the problem rerun this script."
  294.     die
  295. }
  296. usage()
  297. {
  298.     cat<<'EOF'
  299. Usage: configure [options] [host]
  300. Options: [defaults in brackets after descriptions]
  301.   --help                  print this message
  302.   --quiet                 do not print `Using ...' messages
  303.   --nointeractive         do not prompt for input [INTERACTIVE=no]
  304.   --verbose   opposite of --quiet
  305.   --version               print the version of autoconf that created configure
  306.   --target=TARGET         configure for TARGET [TARGET=HOST]
  307.   --srcdir=DIR            find the sources in DIR [configure dir or ..]
  308.   --disable-pam           disable all PAM support
  309.   --disable-jbig          disable all JBIG support
  310.   --disable-ldap          disable all LDAP support
  311.   --with-PARAM[=ARG]      set configuration PARAM [ARG=yes]
  312. EOF
  313. }
  314. QUIET=no
  315. INTERACTIVE=${INTERACTIVE:="yes"}
  316. SITE=
  317. TARGET=
  318. RELEASE=
  319. SRCDIR=
  320. WITHARGS=no
  321. #
  322. # Crack command line arguments.  We purposely
  323. # use syntax and options that are compatible
  324. # with GNU autoconf.
  325. #
  326. ac_prev=
  327. for ac_option
  328. do
  329.     if [ -n "$ac_prev" ]; then # assign the argument to previous option
  330. eval "$ac_prev=$ac_option"
  331. ac_prev=
  332. continue
  333.     fi
  334.     case "$ac_option" in # collect optional argument
  335.     -*=*) ac_optarg=`echo "$ac_option" | sed 's/[-_a-zA-Z0-9]*=//'`;;
  336.     *) ac_optarg=;;
  337.     esac
  338.     case "$ac_option" in
  339.     -with-*|--with-*)
  340. ac_with=`echo $ac_option|sed -e 's/-*with-//' -e 's/=.*//'`
  341. # Reject names that are not valid shell variable names.
  342. if [ -n "`echo $ac_with| sed 's/[-_a-zA-Z0-9]//g'`" ]; then
  343.     bitch "configure: $ac_with: invalid parameter name."
  344.     die
  345. fi
  346. ac_with=`echo $ac_with| sed 's/-/_/g'`
  347. case "$ac_option" in
  348. *=*) ;;
  349. *) ac_optarg=yes;;
  350. esac
  351. eval "${ac_with}='$ac_optarg'"
  352. WITHARGS=yes
  353. ;;
  354.     -quiet|--quiet) QUIET=yes;;
  355.     -nointeractive|--nointeractive) INTERACTIVE=no;;
  356.     -verbose|--verbose) QUIET=no;;
  357.     -site|--site) ac_prev=SITE;;
  358.     -site=*|--site=*) SITE="$ac_optarg";;
  359.     -srcdir|--srcdir) ac_prev=SRCDIR;;
  360.     -srcdir=*|--srcdir=*) SRCDIR="$ac_optarg";;
  361.     -target|--target) ac_prev=TARGET;;
  362.     -target=*|--target=*) TARGET="$ac_optarg" ;;
  363.     -disable-pam|--disable-pam) DISABLE_PAM="yes" ;;
  364.     -disable-ldap|--disable-ldap) DISABLE_LDAP="yes" ;;
  365.     -disable-jbig|--disable-jbig) DISABLE_JBIG="yes" ;;
  366.     -version|--version)
  367. echo "This is HylaFAX configure $Revision: 1.64 $"
  368. exit 0
  369. ;;
  370.     -help|--help) usage; exit 0;;
  371.     -*)
  372. bitch "configure: $ac_option: invalid option; use -help for usage."
  373. die
  374. ;;
  375.     *)
  376. if [ x"$TARGET" != x ]; then
  377.     bitch "configure: Can only configure for one target at a time."
  378.     kill -1 $$
  379. fi
  380. TARGET="$ac_option"
  381. ;;
  382.     esac
  383. done
  384. if [ -n "$ac_prev" ]; then
  385.     bitch "configure: missing argument to --`echo $ac_prev | sed 's/_/-/g'`"
  386.     die
  387. fi
  388. #
  389. # Our GCOPTS and GCXXOPTS are equivalent in usage to the more-traditional
  390. # CFLAGS and CXXFLAGS.  So if GCOPTS and GCXXOPTS are unset, then apply
  391. # CFLAGS and CXXFLAGS to them.
  392. #
  393. if [ -z "$GCOPTS" ]; then GCOPTS=$CFLAGS; fi
  394. if [ -z "$GCXXOPTS" ]; then GCXXOPTS=$CXXFLAGS; fi
  395. #
  396. # Locate source directory by looking for the VERSION file.
  397. # The directory must either be specified through the
  398. # environment or be located in the current directory or a
  399. # parent of the current directory.
  400. #
  401. test "$SRCDIR" || {
  402.     configure=$0
  403.     # NB: don't use dirname since it may not exist
  404.     SRCDIR=`echo $configure | sed 's;/[^/][^/]*$;;'`
  405.     if [ @"$SRCDIR" = @"$configure" ]; then
  406.         SRCDIR=.
  407.     fi
  408.     while [ ! -r $SRCDIR/VERSION ]; do
  409. # strip last directory from pathname
  410. newdir=`echo $SRCDIR | sed 's;/[^/]*$;;'`
  411. if [ -z "$newdir" ] || [ "$newdir" = $SRCDIR ]; then
  412.     break;
  413. fi
  414. SRCDIR=$newdir
  415.     done
  416. }
  417. if [ ! -r $SRCDIR/VERSION ]; then
  418.     bitch "Can not locate sources in $SRCDIR; the file $SRCDIR/VERSION"
  419.     bitch "does not exist or is unreadable."
  420.     boom
  421. fi
  422. SRCDIR=`echo "$SRCDIR" | sed 's;([^/])/*$;1;'`
  423. #
  424. # Descriptor usage:
  425. # 1: ???
  426. # 2: messages that should be seen even if we're in the background.
  427. # 3: [stdout from test runs]
  428. # 4: verbose-style messages (Using ...)
  429. # 5: compiler stderr when running tests
  430. #
  431. if [ $QUIET = yes ]; then
  432.     exec 4>/dev/null # chuck messages
  433. else
  434.     exec 4>&1 # messages go to stdout
  435. fi
  436. $RM ./config.log
  437. exec 5>./config.log # compiler messages and the like
  438. DATE=`date`
  439. eval `cat $SRCDIR/VERSION | sed 's/([0-9][0-9]*).([0-9][0-9]*)(.*)/DIST_MAJOR=1; DIST_MINOR=2; DIST_TYPE=3/'`
  440. DIST_ALPHA=`awk '{print $3}' $SRCDIR/dist/hylafax.alpha`
  441. VERSION="${DIST_MAJOR}.${DIST_MINOR}${DIST_TYPE}"
  442. if [ "$DIST_TYPE" = beta ]; then
  443.     VERSION="${VERSION}${DIST_ALPHA}"
  444. fi
  445. Note()
  446. {
  447.     echo "$@" 1>&4
  448. }
  449. capture()
  450. {
  451.     (eval "set -x; $*") >&5 2>&1
  452.     return
  453. }
  454. captureX()
  455. {
  456.     (eval "set -x; $*") 2>&5
  457.     return
  458. }
  459. date >&5
  460. cat 1>&5 <<'EOF'
  461. This file contains information that was captured from running the configure
  462. script.  Lines that begin with a "+" are command lines echoed by the
  463. shell.  Other lines are the output of commands; usually the contents of
  464. test case files or the output from compilers.  If configure does the
  465. wrong thing, use the information captured here to aid in debugging.
  466. EOF
  467. Note ""
  468. Note "Configuring HylaFAX (tm) (aka FlexFAX) $VERSION."
  469. Note ""
  470. Note "If configure does the wrong thing, check the file config.log for"
  471. Note "information that may help you understand what went wrong."
  472. Note ""
  473. # test for broken expr (Tru64 UNIX)
  474. x="00"
  475. match=`expr "$x" : "([0-9]*)"`
  476. if [ "$match" != "$x" ]; then
  477. bitch "Your expr is broken. It strips leading zeroes"
  478. bitch "This may cause problems with configure, faxsetup, & faxaddmodem"
  479. bitch "Perhaps there is an environment variable you can set"
  480. bitch "to get the desired behavior."
  481. fi
  482. #
  483. # Read site and local configuration parameters.
  484. #
  485. CONFIG_FILES=
  486. if [ -f $SITE/config.site ]; then
  487.     Note "Reading site-wide parameters from $SITE/config.site."
  488.     . $SITE/config.site
  489.     capture . $SITE/config.site
  490.     CONFIG_FILES=$SITE/config.site
  491. elif [ -f $SRCDIR/config.site ]; then
  492.     Note "Reading site-wide parameters from $SRCDIR/config.site."
  493.     . $SRCDIR/config.site
  494.     capture . $SRCDIR/config.site
  495.     CONFIG_FILES=$SRCDIR/config.site
  496. fi
  497. if [ -f config.local ]; then
  498.     Note "Reading local parameters from config.local."
  499.     . ./config.local
  500.     capture . ./config.local
  501.     CONFIG_FILES="$CONFIG_FILES config.local"
  502. elif [ -f $SRCDIR/config.local ]; then
  503.     Note "Reading local parameters from $SRCDIR/config.local."
  504.     . $SRCDIR/config.local
  505.     capture . $SRCDIR/config.local
  506.     CONFIG_FILES="$CONFIG_FILES $SRCDIR/config.local"
  507. fi
  508. #
  509. # Flush cached values if something was specified on the
  510. # command line or if the contents of a config parameter
  511. # file was changed more recently.
  512. #
  513. REASON=
  514. if [ $WITHARGS = yes ]; then 
  515.     REASON="of command line parameters"
  516. elif [ "$CONFIG_FILES" ]; then
  517.     REASON=`find $CONFIG_FILES -newer config.cache -print 2>/dev/null`
  518.     test "$REASON" && REASON="$REASON has been updated"
  519. fi
  520. if [ "$REASON" ] && [ -f config.cache ]; then
  521.    Note "Flushing cached parameters because $REASON."
  522.    Note ""
  523.    rm -f config.cache
  524. fi
  525. if [ -f config.cache ]; then
  526.     Note "Reading cached parameters from config.cache."
  527.     Note ""
  528.     ODATE="$DATE"; OVERSION="$VERSION"
  529.     OPORTFUNCS="$PORTFUNCS"; OMACHDEPLIBS="$MACHDEPLIBS"
  530.     OTIFFINC="$TIFFINC"; OLIBTIFF="$LIBTIFF"
  531.     OZLIBINC="$ZLIBINC"; OLIBZ="$LIBZ"
  532.     OREGEXINC="$REGEXINC"; OLIBREGEX="$LIBREGEX"
  533.     . ./config.cache
  534.     capture . ./config.cache
  535.     # NB: these are calculated each time from scratch
  536.     DATE="$ODATE"; VERSION="$OVERSION"
  537.     MACHDEPLIBS="$OMACHDEPLIBS"; PORTFUNCS="$OPORTFUNCS"
  538.     # NB: these are relativized each time so beware of cached value
  539.     TIFFINC="$OTIFFINC"; LIBTIFF="$OLIBTIFF"
  540.     ZLIBINC="$OZLIBINC"; LIBZ="$OLIBZ"
  541.     REGEXINC="$OREGEXINC"; LIBREGEX="$OLIBREGEX"
  542. fi
  543. identifyTarget()
  544. {
  545.     random=`date | awk '{print $4}' | sed -e 's/.*://'` 2>/dev/null
  546.     case "$random" in
  547.     *0) Note "Wow, you've got a $1 system!";;
  548.     *1) Note "Hmm, looks like a $1 system.";;
  549.     *2) Note "Oh no, not another $1 system...";;
  550.     *3) Note "Well I'll be, a $1 system.";;
  551.     *4) Note "Fee, fie, foe, this smells like a $1 system.";;
  552.     *5) Note "Gosh, aren't you lucky to have a $1 system!";;
  553.     *6) Note "YOW!!  Did something bad happen or am I on a $1 system?";;
  554.     *7) Note "Do they really still make $1 systems?!";;
  555.     *8) Note "I'm always happy to encounter another $1 system.";;
  556.     *9) Note "Here we are again, this time on a $1 system.";;
  557.     esac
  558. }
  559. #
  560. # If no target is specified, try to deduce the system.
  561. # We use the GNU scripts for guessing and canonicalizing
  562. # the system identification, if available.
  563. #
  564. if [ -z "$TARGET" ]; then
  565.     test -f $SRCDIR/config.guess && TARGET=`sh $SRCDIR/config.guess` 2>/dev/null
  566.     if [ -z "$TARGET" ]; then
  567. bitch "Sorry, no target was specified on the command line and I don't seem to"
  568. bitch "have the GNU config.guess script that is used to deduce your system type."
  569. boom
  570.     fi
  571.     identifyTarget $TARGET
  572. elif [ -f $SRCDIR/config.sub ]; then
  573.     TARGET=`sh $SRCDIR/config.sub "$TARGET"`
  574. else
  575.     Note "WARNING, the GNU config.sub script does not seem to be present.  This"
  576.     Note "         script is used to canonicalize your target specification; not"
  577.     Note "         having it may cause problems later on..."
  578. fi
  579. echo "TARGET: $TARGET" >&5
  580. RELEASE=`(uname -r) 2>/dev/null` || RELEASE=unknown
  581. echo "RELEASE: $RELEASE" >&5
  582. #
  583. # Find the full pathname of a file
  584. # using the specified test operation.
  585. #
  586. findThing()
  587. {
  588.     t="$1"; app=$2; path=$3;
  589.     case $app in
  590.     /*) eval $t $app && { echo $app; return; };;
  591.     esac
  592.     IFS=:
  593.     for i in $path; do
  594. eval $t $i/$app && { echo $i/$app; return 0; }
  595.     done
  596.     return 1
  597. }
  598. #
  599. # Find the full pathname of a plain file.
  600. #
  601. findFile()
  602. {
  603.     findThing "test -f" $1 $2
  604. }
  605. #
  606. # Find the full pathname of an executable.
  607. #
  608. findApp()
  609. {
  610.     t="$1"; app=$1; path=$2;
  611.     case $app in
  612.     /*) eval test -x $app && test ! -d $app && { echo $app; return; };;
  613.     esac
  614.     IFS=:
  615.     for i in $path; do
  616. eval  test -x $i/$app && test ! -d $i/$app && { echo $i/$app; return 0; }
  617.     done
  618.     return 1
  619. }
  620. #
  621. # Find the full pathname of an executable;
  622. # supply a default if nothing is found.
  623. #
  624. findAppDef()
  625. {
  626.     app=$1; path=$2; def=$3
  627.     case $app in
  628.     /*) test -x $app && { echo $app; return; };;
  629.     esac
  630.     IFS=:
  631.     for i in $path; do
  632. test -x $i/$app && { echo $i/$app; return; }
  633.     done
  634.     echo $def
  635. }
  636. #
  637. # Fixup a list of potentially relative pathnames so
  638. # that they work when used in a subdirectory.  The
  639. # string sent to stdout has no extraneous spaces so
  640. # it can be used, for example, in building pathnames.
  641. #
  642. # NB: There's an extra echo done here so we get a
  643. #     n-terminated string passed to sed.
  644. #
  645. relativize()
  646. {
  647.     echo `(for i do
  648. case "$i" in
  649. -Wl*) echo "$i" ;;
  650. /*|-l*|-l[$]{DEPTH}/*) echo "$i" ;;
  651. -L|-L/*|-L[$]{DEPTH}/*) echo "$i" ;;
  652. -I|-I/*|-I[$]{DEPTH}/*) echo "$i" ;;
  653. -R|-R/*|-R[$]{DEPTH}/*) echo "$i" ;;
  654. [$][{]DEPTH[}]/*) echo "$i" ;;
  655. -L*) echo "$i" | sed 's;^-L;-L../;' ;;
  656. -R*) echo "$i" | sed 's;^-R;-R../;' ;;
  657. -I*) echo "$i" | sed 's;^-I;-I../;' ;;
  658. *) echo "../$i" ;;
  659. esac
  660.     done) | tr '12' ' '` | 
  661. sed -e 's;/[.]/;/;g' -e 's;[ ][ ]*$;;' -e 's;/[.]$;;'
  662. }
  663. #
  664. # Locate a C and C++ compiler and verify they work and
  665. # satisfy our needs (using assorted heuristics).
  666. #
  667. JUNK="
  668.     a.out
  669.     conffifo
  670.     confsed1
  671.     confsed2
  672.     conftestmmap
  673.     confx confy
  674.     confMakefile
  675.     conf.db
  676.     core
  677.     dummy
  678.     dummy.C
  679.     dummy.a
  680.     dummy.c
  681.     dummy.o
  682.     foo
  683.     m.c
  684.     so_locations
  685.     t.c
  686.     t.c++
  687.     t.o
  688.     t
  689.     xMakedepend
  690.     xdefs
  691.     xgnu.c
  692.     xmakeinc
  693.     xport.h
  694.     xtermios.h
  695. "
  696. trap "$RM $JUNK; exit 1" 1 2 15
  697. $RM $JUNK
  698. #
  699. # Before we go too far, check some features required by the software
  700. #
  701. if [ -z "$MKFIFO" ]; then
  702.     MKFIFO=`findApp mkfifo $PATH`
  703.     if [ "$MKFIFO" ]; then
  704. mkfifo()
  705. {
  706.     $MKFIFO $1
  707. }
  708.     else
  709. MKFIFO=`findApp mknod /sbin:$PATH`
  710. if [ -z "$MKFIFO" ]; then
  711.     cat <<EOF
  712. No support for creating a FIFO special file.
  713. There does not appear to be a way to create a FIFO special file.
  714. No mkfifo program or mknod program was located in the expected
  715. locations.  One of these programs is required for proper operation
  716. of this software.  If these programs are located in a non-standard
  717. location then you can setup the MKFIFO configuration parameter to
  718. reflect the appropriate location.  Otherwise you may need to install
  719. additional software on your system to support FIFO special files
  720. before you can configure the building of this software.
  721. EOF
  722.     boom
  723. fi
  724. mkfifo()
  725. {
  726.     $MKFIFO $1 p
  727. }
  728.     fi
  729. fi
  730. cat>xgnu.c<<EOF
  731. #ifdef __GNUC__
  732. yes;
  733. #endif
  734. EOF
  735. #
  736. # Check if the specified compiler is from GNU 
  737. #
  738. isGNU()
  739. {
  740.     capture "cat xgnu.c; ($1 -E xgnu.c 2>&5 | egrep yes)"
  741. }
  742. checkGCCVersion()
  743. {
  744.     app=$1; shift
  745.     eval `$app -v 2>&1 | 
  746. sed -n -e '/[Vv]ersion/s/[^(]* [a-z-]*([0-9]*).([0-9]*).([0-9]*).*/GCCdist=1;GCCmajor=2;GCCminor=3/p'`
  747.     GCCversion="${GCCdist}.${GCCmajor}.${GCCminor}"; export GCCversion
  748.     if [ ${GCCdist} -gt $1 ]; then
  749.         return 0
  750.     fi
  751.     if [ ${GCCdist} -eq $1 ]; then
  752.         if [ ${GCCmajor} -gt $2 ]; then
  753.             return 0
  754.         fi
  755.         if [ ${GCCmajor} -eq $2 ] && [ ${GCCminor} -ge $3 ]; then
  756.             return 0
  757.         fi
  758.     fi
  759.     return 1
  760. }
  761. #
  762. # NB: use ANSI C prototype to weed out non-ANSI compilers.
  763. #
  764. cat>dummy.c<<EOF
  765. #include <stdlib.h>
  766. main(int argc, char* argv) { exit(0); }
  767. EOF
  768. checkCompiler()
  769. {
  770.     compiler=$1
  771.     if isGNU $compiler; then
  772. ISGCC=yes
  773.     else
  774. ISGCC=no
  775.     fi
  776.     #
  777.     # Guess special options needed to get an
  778.     # ANSI C compiler and/or similar.  Must
  779.     # be combined with above checks so we only
  780.     # select an ANSI C compiler.
  781.     #
  782.     if [ -z "${ENVOPTS:-}" ]; then
  783. case $ISGCC-$TARGET in
  784. no-*-hpux11*) C_ANSI="-Aa -D_HPUX_SOURCE -Dhpux -D_XOPEN_SOURCE -D_XOPEN_SOURCE_EXTENDED";;
  785. yes-*-hpux11*)  C_ANSI="-D_XOPEN_SOURCE -D_XOPEN_SOURCE_EXTENDED";;
  786. no-*-hp*) C_ANSI="-Aa -D_HPUX_SOURCE -Dhpux";;
  787. no-*-sco3.2v5.*) C_ANSI="-Dsco -Dsco5 -b elf";;
  788. yes-*-sco3.2v5.*) C_ANSI="-Dsco -Dsco5 -m486";;
  789. *-*-sco*) C_ANSI="-Dsco";;
  790. *-isc*) C_ANSI="-posix -D_SYSV3 -DISC";;
  791. yes-*-solaris*) C_ANSI="-L/usr/local/lib -R/usr/local/lib";;
  792. esac
  793.     else
  794. C_ANSI="$ENVOPTS"
  795.     fi
  796.     $RM dummy dummy.o
  797.     capture $compiler -o dummy ${C_ANSI} dummy.c && {
  798. CC=$compiler;
  799. test -z "${CCOMPILER:-}" && CCOMPILER=`findApp $compiler $PATH`
  800. test -z "${ENVOPTS:-}"   && ENVOPTS="${C_ANSI:-}"
  801. return 0
  802.     }
  803.     return 1
  804. }
  805. CCtested=
  806. capture cat dummy.c
  807. if [ -z "${CC:-}" ]; then
  808.     CCOMPILER=
  809.     for i in gcc cc ncc dcc xlc c89 gcc2 acc; do
  810. CCtested="$CCtested $i"
  811. checkCompiler $i && break
  812.     done
  813. else
  814.     CCtested="$CCtested $CC"
  815.     checkCompiler $CC
  816. fi
  817. if [ -z "$CCOMPILER" ]; then
  818.     cat<<EOF
  819. Cannot locate a working ANSI C compiler.
  820. We attempted to compile the following test program:
  821. ----------------------------------------------------------
  822. EOF
  823.     cat dummy.c
  824.     cat<<EOF
  825. ----------------------------------------------------------
  826. with these compilers:
  827.     $CCtested
  828. but none of them were successful.
  829. If your compiler is in a non-standard location, you can specify its
  830. location in several ways:
  831.     o set the environment variable CC
  832.     o create a config.local or config.site file that includes a
  833.       definition for CC
  834.     o supply it on the command line using -with-CC=<pathname>
  835. If command line options are required for ANSI C compilation, set the
  836. ENVOPTS parameter to these options in a similar way (either through
  837. an environment variable or config.local/config.site) and then rerun
  838. this script.
  839. EOF
  840.     boom
  841. fi
  842. Note "Using $CCOMPILER for a C compiler (set CC to override)."
  843. test "$ENVOPTS" && {
  844.     Note "Using $ENVOPTS to get the appropriate compilation environment."
  845. }
  846. CheckForGandO()
  847. {
  848.     f=$1
  849.     if test -s $f; then
  850. capture egrep -i "error|warning" $f || return 1
  851.     fi
  852.     return 0
  853. }
  854. if [ -z "$GCOPTS" ]; then
  855.     capture $CCOMPILER $ENVOPTS -g -c dummy.c && {
  856. Note "Looks like $CCOMPILER supports the -g option."
  857. # NB: cannot use captureX here 'cuz we lose stderr
  858. if $CCOMPILER $ENVOPTS $GCOPTS -c -g -O dummy.c >t 2>&1 && CheckForGandO t; then
  859.     GCOPTS="$GCOPTS -g"
  860. else
  861.     Note "... but not together with the -O option, not using it."
  862. fi
  863.     }
  864. fi
  865. if [ "$GCOPTS" ]; then
  866.     Note "Using "$GCOPTS" for C compiler options."
  867. fi
  868. # Figure out if there is an ANSI C-preprocessor and,
  869. # if __ANSI_CPP__ is not automatically set, configure
  870. # it to be set.
  871. #
  872. cat>dummy.c<<EOF
  873. #define ansiIDENT(a) a
  874. #define ansiCAT(a,b) a##b
  875. A=ansiCAT(ANSI,CPP);
  876. EOF
  877. capture cat dummy.c
  878. if capture "$CCOMPILER $ENVOPTS -E dummy.c | grep ANSICPP"; then
  879.     Note "Looks like $CCOMPILER has an ANSI C preprocessor."
  880.     cat>dummy.c<<EOF
  881. #ifdef __ANSI_CPP__
  882. yes
  883. #else
  884. no
  885. #endif
  886. EOF
  887.     capture cat dummy.c
  888.     if capture "$CCOMPILER $ENVOPTS -E dummy.c | grep no"; then
  889. ANSICPP='-D__ANSI_CPP__'
  890. Note "... but __ANSI_CPP__ is not automatically defined, will compensate."
  891.     fi
  892. else
  893.     Note "Looks like $CCOMPILER has a non-ANSI C preprocessor, will try to compensate."
  894. fi
  895. #
  896. # Figure out if the C compiler supports a -M option for generating
  897. # Make dependency information.
  898. #
  899. cat>dummy.c<<EOF
  900. #include <stdlib.h>
  901. main(int argc, char* argv) { exit(0); }
  902. EOF
  903. capture cat dummy.c
  904. if capture "$CCOMPILER -c -M $MKDEPCOPTS dummy.c | grep '^dummy.o[  ]*:[  ]*dummy.c'"; then
  905.     Note "Looks like $CCOMPILER supports the -M option for generating make dependencies."
  906.     MKDEPEND='${SHELL} ${PORT}/mkdepend'
  907. else
  908.     Note "Looks like $CCOMPILER does not support the -M option for generating"
  909.     Note "make dependencies; will disable automatic make dependency building."
  910.     MKDEPEND=":"
  911. fi
  912. cat>dummy.C<<EOF
  913. class foo {
  914. public:
  915.     struct bar {
  916. int a;
  917. bar();
  918.     };
  919.     foo();
  920. };
  921. foo::bar::bar() { a = 0; }
  922. foo::foo() { bar x; }
  923. int main() { foo t; return 0; }
  924. EOF
  925. checkCompiler()
  926. {
  927.     compiler=$1
  928.     if isGNU $compiler; then
  929. ISGXX=yes
  930. checkGCCVersion $compiler 2 6 1 || return 1
  931.     else
  932. ISGXX=no
  933.     fi
  934.     $RM dummy dummy.o
  935.     capture $compiler -o dummy dummy.C && {
  936. CXX=$compiler;
  937. test -z "${CXXCOMPILER:-}" && CXXCOMPILER=`findApp $compiler $PATH`
  938. return 0
  939.     }
  940.     return 1
  941. }
  942. CCtested=; ISGXX=no
  943. capture cat dummy.C
  944. if [ -z "${CXX:-}" ]; then
  945.     CXXCOMPILER=
  946. CXXCOMPILERS="g++ gcc CC NCC DCC gcc2 xlC"
  947.     for i in $CXXCOMPILERS; do
  948.     CCtested="$CCtested $i"
  949.     checkCompiler $i && break
  950.     done
  951. else
  952.     CCtested="$CCtested $CXX"
  953.     checkCompiler $CXX
  954. fi
  955. if [ -z "$CXXCOMPILER" ]; then
  956.     cat<<EOF
  957. Cannot locate a suitable C++ compiler.
  958. We attempted to compile the following test program:
  959. ----------------------------------------------------------
  960. EOF
  961.     cat dummy.C
  962.     cat<<EOF
  963. ----------------------------------------------------------
  964. with these compilers:
  965.     $CCtested
  966. but none of them were successful.
  967. To build this software you need a C++ compiler that supports a
  968. reasonably modern version of C++.  In particular the compiler must
  969. support nested types and process temporary variables according to the
  970. ANSI Reference Manual (the ARM).
  971. If such a compiler is in a non-standard location, you can specify its
  972. location in several ways:
  973.     o set the environment variable CXX
  974.     o create a config.local or config.site file that includes a
  975.       definition for CXX
  976.     o supply it on the command line using -with-CXX=<pathname>
  977. If you are trying to use GNU gcc, but you do not have version 2.6.1
  978. or newer, then you must update your compiler (and probably libg++ as
  979. well) before you can compile this software.  Consult the documentation
  980. for information about obtaining an up-to-date version of gcc.
  981. EOF
  982.     boom
  983. fi
  984. Note "Using $CXXCOMPILER for a C++ compiler (set CXX to override)."
  985. if [ -z "$GCXXOPTS" ]; then
  986.     case $CXX-$TARGET in
  987.     *CC-*-irix*) # cfront-based or cfront-compatible
  988. GCXXOPTS='+a1 +w +p'
  989. ;;
  990.     *xlC-*-aix*)
  991. GCXXOPTS='-qlanglvl=compat -I/usr/lpp/xlC/include -I/usr/include'
  992. ;;
  993.     *CC-*-sco3.2v5.*) # cfront-based or cfront-compatible
  994. GCXXOPTS='+a1 +p'
  995. ;;
  996.     *)
  997. GCXXOPTS=
  998. ;;
  999.     esac
  1000.     capture $CXXCOMPILER $ENVOPTS -c -g dummy.C && {
  1001. Note "Looks like $CXXCOMPILER supports the -g option."
  1002. # NB: cannot use captureX here 'cuz we lose stderr
  1003. if $CXXCOMPILER $ENVOPTS -c -g -O dummy.C >t 2>&1 && CheckForGandO t; then
  1004.     GCXXOPTS="$GCXXOPTS -g"
  1005. else
  1006.     Note "... but not together with the -O option, not using it."
  1007. fi
  1008.     }
  1009. fi
  1010. if [ "$GCXXOPTS" ]; then
  1011.     Note "Using "$GCXXOPTS" for C++ compiler options."
  1012. fi
  1013. # Figure out if there is an ANSI preprocessor for the C++
  1014. # compiler and, if __ANSI_CPP__ is not automatically set,
  1015. # configure it to be set.
  1016. #
  1017. cat>dummy.C<<EOF
  1018. #define ansiIDENT(a) a
  1019. #define ansiCAT(a,b) a##b
  1020. A=ansiCAT(ANSI,CPP);
  1021. EOF
  1022. capture cat dummy.C
  1023. if capture "$CXXCOMPILER $ENVOPTS -E dummy.C | grep ANSICPP"; then
  1024.     Note "Looks like $CXXCOMPILER has an ANSI C preprocessor."
  1025.     cat>dummy.C<<EOF
  1026. #ifdef __ANSI_CPP__
  1027. yes
  1028. #else
  1029. no
  1030. #endif
  1031. EOF
  1032.     if capture "$CXXCOMPILER $ENVOPTS -E dummy.C | grep no"; then
  1033. ANSICXXPP='-D__ANSI_CPP__'
  1034. Note "... but __ANSI_CPP__ is not automatically defined, will compensate."
  1035.     fi
  1036. else
  1037.     Note "Looks like $CXXCOMPILER has a non-ANSI C++ preprocessor, will try to compensate."
  1038. fi
  1039. #
  1040. # Some pre-processors (e.g. SunPRO prior to version 3.0.1)
  1041. # leave comments in a file when invoked with the -E option. 
  1042. # This messes up the default scheme used below to check for
  1043. # function declarations.  Consequently we check for this
  1044. # behaviour here and try to work around the problem with
  1045. # some sed hackery.
  1046. #
  1047. cat>dummy.C<<EOF
  1048. /* this comment should be stripped */
  1049. something else just in case
  1050. and another line also
  1051. EOF
  1052. capture cat dummy.C
  1053. if capture "$CXXCOMPILER $ENVOPTS -E dummy.C | grep comment"; then
  1054.     Note "WARNING, "$CXX -E" does not strip comments, will try to compensate."
  1055.     Note "         Beware that this may not work and you may need to edit port.h"
  1056.     Note "         to remove extraneous function declarations."
  1057.     stripComments()
  1058.     {
  1059. sed -e '//*/,/*//d' -e 's;//.*$;;'
  1060.     }
  1061. else
  1062.     stripComments()
  1063.     {
  1064. cat
  1065.     }
  1066. fi
  1067. #
  1068. # Check to see if the C++ compiler has an inbuilt 'bool' type
  1069. #
  1070. cat>dummy.C<<EOF
  1071. int main()
  1072. {
  1073.     bool success = false;
  1074.     return 0;
  1075. }
  1076. EOF
  1077. capture cat dummy.C
  1078. if capture "$CXXCOMPILER $ENVOPTS dummy.C"; then
  1079.     CONFIG_NEEDBOOL=no
  1080. else
  1081.     Note "Looks like will need to define the 'bool' type."
  1082.     CONFIG_NEEDBOOL=yes
  1083. fi
  1084. #
  1085. # Verify that $MAKE is accessible
  1086. #
  1087. PATHMAKE=`findApp ${MAKE} $PATH`
  1088. if [ "$PATHMAKE" ]; then
  1089.     Note "Using $PATHMAKE to configure the software."
  1090. else
  1091.     cat<<EOF
  1092. No $MAKE located in the search path.
  1093. There was no $MAKE program in the search path used by this script.
  1094. If $MAKE is in a non-standard location, then set the MAKE environment
  1095. variable to the pathname of the appropriate program or change your
  1096. shell search path to include the directory where the program is located.
  1097. EOF
  1098.     boom
  1099. fi
  1100. #
  1101. # Deduce the include syntax supported by make.
  1102. #
  1103. CheckForMakeIncludeSyntax()
  1104. {
  1105.     cat>confMakefile<<EOF
  1106. $1
  1107. all:
  1108. EOF
  1109.     capture "cat confMakefile; ${MAKE} -f confMakefile"
  1110. }
  1111. if [ -z "$MAKEINCLUDE" ] || [ -z "$MAKELQUOTE" ] || [ -z "$MAKERQUOTE" ]; then
  1112.     INC=xmakeinc
  1113.     $RM $INC; echo "" >$INC
  1114.     if CheckForMakeIncludeSyntax "include $INC"; then
  1115. MAKEINCLUDE="include"
  1116. MAKELQUOTE=
  1117. MAKERQUOTE=
  1118.     elif CheckForMakeIncludeSyntax ".include <$INC>"; then
  1119. MAKEINCLUDE=".include"
  1120. MAKELQUOTE="<"
  1121. MAKERQUOTE=">"
  1122.     elif CheckForMakeIncludeSyntax "#include "$INC""; then
  1123. MAKEINCLUDE="#include"
  1124. MAKELQUOTE='"'
  1125. MAKERQUOTE='"'
  1126.     else
  1127. cat 1>&2 <<EOF
  1128. $MAKE does not support a known include syntax.
  1129. The make program configured for use in building this software does not
  1130. support a known syntax for including other files in a Makefile.  The
  1131. Makefiles distributed with this software depend on the ability to include
  1132. other files and will not work without this functionaliy.  The following
  1133. syntaxes are understood and configure automatically selects one for use
  1134. if $MAKE looks to support it:
  1135. include file
  1136. .include <file>
  1137. #include "file"
  1138. If $MAKE does support including files then you should use a different
  1139. program to build this software; consult the documentation for help in
  1140. locating a suitable make program.  Otherwise if $MAKE supports include
  1141. files, but using a different syntax, then you can setup the MAKEINCLUDE,
  1142. MAKELQUOTE, and MAKERQUOTE configuration parameters to define the
  1143. appropriate syntax.
  1144. EOF
  1145. boom
  1146.     fi
  1147. fi
  1148. Note "Using "${MAKEINCLUDE} ${MAKELQUOTE}file${MAKERQUOTE}" syntax for Makefiles."
  1149. if [ -z "$MAKEDEPINCLUDE" ]; then
  1150.     if [ "$MKDEPEND" != ":" ]; then
  1151. $RM xMakedepend
  1152. if CheckForMakeIncludeSyntax "sinclude xMakedepend"; then
  1153.     Note "Looks like $MAKE supports "sinclude" for conditional includes."
  1154.     MAKEDEPINCLUDE="sinclude"
  1155. else
  1156.     MAKEDEPINCLUDE="$MAKEINCLUDE"
  1157. fi
  1158.     else
  1159. MAKEDEPINCLUDE='#'
  1160.     fi
  1161. fi
  1162. #
  1163. # Check whether or not $MAKE automatically sets MAKE
  1164. # in the Makefiles.  If not, we add an explicit define
  1165. # for places where recursive calls are made.
  1166. #
  1167. if [ -z "$SETMAKE" ]; then
  1168.     cat>confMakefile<<EOF
  1169. all:
  1170. @echo M="${MAKE}"
  1171. EOF
  1172.     M=; eval `$MAKE -f confMakefile` >&5 2>&1
  1173.     if [ "$M" ]; then
  1174. SETMAKE=
  1175.     else
  1176. Note "Looks like $MAKE does not setup MAKE in Makefiles, will compensate."
  1177. SETMAKE="MAKE = ${MAKE}"
  1178.     fi
  1179. fi
  1180. if [ -z "$MAKECXXOVERRIDE" ]; then
  1181.     case $ISGXX-$TARGET in
  1182.     no-*-solaris*|no-*-sunos*) # SunPRO C++ compiler
  1183. #
  1184. # Yech, the SunPro C++ compiler < v5 has no option to force a source
  1185. # file w/ a .c++ suffix to be treated as C++ source code; instead one
  1186. # must specify file.c++=.C.  We patch the Makefiles with explicit
  1187. # construction rules to do this...
  1188. #
  1189. if [ "`$CXX -V 2>&1 | sed 'q' | sed 's/.* C++ ([^ .]*).*/1/g'`" -lt "5" ]; then
  1190.     MAKECXXOVERRIDE="=.C";
  1191. fi
  1192. ;;
  1193.     esac
  1194. fi
  1195. if [ -z "$CXXFILE" ]; then
  1196.     case $CXX-$TARGET in
  1197.     xlC-*-aix*) CXXFILE="-+";;
  1198.     gcc-*) CXXFILE="-x c++";;
  1199.     *-*darwin*) CXXFILE="-x c++";;
  1200.     CC-*-sco3.2v5.*) CXXFILE="+.c++";;
  1201.     esac
  1202. fi
  1203. test "$AR" || AR=`findApp ar $PATH`
  1204. if [ -z "$AR" ]; then
  1205.     Note "WARNING, could not locate a suitable ar command; using a default."
  1206.     AR=ar
  1207. fi
  1208. test "$AROPTS" || AROPTS=rc
  1209. test "$RANLIB" || RANLIB=`findApp ranlib $PATH`
  1210. if [ -z "$RANLIB" ]; then
  1211.     Note "WARNING, no ranlib, assuming it's not needed."
  1212.     RANLIB=":"
  1213.     $RM dummy.a
  1214.     if capture $AR rcs dummy.a; then
  1215.        AROPTS=crs
  1216.        Note "Looks like ar has an s option to build symbol tables."
  1217.     fi
  1218. fi
  1219. cat>dummy.C<<EOF
  1220. #include <new>
  1221. struct foo {
  1222.     int x;
  1223.     foo();
  1224.     ~foo();
  1225. };
  1226. foo::foo() {}
  1227. foo::~foo() {}
  1228. int main()
  1229. {
  1230.     foo* ptr = 0;
  1231.     foo* a = new(ptr) foo;
  1232.     a->x = 0;
  1233.     delete a;
  1234.     return 0;
  1235. }
  1236. EOF
  1237. #
  1238. # Look for appropriate C++ runtime support library.
  1239. #
  1240. CXXRUNTIME=
  1241. capture cat dummy.C
  1242. capture $CXXCOMPILER $ENVOPTS -o dummy dummy.C || {
  1243.     #
  1244.     # Compiler does not provide it automatically, check known libraries.
  1245.     #
  1246.     if [ "$ISGXX" = yes ]; then
  1247. capture $CXXCOMPILER $ENVOPTS -o dummy dummy.C -lg++ && 
  1248.     { CXXRUNTIME="-lg++"; }
  1249.     else
  1250. capture $CXXCOMPILER $ENVOPTS -o dummy dummy.C -lC && 
  1251.     { CXXRUNTIME="-lC"; }
  1252.     fi
  1253. }
  1254. test "$CXXRUNTIME" && {
  1255.     Note "Using explicit $CXXRUNTIME reference for C++ runtime support."
  1256. }
  1257. #
  1258. # XXX we should deduce the shell bugs that require us to use
  1259. # bash and ksh instead of sh on certain platforms (notably the
  1260. # BSD-crowd: Linux, BSDI, FreeBSD, NetBSD) but they are very
  1261. # hard to isolate.  We choose bash over ksh over sh; though
  1262. # this may be iffy (ksh appears to be just as busted some places).
  1263. #
  1264. test "$SCRIPT_SH" || SCRIPT_SH=`findApp bash $PATH`
  1265. test "$SCRIPT_SH" || SCRIPT_SH=`findApp ksh $PATH`
  1266. test "$SCRIPT_SH" || SCRIPT_SH=`findApp sh $PATH`
  1267. if [ -z "$SCRIPT_SH" ]; then
  1268.     Note ""
  1269.     Note "WARNING, could not locate a suitable shell for processing the command"
  1270.     Note "         scripts included in this distribution; using a default value"
  1271.     Note "         /bin/sh."
  1272.     Note ""
  1273.     SCRIPT_SH=/bin/sh
  1274. else
  1275.     Note "Using $SCRIPT_SH to process command scripts."
  1276. # Security stuff
  1277.     case $SCRIPT_SH in
  1278. */sh) ;;
  1279. */ksh) NOCLOBBER_ON='"set -o noclobber"'
  1280. NOCLOBBER_OFF='"set +o noclobber"' ;;
  1281. */bash) NOCLOBBER_ON='"set -o noclobber"'
  1282. NOCLOBBER_OFF='"set +o noclobber"' ;;
  1283.     esac
  1284. fi
  1285. makeDefs()
  1286. {
  1287.     WARNING="Warning, this file was automatically created by the HylaFAX configure script"
  1288.     $RM confsed1; dumpvars "$VAR1" | sort>confsed1
  1289.     $RM confsed2; dumpvars "$VAR2" | sort>confsed2
  1290.     unset POSIXLY_CORRECT
  1291.     $RM xdefs; sed -f confsed1 $SRCDIR/defs.in | sed -f confsed2 >$1
  1292.     POSIXLY_CORRECT=1 ; export POSIXLY_CORRECT
  1293. }
  1294. # NB: save original values for use in checks below
  1295. OTIFFINC="${TIFFINC}"; x="`relativize ${TIFFINC}`"; TIFFINC="$x"
  1296. OZLIBINC="${ZLIBINC}"; x="`relativize ${ZLIBINC}`"; ZLIBINC="$x"
  1297. OREGEXINC="${REGEXINC}"; x="`relativize ${REGEXINC}`"; REGEXINC="$x"
  1298. makeDefs xdefs
  1299. #
  1300. # runMake target rules ...
  1301. #
  1302. runMakeX()
  1303. {
  1304.     target="$1"; shift
  1305.     $RM $target
  1306.     (echo DEPTH=.; echo SRCDIR=.; cat xdefs;
  1307.        for i in "$@"; do
  1308.   echo "$i";
  1309.        done
  1310.     )>confMakefile
  1311.     captureX ${MAKE} -f confMakefile $target
  1312.     return
  1313. }
  1314. runMake()
  1315. {
  1316.     runMakeX "$@" >&5
  1317.     return
  1318. }
  1319. #
  1320. # Verify everything is setup for the C++ runtime environment.
  1321. #
  1322. CheckForCXXRuntime()
  1323. {
  1324. cat>t.c++<<EOF
  1325. #include <iostream>
  1326. int main(){ std::cout << "Hello World!" << std::endl; return 0;}
  1327. EOF
  1328.     runMake t "t:; ${C++F} ${C++FILE} t.c++${MAKECXXOVERRIDE}"
  1329. }
  1330. CheckForCXXRuntime || {
  1331.     cat 1>&2 <<EOF
  1332. Missing C++ runtime support for $CXX ($CXXCOMPILER).
  1333. Compilation of the following test program failed:
  1334. ----------------------------------------------------------
  1335. EOF
  1336.     cat t.c++ 1>&2
  1337. cat 1>&2 <<EOF
  1338. ----------------------------------------------------------
  1339. Usually this is because you do not have a standard C++ library
  1340. installed on your system or you have installed it in a non-standard
  1341. location.  If you do not have a C++ library installed, then you must
  1342. install it.  If it is installed in a non-standard location, then you
  1343. should configure the compiler so that it will automatically be found.
  1344. (For recent gcc releases this is libstdc++, for older gcc - libg++)
  1345. EOF
  1346.     boom
  1347. }
  1348. #
  1349. # Verify C++ built executables properly handle global
  1350. # static variables with constructors.
  1351. #
  1352. CheckForCXXGlobalConstructors()
  1353. {
  1354. cat>t.c++<<EOF
  1355. class foo {
  1356. private:
  1357.     int a;
  1358. public:
  1359.     foo() { a = -1; }
  1360.     int isInitialized() { return a == -1; }
  1361. };
  1362. static foo instanceOfFoo;
  1363. int main() { return instanceOfFoo.isInitialized() ? 0 : 1; }
  1364. EOF
  1365.     runMake t "t:; ${C++F} ${C++FILE} t.c++${MAKECXXOVERRIDE}" && ./a.out
  1366. }
  1367. CheckForCXXGlobalConstructors || {
  1368.     cat 1>&2 <<EOF
  1369. Broken C++ handling of global constructors ($CXX/$CXXCOMPILER).
  1370. Compilation or execution of the following test program failed:
  1371. ----------------------------------------------------------
  1372. EOF
  1373.     cat t.c++ 1>&2
  1374.     cat 1>&2 <<EOF
  1375. ----------------------------------------------------------
  1376. This program tests whether or not the C++ compilation support properly
  1377. handles global static variables with constructors.  A working C++
  1378. compilation environment is expected to arrange that global variables
  1379. that have a constructor function (foo::foo() above) be called prior to
  1380. the start of main().  HylaFAX will not operate properly if the C++
  1381. compilation environment does not correctly implement this.
  1382. EOF
  1383.     if [ $ISGXX = yes ]; then
  1384. if expr $CXX : '.*g++.*' >/dev/null 2>&1; then
  1385.     cat 1>&2 <<EOF
  1386. When using GNU gcc this can sometimes happen if gcc is improperly
  1387. configured; consult your local GNU guru/support person for help with
  1388. this problem.
  1389. EOF
  1390. else
  1391.     cat 1>&2 <<EOF
  1392. When using GNU gcc to compile C++ programs this can sometimes happen
  1393. when g++ is not used to link executables.  You might try setting
  1394. CXX to "g++" (or similar) in a config.local file or on the command
  1395. line.  Otherwise you should consult your local GNU guru/support person
  1396. for help with this problem.
  1397. EOF
  1398. fi
  1399.     fi
  1400.     boom
  1401. }
  1402. #
  1403. # Look for a library using a known (unique) function.
  1404. #
  1405. CheckForLibrary()
  1406. {
  1407.     f=$1; shift
  1408.     libs="$@";
  1409.     cat>t.c<<EOF
  1410. extern int $f();
  1411. int t() { $f(); return 0; }
  1412. int main(){ t(); return 0; }
  1413. EOF
  1414.     capture cat t.c
  1415.     runMake t "t:; ${CCF} t.c $libs"
  1416. }
  1417. #
  1418. # Look for a library using a known (unique) function.
  1419. #
  1420. CheckForLibraryWithArgs()
  1421. {
  1422.     l=$1; shift
  1423.     f=$1; shift
  1424.     a=$1; shift
  1425.     libs="$@";
  1426.     cat>t.c<<EOF
  1427. #include <$l>
  1428. int t() { $f($a); return 0; }
  1429. int main(){ t(); return 0; }
  1430. EOF
  1431.     capture cat t.c
  1432.     runMake t "t:; ${CCF} t.c $libs"
  1433. }
  1434. #
  1435. # Look for an include file.
  1436. #
  1437. CheckForIncludeFile()
  1438. {
  1439.     (for i do
  1440. echo "#include "$i""
  1441.      done)>t.c++
  1442.     capture cat t.c++
  1443.     runMake t "t:; ${C++F} ${C++FILE} -E t.c++${MAKECXXOVERRIDE}"
  1444. }
  1445. if [ "$SGI2FAX" = auto ]; then
  1446.     if CheckForLibrary iopen -limage && CheckForIncludeFile gl/image.h; then
  1447. Note "Looks like there is support for SGI RGB images, configuring sgi2fax."
  1448. SGI2FAX=yes
  1449.     else
  1450. SGI2FAX=no
  1451.     fi
  1452. fi
  1453. if [ "$LIBMALLOC" = auto ]; then
  1454.     if CheckForLibrary mallopt -lmalloc; then
  1455. Note "Looks like -lmalloc is here, using it for memory allocation."
  1456. LIBMALLOC=yes
  1457.     else
  1458. LIBMALLOC=no
  1459.     fi
  1460. fi
  1461. if [ "$LIBSUN" = auto ]; then
  1462.     if CheckForLibrary getpwnam -lsun; then
  1463. Note "Looks like -lsun is here, using it for NIS passwd & group stuff."
  1464. LIBSUN=yes
  1465.     else
  1466. LIBSUN=no
  1467.     fi
  1468. fi
  1469. #
  1470. # PAM libraries are slightly different.  So we run some tests to try to
  1471. # distinguish between them.
  1472. #
  1473. CheckPAMType()
  1474. {
  1475.     Note "... checking PAM library version"
  1476.     cat>t.c++<<EOF
  1477. #include "security/pam_appl.h"
  1478. int
  1479. pamconv(int num_msg, const struct pam_message **msg, struct pam_response **resp, void *appdata)
  1480. {
  1481.     return(0);
  1482. }
  1483. main()
  1484. {
  1485.     struct pam_conv conv = { pamconv };
  1486. }
  1487. EOF
  1488.     if runMake t "t:; ${C++F} $PAMLIBS ${C++FILE} t.c++${MAKECXXOVERRIDE}"; then
  1489. echo '#define STRUCT_PAM_MESSAGE const struct pam_message'
  1490.     else
  1491. echo '#define STRUCT_PAM_MESSAGE struct pam_message'
  1492.     fi
  1493.     case $TARGET in
  1494. *-hpux11*) echo '#define PAM_MSG_VERSION';;
  1495.     esac
  1496. }
  1497. HAVE_PAM="/*#define HAVE_PAM 1*/"
  1498. PAMLIBS=""
  1499. if [ "$DISABLE_PAM" != "yes" ]; then
  1500. Note "Checking for PAM (Pluggable Authentication Module) support"
  1501. CheckForLibrary pam_authenticate -lpam &&
  1502. CheckForIncludeFile security/pam_appl.h && {
  1503. HAVE_PAM="#define HAVE_PAM 1"
  1504. PAMLIBS="-lpam"
  1505. }
  1506. if [ "x$PAMLIBS" = "x" ]; then
  1507. Note "... not found. Disabling PAM support"
  1508. else
  1509. Note "... found. Enabling PAM support"
  1510. fi
  1511. else
  1512. Note "Disabling PAM support"
  1513. fi
  1514. HAVE_JBIG="/*#define HAVE_JBIG 1*/"
  1515. LIBJBIG=""
  1516. if [ "$DISABLE_JBIG" != "yes" ]; then
  1517. Note "Checking for JBIG library support"
  1518. CheckForLibrary jbg_enc_init -ljbig &&
  1519. CheckForIncludeFile jbig.h && {
  1520. HAVE_JBIG="#define HAVE_JBIG 1"
  1521. LIBJBIG="-ljbig"
  1522. }
  1523. if [ "x$LIBJBIG" = "x" ]; then
  1524. Note "... not found. Disabling JBIG support"
  1525. else
  1526. Note "... found. Enabling JBIG support"
  1527. fi
  1528. else
  1529. Note "Disabling JBIG support"
  1530. fi
  1531. HAVE_LDAP="/*#define HAVE_LDAP 1*/"
  1532. LDAPLIBS=""
  1533. if [ "$DISABLE_LDAP" != "yes" ]; then
  1534. Note "Checking for LDAP (Lightweight Directory Access Protocol) support"
  1535. CheckForLibrary ldap_initialize -lldap &&
  1536. CheckForLibrary ber_get_null -llber &&
  1537. CheckForIncludeFile ldap.h && {
  1538. HAVE_LDAP="#define HAVE_LDAP 1"
  1539. LDAPLIBS="-lldap -llber -lresolv"
  1540. }
  1541. if [ "x$LDAPLIBS" = "x" ]; then
  1542. Note "... not found. Disabling LDAP support"
  1543. else
  1544. Note "... found. Enabling LDAP support"
  1545. fi
  1546. else
  1547. Note "Disabling LDAP support"
  1548. fi
  1549. CheckForLibrary crypt -lc || {
  1550.     #
  1551.     # FreeBSD-2.1 in particular needs -lcrypt.
  1552.     # SCO sometime has -lcrypt_d (domestic) and
  1553.     #    sometimes -lcrypt_i (import?)
  1554.     #
  1555.     for i in -lcrypt -lcrypt_d -lcrypt_i; do
  1556. if CheckForLibrary crypt $i; then
  1557.     Note "Looks like $i is needed for crypt."
  1558.     MACHDEPLIBS="$MACHDEPLIBS $i"
  1559.     break;
  1560. fi
  1561.     done
  1562. }
  1563. CheckForLibraryWithArgs time.h strftime "(void*)0, 0, (void*)0, (void*)0" -lc || {
  1564.     #
  1565.     # SCO has strftime in -lintl.
  1566.     #
  1567.     if CheckForLibrary strftime -lintl; then
  1568. Note "Looks like -lintl is needed for strftime."
  1569. MACHDEPLIBS="$MACHDEPLIBS -lintl"
  1570.     else
  1571. cat 1>&2 <<EOF
  1572. No strftime function located in system libraries.
  1573. The strftime function used to format date&time information was not located
  1574. in the normal C library or in the -lintl library (present on some systems).
  1575. This software expects this to be available and will not compile without it.
  1576. If this function is located in a non-standard location you can specify the
  1577. library in the MACHDEPLIBS configuration parameter.  Otherwise you should
  1578. figure out why the usual testing done by this script failed; consult the
  1579. diagnostics in the config.log file for more information.
  1580. EOF
  1581. boom
  1582.     fi
  1583. }
  1584. CheckForLibrary socket -lc || {
  1585.     #
  1586.     # Socket support is not in normal C library, check
  1587.     # for SVR4-style networking w/ -lsocket & -lnsl
  1588.     #
  1589.     if CheckForLibrary socket -lsocket -lnsl; then
  1590. Note "Looks like -lsocket & -lnsl are needed for socket support."
  1591. MACHDEPLIBS="$MACHDEPLIBS -lsocket -lnsl"
  1592.     elif CheckForLibrary socket -linet -lnsl_s; then
  1593. Note "Looks like -linet & -lnsl_s are needed for socket support."
  1594. MACHDEPLIBS="$MACHDEPLIBS -linet -lnsl_s"
  1595.     elif CheckForLibrary socket -lsocket; then
  1596. Note "Looks like -lsocket is needed for socket support."
  1597. MACHDEPLIBS="$MACHDEPLIBS -lsocket"
  1598.     else
  1599. cat 1>&2 <<EOF
  1600. No socket networking support located in system libraries.
  1601. The socket function used to create a network connection was not located
  1602. in the normal C library or in the -lsocket or -linet libraries (present
  1603. mainly on SVR4-style systems).  This software expects this to be
  1604. available and will not compile without it.  If this function is located
  1605. in a non-standard location you can specify the needed libraries in the
  1606. MACHDEPLIBS configuration parameter.  Otherwise you should figure out
  1607. why the usual testing done by this script failed; consult the
  1608. diagnostics in the config.log file for more information.
  1609. EOF
  1610. boom
  1611.     fi
  1612. }
  1613. CheckForLibrary inet_aton -lc || {
  1614.     CheckForLibrary inet_aton -lresolv && {
  1615. MACHDEPLIBS="$MACHDEPLIBS -lresolv"
  1616.     }
  1617. }
  1618. if CheckForLibrary logwtmp -lutil; then
  1619.     Note "Looks like -lutil is needed for wtmp file logging."
  1620.     MACHDEPLIBS="$MACHDEPLIBS -lutil"
  1621.     HAS_LOGWTMP=yes
  1622. else
  1623.     HAS_LOGWTMP=no
  1624. fi
  1625. CheckForLibrary ftruncate -lc || {
  1626.     CheckForLibrary chsize -lx && {
  1627. Note "Looks like -lx is needed for chsize (used to emulate ftruncate)."
  1628. MACHDEPLIBS="$MACHDEPLIBS -lx"
  1629.     }
  1630. }
  1631. CheckForLibrary flock -lc || {
  1632.     CheckForLibrary flock -lbsd && {
  1633. Note "Looks like -lbsd is needed for flock."
  1634. MACHDEPLIBS="$MACHDEPLIBS -lbsd"
  1635.     }
  1636. }
  1637. for f in openlog pututxline; do
  1638.     CheckForLibrary $f -lc || {
  1639. CheckForLibrary $f -lgen && {
  1640.     Note "Looks like -lgen is needed for $f."
  1641.     MACHDEPLIBS="$MACHDEPLIBS -lgen"
  1642.     break;
  1643. }
  1644.     }
  1645. done
  1646. if [ "$ISGXX" = yes ]; then
  1647.     if [ -z "$CXXRUNTIME" ]; then
  1648. for f in memmove strdup; do
  1649.     if [ $f = "memmove" ]; then
  1650. CheckForLibraryWithArgs string.h $f "(void*)0, (void*)0, 0" -lc || {
  1651.     CheckForLibraryWithArgs string.h $f "(void*0), (void*)0, 0" -lg++ && {
  1652. Note "Looks like we need -lg++ for $f"
  1653. MACHDEPLIBS="$MACHDEPLIBS -lg++"
  1654. break;
  1655.     }
  1656. }
  1657.     else
  1658. CheckForLibraryWithArgs string.h $f "(void*)0" -lc || {
  1659.     CheckForLibraryWithArgs string.h $f "(void*)0" -lg++ && {
  1660. Note "Looks like we need -lg++ for $f"
  1661. MACHDEPLIBS="$MACHDEPLIBS -lg++"
  1662. break;
  1663.     }
  1664. }
  1665.     fi
  1666. done
  1667.     fi
  1668.     for f in strtoul strerror memmove random; do
  1669. if [ $f = "memmove" ]; then
  1670.     CheckForLibraryWithArgs string.h $f "(void*)0, (void*)0, 0" -lc || {
  1671. CheckForLibraryWithArgs string.h $f "(void*0), (void*)0, 0" -liberty && {
  1672.     Note "Looks like we need -liberty for $f"
  1673.     MACHDEPLIBS="$MACHDEPLIBS -liberty"
  1674.     break;
  1675. }
  1676.     }
  1677. elif [ $f = "strerror" ]; then
  1678.     CheckForLibraryWithArgs string.h $f "0" -lc || {
  1679. CheckForLibraryWithArgs string.h $f "0" -liberty && {
  1680.     Note "Looks like we need -liberty for $f"
  1681.     MACHDEPLIBS="$MACHDEPLIBS -liberty"
  1682.     break;
  1683. }
  1684.     }
  1685. else
  1686.     CheckForLibraryWithArgs string.h $f "" -lc || {
  1687. CheckForLibraryWithArgs string.h $f "" -liberty && {
  1688.     Note "Looks like we need -liberty for $f"
  1689.     MACHDEPLIBS="$MACHDEPLIBS -liberty"
  1690.     break;
  1691. }
  1692.     }
  1693. fi
  1694.     done
  1695. fi
  1696. CheckForLibraryWithArgs math.h floor "0" -lm && {
  1697.     Note "Looks like -lm is the library for math functions."
  1698.     MACHDEPLIBS="$MACHDEPLIBS -lm"
  1699. }
  1700. MACHDEPLIBS="$MACHDEPLIBS $CXXRUNTIME"
  1701. test "$LIBSUN" = yes && MACHDEPLIBS="$MACHDEPLIBS -lsun"
  1702. test "$LIBMALLOC" = yes && MACHDEPLIBS="$MACHDEPLIBS -lmalloc"
  1703. #
  1704. # Figure out if certain system-specific interfaces are
  1705. # supported.  We craft a port.h file that has external
  1706. # declarations for missing routines that are required by
  1707. # the system and modify defs to reflect which optional
  1708. # interfaces are supported.
  1709. #
  1710. EmitCPlusPlusPrologue()
  1711. {
  1712.     echo '/*'
  1713.     echo ' * Warning, this file was automatically created by the HylaFAX configure script'
  1714.     echo ' * VERSION: ' $VERSION
  1715.     echo ' * DATE: ' $DATE
  1716.     echo ' * TARGET: ' $TARGET
  1717.     echo ' * RELEASE: ' $RELEASE
  1718.     if [ $ISGCC = yes ]; then
  1719. echo ' * CCOMPILER: ' ${CCOMPILER}-${GCCversion}
  1720.     else
  1721. echo ' * CCOMPILER: ' $CCOMPILER
  1722.     fi
  1723.     if [ $ISGXX = yes ]; then
  1724. echo ' * CXXCOMPILER: ' ${CXXCOMPILER}-${GCCversion}
  1725.     else
  1726. echo ' * CXXCOMPILER: ' $CXXCOMPILER
  1727.     fi
  1728.     echo ' */'
  1729.     echo "#ifndef $1"
  1730.     echo "#define $1 1"
  1731.     echo '#ifdef __cplusplus'
  1732.     echo 'extern "C" {'
  1733.     echo '#endif'
  1734. }
  1735. EmitCPlusPlusEpilogue()
  1736. {
  1737.     echo '#ifdef __cplusplus'
  1738.     echo '}'
  1739.     echo '#endif'
  1740.     echo '#endif'
  1741. }
  1742. releaseAtLeast()
  1743. {
  1744.     expr $RELEASE >= $1 >/dev/null 2>&1
  1745. }
  1746. #
  1747. # Emit the port.h definitions that reflect
  1748. # the system configuration.
  1749. #
  1750. EmitConfigurationDefinitions()
  1751. {
  1752.     #
  1753.     # Do bool stuff
  1754.     #
  1755.     if [ "$CONFIG_NEEDBOOL" = "yes" ]; then
  1756.         Note "... adding definition for C++ bool type"
  1757.         echo
  1758.         echo "#define NEED_BOOL"
  1759.         echo
  1760.     fi
  1761.     #
  1762.     # Select the mode to use when opening FIFO files
  1763.     # in a server process.  One should be able to open
  1764.     # them read-only, but on some systems, select will
  1765.     # go into a loop when a client does a close.  This
  1766.     # problem can sometimes be avoided by opening the FIFO
  1767.     # read+write on the server side.  Otherwise, the
  1768.     # FIFO must be closed after each incoming message
  1769.     # which can lead to delays and/or lost messages
  1770.     # (though we try to compensate by doing some sleeps).
  1771.     #
  1772.     test "$CONFIG_OPENFIFO" || {
  1773. case $TARGET in
  1774. *-irix*) if releaseAtLeast 5.2; then
  1775.     CONFIG_OPENFIFO=O_RDWR;
  1776. else
  1777.     CONFIG_OPENFIFO=O_RDONLY;
  1778. fi
  1779. ;;
  1780. *-ultrix*) CONFIG_OPENFIFO=O_RDWR;;
  1781. *-solaris*) CONFIG_OPENFIFO=O_RDWR;;
  1782. *-*-sco*|*-isc*) CONFIG_OPENFIFO=O_RDWR;;
  1783. *-aix*|*-hpux*) CONFIG_OPENFIFO=O_RDWR;;
  1784. alpha-dec*)     CONFIG_OPENFIFO=O_RDWR;;
  1785. *-linux*) if releaseAtLeast 1.3.80; then
  1786.     CONFIG_OPENFIFO=O_RDWR;
  1787. else
  1788.     CONFIG_OPENFIFO=O_RDONLY;
  1789. fi
  1790. ;;
  1791. *-freebsd*) if releaseAtLeast 3.0; then
  1792.     CONFIG_OPENFIFO=O_RDWR;
  1793. else
  1794.     CONFIG_OPENFIFO=O_RDONLY;
  1795. fi
  1796. ;;
  1797. *sysv4.2uw2.1.3) CONFIG_OPENFIFO=O_RDWR;; # UnixWare 2.1.3
  1798. *-sysv5UnixWare*) CONFIG_OPENFIFO=O_RDWR;; # UnixWare 7
  1799. *-sysv5OpenUNIX*) CONFIG_OPENFIFO=O_RDWR;; # OpenUNIX 8
  1800. *-sysv5SCO_SV*) CONFIG_OPENFIFO=O_RDWR;; # OpenServer 6
  1801. *) CONFIG_OPENFIFO=O_RDONLY;;
  1802. esac
  1803.     }
  1804.     if [ "$CONFIG_OPENFIFO" = "O_RDWR" ]; then
  1805. Note "... open FIFO files read+write to avoid select bug"
  1806.     else
  1807. Note "... open FIFO files read-only"
  1808.     fi
  1809.     echo "#define CONFIG_OPENFIFO $CONFIG_OPENFIFO"
  1810.     test "$CONFIG_FIFOBUG" || {
  1811. case $TARGET in
  1812. *-solaris*) CONFIG_FIFOBUG=yes;;
  1813. *-irix5.[01]*) CONFIG_FIFOBUG=yes;;
  1814. *) CONFIG_FIFOBUG=no;;
  1815. esac
  1816.     }
  1817.     if [ "$CONFIG_FIFOBUG" = yes ]; then
  1818. Note "... enable workaround for FIFO select bug"
  1819. echo '#define FIFOSELECTBUG 1'
  1820.     fi
  1821.     #
  1822.     # On some systems the argument for ioctl(fd, TIOCMBIS, arg)
  1823.     # is passed by value and some by reference.
  1824.     # This can not be deduced with a dynamic check.
  1825.     #
  1826.     test "$CONFIG_TIOCMBIS_ARG_REF" || {
  1827. case $TARGET in
  1828. *-sysv4*) CONFIG_TIOCMBISBYREF=yes;;
  1829. *-sysv5*) CONFIG_TIOCMBISBYREF=yes;;
  1830. *-linux*) CONFIG_TIOCMBISBYREF=yes;;
  1831. *-sunos*) CONFIG_TIOCMBISBYREF=yes;;
  1832. *) CONFIG_TIOCMBISBYREF=yes;;
  1833. esac
  1834.     }
  1835.     if [ "$CONFIG_TIOCMBISBYREF" = yes ]; then
  1836. Note "... using call-by-reference for TIOCMBIS ioctl"
  1837. echo "#define CONFIG_TIOCMBISBYREF $CONFIG_TIOCMBISBYREF"
  1838.     else
  1839. Note "... using call-by-value for TIOCMBIS ioctl"
  1840.     fi
  1841.     #
  1842.     # On some systems it's necessary to include
  1843.     # <sys/stream.h> and <sys/ptem.h> to get the
  1844.     # necessary definitions for TIOCWINSZ.  This
  1845.     # should be deduced with a dynamic check.
  1846.     #
  1847.     test "$CONFIG_WINSZHACK" || {
  1848. case $TARGET in
  1849. *-*-sco*) CONFIG_WINSZHACK=yes;;
  1850. *-isc*) CONFIG_WINSZHACK=yes;;
  1851. *) CONFIG_WINSZHACK=no;;
  1852. esac
  1853.     }
  1854.     if [ "$CONFIG_WINSZHACK" = yes ]; then
  1855. Note "... enable additional include files for TIOCGWINSZ"
  1856. echo "#define CONFIG_WINSZHACK"
  1857.     fi
  1858.     #
  1859.     # On some systems the server does not work properly
  1860.     # if a recursive call is made to the dispatcher to
  1861.     # poll for an message on the FIFO file that says to
  1862.     # abort an outbound or inbound job.   The only know
  1863.     # workaround for this problem is to ignore messages
  1864.     # while processing a job.
  1865.     #
  1866.     test "$CONFIG_ABORTBUG" || {
  1867. case $TARGET in
  1868. *-aix*) CONFIG_ABORTBUG=yes;;
  1869. *-hpux*) CONFIG_ABORTBUG=yes;;
  1870. *) CONFIG_ABORTBUG=no;;
  1871. esac
  1872.     }
  1873.     if [ "$CONFIG_ABORTBUG" = yes ]; then
  1874. Note "... disable support for aborting sends & receives"
  1875. echo '#define SERVERABORTBUG'
  1876.     fi
  1877.     #
  1878.     # On some systems redirecting stdout to the controlling
  1879.     # tty causes stty to issue an annoying warning message.
  1880.     # This should probably be deduced with a dynamic test.
  1881.     #
  1882.     test "$CONFIG_NOSTDINDUP" || {
  1883. case $TARGET in
  1884. *-freebsd*) CONFIG_NOSTDINDUP=yes;;
  1885. *) CONFIG_NOSTDINDUP=no;;
  1886. esac
  1887.     }
  1888.     if [ "$CONFIG_NOSTDINDUP" = yes ]; then
  1889. Note "... assuming stty bitches when stdout is set to stdin"
  1890. echo "#define ONDELAY_NOSTDINDUP"
  1891.     fi
  1892.     #
  1893.     # Some systems cannot handle re-opening the tty device
  1894.     # after the modem is reset.  This is true for modems
  1895.     # attached to some terminal servers and also on HP-UX
  1896.     # where the modem control state is lost across opens.
  1897.     # Basically if the OS and modem correctly handle toggling
  1898.     # DTR to reset the modem then it's safe to configure
  1899.     # the software to not re-open the device.
  1900.     #
  1901.     test "$CONFIG_NOREOPEN" || {
  1902. case $TARGET in
  1903. *-hpux*) CONFIG_NOREOPEN=yes;;
  1904. *) CONFIG_NOREOPEN=no;;
  1905. esac
  1906.     }
  1907.     if [ "$CONFIG_NOREOPEN" = yes ]; then
  1908. Note "... don't reopen the tty device after reset"
  1909. echo "#define CONFIG_NOREOPEN"
  1910.     fi
  1911.     #
  1912.     # Workarounds for systems with system include files
  1913.     # that have incorrect function declarations (wrong
  1914.     # parameter types that require explicit casts to make
  1915.     # the code compile with certain compilers).
  1916.     #
  1917.     test "$CONFIG_BADEXECVPROTO" || { # char* const* vs. const char**
  1918. case $TARGET in
  1919. *-*-sco3.2v5.*) CONFIG_BADEXECVPROTO=no;;
  1920. *-*-sco*) CONFIG_BADEXECVPROTO=yes;;
  1921. *) CONFIG_BADEXECVPROTO=no;;
  1922. esac
  1923.     }
  1924.     if [ "$CONFIG_BADEXECVPROTO" = yes ]; then
  1925. Note "... workaround incorrect execv function declaration"
  1926. echo "#define CONFIG_BADEXECVPROTO"
  1927.     fi
  1928.     test "$CONFIG_BADEXECVEPROTO" || { # char* const* vs. const char**
  1929. case $TARGET in
  1930. *-*-sco3.2v5.*) CONFIG_BADEXECVEPROTO=no;;
  1931. *-*-sco*) CONFIG_BADEXECVEPROTO=yes;;
  1932. *) CONFIG_BADEXECVEPROTO=no;;
  1933. esac
  1934.     }
  1935.     if [ "$CONFIG_BADEXECVEPROTO" = yes ]; then
  1936. Note "... workaround incorrect execve function declaration"
  1937. echo "#define CONFIG_BADEXECVEPROTO"
  1938.     fi
  1939.     test "$CONFIG_BADGETOPTPROTO" || { # char* const* vs. char**
  1940. case $TARGET in
  1941. *-aix*) CONFIG_BADGETOPTPROTO=yes;;
  1942. *-*-sco3.2v4.*) CONFIG_BADGETOPTPROTO=yes;;
  1943. *) CONFIG_BADGETOPTPROTO=no;;
  1944. esac
  1945.     }
  1946.     if [ "$CONFIG_GETOPTPROTO" = yes ]; then
  1947. Note "... workaround incorrect getopt function declaration"
  1948. echo "#define CONFIG_GETOPTPROTO"
  1949.     fi
  1950.     test "$CONFIG_BADSELECTPROTO" || { # int* vs. fd_set*
  1951. case $TARGET in
  1952. *-hpux10.20*) CONFIG_BADSELECTPROTO=no;;
  1953. *-hpux11*) CONFIG_BADSELECTPROTO=no;;
  1954. *-hpux*) CONFIG_BADSELECTPROTO=yes;;
  1955. *) CONFIG_BADSELECTPROTO=no;;
  1956. esac
  1957.     }
  1958.     if [ "$CONFIG_BADSELECTPROTO" = yes ]; then
  1959. Note "... workaround incorrect select function declaration"
  1960. echo "#define CONFIG_BADSELECTPROTO"
  1961.     fi
  1962.     #
  1963.     # Select the maximum fax UID.  This value is stored
  1964.     # in the GID of files so must be constrained by any
  1965.     # system limitations.  The maximum value is used for
  1966.     # anonymous logins.  The default value of 60002 comes
  1967.     # from NFS/nobody usage on various systems.
  1968.     #
  1969.     test "$CONFIG_MAXGID" || {
  1970. case $TARGET in
  1971. *-*-sco*) CONFIG_MAXGID=60000;;
  1972. *-sysv5UnixWare*) CONFIG_MAXGID=60000;; # UnixWare 7
  1973. *-sysv5OpenUNIX*) CONFIG_MAXGID=60000;; # OpenUNIX 8
  1974. *-sysv5SCO_SV*) CONFIG_MAXGID=60000;; # OpenServer 6
  1975. *-hpux*) CONFIG_MAXGID=60000;;
  1976. *) CONFIG_MAXGID=60002;; # default
  1977. esac
  1978.     }
  1979.     if [ "$CONFIG_MAXGID" ]; then
  1980. if [ "$CONFIG_MAXGID" -le 60002 ]; then
  1981.     Note "... constrain client IDs to be <= $CONFIG_MAXGID"
  1982.     echo "#define CONFIG_MAXGID $CONFIG_MAXGID"
  1983. else
  1984.     Note "... max client ID too large ($CONFIG_MAXGID); using default"
  1985. fi
  1986.     fi
  1987. }
  1988. #
  1989. # Look for a function in one of the standard libraries
  1990. # or one of the machine-dependent libraries selected above.
  1991. #
  1992. CheckForFunc()
  1993. {
  1994.     echo "#include <stdlib.h>" > t.c
  1995.     echo "extern int $1(); main(){$1($2);exit(0);}" >> t.c
  1996.     capture cat t.c
  1997.     runMake t "t:; ${CC} t.c ${MACHDEPLIBS}"
  1998. }
  1999. CheckForStdFunc()
  2000. {
  2001.     echo "#include <stdlib.h>" > t.c
  2002.     echo "main(){$1($2);exit(0);}" >> t.c
  2003.     capture cat t.c
  2004.     runMake t "t:; ${CC} t.c ${MACHDEPLIBS}"
  2005. }
  2006. CheckForStdioFunc()
  2007. {
  2008.     echo "#include <stdlib.h>" > t.c
  2009.     echo "#include <stdio.h>" >> t.c
  2010.     echo "main(){$1($2);exit(0);}" >> t.c
  2011.     capture cat t.c
  2012.     runMake t "t:; ${CC} t.c ${MACHDEPLIBS}"
  2013. }
  2014. CheckForUnistdFunc()
  2015. {
  2016.     echo "#include <stdlib.h>" > t.c
  2017.     echo "#include <unistd.h>" >> t.c
  2018.     echo "main(){$1($2);exit(0);}" >> t.c
  2019.     capture cat t.c
  2020.     runMake t "t:; ${CC} t.c ${MACHDEPLIBS}"
  2021. }
  2022. #
  2023. # Look for a function declaration in system include files.
  2024. #
  2025. AddFuncDecl()
  2026. {
  2027.     echo "$2";
  2028.     Note "... add function prototype for $1"
  2029. }
  2030. CheckForFuncDecl()
  2031. {
  2032.     f=$1; shift
  2033.     (for i do
  2034. echo "#include "$i""
  2035.      done)>t.c++
  2036.     capture cat t.c++
  2037.     runMakeX t "t:; ${C++F} ${C++FILE} -E t.c++${MAKECXXOVERRIDE}" |
  2038.      stripComments |
  2039.      awk '{while($0~/[,(][ t]*$/){printf"%s",$0;getline}print}' |
  2040.      grep "$f[ ]*(.*)" >&5
  2041.     return
  2042. }
  2043. CheckFuncDecl()
  2044. {
  2045.     f=$1; shift
  2046.     decl=$1; shift
  2047.     CheckForFuncDecl "$f" "$@" || AddFuncDecl "$f" "$decl"
  2048. }
  2049. #
  2050. # Look for a variable declaration in system include files.
  2051. #
  2052. CheckForVarDecl()
  2053. {
  2054.     v="$1"; shift
  2055.     (for i do
  2056. echo "#include "$i""
  2057.      done)>t.c++
  2058.     capture cat t.c++
  2059.     runMakeX t "t:; ${C++F} ${C++FILE} -E t.c++${MAKECXXOVERRIDE}" |
  2060. stripComments |
  2061. grep "$v" >&5
  2062.     return
  2063. }
  2064. CheckVarDecl()
  2065. {
  2066.     v="$1"; shift
  2067.     decl="$1"; shift
  2068.     CheckForVarDecl "$v" "$@" || 
  2069. (echo "$decl"; Note "... add declaration $decl")
  2070. }
  2071. #
  2072. # Look for a #define in system include files.
  2073. #
  2074. AddDefine()
  2075. {
  2076.    echo '#ifndef' $1
  2077.    echo '#define' "$2"
  2078.    echo '#endif'
  2079.    Note '... add #define for' "$1"
  2080. }
  2081. CheckForDefine()
  2082. {
  2083.     def=$1; shift
  2084.     (for i do
  2085. echo "#include "$i""
  2086.      done
  2087.      for i in "#ifdef $def" "FOUND" "#endif"; do
  2088. echo "$i"
  2089.      done
  2090.     )>t.c
  2091.     capture cat t.c
  2092.     runMakeX t 't:; ${CCF} -E t.c' | grep FOUND >&5
  2093. }
  2094. CheckDefine()
  2095. {
  2096.     def=$1; shift
  2097.     decl=$1; shift
  2098.     CheckForDefine "$def" "$@" || AddDefine "$def" "$decl"
  2099. }
  2100. #
  2101. # Look for a #define with a positive value in system include files.
  2102. # This is especially useful for POSIX defines which may be defined
  2103. # to -1 or 0 when the functionnality is not supported.
  2104. #
  2105. CheckForPositiveDefine()
  2106. {
  2107.     def=$1; shift
  2108.     (for i do
  2109. echo "#include "$i""
  2110.      done
  2111.      for i in "#if defined($def) && ($def > 0L)" "FOUND" "#endif"; do
  2112. echo "$i"
  2113.      done
  2114.     )>t.c
  2115.     capture cat t.c
  2116.     runMakeX t 't:; ${CCF} -E t.c' | grep FOUND >&5
  2117. CheckTermioFuncDecls()
  2118. {
  2119.     CheckFuncDecl cfsetospeed 
  2120. 'extern int cfsetospeed(const struct termios*, speed_t);' $@
  2121.     CheckFuncDecl cfsetispeed 
  2122. 'extern int cfsetispeed(const struct termios*, speed_t);' $@
  2123.     CheckFuncDecl tcgetattr 'extern int tcgetattr(int, struct termios*);' $@
  2124.     CheckFuncDecl tcsetattr 
  2125. 'extern int tcsetattr(int, int, const struct termios*);' $@
  2126.     CheckFuncDecl tcsendbreak 'extern int tcsendbreak(int, int);' $@
  2127.     CheckFuncDecl tcdrain 'extern int tcdrain(int);' $@
  2128.     CheckFuncDecl tcflush 'extern int tcflush(int, int);' $@
  2129.     CheckFuncDecl tcflow 'extern int tcflow(int, int);' $@
  2130. }
  2131. BuildTermiosDotH()
  2132. {
  2133.     CheckForIncludeFile termios.h || {
  2134. CheckForIncludeFile sys/termios.h || {
  2135.     bitch "Cannot locate termios.h or sys/termios.h."
  2136.     boom
  2137. }
  2138. Note ""
  2139. Note "No termios.h found; creating one with necessary definitions."
  2140. (EmitCPlusPlusPrologue _TERMIOS_
  2141.  echo '#include "sys/termios.h"'
  2142.  CheckTermioFuncDecls sys/termios.h
  2143.  EmitCPlusPlusEpilogue
  2144. )>xtermios.h
  2145. mv xtermios.h termios.h; chmod 444 termios.h
  2146.     }
  2147. }
  2148. CheckSigvecHandler()
  2149. {
  2150.     cat>t.c++<<EOF
  2151. #include <sys/types.h>
  2152. #include <signal.h>
  2153. void sigHUP(int) {}
  2154. void f() {
  2155.     struct sigvec sv;
  2156.     sv.sv_handler = $1 (sigHUP);
  2157.     (void) sigvec(SIGHUP, &sv, (struct sigvec*) 0);
  2158. }
  2159. int main() { f(); return 0; }
  2160. EOF
  2161.     capture cat t.c++
  2162.     runMake t "t:; ${C++F} ${C++FILE} -c t.c++${MAKECXXOVERRIDE}"
  2163. }
  2164. CheckSigactionHandler()
  2165. {
  2166.     cat>t.c++<<EOF
  2167. #include <sys/types.h>
  2168. #include <signal.h>
  2169. void sigHUP(int) {}
  2170. void f() {
  2171.     struct sigaction sa;
  2172.     sa.sa_handler = $1 (sigHUP);
  2173.     (void) sigaction(SIGHUP, &sa, (struct sigaction*) 0);
  2174. }
  2175. int main() { f(); return 0; }
  2176. EOF
  2177.     capture cat t.c++
  2178.     runMake t "t:; ${C++F} ${C++FILE} -c t.c++${MAKECXXOVERRIDE}"
  2179. }
  2180. CheckSignalHandler()
  2181. {
  2182.     cat>t.c++<<EOF
  2183. #include <sys/types.h>
  2184. #include <signal.h>
  2185. void sigHUP(int) {}
  2186. void f() { (void) signal(SIGHUP, $1 (sigHUP)); }
  2187. int main() { f(); return 0; }
  2188. EOF
  2189.     capture cat t.c++
  2190.     runMake t "t:; ${C++F} ${C++FILE} -c t.c++${MAKECXXOVERRIDE}"
  2191. }
  2192. CheckForMMAP()
  2193. {
  2194.     (cat<<'EOF'
  2195. /* part of this was lifted from GNU autoconf */
  2196. #include <sys/types.h>
  2197. #include <fcntl.h>
  2198. #include <sys/mman.h>
  2199. EOF
  2200.     CheckForFunc getpagesize || {
  2201. cat<<'EOF'
  2202. #ifdef BSD
  2203. # ifndef BSD4_1
  2204. #  define HAVE_GETPAGESIZE
  2205. # endif
  2206. #endif
  2207. #ifndef HAVE_GETPAGESIZE
  2208. # include <sys/param.h>
  2209. # ifdef EXEC_PAGESIZE
  2210. #  define getpagesize() EXEC_PAGESIZE
  2211. # else
  2212. #  ifdef NBPG
  2213. #   define getpagesize() NBPG * CLSIZE
  2214. #   ifndef CLSIZE
  2215. #    define CLSIZE 1
  2216. #   endif
  2217. #  else
  2218. #   ifdef NBPC
  2219. #    define getpagesize() NBPC
  2220. #   else
  2221. #    define getpagesize() PAGESIZE /* SVR4 */
  2222. #   endif
  2223. #  endif
  2224. # endif
  2225. #endif
  2226. EOF
  2227.     }
  2228. cat<<'EOF'
  2229. #include <stdlib.h>
  2230. #include <stdio.h>
  2231. static void
  2232. boom(const char* msg)
  2233. {
  2234.     printf("%s.n", msg);
  2235.     exit(1);
  2236. }
  2237. int
  2238. main()
  2239. {
  2240.     const char* filename = "conftestmmap";
  2241.     char* buf;
  2242.     char* addr;
  2243.     int i, fd, cc;
  2244.     cc = getpagesize();
  2245.     buf = malloc(cc);
  2246.     for (i = 0; i < cc; ++i)
  2247. buf[i] = rand();
  2248.     fd = open(filename, O_WRONLY|O_CREAT, 0666);
  2249.     if (fd < 0)
  2250. boom("Cannot open test file");
  2251.     if (write(fd, buf, cc) != cc)
  2252. boom("Write to test file failed");
  2253.     close(fd);
  2254.     fd = open(filename, O_RDONLY);
  2255.     if (fd < 0)
  2256. boom("Cannot reopen test file");
  2257.     addr = (char*) mmap(0, cc, PROT_READ, MAP_SHARED, fd, 0);
  2258.     if (addr == (char*) -1)
  2259. boom("Cannot mmap test file");
  2260.     for (i = 0; i < cc; ++i)
  2261. if (buf[i] != addr[i])
  2262.     boom("Compare of mmap-file contents failed");
  2263.     exit(0);
  2264. }
  2265. EOF
  2266.     )>m.c
  2267.     capture cat m.c
  2268.     runMake m "m:; ${CC} m.c ${MACHDEPLIBS}" && capture ./a.out
  2269. }
  2270. CheckForStructExitStatus()
  2271. {
  2272.     decl=$1; shift
  2273.     (echo '#include <utmp.h>'
  2274.     for i do
  2275. echo "$i"
  2276.     done
  2277.     cat<<EOF
  2278. main()
  2279. {
  2280.     struct $decl x;
  2281.     x.ut_exit.e_exit = 0;
  2282.     x.ut_exit.e_termination = 0;
  2283.     return 0;
  2284. }
  2285. EOF
  2286.     )>t.c++
  2287.     capture cat t.c++
  2288.     runMake t "t:; ${C++F} ${C++FILE} t.c++${MAKECXXOVERRIDE}"
  2289. }
  2290. CheckForTimeZoneHandling()
  2291. {
  2292.     (echo '#include <time.h>'
  2293.     cat<<EOF
  2294. main()
  2295. {
  2296.     struct tm x;
  2297.     const char* cp;
  2298.     long off;
  2299.     cp = x.tm_zone;
  2300.     off = x.tm_gmtoff;
  2301.     return 0;
  2302. }
  2303. EOF
  2304.     )>t.c++
  2305.     capture cat t.c++
  2306.     runMake t "t:; ${C++F} ${C++FILE} t.c++${MAKECXXOVERRIDE}"
  2307. }
  2308. CheckForTXCD()
  2309. {
  2310.     cat>t.c<<EOF
  2311. #include <sys/ioctl.h>
  2312. main()
  2313. {
  2314.     ioctl(0, TXADDCD, "rts");
  2315.     ioctl(0, TXDELCD, "rts");
  2316. }
  2317. EOF
  2318.     capture cat t.c
  2319.     runMake t 't:; ${CC} t.c'
  2320. }
  2321. #
  2322. # Check for a function declaration in <stdio.h>
  2323. # and if it is missing emit the appropriate decl
  2324. # along with an include of <stdio.h> (for any
  2325. # FILE definition).  Apparently some combinations
  2326. # of systems+compilers do not react well to
  2327. # function declarations w/o various definitions
  2328. # that appear only in stdio.h.
  2329. #
  2330. STDIO_H=no
  2331. CheckStdio()
  2332. {
  2333.     f=$1
  2334.     decl="$2"
  2335.     CheckForFuncDecl $f stdio.h || {
  2336. if [ $STDIO_H = no ]; then
  2337.     echo '#include <stdio.h>'
  2338.     STDIO_H=yes
  2339. fi
  2340. AddFuncDecl $f "$decl"
  2341.     }
  2342. }
  2343. getConfigTag()
  2344. {
  2345.     param=`grep "$1:" $2 | sed -e 's/.*:[  ]*([^  ]*).*/1/'`
  2346. }
  2347. #
  2348. # Check if TIFF library is compatible. If successful,
  2349. # set $tiff_runlen_t on exit to "uint16" or "uint32"
  2350. #
  2351. CheckLibtiff()
  2352. {
  2353.     Note "... checking TIFF library version"
  2354.     tiff_runlen_t=""
  2355.     cat>t.c<<EOF
  2356. #include <stdlib.h>
  2357. #include <stdio.h>
  2358. #include "tiffio.h"
  2359. main()
  2360. {
  2361.     printf( "header_ver=%d lib_ver=%s", TIFFLIB_VERSION, TIFFGetVersion() );
  2362.     exit(0);
  2363. }
  2364. EOF
  2365.     capture cat t.c
  2366.     if runMake t "t:; ${CC} ${CVERSION} ${OTIFFINC} t.c ${LIBTIFF} ${MACHDEPLIBS}"; then
  2367.         header_ver=0
  2368.         lib_ver=""
  2369. eval `./a.out | 
  2370.     sed -n -e 's/header_ver=([0-9][0-9]*) lib_ver=.*Version *([0-9][0-9]*.[0-9]).*/
  2371.                        header_ver=1;lib_ver=2/p'`