configure.in 13 KB

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