configure.in 12 KB

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