configure.ac 14 KB

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