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

代理服务器

开发平台:

Unix_Linux

  1. AC_INIT(include/socks.h)
  2. #set this to enable prerelease, changes some defaults (debug enabled)
  3. #prerelease="1"
  4. if test x$prerelease != x; then
  5. prename="-pre$prerelease"
  6. else
  7. prename=""
  8. fi
  9. AM_INIT_AUTOMAKE(dante, 1.1.1$prename)
  10. AM_CONFIG_HEADER(include/autoconf.h)
  11. #NOTE: save CFLAGS; wish to compile without -O2 when debugging
  12. oCFLAGS=$CFLAGS
  13. unset CFLAGS
  14. AM_PROG_LIBTOOL
  15. autoconf_compflags=$CFLAGS
  16. CFLAGS=$oCFLAGS
  17. AC_CANONICAL_HOST
  18. AM_CONDITIONAL(PRERELEASE, test x$prerelease != x)
  19. #known keywords for --enable/disable-foo(=yes/no)?
  20. KNOWN_KEYWORDS="shared|static|debug|warnings|diagnostic|profiling|linting|libwrap|preload"
  21. for keyword in `set | egrep '^enable_' | sed -e 's/^enable_(.*)=.*/1/'`;
  22. do
  23. echo $keyword | egrep "^(${KNOWN_KEYWORDS})$" > /dev/null
  24. if test $? -ne 0; then
  25. AC_MSG_WARN(unknown option '$keyword', ignoring ...)
  26. sleep 10;
  27. fi
  28. done
  29. #solaris 2.5.1 is broken in many places
  30. case $host in
  31.     *-*-solaris2.5.1)
  32. AC_MSG_WARN(the server might not work properly on solaris 2.5.1)
  33. AC_DEFINE(HAVE_SOLARIS_2_5_1)
  34.     ;;
  35. esac
  36. #disable acceptlock
  37. #XXX add proper test for this?
  38. case $host in
  39. *-*-*bsd*)
  40. no_acceptlock=t
  41. ;;
  42. alpha-dec-osf*)
  43. no_acceptlock=t
  44. ;;
  45. *-*-solaris2.6)
  46. no_acceptlock=t
  47. ;;
  48. *-*-solaris2.7)
  49. no_acceptlock=t
  50. ;;
  51. esac
  52. case $host in
  53. alpha-dec-osf*)
  54. AC_DEFINE(HAVE_DEC_PROTO)
  55. AC_DEFINE(HAVE_EXTRA_OSF_SYMBOLS)
  56. PRELOAD="RLD"
  57. CPPFLAGS="${CPPFLAGS} -D_XOPEN_SOURCE_EXTENDED -DBYTE_ORDER=LITTLE_ENDIAN -D_POSIX_SOURCE -D_POSIX_C_SOURCE=199309L -D_OSF_SOURCE"
  58. ;;
  59. *-*-hpux*)
  60. #hpux needs _PROTOTYPES to include prototypes
  61. #for configure (at least when cc is used)
  62. CPPFLAGS="${CPPFLAGS} -D_PROTOTYPES"
  63. ;;
  64. *-*-sunos4*)
  65. #XXX hardcode library path (find better way to do this?)
  66. AC_DEFINE(LIBRARY_PATH, "/usr/lib/")
  67. base_library_path="/usr/lib/"
  68. AC_MSG_WARN("notice: hardcoding /usr/lib for dlopen")
  69. #nonstandard libfunction workaround #XXX proper test
  70. AC_DEFINE(HAVE_BROKEN_VSPRINTF)
  71. #link problems with libresolv, hardcode domainname
  72. if test -s /etc/resolv.conf; then
  73.     domainname_hardcoded=`grep domain /etc/resolv.conf | awk '{ print $2 }'`
  74. fi
  75. no_res_init=t
  76. AC_DEFINE(HAVE_NO_RESOLVESTUFF)
  77. ;;
  78. *-*-solaris*)
  79. AC_DEFINE(HAVE_SENDMSG_DEADLOCK)
  80. AC_DEFINE(HAVE_SOLARIS_BUGS)
  81. AC_DEFINE(BSD_COMP)
  82. ;;
  83. *-*-linux-*) # XXX This might only concern 2.0.x kernels (add test?)
  84. AC_DEFINE(HAVE_DEFECT_RECVMSG)
  85. AC_DEFINE(HAVE_LINUX_BUGS)
  86. AC_DEFINE(SPT_PADCHAR, '')
  87. ;;
  88. *-*-openbsd*) #static sockd when profiling is enabled
  89. no_dynamic_profiled_sockd=t
  90. ;;
  91. *-*-irix*)
  92. PRELOAD="RLD"
  93. ;;
  94. esac
  95. case $PRELOAD in
  96. RLD)
  97. PRELOAD_SEPERATOR=":"
  98. PRELOAD_VARIABLE="_RLD_LIST"
  99. PRELOAD_POSTFIX="DEFAULT"
  100. ;;
  101. *)
  102. PRELOAD_SEPERATOR=" "
  103. PRELOAD_VARIABLE="LD_PRELOAD"
  104. PRELOAD_POSTFIX=""
  105. ;;
  106. esac
  107. AC_SUBST(PRELOAD_SEPERATOR)
  108. AC_SUBST(PRELOAD_VARIABLE)
  109. AC_SUBST(PRELOAD_POSTFIX)
  110. #define hosttype
  111. AC_DEFINE_UNQUOTED(HAVE_HOST_TYPE, "$host")
  112. #XXX add proper test for this?
  113. if test x$no_acceptlock != xt; then
  114. AC_DEFINE(NEED_ACCEPTLOCK)
  115. fi
  116. AC_MSG_CHECKING(for compiler flags)
  117. case $host in
  118.     #XXX check for compiler type, not architecture
  119.     *-*-solaris*)
  120. if test "x$GCC" = x; then
  121.     #-xs provides allows easier debugging with gdb
  122.     comp_flags="-Xt -xs" #XXX -Xt needed to compile?
  123.     #XXX due to some problems with sockaddr alignment
  124.     #XXX sun cc needs -misalign
  125.     comp_flags="$comp_flags -misalign -xO0"
  126.     AC_MSG_RESULT($comp_flags)
  127.     AC_MSG_WARN(there might currenly be some performance problems with suncc - it needs -misalign)
  128.     $CC 2>&1 | grep ucbcc > /dev/null
  129.     if test $? -eq 0; then
  130. #XXX ucbcc uses includes from /usr/ucbinclude, but these are
  131. #not complete. add /usr/include to include path to get
  132. #all prototypes (read/write are missing)
  133. #XXX
  134. host_cc="solaris-ucbcc"
  135. CPPFLAGS="-I/usr/include $CPPFLAGS${CPPFLAGS:+ } "
  136.     fi
  137. fi
  138. # AC_MSG_RESULT($comp_flags)
  139.     ;;
  140.     alpha-dec-osf*) #XXX is it possible to get it to work with -newc?
  141. if test "x$GCC" = x; then
  142.     comp_flags="-std1 -oldc"
  143. fi
  144. AC_MSG_RESULT($comp_flags)
  145.     ;;
  146.     *)
  147. AC_MSG_RESULT(none)
  148.     ;;
  149.     #XXX make sure compiling with compiler options works
  150. esac
  151. AC_MSG_CHECKING(for support for -pipe compiler flag)
  152. oCFLAGS=$CFLAGS
  153. CFLAGS="$CFLAGS -pipe"
  154. AC_TRY_RUN([
  155. int main()
  156. {
  157. return 0;
  158. }], [AC_MSG_RESULT(yes)
  159.      comp_flags="${comp_flags} -pipe"],
  160.     AC_MSG_RESULT(no))
  161. CFLAGS="$oCFLAGS"
  162. AC_MSG_CHECKING(for compilation with debugging)
  163. AC_ARG_ENABLE(debug,
  164. [  --enable-debug          compile with debugging support],
  165. debug_enabled=t,
  166. [if test x$prerelease != x; then
  167.    debug_enabled=t
  168.  fi])
  169. if test x$debug_enabled = xt; then
  170.     #no optimalization wanted
  171.     if test $ac_cv_prog_cc_g = yes; then
  172. CFLAGS="$CFLAGS -g"
  173.     fi
  174.     CPPFLAGS="-DDEBUG $CPPFLAGS"
  175.     AC_MSG_RESULT(yes)
  176. else
  177.     AC_MSG_RESULT(no)
  178.     #autoconf_compflags is set to "-g -O2" with GCC
  179.     CFLAGS="$CFLAGS $autoconf_compflags"
  180. fi
  181. #-Wall ?
  182. AC_MSG_CHECKING(for warning flags)
  183. AC_ARG_ENABLE(warnings,
  184. [  --enable-warnings       show compilation warnings],
  185. [enable_warnings=t],
  186. [if test x$prerelease != x; then
  187.     enable_warnings=t
  188.  fi])
  189. #construct warning flags in $warn
  190. if test x$enable_warnings != x; then
  191.     #try to enable compiler specific warning flags
  192.     if test "x$GCC" = x; then
  193. case $host in
  194.     *sunos4*) #sunos cc
  195. # warn=""
  196. true
  197.     ;;
  198.     alpha-dec-osf*) #osf cc
  199. # warn="-w0 -check -portable -warnprotos"
  200. true
  201.     ;;
  202.     *-*-solaris*)
  203. warn="-v" #XXX sun cc won't link with -vc defined
  204. true
  205.     ;;
  206.     *-*-irix*) #sgi cc
  207. warn="-fullwarn"
  208.     ;;
  209.     *) #try -Wall (gcc)
  210. warn="-Wall"
  211.     ;;
  212. esac
  213.     else
  214. #gcc warnings
  215. warn="-Wall -W -Wnested-externs -Wmissing-declarations -Wmissing-prototypes -Wstrict-prototypes -Wcast-align -Wcast-qual -Wbad-function-cast -Wpointer-arith -Wundef"
  216. #warn="$warn -Wold-style-cast -Winline -Waggregate-return -Wconversion -Wwrite-strings -Wtraditional -Wshadow"
  217.     fi
  218.     oCFLAGS=$CFLAGS
  219.     CFLAGS="$CFLAGS $warn"
  220.     #make sure compilation is still possible
  221.     AC_TRY_COMPILE([], [],
  222.    [AC_MSG_RESULT($warn)],
  223.    [AC_MSG_RESULT(none)
  224.     unset warn])
  225.     CFLAGS=$oCFLAGS
  226. else
  227.     AC_MSG_RESULT(none)
  228. fi
  229. #NOTE: set warnings at the bottom; might interfere with tests
  230. CFLAGS="$CFLAGS $comp_flags"
  231. #-DDIAGNOSTICS?
  232. AC_MSG_CHECKING(for compliation with DIAGNOSTIC)
  233. AC_ARG_ENABLE(diagnostic,
  234. [  --enable-diagnostic     enable diagnostic],
  235. [AC_DEFINE(DIAGNOSTIC)
  236.  AC_MSG_RESULT(yes)],
  237. [if test x$prerelease != x; then
  238.       AC_DEFINE(DIAGNOSTIC)
  239.       AC_MSG_RESULT(yes)
  240.  else
  241.       AC_MSG_RESULT(no)
  242.  fi])
  243. AC_ARG_ENABLE(profiling,
  244. [  --enable-profiling      compile with profiling support in server],
  245. [   AC_DEFINE(HAVE_PROFILING)
  246.     s_profiling=t])
  247. AM_CONDITIONAL(SPROFIL, test x$s_profiling = xt)
  248. #static or dynamic sockd?
  249. AM_CONDITIONAL(STATIC_SOCKD, test x$no_dynamic_profiled_sockd = xt)
  250. if test x$no_dynamic_profiled_sockd = xt; then
  251. AC_MSG_WARN(sockd is built static when profiling is enabled)
  252. fi
  253. AC_ARG_ENABLE(linting,
  254. [  --enable-linting        enable lint],
  255. s_linting=t)
  256. AM_CONDITIONAL(LINT, test x$s_linting = xt)
  257. AC_MSG_CHECKING(whether libwrap should be disabled)
  258. AC_ARG_ENABLE(libwrap,
  259. [  --disable-libwrap       never use libwrap, even if it is available],
  260. [if test x$enableval = xno; then
  261. no_libwrap=t
  262. AC_MSG_RESULT(yes)
  263. else
  264. AC_MSG_RESULT(no)
  265. fi], AC_MSG_RESULT(no))
  266. #add /usr/local/include to directories to include path if tcpd.h
  267. #can be found there)
  268. for dir in /local/include /usr/local/include; do
  269.     if test -f $dir/tcpd.h; then
  270. CPPFLAGS="${CPPFLAGS}${CPPFLAGS:+ }-I${dir}"
  271. break
  272.     fi
  273. done
  274. dnl Checks for programs.
  275. AC_PROG_YACC
  276. AC_PROG_AWK
  277. AM_PROG_LEX
  278. dnl Checking variable sizes
  279. AC_CHECK_SIZEOF(char)
  280. AC_CHECK_SIZEOF(short)
  281. AC_CHECK_SIZEOF(int)
  282. AC_CHECK_SIZEOF(long)
  283. dnl Checks for header files.
  284. AC_HEADER_STDC
  285. AC_HEADER_SYS_WAIT
  286. AC_CHECK_HEADERS(fcntl.h limits.h malloc.h paths.h strings.h syslog.h)
  287. AC_CHECK_HEADERS(unistd.h crypt.h sys/file.h sys/ioctl.h sys/time.h)
  288. AC_CHECK_HEADERS(netinet/ip_var.h tcpd.h)
  289. case $host in
  290. alpha-dec-osf*)
  291. AC_CHECK_HEADERS(netinet/ip.h)
  292. ;;
  293. *) ;;
  294. esac
  295. #build without support for preloading?
  296. AC_MSG_CHECKING(whether preloading should be disabled)
  297. AC_ARG_ENABLE(preload,
  298. [  --disable-preload       disable support for preloading shared libraries],
  299. [if test x$enableval = xno; then
  300. no_preload=t
  301. AC_MSG_RESULT(yes)
  302. else
  303. AC_MSG_RESULT(no)
  304. fi], AC_MSG_RESULT(no))
  305. #allow manual specification
  306. AC_MSG_CHECKING(for hardcoded domainname)
  307. AC_ARG_WITH(domainname,
  308. [  --with-domainname=NAME  hardcode local domainname (only on broken platforms)], [domainname_hardcoded=$withval])
  309. if test x${domainname_hardcoded} != x; then
  310.     AC_DEFINE_UNQUOTED(SOCKS_DOMAINNAME, "${domainname_hardcoded}")
  311.     AC_MSG_RESULT(yes)
  312.     AC_MSG_WARN(using hardcoded domainname ${domainname_hardcoded})
  313. else
  314.     AC_MSG_RESULT(no)
  315.     if test x${no_res_init} = xt; then
  316. AC_MSG_WARN(unable to locate domainname, specify if necessary)
  317.     fi
  318. fi
  319. #allow default file locations to be overridden
  320. AC_MSG_CHECKING(for socks config file location)
  321. AC_ARG_WITH(socks-conf,
  322. [  --with-socks-conf=FILE  change location of socks client configuration file],
  323. [AC_MSG_RESULT($withval)
  324.  AC_DEFINE(HAVE_SOCKS_CONFIGFILE)
  325.  AC_DEFINE_UNQUOTED(HAVE_ALT_SOCKS_CONFIGFILE, "$withval")
  326. ], [AC_MSG_RESULT(default)])
  327. AC_MSG_CHECKING(for sockd config file location)
  328. AC_ARG_WITH(sockd-conf,
  329. [  --with-sockd-conf=FILE  change location of socks server configuration file],
  330. [AC_MSG_RESULT($withval)
  331.  AC_DEFINE(HAVE_SOCKD_CONFIGFILE)
  332.  AC_DEFINE_UNQUOTED(HAVE_ALT_SOCKD_CONFIGFILE, "$withval")
  333. ], [AC_MSG_RESULT(default)])
  334. AC_MSG_CHECKING(for pid file location)
  335. AC_ARG_WITH(pidfile,
  336. [  --with-pidfile=FILE     change location of server pidfile],
  337. [AC_MSG_RESULT($withval)
  338.  AC_DEFINE(HAVE_SOCKD_PIDFILE)
  339.  AC_DEFINE_UNQUOTED(HAVE_ALT_SOCKD_PIDFILE, "$withval")
  340. ], [AC_MSG_RESULT(default)])
  341. # SOCKSLIBRARY_DYNAMIC is set in the lib directory when preloading
  342. # is supported (and requested).
  343. # HAVE_DLFCN_H only determines if the include file exists
  344. AC_CHECK_HEADER(dlfcn.h,
  345. [AC_DEFINE(HAVE_DLFCN_H)
  346.  have_dlfcn_h=t])
  347. #XXX only set conditional if building of shared libraries are enabled
  348. AM_CONDITIONAL(BUILD_PRELOAD_LIB, test x$have_dlfcn_h = xt)
  349. AC_CHECK_HEADER(sys/sockio.h,
  350. [AC_DEFINE(HAVE_SYS_SOCKIO_H)
  351.  have_sys_sockio_h=t])
  352. dnl Checks for typedefs, structures, and compiler characteristics.
  353. AC_MSG_CHECKING(whether <sys/types.h> defines const)
  354. AC_EGREP_CPP(yes, [
  355. #include <sys/types.h>
  356. #ifdef const
  357. yes
  358. #endif
  359. ], [AC_MSG_RESULT(yes)],
  360.    [AC_MSG_RESULT(no)
  361.     check_const="yes"])
  362. if test x$check_const = xyes; then
  363.     AC_C_CONST
  364. fi
  365. AC_MSG_CHECKING(whether <netdb.h> declares h_errno)
  366. AC_EGREP_CPP(h_errno, [
  367. #include <netdb.h>
  368. ], [AC_DEFINE(HAVE_H_ERRNO)
  369.     AC_MSG_RESULT(yes)],
  370.    [AC_MSG_RESULT(no)])
  371. #XXXsys/socket.h?
  372. AC_MSG_CHECKING(for struct ip_opts in <netinet/in.h>)
  373. AC_EGREP_CPP([struct.*ipoption], [
  374. #include <netinet/ip_var.h>
  375. ], [AC_DEFINE(HAVE_STRUCT_IPOPTS)
  376.     AC_MSG_RESULT(yes)],
  377.    AC_MSG_RESULT(no))
  378. AC_MSG_CHECKING(whether <sys/types.h> defines inline)
  379. AC_EGREP_CPP(yes, [
  380. #include <sys/types.h>
  381. #ifdef inline
  382. yes
  383. #endif
  384. ], [AC_MSG_RESULT(yes)],
  385.    [AC_MSG_RESULT(no)
  386.     check_inline="yes"])
  387. if test x$check_inline="yes";then
  388.     AC_C_INLINE
  389. fi
  390. AC_TYPE_UID_T
  391. AC_TYPE_OFF_T
  392. AC_TYPE_PID_T
  393. AC_TYPE_SIZE_T
  394. AC_STRUCT_ST_BLKSIZE
  395. AC_HEADER_TIME
  396. AC_STRUCT_TM
  397. AC_STRUCT_TIMEZONE
  398. AC_MSG_CHECKING(to see if openlog accepts LOG_PERROR)
  399. AC_EGREP_CPP(yes, [
  400. #include <syslog.h>
  401. #ifdef LOG_PERROR
  402. yes
  403. #endif
  404. ], [AC_DEFINE(HAVE_OPENLOG_LOG_PERROR)
  405.     AC_MSG_RESULT(yes)],
  406.    AC_MSG_RESULT(no))
  407. AC_MSG_CHECKING(to see if stdlib.h defines EXIT_FAILURE)
  408. AC_EGREP_CPP(yes, [
  409. #include <stdlib.h>
  410. #ifdef EXIT_FAILURE
  411. yes
  412. #endif
  413. ], [AC_MSG_RESULT(yes)],
  414.    [AC_DEFINE(NEED_EXIT_FAILURE)
  415.     AC_MSG_RESULT(no)])
  416. #XXX actually checks if AF_UNIX should be used instead of AF_LOCAL
  417. AC_MSG_CHECKING(whether <sys/socket.h> uses AF_UNIX)
  418. AC_EGREP_CPP(yes, [
  419. #include <sys/types.h>
  420. #include <sys/socket.h>
  421. #ifdef AF_LOCAL
  422. #else
  423. #ifdef AF_UNIX
  424. yes
  425. #endif
  426. #endif
  427. ], [AC_DEFINE(NEED_AF_LOCAL)
  428.     AC_MSG_RESULT(yes)],
  429.    AC_MSG_RESULT(no))
  430. AC_MSG_CHECKING(for SIGINFO)
  431. AC_EGREP_CPP(yes, [
  432. #include <signal.h>
  433. #ifdef SIGINFO
  434. yes
  435. #endif
  436. ], [AC_DEFINE(HAVE_SIGNAL_SIGINFO)
  437.     AC_MSG_RESULT(yes)],
  438.    AC_MSG_RESULT(no))
  439. AC_MSG_CHECKING(to see if MSG_WAITALL exists)
  440. AC_EGREP_CPP(yes, [
  441. #include <sys/socket.h>
  442. #ifdef MSG_WAITALL
  443. yes
  444. #endif
  445. ], [AC_DEFINE(HAVE_MSG_WAITALL)
  446.     AC_MSG_RESULT(yes)],
  447.    AC_MSG_RESULT(no))
  448. #SO_SNDLOWAT
  449. #irix 6.2 only seems to look at lowest 8 bit of value
  450. #solaris also seems to be broken (up to 2.6 atleast)
  451. AC_MSG_CHECKING(whether a working SO_SNDLOWAT exists)
  452. AC_EGREP_CPP(yes, [
  453. #include <sys/socket.h>
  454. #ifdef SO_SNDLOWAT
  455. yes
  456. #endif
  457. ], [
  458. case $host in
  459. *bsd*)
  460. so_sndlowat=t
  461. ;;
  462. *-osf*)
  463. so_sndlowat=t
  464. ;;
  465. esac
  466. if test "x${so_sndlowat}" = xt; then
  467. AC_DEFINE(HAVE_SO_SNDLOWAT)
  468. AC_MSG_RESULT(yes)
  469. else
  470. AC_MSG_RESULT(disabled)
  471. AC_MSG_WARN(performance in the server might be degraded without support for the SO_SNDLOWAT socket option)
  472. fi], [AC_MSG_RESULT(no)
  473.       AC_MSG_WARN(performance in the server might be degraded without support for the SO_SNDLOWAT socket option)])
  474. AC_MSG_CHECKING(whether realloc with a NULL pointer calls malloc)
  475. AC_TRY_RUN([
  476. #include <stdlib.h>
  477. #ifndef NULL
  478. #define NULL (char *)0
  479. #endif
  480. int main()
  481. {
  482. /* will assume this test doesn't fail because of lack of memory */
  483. if (realloc(NULL, 1) == NULL)
  484. return 1;
  485. else
  486. return 0;
  487. }], [AC_MSG_RESULT(yes)],
  488.     [AC_DEFINE(HAVE_NOMALLOC_REALLOC)
  489.      AC_MSG_RESULT(no)])
  490. AC_MSG_CHECKING(whether free with can be called with NULL)
  491. AC_TRY_RUN([
  492. #include <stdlib.h>
  493. #ifndef NULL
  494. #define NULL (char *)0
  495. #endif
  496. int main()
  497. {
  498. /* will assume core dump/seg fault if it doesn't work */
  499. free(NULL);
  500. return 0;
  501. }], [AC_MSG_RESULT(yes)],
  502.     [AC_DEFINE(HAVE_NONULL_FREE)
  503.      AC_MSG_RESULT(no)])
  504. #A good time to save the cache (L_SOCKPROTO might fail)
  505. AC_CACHE_SAVE
  506. #find prototypes for interposition.c
  507. if test x$no_preload != xt; then
  508. unset failproto
  509. if test "x${ac_cv_header_stdc}" = xyes; then
  510. #does $CPP define __STDC__?
  511. AC_EGREP_CPP(yes, [
  512. #ifdef __STDC__
  513. yes
  514. #endif
  515. ], [CPPFLAG_STDC=""], [CPPFLAG_STDC="-D__STDC__"])
  516. #L_SOCKPROTO is used to determine the argument types of the functions
  517. #which are used in dlib/interposition.c. It compares the prototypes in
  518. #(mainly) <sys/socket.h> and compares them to a list of known
  519. #values. The arguments to L_SOCKPROTO are:
  520. #1: the name of the function
  521. #2: shell code which is executed if no known prototype is found
  522. #3...: a list of known types, the first is a list of known return values,
  523. #      the second a list of known values for the first argument etc.
  524. #To add new values to the list simply add the new values at the end of
  525. #the list.
  526. L_SOCKPROTO(connect, [failproto=t],
  527. ["int"],
  528. ["int"],
  529. ["const struct sockaddr *" "__CONST_SOCKADDR_ARG" "struct sockaddr *" "const void *" "__const struct sockaddr *"],
  530. ["socklen_t" "int" "size_t"])
  531. L_SOCKPROTO(accept, [failproto=t],
  532. ["int"],
  533. ["int"],
  534. ["struct sockaddr *" "__SOCKADDR_ARG" "__const struct sockaddr *" "void *"],
  535. ["socklen_t *" "int *" "Psocklen_t" "size_t"])
  536. L_SOCKPROTO(bind, [failproto=t],
  537. ["int"],
  538. ["int"],
  539. ["const struct sockaddr *" "__CONST_SOCKADDR_ARG" "struct sockaddr *" "const void *" "__const struct sockaddr *"],
  540. ["socklen_t" "int" "size_t"])
  541. L_SOCKPROTO(getpeername, [failproto=t],
  542. ["int"],
  543. ["int"],
  544. ["struct sockaddr *" "__SOCKADDR_ARG" "void *"],
  545. ["socklen_t *" "int *" "Psocklen_t" "size_t *"])
  546. L_SOCKPROTO(getsockname, [failproto=t],
  547. ["int"],
  548. ["int"],
  549. ["struct sockaddr *" "__SOCKADDR_ARG" "void *"],
  550. ["int *" "socklen_t *" "Psocklen_t" "size_t *"])
  551. L_SOCKPROTO(recvfrom, [failproto=t],
  552. ["ssize_t" "int"],
  553. ["int"],
  554. ["void *" "char *"],
  555. ["size_t" "int"],
  556. ["int" "unsigned int"],
  557. ["struct sockaddr *" "__SOCKADDR_ARG" "void *"],
  558. ["socklen_t *" "int *" "Psocklen_t" "size_t *"])
  559. L_SOCKPROTO(send, [failproto=t],
  560. ["ssize_t" "int"],
  561. ["int"],
  562. ["const void *" "__const void *" "const char *"],
  563. ["size_t" "int"],
  564. ["int" "unsigned int"])
  565. L_SOCKPROTO(sendto, [failproto=t],
  566. ["ssize_t" "int"],
  567. ["int"],
  568. ["const void *" "__const void *" "const char *"],
  569. ["size_t" "int"],
  570. ["int" "unsigned int"],
  571. ["const struct sockaddr *" "__CONST_SOCKADDR_ARG" "const void *" "__const struct sockaddr *"],
  572. ["socklen_t" "int" "size_t"])
  573. L_SOCKPROTO(recv, [failproto=t],
  574. ["ssize_t" "int"],
  575. ["int"],
  576. ["void *" "char *"],
  577. ["size_t" "int"],
  578. ["int" "unsigned int"])
  579. L_SOCKPROTO(readv, [failproto=t],
  580. ["ssize_t" "int"],
  581. ["int"],
  582. ["const struct iovec *" "__const struct iovec *" "struct iovec *"],
  583. ["int" "size_t"])
  584. L_SOCKPROTO(recvmsg, [failproto=t],
  585. ["ssize_t" "int"],
  586. ["int"],
  587. ["struct msghdr *"],
  588. ["int" "unsigned int"])
  589. L_SOCKPROTO(writev, [failproto=t],
  590. ["ssize_t" "int"],
  591. ["int"],
  592. ["const struct iovec *" "__const struct iovec *"],
  593. ["int" "size_t"])
  594. L_SOCKPROTO(sendmsg, [failproto=t],
  595. ["ssize_t" "int"],
  596. ["int"],
  597. ["const struct msghdr *" "__const struct msghdr *"],
  598. ["int" "unsigned int"])
  599. L_SOCKPROTO(write, [failproto=t],
  600. ["ssize_t"],
  601. ["int"],
  602. ["const void *" "__const void *"],
  603. ["size_t" "unsigned"])
  604. L_SOCKPROTO(read, [failproto=t],
  605. ["ssize_t"],
  606. ["int"],
  607. ["void *"],
  608. ["size_t" "unsigned"])
  609. if test x$failproto != x; then
  610.     echo ""
  611.     echo "error: some unfamiliar function prototypes were found,"
  612.     echo "       and will probably mean that building of libdsocks,"
  613.     echo "       which allows on-the-fly socksification of dynamic"
  614.     echo "       binaries will not work."
  615.     echo ""
  616.     echo "       You have several options:"
  617.     echo ""
  618.     echo "       1. If you do not need libdsocks, run configure with the"
  619.     echo "          option --disable-preload."
  620.     echo "       2. Send the output from configure to dante-bugs@inet.no"
  621.     echo "          and if possible you'll get a patch fixing the problem."
  622.     echo "          If you think this might be a generic problem, sending"
  623.     echo "          the output might allow the problem to be solved for all"
  624.     echo "          users of your platform in the next release."
  625.     echo "       3. Fix the problem yourself. If you have autoconf installed,"
  626.     echo "          using the output above to modify configure.in should"
  627.     echo "          enable you to compile without problems."
  628.     exit 1
  629. fi
  630. else
  631.     #defaults
  632.     AC_DEFINE(HAVE_PROT_CONNECT_0, int)
  633.     AC_DEFINE(HAVE_PROT_CONNECT_1, int)
  634.     AC_DEFINE(HAVE_PROT_CONNECT_2, const struct sockaddr *)
  635.     AC_DEFINE(HAVE_PROT_CONNECT_3, socklen_t)
  636.     AC_DEFINE(HAVE_PROT_ACCEPT_0, int)
  637.     AC_DEFINE(HAVE_PROT_ACCEPT_1, int)
  638.     AC_DEFINE(HAVE_PROT_ACCEPT_2, struct sockaddr *)
  639.     AC_DEFINE(HAVE_PROT_ACCEPT_3, socklen_t *)
  640.     AC_DEFINE(HAVE_PROT_BIND_0, int)
  641.     AC_DEFINE(HAVE_PROT_BIND_1, int)
  642.     AC_DEFINE(HAVE_PROT_BIND_2, const struct sockaddr *)
  643.     AC_DEFINE(HAVE_PROT_BIND_3, socklen_t)
  644.     AC_DEFINE(HAVE_PROT_GETPEERNAME_0, int)
  645.     AC_DEFINE(HAVE_PROT_GETPEERNAME_1, int)
  646.     AC_DEFINE(HAVE_PROT_GETPEERNAME_2, struct sockaddr *)
  647.     AC_DEFINE(HAVE_PROT_GETPEERNAME_3, socklen_t *)
  648.     AC_DEFINE(HAVE_PROT_GETSOCKNAME_0, int)
  649.     AC_DEFINE(HAVE_PROT_GETSOCKNAME_1, int)
  650.     AC_DEFINE(HAVE_PROT_GETSOCKNAME_2, struct sockaddr *)
  651.     AC_DEFINE(HAVE_PROT_GETSOCKNAME_3, socklen_t *)
  652.     AC_DEFINE(HAVE_PROT_RECVFROM_0, ssize_t)
  653.     AC_DEFINE(HAVE_PROT_RECVFROM_1, int)
  654.     AC_DEFINE(HAVE_PROT_RECVFROM_2, void *)
  655.     AC_DEFINE(HAVE_PROT_RECVFROM_3, size_t)
  656.     AC_DEFINE(HAVE_PROT_RECVFROM_4, int)
  657.     AC_DEFINE(HAVE_PROT_RECVFROM_5, struct sockaddr *)
  658.     AC_DEFINE(HAVE_PROT_RECVFROM_6, socklen_t *)
  659.     AC_DEFINE(HAVE_PROT_SEND_0, ssize_t)
  660.     AC_DEFINE(HAVE_PROT_SEND_1, int)
  661.     AC_DEFINE(HAVE_PROT_SEND_2, const void *)
  662.     AC_DEFINE(HAVE_PROT_SEND_3, size_t)
  663.     AC_DEFINE(HAVE_PROT_SEND_4, int)
  664.     AC_DEFINE(HAVE_PROT_RECV_0, ssize_t)
  665.     AC_DEFINE(HAVE_PROT_RECV_1, int)
  666.     AC_DEFINE(HAVE_PROT_RECV_2, void *)
  667.     AC_DEFINE(HAVE_PROT_RECV_3, size_t)
  668.     AC_DEFINE(HAVE_PROT_RECV_4, int)
  669.     AC_DEFINE(HAVE_PROT_SENDTO_0, ssize_t)
  670.     AC_DEFINE(HAVE_PROT_SENDTO_1, int)
  671.     AC_DEFINE(HAVE_PROT_SENDTO_2, const void *)
  672.     AC_DEFINE(HAVE_PROT_SENDTO_3, size_t)
  673.     AC_DEFINE(HAVE_PROT_SENDTO_4, int)
  674.     AC_DEFINE(HAVE_PROT_SENDTO_5, const struct sockaddr *)
  675.     AC_DEFINE(HAVE_PROT_SENDTO_6, socklen_t)
  676.     AC_DEFINE(HAVE_PROT_READV_0, ssize_t)
  677.     AC_DEFINE(HAVE_PROT_READV_1, int)
  678.     AC_DEFINE(HAVE_PROT_READV_2, const struct iovec *)
  679.     AC_DEFINE(HAVE_PROT_READV_3, int)
  680.     AC_DEFINE(HAVE_PROT_WRITEV_0, ssize_t)
  681.     AC_DEFINE(HAVE_PROT_WRITEV_1, int)
  682.     AC_DEFINE(HAVE_PROT_WRITEV_2, const struct iovec *)
  683.     AC_DEFINE(HAVE_PROT_WRITEV_3, int)
  684.     AC_DEFINE(HAVE_PROT_RECVMSG_0, ssize_t)
  685.     AC_DEFINE(HAVE_PROT_RECVMSG_1, int)
  686.     AC_DEFINE(HAVE_PROT_RECVMSG_2, struct msghdr *)
  687.     AC_DEFINE(HAVE_PROT_RECVMSG_3, int)
  688.     AC_DEFINE(HAVE_PROT_SENDMSG_0, ssize_t)
  689.     AC_DEFINE(HAVE_PROT_SENDMSG_1, int)
  690.     AC_DEFINE(HAVE_PROT_SENDMSG_2, const struct msghdr *)
  691.     AC_DEFINE(HAVE_PROT_SENDMSG_3, int)
  692.     AC_DEFINE(HAVE_PROT_WRITE_0, ssize_t)
  693.     AC_DEFINE(HAVE_PROT_WRITE_1, int)
  694.     AC_DEFINE(HAVE_PROT_WRITE_2, const void *)
  695.     AC_DEFINE(HAVE_PROT_WRITE_3, size_t)
  696.     AC_DEFINE(HAVE_PROT_READ_0, ssize_t)
  697.     AC_DEFINE(HAVE_PROT_READ_1, int)
  698.     AC_DEFINE(HAVE_PROT_READ_2, void *)
  699.     AC_DEFINE(HAVE_PROT_READ_3, size_t)
  700. fi #stdc_headers
  701. fi #no preload
  702. AC_MSG_CHECKING(if getsockopt needs cast)
  703. AC_TRY_COMPILE([
  704. #include <sys/types.h>
  705. #include <sys/socket.h>
  706. int getsockopt(int, int, int, char *, int *);
  707. ], [ 1 ],
  708.  [AC_DEFINE(NEED_GETSOCKOPT_CAST)
  709.   AC_MSG_RESULT(yes)],
  710.  AC_MSG_RESULT(no))
  711. #include both <sys/ioctl.h> and <sys/sockio.h>?
  712. if test x$have_sys_sockio_h = xt; then
  713. AC_MSG_CHECKING(to see if <sys/sockio.h> should be included)
  714. AC_EGREP_CPP(yes, [
  715. #include <sys/ioctl.h>
  716. #ifdef SIOCATMARK
  717. #else
  718. #include <sys/sockio.h>
  719. #ifdef SIOCATMARK
  720. yes
  721. #endif
  722. #endif
  723. ], [AC_DEFINE(NEED_SYS_SOCKIO_H)
  724.     AC_MSG_RESULT(yes)],
  725.    AC_MSG_RESULT(no))
  726. fi
  727. #XXX should be more generic, check if nonexistent
  728. AC_MSG_CHECKING(to see if dlopen param has DL_ and not RTLD_ prefix)
  729. AC_EGREP_CPP(yes, [
  730. #include <dlfcn.h>
  731. #ifdef DL_LAZY
  732. #else
  733. # ifdef RTLD_LAZY
  734. yes
  735. # endif
  736. #endif
  737. ], [AC_DEFINE(NEED_DYNA_RTLD)
  738.     AC_MSG_RESULT(yes)],
  739.    AC_MSG_RESULT(no))
  740. #XXX should be more generic, check if nonexistent
  741. #SV_INTERRUPT, but not SA_RESTART defined?
  742. AC_MSG_CHECKING(to see if SV_INTERRUPT should be used)
  743. AC_EGREP_CPP(yes, [
  744. #include <signal.h>
  745. #ifdef SA_RESTART
  746. #else
  747. # ifdef SV_INTERRUPT
  748. yes
  749. # endif
  750. #endif
  751. ], [AC_DEFINE(NEED_SA_RESTART)
  752.     AC_MSG_RESULT(yes)],
  753.    AC_MSG_RESULT(no))
  754. #XXXseems to be supported on solaris2.6, but there might be some
  755. #defines that need to be set (should _XOPEN_SOURCE be defined on all
  756. #platforms?)
  757. AC_MSG_CHECKING(if cmsghdr exists in <sys/socket.h>)
  758. case $host in
  759.     *-*-hpux*)
  760. AC_MSG_RESULT(no) #disable test
  761. ;;
  762.     *)
  763. AC_TRY_COMPILE([
  764. #include <sys/types.h>
  765. #include <sys/socket.h>
  766. ], [struct cmsghdr foo = {1,1,1};
  767.  struct msghdr bar;
  768.  foo.cmsg_len = 0;
  769.  foo.cmsg_type = SCM_RIGHTS;
  770.  foo.cmsg_level = SOL_SOCKET;
  771.  bar.msg_controllen = 1;
  772. ], [AC_DEFINE(HAVE_CMSGHDR)
  773.     AC_MSG_RESULT(yes)],
  774.    AC_MSG_RESULT(no))
  775. ;;
  776. esac
  777. AC_MSG_CHECKING(to see if malloc_options exists)
  778. AC_TRY_LINK([extern char *malloc_options;],
  779. [ malloc_options = 0; ],
  780. [AC_DEFINE(HAVE_MALLOC_OPTIONS)
  781.  AC_MSG_RESULT(yes)],
  782. AC_MSG_RESULT(no))
  783. AC_MSG_CHECKING(to see if __progname exists)
  784. AC_TRY_LINK([extern char *__progname;],
  785. [ __progname = 0; ],
  786. [AC_DEFINE(HAVE_PROGNAME)
  787.  AC_MSG_RESULT(yes)],
  788. AC_MSG_RESULT(no))
  789. dnl Checks for libraries.
  790. AC_SEARCH_LIBS(crypt, crypt)
  791. #FreeBSD has setproctitle in -lutil (Per Hedeland <per@erix.ericsson.se>)
  792. AC_SEARCH_LIBS(setproctitle, util)
  793. #Look for functions needed for socksify located in other places than libc
  794. SOCKSIFY_PRELOAD_LIBS=""
  795. oLIBS=$LIBS
  796. LIBS=""
  797. AC_SEARCH_LIBS(connect, socket)
  798. NLIBS="${NLIBS}${NLIBS:+ }$LIBS"
  799. LIBS=""
  800. #XXX can be ignored when preloading is disabled (only the AC_SEARCH_LIBS test
  801. #is needed)
  802. if test "x${ac_cv_search_connect}" = "x-lsocket"; then
  803. AC_DEFINE_UNQUOTED(LIBRARY_LIBSOCKET, "${base_library_path}libsocket.so")
  804. SOCKSIFY_PRELOAD_LIBS="${SOCKSIFY_PRELOAD_LIBS}${SOCKSIFY_PRELOAD_LIBS:+${PRELOAD_SEPERATOR}}${base_library_path}libsocket.so"
  805. AC_DEFINE(LIBRARY_CONNECT, LIBRARY_LIBSOCKET)
  806. AC_CHECK_LIB(socket, accept,
  807. AC_DEFINE(LIBRARY_ACCEPT, LIBRARY_LIBSOCKET))
  808. AC_CHECK_LIB(socket, bind,
  809. AC_DEFINE(LIBRARY_BIND, LIBRARY_LIBSOCKET))
  810. AC_CHECK_LIB(socket, bindresvport,
  811. AC_DEFINE(LIBRARY_BINDRESVPORT, LIBRARY_LIBSOCKET))
  812. AC_CHECK_LIB(socket, getpeername,
  813. AC_DEFINE(LIBRARY_GETPEERNAME, LIBRARY_LIBSOCKET))
  814. AC_CHECK_LIB(socket, getsockname,
  815. AC_DEFINE(LIBRARY_GETSOCKNAME, LIBRARY_LIBSOCKET))
  816. AC_CHECK_LIB(socket, recvfrom,
  817. AC_DEFINE(LIBRARY_RECVFROM, LIBRARY_LIBSOCKET))
  818. AC_CHECK_LIB(socket, rresvport,
  819. AC_DEFINE(LIBRARY_RRESVPORT, LIBRARY_LIBSOCKET))
  820. AC_CHECK_LIB(socket, recvmsg,
  821. AC_DEFINE(LIBRARY_RECVMSG, LIBRARY_LIBSOCKET))
  822. AC_CHECK_LIB(socket, sendmsg,
  823. AC_DEFINE(LIBRARY_SENDMSG, LIBRARY_LIBSOCKET))
  824. AC_CHECK_LIB(socket, send,
  825. AC_DEFINE(LIBRARY_SEND, LIBRARY_LIBSOCKET))
  826. AC_CHECK_LIB(socket, recv,
  827. AC_DEFINE(LIBRARY_RECV, LIBRARY_LIBSOCKET))
  828. AC_CHECK_LIB(socket, sendto,
  829. AC_DEFINE(LIBRARY_SENDTO, LIBRARY_LIBSOCKET))
  830. fi
  831. #doesn't work if test links with -lsocket (solaris)
  832. AC_SEARCH_LIBS(inet_addr, nsl)
  833. NLIBS="${NLIBS}${NLIBS:+ }$LIBS"
  834. LIBS=""
  835. if test "x${ac_cv_search_inet_addr}" = "x-lnsl"; then
  836. AC_DEFINE_UNQUOTED(LIBRARY_LIBNSL, "${base_library_path}libnsl.so")
  837. SOCKSIFY_PRELOAD_LIBS="${SOCKSIFY_PRELOAD_LIBS}${SOCKSIFY_PRELOAD_LIBS:+${PRELOAD_SEPERATOR}}${base_library_path}libnsl.so"
  838. AC_CHECK_LIB(nsl, gethostbyname,
  839. AC_DEFINE(LIBRARY_GETHOSTBYNAME, LIBRARY_LIBNSL))
  840. fi
  841. #XXX used for anything but gethostbyname2? consider testing for it
  842. # on solaris (atleast 2.6, gcc)
  843. #linking with -lresolv results in error unless -shared is included
  844. #since gcc insists on linking statically with libresolv for which
  845. #no static version exists
  846. AC_SEARCH_LIBS(inet_aton, resolv)
  847. NLIBS="${NLIBS}${NLIBS:+ }$LIBS"
  848. LIBS=""
  849. if test "x${ac_cv_search_inet_aton}" = "x-lresolv"; then
  850. AC_DEFINE_UNQUOTED(LIBRARY_LIBRESOLV, "${base_library_path}libresolv.so")
  851. SOCKSIFY_PRELOAD_LIBS="${SOCKSIFY_PRELOAD_LIBS}${SOCKSIFY_PRELOAD_LIBS:+${PRELOAD_SEPERATOR}}${base_library_path}libresolv.so"
  852. AC_CHECK_LIB(resolv, gethostbyname2,
  853. [AC_DEFINE(LIBRARY_GETHOSTBYNAME2, LIBRARY_LIBRESOLV)
  854.  AC_DEFINE(HAVE_GETHOSTBYNAME2)])
  855. fi
  856. #XXX gcc on solaris (using gnu ld) doesn't seems to implicitly link
  857. #with libdl in this test, which means that libdl will not be included
  858. #in socksify.
  859. AC_SEARCH_LIBS(dlopen, dl)
  860. NLIBS="${NLIBS}${NLIBS:+ }$LIBS"
  861. LIBS=""
  862. if test "x${ac_cv_search_dlopen}" = "x-ldl"; then
  863. case $host in
  864.     *-*-sunos4*) #XXX attemtpt to get libdl name
  865. libdl=`ls ${base_library_path}libdl.so* | sed -e 's/.*///' | sort -nr | head -1`
  866. if test x$libdl = x; then
  867.     AC_MSG_WARN(unable to locate libdl)
  868. else
  869.     LIBRARY_DLOPEN=${base_library_path}${libdl}
  870.     AC_MSG_WARN(hardcoding libdl to $LIBRARY_DLOPEN)
  871. fi
  872.     ;;
  873.     *)
  874. LIBRARY_DLOPEN="${base_library_path}libdl.so"
  875.     ;;
  876. esac
  877. SOCKSIFY_PRELOAD_LIBS="${SOCKSIFY_PRELOAD_LIBS}${LIBRARY_DLOPEN:+${PRELOAD_SEPERATOR}}${LIBRARY_DLOPEN}"
  878. fi
  879. LIBS="$oLIBS $NLIBS"
  880. AC_SUBST(SOCKSIFY_PRELOAD_LIBS)
  881. #specify location of the socks library in socksify too
  882. #NOTE: exec_prefix and prefix have the value NONE here if they are unset
  883. o_exec_prefix=${exec_prefix}
  884. o_prefix=${prefix}
  885. if test x${prefix} = xNONE; then
  886. prefix=$ac_default_prefix
  887. fi
  888. if test x${exec_prefix} = xNONE; then
  889. exec_prefix=$prefix
  890. fi
  891. LIBRARY_PREFIX=`eval echo $libdir`
  892. LIBRARY_PREFIX=`eval echo $LIBRARY_PREFIX`
  893. exec_prefix=${o_exec_prefix}
  894. prefix=${o_prefix}
  895. AC_SUBST(LIBRARY_PREFIX)
  896. #allow user to specify libc name, use default value otherwise
  897. AC_MSG_CHECKING(for libc name)
  898. AC_ARG_WITH(libc,
  899.  [  --with-libc=NAME        manually set name of c library if necessary],
  900.  [LIBC_NAME=$withval])
  901. #set default?
  902. if test "x${LIBC_NAME}" = x; then
  903. case $host in
  904. *-*-linux-*)
  905. #XXX attempt to find latest c library
  906. #can't set it to libc.so directly, might be ld script
  907. LIBC_NAME=`ls /usr/lib/libc.so* /lib/libc.so* | sed -e 's/.*///' | sort -nr | head -1`
  908. if test "x${LIBC_NAME}" = x; then
  909. #nothing found, set libc.so anyway
  910. LIBC_NAME="${base_library_path}libc.so"
  911. fi
  912. ;;
  913. *)
  914. LIBC_NAME="${base_library_path}libc.so"
  915. ;;
  916. esac
  917. fi
  918. AC_MSG_RESULT(${LIBC_NAME})
  919. AC_DEFINE_UNQUOTED(LIBRARY_LIBC, "${LIBC_NAME}")
  920. dnl #XXX include header in compilation test?
  921. dnl normal library testing doesn't work for libwrap (doesn't link
  922. dnl without allow/deny_severity)
  923. if test "x${ac_cv_header_tcpd_h}" = "xyes"; then
  924.     AC_MSG_CHECKING(for libwrap)
  925.     if test x$no_libwrap = xt; then
  926. echo "disabled"
  927.     else
  928. oLIBS=$LIBS
  929. LIBS="$LIBS -lwrap"
  930. AC_TRY_LINK([
  931. int allow_severity;
  932. int deny_severity;
  933. ], [hosts_access(0);],
  934.  [AC_MSG_RESULT(yes)
  935.   AC_DEFINE(HAVE_LIBWRAP)],
  936.  [AC_MSG_RESULT(no)
  937.   LIBS="$oLIBS"])
  938.     fi
  939. fi
  940. #XXX should be more generic
  941. case $host in
  942. *-*-freebsdelf* | *-*-solaris* | *-*-linux-* | *-*-irix* | 
  943. alpha-dec-osf*)
  944. AC_DEFINE(HAVE_NO_SYMBOL_UNDERSCORE)
  945. esac
  946. #try to detect gcc bug (irix 64 problem, affects among others inet_ntoa)
  947. AC_MSG_CHECKING(for incorrect inet_ntoa behaviour)
  948. AC_TRY_RUN([
  949. #include <sys/types.h>
  950. #include <netinet/in.h>
  951. #include <arpa/inet.h>
  952. #include <sys/socket.h>
  953. int main(void)
  954. {
  955.   struct sockaddr_in addr;
  956.   char *a, *b = "195.195.195.195";
  957.   addr.sin_addr.s_addr = inet_addr(b);
  958.   a = inet_ntoa(addr.sin_addr);
  959.   if (strcmp(a, b) == 0)
  960.     return 1;
  961.   else
  962.     return 0;
  963. }
  964. ], [AC_DEFINE(HAVE_BROKEN_INET_NTOA)
  965.     AC_MSG_RESULT(yes)],
  966.    AC_MSG_RESULT(no))
  967. dnl Check for in_port_t type
  968. #solaris2.6
  969. AC_MSG_CHECKING(whether an in_port_t typedef exists in <netinet/in.h>)
  970. AC_EGREP_CPP(in_port_t, [
  971. #include <netinet/in.h>
  972. ], [AC_MSG_RESULT(yes)], [
  973. AC_MSG_RESULT(no)
  974. AC_CHECK_TYPE(in_port_t, ubits_16)
  975. dnl Check for in_addr_t type
  976. AC_CHECK_TYPE(in_addr_t, ubits_32)
  977. dnl Check for ssize_t type
  978. AC_CHECK_TYPE(ssize_t, int)])
  979. #linux (redhat 5.2) defines socklen_t in <socketbits.h>, which is
  980. #included by <sys/socket.h>.  check for this first.
  981. AC_MSG_CHECKING(for socklen_t)
  982. AC_TRY_COMPILE([
  983. #include <sys/types.h>
  984. #include <sys/socket.h>
  985. ], [socklen_t foo = 1;],
  986.    [AC_MSG_RESULT(yes)
  987.     socklen_found=t],
  988.    [AC_MSG_RESULT(no)
  989.     socklen_found=""])
  990. if test x"$socklen_found" = x; then
  991.     case $host in
  992. alpha-dec-osf*)
  993. AC_DEFINE(socklen_t, size_t)
  994. ;;
  995. *)
  996. AC_DEFINE(socklen_t, int)
  997. ;;
  998.     esac
  999. fi
  1000. #sig_atomic_t
  1001. AC_MSG_CHECKING(for sig_atomic_t in <signal.h>)
  1002. AC_EGREP_CPP(sig_atomic_t, [
  1003. #include <signal.h>
  1004. ], [AC_DEFINE(HAVE_SIG_ATOMIC_T)
  1005.     AC_MSG_RESULT(yes)],
  1006.    [AC_MSG_RESULT(no)])
  1007. AC_CHECK_TYPE(int32_t, sbits_32)
  1008. AC_CHECK_TYPE(int16_t, sbits_16)
  1009. dnl Checks for library functions.
  1010. AC_PROG_GCC_TRADITIONAL
  1011. AC_FUNC_MEMCMP
  1012. AC_FUNC_SETVBUF_REVERSED
  1013. AC_TYPE_SIGNAL
  1014. AC_FUNC_STRFTIME
  1015. AC_FUNC_UTIME_NULL
  1016. AC_FUNC_VPRINTF
  1017. AC_CHECK_FUNCS(select socket strcspn strdup strspn hstrerror issetugid)
  1018. AC_CHECK_FUNCS(strvis snprintf getdtablesize sysconf inet_pton vsyslog)
  1019. AC_CHECK_FUNCS(daemon bzero sockatmark difftime memmove seteuid setproctitle)
  1020. AC_CHECK_FUNCS(inet_aton)
  1021. #sun4 seems to have a profiled libc missing strerror
  1022. if test x$s_profiling = x; then
  1023. AC_CHECK_FUNCS(strerror)
  1024. else
  1025. case $host in
  1026. *-*-sunos4*)
  1027. AC_MSG_WARN(omitting strerror test on sunos4 with profiling enabled)
  1028. ;;
  1029. *)
  1030. AC_CHECK_FUNCS(strerror)
  1031. ;;
  1032. esac
  1033. fi
  1034. #add any warning flags (value set above)
  1035. CFLAGS="$CFLAGS $warn"
  1036. #XXXslow
  1037. dnl Creating symbolic links
  1038. AC_LINK_FILES(lib/config.c, sockd/config.c)
  1039. AC_LINK_FILES(lib/config_parse.y, sockd/config_parse.y)
  1040. AC_LINK_FILES(lib/config_scan.l, sockd/config_scan.l)
  1041. AC_LINK_FILES(lib/io.c, sockd/io.c)
  1042. AC_LINK_FILES(lib/log.c, sockd/log.c)
  1043. AC_LINK_FILES(lib/protocol.c, sockd/lib_protocol.c)
  1044. AC_LINK_FILES(lib/socket.c, sockd/socket.c)
  1045. AC_LINK_FILES(lib/util.c, sockd/util.c)
  1046. AC_LINK_FILES(lib/udp_util.c, sockd/udp_util.c)
  1047. AC_LINK_FILES(lib/debug.c, sockd/debug.c)
  1048. AC_LINK_FILES(lib/hostcache.c, sockd/hostcache.c)
  1049. #The dlib directory is for building a shared library with preloading
  1050. #support (SOCKSLIBRARY_DYNAMIC is defined), when dlopen support is
  1051. #available and requested.
  1052. AC_LINK_FILES(lib/Raccept.c, dlib/Raccept.c)
  1053. AC_LINK_FILES(lib/Rbind.c, dlib/Rbind.c)
  1054. AC_LINK_FILES(lib/Rbindresvport.c, dlib/Rbindresvport.c)
  1055. AC_LINK_FILES(lib/Rconnect.c, dlib/Rconnect.c)
  1056. AC_LINK_FILES(lib/Rgethostbyname.c, dlib/Rgethostbyname.c)
  1057. AC_LINK_FILES(lib/Rgetpeername.c, dlib/Rgetpeername.c)
  1058. AC_LINK_FILES(lib/Rgetsockname.c, dlib/Rgetsockname.c)
  1059. AC_LINK_FILES(lib/Rrresvport.c, dlib/Rrresvport.c)
  1060. AC_LINK_FILES(lib/Rcompat.c, dlib/Rcompat.c)
  1061. AC_LINK_FILES(lib/address.c, dlib/address.c)
  1062. AC_LINK_FILES(lib/authneg.c, dlib/authneg.c)
  1063. AC_LINK_FILES(lib/client.c, dlib/client.c)
  1064. AC_LINK_FILES(lib/clientconfig.c, dlib/clientconfig.c)
  1065. AC_LINK_FILES(lib/clientprotocol.c, dlib/clientprotocol.c)
  1066. AC_LINK_FILES(lib/msproxy_clientprotocol.c, dlib/msproxy_clientprotocol.c)
  1067. AC_LINK_FILES(lib/config.c, dlib/config.c)
  1068. AC_LINK_FILES(lib/config_parse.y, dlib/config_parse.y)
  1069. AC_LINK_FILES(lib/config_scan.l, dlib/config_scan.l)
  1070. AC_LINK_FILES(lib/debug.c, dlib/debug.c)
  1071. AC_LINK_FILES(lib/io.c, dlib/io.c)
  1072. AC_LINK_FILES(lib/log.c, dlib/log.c)
  1073. AC_LINK_FILES(lib/method_uname.c, dlib/method_uname.c)
  1074. AC_LINK_FILES(lib/protocol.c, dlib/protocol.c)
  1075. AC_LINK_FILES(lib/socket.c, dlib/socket.c)
  1076. AC_LINK_FILES(lib/connectchild.c, dlib/connectchild.c)
  1077. AC_LINK_FILES(lib/udp.c, dlib/udp.c)
  1078. AC_LINK_FILES(lib/udp_util.c, dlib/udp_util.c)
  1079. AC_LINK_FILES(lib/userio.c, dlib/userio.c)
  1080. AC_LINK_FILES(lib/util.c, dlib/util.c)
  1081. AC_LINK_FILES(lib/hostcache.c, dlib/hostcache.c)
  1082. AC_OUTPUT([sockd/Makefile include/Makefile lib/Makefile dlib/Makefile 
  1083.    Makefile example/Makefile doc/Makefile bin/Makefile 
  1084.    SPECS/Makefile SPECS/dante.spec bin/socksify 
  1085.    libscompat/Makefile VERSION])