configure.in
上传用户:zibowangxu
上传日期:2007-01-04
资源大小:331k
文件大小:28k
源码类别:

Ftp客户端

开发平台:

Unix_Linux

  1. dnl use autoconf 2.12 or higher (2.14 preferred) to generate the configure script
  2. dnl ============================================================================
  3. dnl First of all, definitions of our headers and lookups of generic programs...
  4. dnl ============================================================================
  5. AC_INIT(src/ftpd.c)
  6. divert(0)dnl
  7. #
  8. # Copyright (c) 1999 WU-FTPD Development Group.  
  9. # All rights reserved.
  10. #  
  11. # Portions Copyright (c) 1980, 1985, 1988, 1989, 1990, 1991, 1993, 1994  
  12. #   The Regents of the University of California. 
  13. # Portions Copyright (c) 1993, 1994 Washington University in Saint Louis.  
  14. # Portions Copyright (c) 1996, 1998 Berkeley Software Design, Inc.  
  15. # Portions Copyright (c) 1989 Massachusetts Institute of Technology.  
  16. # Portions Copyright (c) 1998 Sendmail, Inc.  
  17. # Portions Copyright (c) 1983, 1995, 1996, 1997 Eric P.  Allman.  
  18. # Portions Copyright (c) 1997 by Stan Barber.  
  19. # Portions Copyright (c) 1997 by Kent Landfield.  
  20. # Portions Copyright (c) 1991, 1992, 1993, 1994, 1995, 1996, 1997  
  21. #   Free Software Foundation, Inc.    
  22. #  
  23. # Use and distribution of this software and its source code are governed   
  24. # by the terms and conditions of the WU-FTPD Software License ("LICENSE").  
  25. #  
  26. # If you did not receive a copy of the license, it may be obtained online  
  27. # at http://www.wu-ftpd.org/license.html.  
  28. #
  29. # $Id: configure.in,v 1.47 1999/10/03 12:52:12 wuftpd Exp $
  30. #
  31. undivert(0)
  32. AC_CONFIG_HEADER(config.h src/config.h)
  33. AC_PREFIX_DEFAULT(/usr)
  34. AC_CANONICAL_SYSTEM
  35. AC_PROG_CC
  36. AC_ISC_POSIX
  37. AC_PROG_RANLIB
  38. AC_PROG_YACC
  39. AC_PROG_INSTALL
  40. AC_CHECK_PROGS(AR, ar gar, NO)
  41. if test $AR = NO; then
  42.   AC_MSG_ERROR(Can't find ar or gar.)
  43. fi
  44. AC_SUBST(AR)
  45. AC_HEADER_STDC
  46. AC_HEADER_TIME
  47. dnl Quick hack: Let the source know we don't want stuff like
  48. dnl #ifdef LINUX...
  49. AC_DEFINE(AUTOCONF)
  50. dnl see if we support links...
  51. AC_MSG_CHECKING(if we can do hard links)
  52. ln configure src/link.tst 2>&5
  53. if test -x src/link.tst; then
  54. CPLN="ln"
  55. rm -f src/link.tst
  56. AC_MSG_RESULT(yes - using ln)
  57. else
  58. CPLN="cp"
  59. AC_MSG_RESULT(no - using cp)
  60. fi
  61. AC_SUBST(CPLN)
  62. dnl ===========================================================================
  63. dnl Accepted arguments to ./configure...
  64. dnl ============================================================================
  65. AC_ARG_WITH(etc-dir, 
  66.     [  --with-etc-dir=PATH     read-only single-machine data in DIR [/etc]],
  67.     ETCDIR=$with_etc_dir, ETCDIR=/etc)
  68. AC_SUBST(ETCDIR)
  69. AC_ARG_WITH(pid-dir, 
  70.     [  --with-pid-dir=PATH     run/pid files [/var/run]],
  71.     PIDDIR=$with_pid_dir, PIDDIR=/var/run)
  72. AC_SUBST(PIDDIR)
  73. AC_ARG_WITH(log-dir, 
  74.     [  --with-log-dir=PATH     log files [/var/log]],
  75.     LOGDIR=$with_log_dir, LOGDIR=/var/log)
  76. AC_SUBST(LOGDIR)
  77. AC_ARG_ENABLE(upload,  
  78.     [  --disable-upload        disable the UPLOAD keyword in ftpaccess],
  79.     [ upload=$enableval ], [ upload=yes ])
  80. AC_ARG_ENABLE(overwrite, 
  81.     [  --disable-overwrite     disable the OVERWRITE keyword in ftpaccess],
  82.     [ overwrite=$enableval ], [ overwrite=yes ])
  83. AC_ARG_ENABLE(hostxs,  
  84.     [  --disable-hostxs        don't allow ALLOW/DENY keywords in ftpaccess],
  85.     [ hostxs=$enableval ], [ hostxs=yes ])
  86. AC_ARG_ENABLE(logfailed, 
  87.     [  --disable-logfailed     don't log failed login attempts],
  88.     [ logfailed=$enableval ], [ logfailed=yes ])
  89. AC_ARG_ENABLE(logtoomany,
  90.     [  --disable-logtoomany    don't log login attempts that failed because of limits],
  91.     [ logtoomany=$enableval ], [ logtoomany=yes ])
  92. AC_ARG_ENABLE(private,   
  93.     [  --disable-private       don't support private files (SITE GROUP/SITE GPASS)],
  94.     [ private=$enableval ], [ private=yes ])
  95. AC_ARG_ENABLE(dnsretry,  
  96.     [  --disable-dnsretry      don't retry failed DNS lookups],
  97.     [ dnsretry=$enableval ], [ dnsretry=yes ])
  98. AC_ARG_ENABLE(anononly,  
  99.     [  --enable-anononly       allow only anonymous ftp connections],
  100.     [ anononly=$enableval ], [ anononly=no ])
  101. AC_ARG_ENABLE(paranoid,  
  102.     [  --enable-paranoid       disable some "questionable" features],
  103.     [ paranoid=$enableval ], [ paranoid=no ])
  104. AC_ARG_ENABLE(quota,  
  105.     [  --enable-quota          add QUOTA support (if your OS supports it)],
  106.     [ quota=$enableval ], [ quota=no ])
  107. AC_ARG_ENABLE(pam,  
  108.     [  --enable-pam            add PAM support (needs PAM library)],
  109.     [ pam=$enableval ], [ pam=no ])
  110. AC_ARG_ENABLE(skey,  
  111.     [  --enable-skey           add S/KEY support (needs SKEY libraries)],
  112.     [ skey=$enableval ], [ skey=no ])
  113. AC_ARG_ENABLE(opie,  
  114.     [  --enable-opie           add OPIE support (needs OPIE libraries)],
  115.     [ opie=$enableval ], [ opie=no ])
  116. if test $skey = "yes" -o $skey = "y"
  117. then
  118.   if test $opie = "yes" -o $skey = "y"
  119.   then
  120.     AC_MSG_ERROR([*** YOU SHOULD NOT HAVE BOTH SKEY AND OPIE DEFINED!!!!!])
  121.   fi
  122. fi
  123. AC_ARG_ENABLE(new-cd,    [  --disable-new-cd        new-cd causes "cd ~" to return to chroot-relative dir],
  124. [ newcd=$enableval ], [ newcd=yes ])
  125. AC_ARG_ENABLE(chmod,  [  --enable-chmod          allow ftp users to set SETUID/SETGID/STICKY bits],
  126. [ chmod=$enableval ], [ chmod=no ])
  127. AC_ARG_ENABLE(rfc931,  [  --enable-rfc931         do RFC931 lookups (more log information, but slower)],
  128. [ rfc931=$enableval ], [ rfc931=no ])
  129. AC_ARG_ENABLE(daemon,  [  --disable-daemon        don't allow running as standalone daemon],
  130. [ daemon=$enableval ], [ daemon=yes ])
  131. AC_ARG_ENABLE(map-chdir, [  --disable-map-chdir     don't keep track of user's path changes],
  132. [ mapchdir=$enableval ], [ mapchdir=yes ])
  133. AC_ARG_ENABLE(throughput,[  --disable-throughput    don't keep track of user's throughput],
  134. [ throughput=$enableval ], [ throughput=yes ])
  135. AC_ARG_ENABLE(count,  [  --disable-count         don't keep track of bytes for statistics],
  136. [ count=$enableval ], [ count=yes ])
  137. AC_ARG_ENABLE(newlines,  [  --disable-newlines      suppress some extra blank lines],
  138. [ newlines=$enableval ], [ newlines=yes ])
  139. AC_ARG_ENABLE(crackers,  [  --enable-crackers       don't wait for password if the username doesn't exist],
  140. [ crackers=$enableval ], [ crackers=no ])
  141. AC_ARG_ENABLE(verbose,  [  --disable-verbose       disable verbose error logging],
  142. [ verbose=$enableval ], [ verbose=yes ])
  143. AC_ARG_ENABLE(noop,      [  --enable-noop           NOOP command resets idle timeout],
  144. [ noop=$enableval ], [ noop=no ])
  145. AC_ARG_ENABLE(log-rp,    [  --disable-log-rp        log the relative path rather than the real one],
  146. [ logrp=$enableval ], [ logrp=yes ])
  147. AC_ARG_ENABLE(virtual,   [  --disable-virtual       don't support virtual servers],
  148. [ virtual=$enableval ], [ virtual=yes ])
  149. AC_ARG_ENABLE(closedvirt,[  --disable-closedvirt    allow guests to log in to a virtual server],
  150. [ closedvirt=$enableval ], [ closedvirt=yes ])
  151. AC_ARG_ENABLE(dns,   [  --disable-dns           skip all DNS lookups],
  152. [ dns=$enableval ], [ dns=yes ])
  153. AC_ARG_ENABLE(port,  [  --disable-port          don't allow port mode],
  154. [ port=$enableval ], [ port=yes ])
  155. AC_ARG_ENABLE(pasv,  [  --disable-pasv          don't allow passive mode],
  156. [ pasv=$enableval ], [ pasv=yes ])
  157. AC_ARG_ENABLE(plsm,  [  --disable-plsm          disable PID lock sleep messages (for busy sites)],
  158. [ plsm=$enableval ], [ plsm=yes ])
  159. AC_ARG_ENABLE(pasvip,    [  --disable-pasvip        don't require require same IP for passive connections],
  160. [ pasvip=$enableval ], [ pasvip=yes ])
  161. AC_ARG_ENABLE(anonymous, [  --disable-anonymous     don't allow anonymous ftp access],
  162. [ anonymous=$enableval ], [ anonymous=yes ])
  163. AC_ARG_ENABLE(ls,  [  --enable-ls             use the internal ls (EXPERIMENTAL)],
  164. [ ls=$enableval ], [ ls=no ])
  165. AC_ARG_ENABLE(numericuid,[  --disable-numericuid    internal ls displays UID instead of username (faster)],
  166. [ numericuid=$enableval ], [ numericuid=yes ])
  167. AC_ARG_ENABLE(hidesetuid,[  --disable-hidesetuid    show setuid/setgid bits in internal ls],
  168. [ hidesetuid=$enableval ], [ hidesetuid=yes ])
  169. AC_ARG_ENABLE(mail,      [  --disable-mail          don't allow mail on upload],
  170. [ mail=$enableval ], [ mail=yes ])
  171. AC_ARG_ENABLE(badclients,[  --enable-badclients     support broken clients (see CHANGES)],
  172. [ badclients=$enableval ], [ badclients=no ])
  173. AC_ARG_WITH(bufsize,  [  --with-bufsize=x        set buffer size to x],
  174. [ bufsize=$withval ], [ bufsize=no ])
  175. AC_ARG_WITH(backlog,  [  --with-backlog=x        number of incoming processes to backlog in daemon mode],
  176. [ backlog=$withval ], [ backlog=100 ])
  177. LIBS=""
  178. dnl ===========================================================================
  179. dnl Checks for some system calls/headers...
  180. dnl ============================================================================
  181. AC_CHECK_HEADERS(dirent.h regex.h shadow.h security/pam_appl.h opie.h skey.h 
  182.   syslog.h sys/syslog.h fcntl.h mntent.h stdlib.h unistd.h glob.h grp.h 
  183.   ndir.h sys/dir.h sys/ndir.h string.h vmsdir.h sys/systeminfo.h 
  184.   bsd/bsd.h sys/param.h values.h limits.h sys/types.h sys/mntent.h 
  185.   sys/mnttab.h paths.h)
  186. AC_CHECK_FUNCS(dirfd fchdir flock ftw getcwd getdtablesize pstat lstat 
  187.   vprintf snprintf regexec regex fgetspent usercmp getusershell setuid vsnprintf 
  188.   snprintf strcasestr strdup strerror strsep strstr syslog glob strcasecmp 
  189.   strncasecmp sigprocmask quotactl getrlimit sysconf setsid memmove 
  190.   strtoul)
  191. AC_CHECK_FUNCS(seteuid setreuid setresuid, break)
  192. AC_CHECK_FUNCS(setegid setregid setresgid, break)
  193. AC_CHECK_LIB(crypt, crypt, result=yes, result=no)
  194. if test $result = yes; then
  195. LIBS="$LIBS -lcrypt"
  196. fi
  197. USENSL=no
  198. AC_CHECK_LIB(socket,socket,result=yes,result=no)
  199. if test $result = yes; then
  200. LIBS="$LIBS -lsocket"
  201. else
  202. AC_CHECK_LIB(socket,socket,result=yes,result=no,-lnsl)
  203. if test $result = yes; then
  204. LIBS = "$LIBS -lsocket -lnsl"
  205. USENSL=yes
  206. else
  207. AC_CHECK_LIB(socket,connect,result=yes,result=no)
  208. if test $result = yes; then
  209. LIBS="$LIBS -lsocket"
  210. else
  211. AC_CHECK_LIB(socket,connect,result=yes,result=no,-lnsl)
  212. if test $result = yes; then
  213. LIBS="$LIBS -lsocket -lnsl"
  214. USENSL=yes
  215. fi
  216. fi
  217. fi
  218. fi
  219. if test $USENSL != yes; then
  220. AC_CHECK_LIB(nsl,inet_addr,result=yes,result=no)
  221. if test $result = yes; then
  222. LIBS="$LIBS -lnsl"
  223. fi
  224. fi
  225. AC_MSG_CHECKING(for sys_siglist)
  226. AC_TRY_COMPILE([#include <signal.h>
  227. #include <stdio.h>],[ puts(sys_siglist[0]); ], result=yes, result=no)
  228. AC_MSG_RESULT($result)
  229. if test "$result" = "yes"; then
  230. AC_DEFINE(HAVE_SIGLIST)
  231. fi
  232. AC_MSG_CHECKING(type of qsort)
  233. AC_TRY_COMPILE([#include <stdlib.h>
  234. extern void qsort();],[  ], result=void, result=int)
  235. AC_MSG_RESULT($result)
  236. if test "$result" = "void"; then
  237. AC_DEFINE(QSORT_IS_VOID)
  238. fi
  239. AC_MSG_CHECKING(how to determine bytesize)
  240. if test "$ac_cv_header_bsd_bsd_h" = "yes"; then
  241. AC_TRY_COMPILE([ #include <bsd/bsd.h> ],[ int i=NBBY ], NBBY=NBBY, NBBY=8)
  242. else
  243. AC_TRY_COMPILE([ #include <sys/param.h> ],[ int i=NBBY ], NBBY=NBBY, NBBY=8)
  244. fi
  245. if test "$NBBY" = "8"; then
  246. AC_TRY_COMPILE([ #include <values.h> ],[ int i=BITSPERBYTE ], NBBY=BITSPERBYTE, NBBY=8)
  247. if test "$NBBY" = "8"; then
  248. AC_TRY_COMPILE([ #include <limits.h> ],[ int i=CHAR_BIT ], NBBY=CHAR_BIT, NBBY=8)
  249. if test "$NBBY" != "8"; then
  250. AC_DEFINE(NEED_LIMITS_H)
  251. else
  252. AC_TRY_COMPILE([ #include <sys/types.h> ],[ int i=NBBY ], NBBY=NBBY, NBBY=8)
  253. fi
  254. else
  255. AC_DEFINE(NEED_VALUES_H)
  256. fi
  257. else
  258. if test "$ac_cv_header_bsd_bsd_h" = "yes"; then
  259. AC_DEFINE(NEED_BSD_BSD_H)
  260. else
  261. AC_DEFINE(NEED_SYS_PARAM_H)
  262. fi
  263. fi
  264. if test "$NBBY" = "8"; then
  265. AC_MSG_RESULT(can't be determined - assuming 8)
  266. else
  267. AC_MSG_RESULT($NBBY)
  268. fi
  269. if test "$NBBY" != "NBBY"; then
  270. AC_DEFINE_UNQUOTED(NBBY,$NBBY)
  271. fi
  272. AC_MSG_CHECKING(if openlog requires 3 arguments)
  273. AC_TRY_COMPILE([#ifdef HAVE_SYSLOG_H
  274. #include <syslog.h>
  275. #endif
  276. #ifdef HAVE_SYS_SYSLOG_H
  277. #include <sys/syslog.h>
  278. #endif],[ openlog("",0,0) ], result=yes, result=no)
  279. AC_MSG_RESULT($result)
  280. if test "$result" = "yes"; then
  281. AC_MSG_CHECKING(which facility openlog understands)
  282. AC_TRY_COMPILE([#ifdef HAVE_SYSLOG_H
  283. #include <syslog.h>
  284. #endif
  285. #ifdef HAVE_SYS_SYSLOG_H
  286. #include <sys/syslog.h>
  287. #endif],[ openlog("",0,LOG_FTP) ], result=yes, result=no)
  288. if test "$result" = "yes"; then
  289. FACILITY="LOG_FTP"
  290. else
  291. AC_TRY_COMPILE([#ifdef HAVE_SYSLOG_H
  292. #include <syslog.h>
  293. #endif
  294. #ifdef HAVE_SYS_SYSLOG_H
  295. #include <sys/syslog.h>
  296. #endif],[ openlog("",0,LOG_DAEMON) ], result=yes, result=no)
  297. if test "$result" = "yes"; then
  298. FACILITY="LOG_DAEMON"
  299. else
  300. AC_TRY_COMPILE([#ifdef HAVE_SYSLOG_H
  301. #include <syslog.h>
  302. #endif
  303. #ifdef HAVE_SYS_SYSLOG_H
  304. #include <sys/syslog.h>
  305. #endif], [ openlog("",0,LOG_LOCAL7)], result=yes, result=no)
  306. if test "$result" = "yes"; then
  307. FACILITY="LOG_LOCAL7"
  308. fi
  309. fi
  310. fi
  311. AC_MSG_RESULT($FACILITY)
  312. AC_DEFINE_UNQUOTED(FACILITY, $FACILITY)
  313. fi
  314. AC_MSG_CHECKING(type of getmntent function)
  315. AC_TRY_COMPILE([#include <stdio.h>
  316. #include <unistd.h>
  317. #ifdef HAVE_MNTENT_H
  318. #include <mntent.h>
  319. #endif
  320. #ifdef HAVE_SYS_MNTENT_H
  321. #include <sys/mntent.h>
  322. #endif
  323. #ifdef HAVE_SYS_MNTTAB_H
  324. #include <sys/mnttab.h>
  325. #endif
  326. #include <unistd.h>],[ (void) getmntent(0) ], result=new-style, result=old-style)
  327. AC_MSG_RESULT($result)
  328. if test "$result" = "old-style"; then
  329. AC_DEFINE(HAS_OLDSTYLE_GETMNTENT)
  330. fi
  331. dnl some systems (FreeBSD 3) require time.h to be included before utmp.h :/
  332. AC_MSG_CHECKING(if there is a ut_host field in the utmp structure)
  333. AC_TRY_COMPILE([
  334. #ifdef TIME_WITH_SYS_TIME
  335. #include <sys/time.h>
  336. #include <time.h>
  337. #else
  338. #ifdef HAVE_SYS_TIME_H
  339. #include <sys/time.h>
  340. #else
  341. #include <time.h>
  342. #endif
  343. #endif
  344. #include <utmp.h>],[struct utmp ut; puts(ut.ut_host);],result=yes,result=no)
  345. if test "$result" = "yes"; then
  346.   AC_DEFINE(HAVE_UT_UT_HOST)
  347. fi
  348. AC_MSG_RESULT($result)
  349. AC_MSG_CHECKING(if there is a ut_exit.e_termination field in the utmp structure)
  350. AC_TRY_COMPILE([#ifdef TIME_WITH_SYS_TIME
  351. #include <sys/time.h>
  352. #include <time.h>
  353. #else
  354. #ifdef HAVE_SYS_TIME_H
  355. #include <sys/time.h>
  356. #else
  357. #include <time.h>
  358. #endif
  359. #endif
  360. #include <utmp.h>],[struct utmp ut; ut.ut_exit.e_termination=0;],result=yes,result=no)
  361. if test "$result" = "yes"; then
  362. AC_DEFINE(HAVE_UT_UT_EXIT_E_TERMINATION)
  363. fi
  364. AC_MSG_RESULT($result)
  365. AC_MSG_CHECKING(if there is a pw_expire field in the pw structure)
  366. AC_TRY_COMPILE([#include <pwd.h>],[ struct passwd *p; void *a=(void *)p->pw_expire; ],result=yes,result=no)
  367. if test "$result" = "yes"; then
  368.   AC_DEFINE(HAS_PW_EXPIRE)
  369. fi
  370. AC_MSG_RESULT($result)
  371. AC_MSG_CHECKING(if there is a st_blksize field in the stat structure)
  372. AC_TRY_COMPILE([#include <sys/stat.h>],[ struct stat *s; int a=(int)s->st_blksize; ],result=yes,result=no)
  373. if test "$result" = "yes"; then
  374.   AC_DEFINE(HAVE_ST_BLKSIZE)
  375. fi
  376. AC_MSG_RESULT($result)
  377. AC_CHECK_FUNC(res_query, result=yes, result=no)
  378. if test "$result" = "yes"; then
  379. AC_DEFINE(HAVE_LIBRESOLV)
  380. else
  381. AC_CHECK_LIB(bind, res_query, result=yes, result=no)
  382. if test "$result" = "yes"; then
  383. AC_DEFINE(HAVE_LIBRESOLV)
  384.                 LIBS="$LIBS -lbind"
  385. else
  386. AC_CHECK_LIB(resolv, res_query, result=yes, result=no)
  387.         if test "$result" = "yes"; then
  388. AC_DEFINE(HAVE_LIBRESOLV)
  389.                  LIBS="$LIBS -lresolv"
  390.         fi
  391. fi
  392. fi
  393. AC_MSG_CHECKING(how to printf gr_gid)
  394. AC_TRY_RUN([#include <sys/types.h>
  395. #include <grp.h>
  396. int main(int argc, char **argv) {
  397.   struct group *grent;
  398.   if(sizeof(grent->gr_gid)<=4)
  399.     return 0;
  400.   return 1;
  401. }],[ result="u"
  402. AC_DEFINE_UNQUOTED(GR_GID_FORMAT, "$result")
  403. AC_MSG_RESULT(gr_gid is just a long - using %u)],
  404.     [ result="no" ], [ result="no" ])
  405. if test $result = "no"; then
  406.   AC_TRY_RUN([#include <stdio.h>
  407.   int main(int argc, char **argv) {
  408.     if(printf("%qd",(long long) 1)==1)
  409.       return 0;
  410.     return 1;
  411.   }],[ result="qd" ],[ result="no" ], [ result="no"])
  412.   if test $result = "no"; then
  413.     AC_TRY_RUN([#include <stdio.h>
  414.     int main(int argc, char **argv) {
  415.       if(printf("Ld",(long long) 1)==1)
  416.         return 0;
  417.       return 1;
  418.     }],[ result="Ld" ],[ result="no" ], [ result="no" ])
  419.     if test $result = "no"; then
  420.       AC_TRY_RUN([#include <stdio.h>
  421.       int main(int argc, char **argv) {
  422.         if(printf("lld",(long long) 1)==1)
  423.           return 0;
  424.         return 1;
  425.       }],[ result="lld" ],[ result="no" ], [ result="no" ])
  426.       if test $result = "no"; then
  427.         AC_TRY_RUN([#include <stdio.h>
  428.         int main(int argc, char **argv) {
  429.           if(printf("ld",(long long) 1)==1)
  430.             return 0;
  431.           return 1;
  432.         }],[ result="ld" ],[ result="d" ], [ result="d" ])
  433.       fi
  434.     fi
  435.   fi
  436.   AC_DEFINE_UNQUOTED(GR_GID_FORMAT,"$result")
  437.   AC_MSG_RESULT(%$result)
  438. fi
  439. AC_MSG_CHECKING(how to printf pw_uid)
  440. AC_TRY_RUN([#include <sys/types.h>
  441. #include <pwd.h>
  442. int main(int argc, char **argv) {
  443.   struct passwd *pwent;
  444.   if(sizeof(pwent->pw_uid)<=4)
  445.     return 0;
  446.   return 1;
  447. }],[ result="u"
  448. AC_DEFINE_UNQUOTED(PW_UID_FORMAT, "$result")
  449. AC_MSG_RESULT(uid_t is just a long - using %u)],[ result="no" ], [ result="no" ])
  450. if test $result = "no"; then
  451.   AC_TRY_RUN([#include <stdio.h>
  452.   int main(int argc, char **argv) {
  453.     if(printf("%qd",(long long) 1)==1)
  454.       return 0;
  455.     return 1;
  456.   }],[ result="qd" ],[ result="no" ], [ result="no"])
  457.   if test $result = "no"; then
  458.     AC_TRY_RUN([#include <stdio.h>
  459.     int main(int argc, char **argv) {
  460.       if(printf("Ld",(long long) 1)==1)
  461.         return 0;
  462.       return 1;
  463.     }],[ result="Ld" ],[ result="no" ], [ result="no" ])
  464.     if test $result = "no"; then
  465.       AC_TRY_RUN([#include <stdio.h>
  466.       int main(int argc, char **argv) {
  467.         if(printf("lld",(long long) 1)==1)
  468.           return 0;
  469.         return 1;
  470.       }],[ result="lld" ],[ result="no" ], [ result="no" ])
  471.       if test $result = "no"; then
  472.         AC_TRY_RUN([#include <stdio.h>
  473.         int main(int argc, char **argv) {
  474.           if(printf("ld",(long long) 1)==1)
  475.             return 0;
  476.           return 1;
  477.         }],[ result="ld" ],[ result="d" ], [ result="d" ])
  478.       fi
  479.     fi
  480.   fi
  481.   AC_DEFINE_UNQUOTED(PW_UID_FORMAT,"$result")
  482.   AC_MSG_RESULT(%$result)
  483. fi
  484. AC_MSG_CHECKING(how to printf an off_t)
  485. AC_TRY_RUN([#ifdef HAVE_STDLIB_H
  486. #include <stdlib.h>
  487. #endif
  488. #ifdef HAVE_UNISTD_H
  489. #include <unistd.h>
  490. #endif
  491. #include <sys/stat.h>
  492. int main(int argc, char **argv) {
  493.   if(sizeof(off_t)<=4)
  494.     return 0;
  495.   return 1;
  496. }],[ result="u"
  497. AC_DEFINE_UNQUOTED(L_FORMAT, "$result")
  498. AC_MSG_RESULT(off_t is just a long - using %u)],[ result="no" ], [ result="no" ])
  499. if test $result = "no"; then
  500.   AC_TRY_RUN([#include <stdio.h>
  501.   int main(int argc, char **argv) {
  502.     char tstr[8];
  503.     if(sprintf(tstr, "%qd",(long long) 1)==1)
  504.       return 0;
  505.     return 1;
  506.   }],[ result="qd" ],[ result="no" ], [ result="no"])
  507.   if test $result = "no"; then
  508.     AC_TRY_RUN([#include <stdio.h>
  509.     int main(int argc, char **argv) {
  510.       char tstr[8];
  511.       if(sprintf(tstr, "Ld",(long long) 1)==1)
  512.         return 0;
  513.       return 1;
  514.     }],[ result="Ld" ],[ result="no" ], [ result="no" ])
  515.     if test $result = "no"; then
  516.       AC_TRY_RUN([#include <stdio.h>
  517.       int main(int argc, char **argv) {
  518.         char tstr[8];
  519.         if(sprintf(tstr, "lld",(long long) 1)==1)
  520.           return 0;
  521.         return 1;
  522.       }],[ result="lld" ],[ result="no" ], [ result="no" ])
  523.       if test $result = "no"; then
  524.         AC_TRY_RUN([#include <stdio.h>
  525.         int main(int argc, char **argv) {
  526.           char tstr[8];
  527.           if(sprintf(tstr, "ld",(long long) 1)==1)
  528.             return 0;
  529.           return 1;
  530.         }],[ result="ld" ],[ result="d" ], [ result="d" ])
  531.       fi
  532.     fi
  533.   fi
  534.   AC_DEFINE_UNQUOTED(L_FORMAT,"$result")
  535.   AC_MSG_RESULT(using %$result)
  536. fi
  537. AC_MSG_CHECKING(how to printf a time_t)
  538. AC_TRY_RUN([#ifdef HAVE_STDLIB_H
  539. #include <stdlib.h>
  540. #endif
  541. #ifdef HAVE_UNISTD_H
  542. #include <unistd.h>
  543. #endif
  544. #ifdef TIME_WITH_SYS_TIME
  545. #include <sys/time.h>
  546. #include <time.h>
  547. #else
  548. #ifdef HAVE_SYS_TIME_H
  549. #include <sys/time.h>
  550. #else
  551. #include <time.h>
  552. #endif
  553. #endif
  554. int main(int argc, char **argv) {
  555.   if(sizeof(time_t)<=4)
  556.     return 0;
  557.   return 1;
  558. }],[ result="u"
  559. AC_DEFINE_UNQUOTED(T_FORMAT, "$result")
  560. AC_MSG_RESULT(time_t is just a long - using %u)],[ result="no" ], [ result="no" ])
  561. if test $result = "no"; then
  562.   AC_TRY_RUN([#include <stdio.h>
  563.   int main(int argc, char **argv) {
  564.     if(printf("%qd",(long long) 1)==1)
  565.       return 0;
  566.     return 1;
  567.   }],[ result="qd" ],[ result="no" ], [ result="no"])
  568.   if test $result = "no"; then
  569.     AC_TRY_RUN([#include <stdio.h>
  570.     int main(int argc, char **argv) {
  571.       if(printf("Ld",(long long) 1)==1)
  572.         return 0;
  573.       return 1;
  574.     }],[ result="Ld" ],[ result="no" ], [ result="no" ])
  575.     if test $result = "no"; then
  576.       AC_TRY_RUN([#include <stdio.h>
  577.       int main(int argc, char **argv) {
  578.         if(printf("lld",(long long) 1)==1)
  579.           return 0;
  580.         return 1;
  581.       }],[ result="lld" ],[ result="no" ], [ result="no" ])
  582.       if test $result = "no"; then
  583.         AC_TRY_RUN([#include <stdio.h>
  584.         int main(int argc, char **argv) {
  585.           if(printf("ld",(long long) 1)==1)
  586.             return 0;
  587.           return 1;
  588.         }],[ result="ld" ],[ result="d" ], [ result="d" ])
  589.       fi
  590.     fi
  591.   fi
  592.   AC_DEFINE_UNQUOTED(T_FORMAT,"$result")
  593.   AC_MSG_RESULT(%$result)
  594. fi
  595. dnl ===========================================================================
  596. dnl Handle some of the input generated above...
  597. dnl ============================================================================
  598. if test $ac_cv_func_usercmp != yes; then
  599. AUTHUSER=authuser.o
  600. fi
  601. if test $ac_cv_func_ftw != yes; then
  602. FTW=ftw.o
  603. fi
  604. if test $ac_cv_func_getusershell != yes; then
  605. GETUSERSHELL=getusershell.o
  606. fi
  607. if test $ac_cv_func_setuid != yes; then
  608. SCO=sco.o
  609. else
  610. AC_DEFINE(HAVE_SETUID)
  611. fi
  612. if test $ac_cv_func_snprintf != yes; then
  613. SNPRINTF=snprintf.o
  614. fi
  615. if test $ac_cv_func_strcasestr != yes; then
  616. STRCASESTR=strcasestr.o
  617. fi
  618. if test $ac_cv_func_strdup != yes; then
  619. STRDUP=strdup.o
  620. fi
  621. if test $ac_cv_func_strerror != yes; then
  622. STRERROR=strerror.o
  623. fi
  624. if test $ac_cv_func_strsep != yes; then
  625. STRSEP=strsep.o
  626. fi
  627. if test $ac_cv_func_strstr != yes; then
  628. STRSTR=strstr.o
  629. fi
  630. if test $ac_cv_func_syslog != yes; then
  631. SYSLOG=syslog.o
  632. fi
  633. if test $ac_cv_func_glob != yes; then
  634. GLOB=glob.o
  635. fi
  636. if test $ac_cv_func_strcasecmp != yes; then
  637. STRCASECMP=strcasecmp.o
  638. fi
  639. if test $ac_cv_func_strncasecmp != yes; then
  640. STRNCASECMP=strncasecmp.o
  641. fi
  642. AC_SUBST(AUTHUSER)
  643. AC_SUBST(FTW)
  644. AC_SUBST(GETUSERSHELL)
  645. AC_SUBST(SCO)
  646. AC_SUBST(SNPRINTF)
  647. AC_SUBST(STRCASESTR)
  648. AC_SUBST(STRDUP)
  649. AC_SUBST(STRERROR)
  650. AC_SUBST(STRSEP)
  651. AC_SUBST(STRSTR)
  652. AC_SUBST(SYSLOG)
  653. AC_SUBST(GLOB)
  654. AC_SUBST(STRCASECMP)
  655. AC_SUBST(STRNCASECMP)
  656. dnl ===========================================================================
  657. dnl Get the --enable, --disable, --with, --without stuff into the config files
  658. dnl fix it up when necessary
  659. dnl ============================================================================
  660. if test $upload = yes; then
  661. AC_DEFINE(UPLOAD)
  662. fi
  663. if test $overwrite = yes; then
  664. AC_DEFINE(OVERWRITE)
  665. fi
  666. if test $hostxs = yes; then
  667. AC_DEFINE(HOST_ACCESS)
  668. fi
  669. if test $logfailed = yes; then
  670. AC_DEFINE(LOG_FAILED)
  671. fi
  672. if test $logtoomany = yes; then
  673. AC_DEFINE(LOG_TOOMANY)
  674. fi
  675. if test $private = no; then
  676. AC_DEFINE(NO_PRIVATE)
  677. fi
  678. if test $dnsretry = yes; then
  679. AC_DEFINE(DNS_TRYAGAIN)
  680. fi
  681. if test $anononly = yes; then
  682. if test $anonymous = no; then
  683. AC_MSG_ERROR(enable-anononly and disable-anonymous together don't make sense.)
  684. fi
  685. AC_DEFINE(ANON_ONLY)
  686. fi
  687. if test $paranoid = yes; then
  688. AC_DEFINE(PARANOID)
  689. fi
  690. if test $quota != no; then
  691. AC_CHECK_HEADERS(sys/quota.h sys/fs/ufs_quota.h ufs/quota.h jfs/quota.h ufs/ufs/quota.h linux/quota.h)
  692. if test $ac_cv_header_sys_quota.h = yes -o $ac_cv_header_sys_fs_ufs_quota_h = yes -o $ac_cv_header_ufs_quota_h = yes -o $ac_cv_header_jfs_quota_h = yes -o $ac_cv_header_ufs_ufs_quota_h = yes -o $ac_cv_header_linux_quota_h = yes; then
  693. quota=yes
  694. else
  695. if test $quota = yes; then
  696. AC_MSG_WARN(QUOTA not supported by OS - disabled)
  697. fi
  698. quota=no
  699. fi
  700. AC_MSG_CHECKING(for quota support)
  701. AC_MSG_RESULT($quota)
  702. fi
  703. if test $quota = yes; then
  704. dnl FIXME!!
  705. dnl I didn't find a way to reliably check for QUOTA_DEVICE...
  706. dnl so we're guessing at the system type, actually... :/
  707. if test $ac_cv_header_sys_quota_h = yes -o $ac_cv_header_sys_fs_ufs_quota_h = yes; then
  708. AC_DEFINE(QUOTA_DEVICE)
  709. fi
  710. AC_MSG_CHECKING(whether quota support is file- or inode based)
  711. AC_TRY_COMPILE([
  712. #include <unistd.h>
  713. #ifdef TIME_WITH_SYS_TIME
  714. #include <sys/time.h>
  715. #include <time.h>
  716. #else
  717. #ifdef HAVE_SYS_TIME_H
  718. #include <sys/time.h>
  719. #else
  720. #include <time.h>
  721. #endif
  722. #endif
  723. #ifdef HAVE_SYS_TYPES_H
  724. #include <sys/types.h>
  725. #endif
  726. #ifdef HAVE_SYS_QUOTA_H
  727. #include <sys/quota.h>
  728. #else
  729. #ifdef HAVE_LINUX_QUOTA_H
  730. #include <linux/quota.h>
  731. #endif
  732. #endif
  733. #ifdef HAVE_SYS_FS_UFS_QUOTA_H
  734. #include <sys/fs/ufs/quota.h>
  735. #endif
  736. #ifdef HAVE_UFS_QUOTA_H
  737. #include <ufs/quota.h>
  738. #endif
  739. #ifdef HAVE_JFS_QUOTA_H
  740. #include <jfs/quota.h>
  741. #endif
  742. #ifdef HAVE_UFS_UFS_QUOTA_H
  743. #include <ufs/ufs/quota.h>
  744. #endif
  745. struct dqblk quota;],
  746. [ int f=quota.dqb_ihardlimit; ], [ result=inode ], [ result=file ])
  747. AC_MSG_RESULT($result)
  748. if test $result = inode; then
  749. AC_DEFINE(QUOTA_INODE)
  750. fi
  751. AC_DEFINE(QUOTA)
  752. fi
  753. if test $ac_cv_header_security_pam_appl_h = no; then
  754.   if test $pam = yes; then
  755.     AC_MSG_WARN(You don't have PAM libraries, or you're using an incompatible PAM implementation. PAM support disabled.)
  756.     pam=no
  757.   fi
  758. fi
  759. if test $pam = yes; then
  760. AC_DEFINE(USE_PAM)
  761. LIBS="$LIBS -lpam"
  762. AC_CHECK_LIB(dl, dlopen, result=yes, result=no)
  763. if test $result = yes; then
  764. # Some PAM implementations require -ldl...
  765. LIBS="$LIBS -ldl"
  766. fi
  767. else
  768. dnl ===========================================================================
  769. dnl If we don't have PAM, see if we have shadow passwords...
  770. dnl ============================================================================
  771. AC_CHECK_LIB(shadow, setspent, result=yes, result=no)
  772. SHADOW_PASSWORD=0
  773. LIBSHADOW=0
  774. if test $result = yes; then
  775. LIBS="$LIBS -lshadow"
  776. SHADOW_PASSWORD=1
  777. LIBSHADOW=1
  778. else
  779. AC_CHECK_LIB(shadow, getspnam, result=yes, result=no)
  780. if test $result = yes; then
  781. LIBS="$LIBS -lshadow"
  782. SHADOW_PASSWORD=1
  783. LIBSHADOW=1
  784. else
  785. AC_CHECK_LIB(c, setspent, result=yes, result=no)
  786. if test $result = yes; then
  787. if test -f /etc/shadow; then
  788. SHADOW_PASSWORD=1
  789. fi
  790. fi
  791. fi
  792. fi
  793. if test $SHADOW_PASSWORD = 1; then
  794. if test $ac_cv_func_fgetspent != yes; then
  795. AC_CHECK_LIB(shadow, fgetspent, result=yes, result=no)
  796. if test $result = yes; then
  797. if test $LIBSHADOW != 1; then
  798. LIBS="$LIBS -lshadow"
  799. fi
  800. fi
  801. fi
  802. AC_DEFINE(SHADOW_PASSWORD)
  803. fi
  804. fi
  805. if test $ac_cv_header_skey_h = no; then
  806.   if test $skey = yes; then
  807.     AC_MSG_WARN(You don't have S/Key libraries, or you're using an incompatible implementation. S/Key support disabled.)
  808.     skey=no
  809.   fi
  810. fi
  811. if test $skey = yes; then
  812. AC_DEFINE(SKEY)
  813. LIBS="$LIBS -lskey"
  814. fi
  815. if test $ac_cv_header_opie_h = no; then
  816.   if test $opie = yes; then
  817.     AC_MSG_WARN(You don't have OPIE libraries, or you're using an incompatible implementation. OPIE support disabled.)
  818.     opie=no
  819.   fi
  820. fi
  821. if test $opie = yes; then
  822. AC_DEFINE(OPIE)
  823. LIBS="$LIBS -lopie"
  824. fi
  825. if test $newcd = yes; then
  826. AC_DEFINE(ALTERNATE_CD)
  827. fi
  828. if test $chmod = yes; then
  829. AC_DEFINE(UNRESTRICTED_CHMOD)
  830. fi
  831. if test $rfc931 = yes; then
  832. AC_DEFINE(USE_RFC931)
  833. fi
  834. if test $daemon = yes; then
  835. AC_DEFINE(DAEMON)
  836. fi
  837. if test $mapchdir = yes; then
  838. AC_DEFINE(MAPPING_CHDIR)
  839. fi
  840. if test $throughput = yes; then
  841. AC_DEFINE(THROUGHPUT)
  842. fi
  843. if test $count = yes; then
  844. AC_DEFINE(TRANSFER_COUNT)
  845. AC_DEFINE(TRANSFER_LIMIT)
  846. fi
  847. if test $newlines = no; then
  848. AC_DEFINE(NO_SUCKING_NEWLINES)
  849. fi
  850. if test $crackers = yes; then
  851. AC_DEFINE(HELP_CRACKERS)
  852. fi
  853. if test $verbose = yes; then
  854. AC_DEFINE(VERBOSE_ERROR_LOGING)
  855. fi
  856. if test $noop = no; then
  857. AC_DEFINE(IGNORE_NOOP)
  858. fi
  859. if test $logrp = yes; then
  860. AC_DEFINE(XFERLOG_REALPATH)
  861. fi
  862. if test $virtual = yes; then
  863. AC_DEFINE(VIRTUAL)
  864. fi
  865. if test $closedvirt = yes; then
  866. AC_DEFINE(CLOSED_VIRTUAL_SERVER)
  867. fi
  868. if test $dns = no; then
  869. AC_DEFINE(NO_DNS)
  870. fi
  871. if test $port = no; then
  872. if test $pasv = no; then
  873. AC_MSG_ERROR(Need at least PORT or PASV mode. Don't disable both.)
  874. fi
  875. AC_DEFINE(DISABLE_PORT)
  876. fi
  877. if test $pasv = no; then
  878. AC_DEFINE(DISABLE_PASV)
  879. fi
  880. if test $plsm = no; then
  881. AC_DEFINE(NO_PID_SLEEP_MSGS)
  882. fi
  883. if test $pasvip = yes; then
  884. AC_DEFINE(FIGHT_PASV_PORT_RACE)
  885. fi
  886. if test $anonymous = no; then
  887. AC_DEFINE(NO_ANONYMOUS_ACCESS)
  888. fi
  889. if test $ls = yes; then
  890. AC_DEFINE(INTERNAL_LS)
  891. fi
  892. if test $numericuid = yes; then
  893. AC_DEFINE(LS_NUMERIC_UIDS)
  894. fi
  895. if test $hidesetuid = yes; then
  896. AC_DEFINE(HIDE_SETUID)
  897. fi
  898. if test $mail = yes; then
  899. AC_DEFINE(MAIL_ADMIN)
  900. fi
  901. if test $badclients = yes; then
  902. AC_DEFINE(SUPPORT_BROKEN_CLIENTS)
  903. fi
  904. dnl TODO:is there a better check whether or not an argument is numeric???
  905. if test x`expr $bufsize + 1 - 1 2>/dev/null` = x$bufsize; then
  906. AC_DEFINE_UNQUOTED(BUFFER_SIZE, $bufsize)
  907. fi
  908. if test x`expr $backlog + 1 - 1 2>/dev/null` = x$backlog; then
  909. AC_DEFINE_UNQUOTED(MAX_BACKLOG, $backlog)
  910. else
  911. AC_DEFINE_UNQUOTED(MAX_BACKLOG, 100)
  912. fi
  913. AC_DEFINE_UNQUOTED(SIGNAL_TYPE, void)
  914. LIBS="$LIBS -lsupport"
  915. AC_SUBST(LIBS)
  916. AC_DEFINE(USE_ETC)
  917. dnl ===========================================================================
  918. dnl Write results...
  919. dnl ============================================================================
  920. AC_OUTPUT(Makefile src/Makefile support/Makefile util/privatepw/Makefile src/pathnames.h)