configure.in 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398
  1. dnl Process this -*-m4-*- file with autoconf to produce a configure script.
  2. dnl Disable caching
  3. define([AC_CACHE_LOAD],)
  4. define([AC_CACHE_SAVE],)
  5. AC_INIT(src/nrpe.c)
  6. AC_CONFIG_HEADER(include/config.h)
  7. AC_PREFIX_DEFAULT(/usr/local/nagios)
  8. PKG_NAME=nrpe
  9. PKG_VERSION="2.9"
  10. PKG_HOME_URL="http://www.nagios.org/"
  11. PKG_REL_DATE="08-13-2007"
  12. dnl Figure out how to invoke "install" and what install options to use.
  13. AC_PROG_INSTALL
  14. AC_SUBST(INSTALL)
  15. dnl What OS are we running?
  16. AC_CANONICAL_HOST
  17. dnl Checks for programs.
  18. AC_PROG_CC
  19. AC_PROG_MAKE_SET
  20. dnl Checks for header files.
  21. AC_HEADER_STDC
  22. AC_HEADER_TIME
  23. AC_HEADER_SYS_WAIT
  24. AC_CHECK_HEADERS(ctype.h dirent.h errno.h fcntl.h getopt.h grp.h inttypes.h netdb.h pwd.h signal.h stdint.h strings.h string.h syslog.h tcpd.h unistd.h arpa/inet.h netinet/in.h socket.h sys/types.h sys/time.h sys/resource.h sys/wait.h sys/socket.h sys/stat.h)
  25. dnl Checks for typedefs, structures, and compiler characteristics.
  26. AC_C_CONST
  27. AC_STRUCT_TM
  28. AC_TYPE_MODE_T
  29. AC_TYPE_PID_T
  30. AC_TYPE_SIZE_T
  31. AC_TYPE_SIGNAL
  32. AC_TYPE_GETGROUPS
  33. dnl Check lengths for later tests of u_int32_t and int32_t
  34. AC_CHECK_SIZEOF(int)
  35. AC_CHECK_SIZEOF(short)
  36. AC_CHECK_SIZEOF(long)
  37. dnl Define u_int32_t if we don't have it already (Solaris, etc.)
  38. AC_CHECK_TYPE(uint32_t,unsigned int)
  39. AC_CHECK_TYPE(u_int32_t,unsigned int)
  40. if test "$ac_cv_type_u_int32_t" = no ; then
  41. if test "$ac_cv_type_u_int32_t" = yes ; then
  42. AC_DEFINE(U_INT32_T_IS_UINT32_T)
  43. else
  44. if test "$ac_cv_sizeof_int" = 4 ; then
  45. AC_DEFINE(U_INT32_T_IS_UINT)
  46. else
  47. if test "$ac_cv_sizeof_long" = 4 ; then
  48. AC_DEFINE(U_INT32_T_IS_ULONG)
  49. else
  50. if test "$ac_cv_sizeof_short" = 4 ; then
  51. AC_DEFINE(U_INT32_T_IS_USHORT)
  52. fi
  53. fi
  54. fi
  55. fi
  56. fi
  57. dnl Define int32_t if we don't have it already
  58. AC_CHECK_TYPE(int32_t,int)
  59. if test "$ac_cv_type_int32_t" = no ; then
  60. if test "$ac_cv_sizeof_int" = 4 ; then
  61. AC_DEFINE(INT32_T_IS_UINT)
  62. else
  63. if test "$ac_cv_sizeof_long" = 4 ; then
  64. AC_DEFINE(INT32_T_IS_ULONG)
  65. else
  66. if test "$ac_cv_sizeof_short" = 4 ; then
  67. AC_DEFINE(INT32_T_IS_USHORT)
  68. fi
  69. fi
  70. fi
  71. fi
  72. dnl Check for asprintf() and friends...
  73. AC_CACHE_CHECK([for va_copy],ac_cv_HAVE_VA_COPY,[
  74. AC_TRY_LINK([#include <stdarg.h>
  75. va_list ap1,ap2;], [va_copy(ap1,ap2);],
  76. ac_cv_HAVE_VA_COPY=yes,
  77. ac_cv_HAVE_VA_COPY=no)])
  78. if test x"$ac_cv_HAVE_VA_COPY" = x"yes"; then
  79. AC_DEFINE(HAVE_VA_COPY,1,[Whether va_copy() is available])
  80. else
  81. AC_CACHE_CHECK([for __va_copy],ac_cv_HAVE___VA_COPY,[
  82. AC_TRY_LINK([#include <stdarg.h>
  83. va_list ap1,ap2;], [__va_copy(ap1,ap2);],
  84. ac_cv_HAVE___VA_COPY=yes,
  85. ac_cv_HAVE___VA_COPY=no)])
  86. if test x"$ac_cv_HAVE___VA_COPY" = x"yes"; then
  87. AC_DEFINE(HAVE___VA_COPY,1,[Whether __va_copy() is available])
  88. fi
  89. fi
  90. AC_CHECK_FUNC(vsnprintf,,SNPRINTF_O=./snprintf.o)
  91. AC_CHECK_FUNC(snprintf,,SNPRINTF_O=./snprintf.o)
  92. AC_CHECK_FUNC(asprintf,,SNPRINTF_O=./snprintf.o)
  93. AC_CHECK_FUNC(vasprintf,,SNPRINTF_O=./snprintf.o)
  94. AC_CACHE_CHECK([for C99 vsnprintf],ac_cv_HAVE_C99_VSNPRINTF,[
  95. AC_TRY_RUN([
  96. #include <sys/types.h>
  97. #include <stdarg.h>
  98. void foo(const char *format, ...) {
  99. va_list ap;
  100. int len;
  101. char buf[5];
  102. va_start(ap, format);
  103. len = vsnprintf(buf, 0, format, ap);
  104. va_end(ap);
  105. if (len != 5) exit(1);
  106. va_start(ap, format);
  107. len = vsnprintf(0, 0, format, ap);
  108. va_end(ap);
  109. if (len != 5) exit(1);
  110. if (snprintf(buf, 3, "hello") != 5 || strcmp(buf, "he") != 0) exit(1);
  111. exit(0);
  112. }
  113. main() { foo("hello"); }
  114. ],
  115. ac_cv_HAVE_C99_VSNPRINTF=yes,ac_cv_HAVE_C99_VSNPRINTF=no,ac_cv_HAVE_C99_VSNPRINTF=cross)])
  116. if test x"$ac_cv_HAVE_C99_VSNPRINTF" = x"yes"; then
  117. AC_DEFINE(HAVE_C99_VSNPRINTF,1,[Define if system has C99 compatible vsnprintf])
  118. fi
  119. dnl AC_CHECK_FUNC(snprintf,AC_DEFINE(HAVE_SNPRINTF),SNPRINTF_O=./snprintf.o)
  120. AC_SUBST(SNPRINTF_O)
  121. dnl Check for getopt_long (Solaris)
  122. AC_CHECK_FUNCS([getopt_long],,AC_CHECK_LIB([iberty],[getopt_long],OTHERLIBS="$OTHERLIBS -liberty"))
  123. AC_SUBST(OTHERLIBS)
  124. dnl Checks for library functions.
  125. AC_CHECK_LIB(nsl,main,SOCKETLIBS="$SOCKETLIBS -lnsl")
  126. AC_CHECK_LIB(socket,socket,SOCKETLIBS="$SOCKETLIBS -lsocket")
  127. AC_SUBST(SOCKETLIBS)
  128. AC_CHECK_LIB(wrap,main,[
  129. LIBWRAPLIBS="$LIBWRAPLIBS -lwrap"
  130. AC_DEFINE(HAVE_LIBWRAP)
  131. ])
  132. AC_SUBST(LIBWRAPLIBS)
  133. AC_CHECK_FUNCS(strdup strstr strtoul initgroups closesocket)
  134. dnl socklen_t check - from curl
  135. AC_CHECK_TYPE([socklen_t], ,[
  136. AC_MSG_CHECKING([for socklen_t equivalent])
  137. AC_CACHE_VAL([curl_cv_socklen_t_equiv],
  138. [
  139. # Systems have either "struct sockaddr *" or
  140. # "void *" as the second argument to getpeername
  141. curl_cv_socklen_t_equiv=
  142. for arg2 in "struct sockaddr" void; do
  143. for t in int size_t unsigned long "unsigned long"; do
  144. AC_TRY_COMPILE([
  145. #ifdef HAVE_SYS_TYPES_H
  146. #include <sys/types.h>
  147. #endif
  148. #ifdef HAVE_SYS_SOCKET_H
  149. #include <sys/socket.h>
  150. #endif
  151. int getpeername (int, $arg2 *, $t *);
  152. ],[
  153. $t len;
  154. getpeername(0,0,&len);
  155. ],[
  156. curl_cv_socklen_t_equiv="$t"
  157. break
  158. ])
  159. done
  160. done
  161. if test "x$curl_cv_socklen_t_equiv" = x; then
  162. AC_MSG_ERROR([Cannot find a type to use in place of socklen_t])
  163. fi
  164. ])
  165. AC_MSG_RESULT($curl_cv_socklen_t_equiv)
  166. AC_DEFINE_UNQUOTED(socklen_t, $curl_cv_socklen_t_equiv,
  167. [type to use in place of socklen_t if not defined])],
  168. [#include <sys/types.h>
  169. #include <sys/socket.h>])
  170. AC_MSG_CHECKING(for type of socket size)
  171. AC_TRY_COMPILE([#include <stdlib.h>
  172. #include <sys/types.h>
  173. #include <sys/socket.h>
  174. ],
  175. [int a = send(1, (const void *)0, (size_t *) 0, (int *) 0);],
  176. [AC_DEFINE(SOCKET_SIZE_TYPE, size_t) AC_MSG_RESULT(size_t)],
  177. [AC_DEFINE(SOCKET_SIZE_TYPE, int) AC_MSG_RESULT(int)])
  178. dnl Stolen from Python code: loewis@users.sourceforge.net
  179. #AC_CHECK_TYPE(socklen_t,int,
  180. # AC_DEFINE(socklen_t,int,
  181. # Define to `int' if <sys/socket.h> does not define.),[
  182. # #ifdef HAVE_SYS_TYPES_H
  183. # #include <sys/types.h>
  184. # #endif
  185. # #ifdef HAVE_SYS_SOCKET_H
  186. # #include <sys/socket.h>
  187. # #endif
  188. # ])
  189. dnl Does user want to check for SSL?
  190. AC_ARG_ENABLE(ssl,--enable-ssl enables native SSL support,[
  191. if test x$enableval = xyes; then
  192. check_for_ssl=yes
  193. else
  194. check_for_ssl=no
  195. fi
  196. ],check_for_ssl=yes)
  197. dnl Optional SSL library and include paths
  198. ssl_dir=
  199. ssl_inc_dir=
  200. ssl_lib_dir=
  201. AC_ARG_WITH(ssl,--with-ssl=DIR sets location of the SSL installation,[
  202. ssl_dir=$withval
  203. ])
  204. AC_ARG_WITH(ssl-inc,--with-ssl-inc=DIR sets location of the SSL include files,[
  205. ssl_inc_dir=$withval
  206. ])
  207. AC_ARG_WITH(ssl-lib,--with-ssl-lib=DIR sets location of the SSL libraries,[
  208. ssl_lib_dir=$withval
  209. ])
  210. AC_ARG_WITH(kerberos-inc,--with-kerberos-inc=DIR sets location of the Kerberos include files,[
  211. kerberos_inc_dir=$withval
  212. ])
  213. dnl Check for SSL support
  214. dnl Modified version of Mark Ethan Trostler's macro <trostler@juniper.net>
  215. if test x$check_for_ssl = xyes; then
  216. AC_MSG_CHECKING(for SSL headers)
  217. found_ssl=no
  218. for dir in $ssl_inc_dir $ssl_dir /usr/local/openssl /usr/local/ssl /usr/lib/ssl /usr/ssl /usr/pkg /usr/local /usr /usr/freeware/lib/openssl; do
  219. ssldir="$dir"
  220. if test -f "$dir/include/openssl/ssl.h"; then
  221. found_ssl=yes
  222. CFLAGS="$CFLAGS -I$dir/include/openssl -I$ssldir/include"
  223. sslincdir="$dir/include/openssl"
  224. break
  225. fi
  226. if test -f "$dir/include/ssl.h"; then
  227. found_ssl=yes
  228. CFLAGS="$CFLAGS -I$dir/include"
  229. sslincdir="$dir/include"
  230. break
  231. fi
  232. if test -f "$dir/ssl.h"; then
  233. found_ssl=yes
  234. CFLAGS="$CFLAGS -I$dir"
  235. sslincdir="$dir"
  236. ssldir="$dir/.."
  237. break
  238. fi
  239. if test -f "$dir/openssl/ssl.h"; then
  240. found_ssl=yes
  241. CFLAGS="$CFLAGS -I$dir/openssl"
  242. sslincdir="$dir/openssl"
  243. ssldir="$dir/.."
  244. break
  245. fi
  246. done
  247. if test x_$found_ssl != x_yes; then
  248. AC_MSG_ERROR(Cannot find ssl headers)
  249. else
  250. printf "SSL headers found in $ssldir\n";
  251. dnl Now try and find SSL libraries
  252. AC_MSG_CHECKING(for SSL libraries)
  253. found_ssl=no
  254. for dir in $ssl_lib_dir $ssl_dir /usr/lib64 /usr/lib /usr/local/lib /usr/lib/ssl /usr/ssl/lib /usr/openssl/lib /usr/pkg/lib /usr/freeware/lib/openssl; do
  255. ssllibdir="$dir"
  256. if test -f "$dir/libssl.so"; then
  257. found_ssl=yes
  258. break
  259. fi
  260. done
  261. if test x_$found_ssl != x_yes; then
  262. AC_MSG_ERROR(Cannot find ssl libraries)
  263. else
  264. printf "SSL libraries found in $ssllibdir\n";
  265. LDFLAGS="$LDFLAGS -L$ssllibdir";
  266. LIBS="$LIBS -lssl -lcrypto";
  267. AC_DEFINE_UNQUOTED(HAVE_SSL)
  268. AC_SUBST(HAVE_SSL)
  269. dnl Generate DH parameters
  270. echo ""
  271. echo "*** Generating DH Parameters for SSL/TLS ***"
  272. if test -f "$ssldir/sbin/openssl"; then
  273. sslbin=$ssldir/sbin/openssl
  274. else
  275. sslbin=$ssldir/bin/openssl
  276. fi
  277. # awk to strip off meta data at bottom of dhparam output
  278. $sslbin dhparam -C 512 | awk '/^-----/ {exit} {print}' > include/dh.h
  279. fi
  280. fi
  281. dnl RedHat 8.0 and 9.0 include openssl compiled with kerberos, so we must include header file
  282. AC_MSG_CHECKING(for Kerberos include files)
  283. found_kerberos=no
  284. for dir in $kerberos_inc_dir /usr/kerberos/include; do
  285. kerbdir="$dir"
  286. if test -f "$dir/krb5.h"; then
  287. found_kerberos=yes
  288. CFLAGS="$CFLAGS -I$kerbdir"
  289. AC_DEFINE_UNQUOTED(HAVE_KRB5_H)
  290. dnl AC_CHECK_HEADERS(krb5.h)
  291. break
  292. fi
  293. done
  294. if test x_$found_kerberos != x_yes; then
  295. printf "could not find include files\n";
  296. else
  297. printf "found Kerberos include files in $kerbdir\n";
  298. fi
  299. fi
  300. AC_ARG_WITH(log_facility,--with-log-facility=<facility> sets NRPE syslog facility,log_facility=$withval,log_facility=daemon)
  301. AC_SUBST(log_facility)
  302. AC_DEFINE_UNQUOTED(NRPE_LOG_FACILITY,["$log_facility"])
  303. AC_ARG_WITH(nrpe_user,--with-nrpe-user=<user> sets user name to run NRPE,nrpe_user=$withval,nrpe_user=nagios)
  304. AC_ARG_WITH(nrpe_group,--with-nrpe-group=<group> sets group name to run NRPE,nrpe_group=$withval,nrpe_group=nagios)
  305. AC_ARG_WITH(nrpe_port,--with-nrpe-port=<port> sets port number for NRPE to listen on,nrpe_port=$withval,nrpe_port=5666)
  306. AC_SUBST(nrpe_user)
  307. AC_SUBST(nrpe_group)
  308. NRPE_INSTALL_OPTS="-o $nrpe_user -g $nrpe_group"
  309. AC_SUBST(NRPE_INSTALL_OPTS)
  310. AC_SUBST(nrpe_port)
  311. AC_DEFINE_UNQUOTED(DEFAULT_SERVER_PORT,$nrpe_port)
  312. AC_ARG_WITH(nagios_user,--with-nagios-user=<user> sets user name for file permissions,nagios_user=$withval,nagios_user=nagios)
  313. AC_ARG_WITH(nagios_group,--with-nagios-group=<grp> sets group name file permissions,nagios_group=$withval,nagios_group=nagios)
  314. AC_SUBST(nagios_user)
  315. AC_SUBST(nagios_group)
  316. NAGIOS_INSTALL_OPTS="-o $nagios_user -g $nagios_group"
  317. AC_SUBST(NAGIOS_INSTALL_OPTS)
  318. AC_ARG_ENABLE(command-args,--enable-command-args allows clients to specify command arguments. *** THIS IS A SECURITY RISK! *** Read the SECURITY file before using this option!,AC_DEFINE_UNQUOTED(ENABLE_COMMAND_ARGUMENTS))
  319. AC_PATH_PROG(PERL,perl)
  320. AC_OUTPUT(Makefile src/Makefile subst)
  321. perl subst init-script
  322. perl subst init-script.debian
  323. perl subst init-script.suse
  324. perl subst sample-config/nrpe.cfg
  325. perl subst sample-config/nrpe.xinetd
  326. dnl Review options
  327. echo ""
  328. echo ""
  329. AC_MSG_RESULT([*** Configuration summary for $PKG_NAME $PKG_VERSION $PKG_REL_DATE ***:])
  330. echo ""
  331. echo " General Options:"
  332. echo " -------------------------"
  333. AC_MSG_RESULT([ NRPE port: $nrpe_port])
  334. AC_MSG_RESULT([ NRPE user: $nrpe_user])
  335. AC_MSG_RESULT([ NRPE group: $nrpe_group])
  336. AC_MSG_RESULT([ Nagios user: $nagios_user])
  337. AC_MSG_RESULT([ Nagios group: $nagios_group])
  338. echo ""
  339. echo ""
  340. echo "Review the options above for accuracy. If they look okay,"
  341. echo "type 'make all' to compile the NRPE daemon and client."
  342. echo ""