configure.ac 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397
  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. m4_include([build-aux/custom_help.m4])
  6. AC_INIT([nrpe],[3.2.0],[nagios-users@lists.sourceforge.net],[nrpe],[https://www.nagios.org/downloads/nagios-core-addons/])
  7. AC_CONFIG_SRCDIR([src/nrpe.c])
  8. AC_CONFIG_AUX_DIR([build-aux])
  9. AC_PREFIX_DEFAULT(/usr/local/nagios)
  10. PKG_NAME=nrpe
  11. PKG_VERSION="3.2.0"
  12. PKG_HOME_URL="http://www.nagios.org/"
  13. PKG_REL_DATE="2017-06-27"
  14. RPM_RELEASE=1
  15. LANG=C
  16. LC_ALL=C
  17. LC_COLLATE=C
  18. LC_CTYPE=C
  19. LC_MESSAGES=C
  20. LC_MONETARY=C
  21. LC_NUMERIC=C
  22. LC_TIME=C
  23. AC_SUBST(PKG_NAME)
  24. AC_SUBST(PKG_VERSION)
  25. AC_SUBST(PKG_HOME_URL)
  26. AC_SUBST(PKG_REL_DATE)
  27. AC_SUBST(RPM_RELEASE)
  28. AC_SUBST(INSTALL)
  29. AC_SUBST(SNPRINTF_O)
  30. AC_SUBST(LDFLAGS)
  31. AC_SUBST(OTHERLIBS)
  32. AC_SUBST(SOCKETLIBS)
  33. AC_SUBST(LIBWRAPLIBS)
  34. AC_SUBST(NRPE_INSTALL_OPTS)
  35. AC_SUBST(log_facility)
  36. AC_SUBST(nrpe_user)
  37. AC_SUBST(nrpe_group)
  38. AC_SUBST(nrpe_port)
  39. AC_SUBST(nagios_user)
  40. AC_SUBST(nagios_group)
  41. AC_SUBST(NAGIOS_INSTALL_OPTS)
  42. AC_SUBST(TARGET_VER)
  43. AC_SUBST(TARGET_OS)
  44. AC_SUBST(TARGET_ARCH)
  45. AC_SUBST(TARGET_PLATFORM)
  46. dnl Figure out how to invoke "install" and what install options to use.
  47. AC_PROG_INSTALL
  48. dnl Get O/S, Distribution, init, inetd, system-specific directories
  49. AC_NAGIOS_GET_OS
  50. AC_NAGIOS_GET_DISTRIB_TYPE
  51. AC_NAGIOS_GET_INIT
  52. AC_NAGIOS_GET_INETD
  53. AC_NAGIOS_GET_PATHS
  54. AC_NAGIOS_GET_FILES
  55. if test "$dist_type" = solaris -a "$dist_ver" = 10; then
  56. AC_DEFINE(SOLARIS_10,yes)
  57. fi
  58. dnl Do they just want to see where things will go?
  59. if test x${showdirs_only} = xyes; then
  60. AC_CONFIG_FILES([paths])
  61. AC_OUTPUT()
  62. chmod 755 paths
  63. ./paths
  64. exit 0
  65. fi
  66. AC_CONFIG_HEADERS([include/config.h])
  67. AC_CONFIG_FILES([Makefile
  68. src/Makefile
  69. nrpe.spec
  70. uninstall
  71. sample-config/nrpe.cfg
  72. startup/bsd-init
  73. startup/debian-init
  74. startup/default-init
  75. startup/default-inetd
  76. startup/default-service
  77. startup/default-socket
  78. startup/default-socket-svc
  79. startup/default-xinetd
  80. startup/mac-init.plist
  81. startup/mac-inetd.plist
  82. startup/newbsd-init
  83. startup/openbsd-init
  84. startup/openrc-conf
  85. startup/openrc-init
  86. startup/solaris-init.xml
  87. startup/solaris-inetd.xml
  88. startup/tmpfile.conf
  89. startup/upstart-init
  90. startup/rh-upstart-init
  91. include/common.h
  92. ])
  93. dnl Checks for programs.
  94. AC_PROG_CC
  95. AC_PROG_MAKE_SET
  96. dnl Checks for header files.
  97. AC_HEADER_STDC
  98. AC_HEADER_TIME
  99. AC_HEADER_SYS_WAIT
  100. AC_CHECK_HEADERS(ctype.h dirent.h errno.h fcntl.h getopt.h grp.h inttypes.h)
  101. AC_CHECK_HEADERS(netdb.h pwd.h signal.h stdint.h strings.h string.h syslog.h)
  102. AC_CHECK_HEADERS(tcpd.h unistd.h arpa/inet.h netinet/in.h socket.h sys/types.h)
  103. AC_CHECK_HEADERS(sys/time.h sys/resource.h sys/wait.h sys/socket.h sys/stat.h)
  104. AC_CHECK_HEADERS(paths.h)
  105. dnl Checks for typedefs, structures, and compiler characteristics.
  106. AC_C_CONST
  107. AC_STRUCT_TM
  108. AC_TYPE_MODE_T
  109. AC_TYPE_PID_T
  110. AC_TYPE_SIZE_T
  111. AC_TYPE_SIGNAL
  112. AC_TYPE_GETGROUPS
  113. dnl Check lengths for later tests of u_int32_t and int32_t
  114. AC_CHECK_SIZEOF(int)
  115. AC_CHECK_SIZEOF(short)
  116. AC_CHECK_SIZEOF(long)
  117. dnl Define u_int32_t if we don't have it already (Solaris, etc.)
  118. AC_CHECK_TYPE(uint32_t,unsigned int)
  119. AC_CHECK_TYPE(u_int32_t,unsigned int)
  120. if test "$ac_cv_type_u_int32_t" = no ; then
  121. if test "$ac_cv_type_u_int32_t" = yes ; then
  122. AC_DEFINE(U_INT32_T_IS_UINT32_T,[1],[u_int32_t is uint32_t])
  123. else
  124. if test "$ac_cv_sizeof_int" = 4 ; then
  125. AC_DEFINE(U_INT32_T_IS_UINT,[1],[u_int32_t is uint])
  126. else
  127. if test "$ac_cv_sizeof_long" = 4 ; then
  128. AC_DEFINE(U_INT32_T_IS_ULONG,[1],[u_int32_t is ulong])
  129. else
  130. if test "$ac_cv_sizeof_short" = 4 ; then
  131. AC_DEFINE(U_INT32_T_IS_USHORT,[1],[u_int32_t is ushort])
  132. fi
  133. fi
  134. fi
  135. fi
  136. fi
  137. dnl Define int32_t if we don't have it already
  138. AC_CHECK_TYPE(int32_t,int)
  139. if test "$ac_cv_type_int32_t" = no ; then
  140. if test "$ac_cv_sizeof_int" = 4 ; then
  141. AC_DEFINE(INT32_T_IS_UINT,[1],[int32_t is uint])
  142. else
  143. if test "$ac_cv_sizeof_long" = 4 ; then
  144. AC_DEFINE(INT32_T_IS_ULONG,[1],[int32_t is ulong])
  145. else
  146. if test "$ac_cv_sizeof_short" = 4 ; then
  147. AC_DEFINE(INT32_T_IS_USHORT,[1],[int32_t is ushort])
  148. fi
  149. fi
  150. fi
  151. fi
  152. dnl Check for struct sockaddr_storate
  153. AC_CHECK_TYPES([struct sockaddr_storage],[],[],[#include <sys/socket.h>])
  154. dnl Should we use seteuid() or setresuid()?
  155. AC_CHECK_FUNC(seteuid,
  156. AC_DEFINE(SETEUID(id),[seteuid(id)]),
  157. AC_DEFINE(SETEUID(id),[setresuid((uid_t) -1, id, (uid_t) -1)])
  158. )
  159. dnl Check for asprintf() and friends...
  160. AC_CACHE_CHECK([for va_copy],ac_cv_HAVE_VA_COPY,[
  161. AC_TRY_LINK([#include <stdarg.h>
  162. va_list ap1,ap2;], [va_copy(ap1,ap2);],
  163. ac_cv_HAVE_VA_COPY=yes,
  164. ac_cv_HAVE_VA_COPY=no)])
  165. if test x"$ac_cv_HAVE_VA_COPY" = x"yes"; then
  166. AC_DEFINE(HAVE_VA_COPY,1,[Whether va_copy() is available])
  167. else
  168. AC_CACHE_CHECK([for __va_copy],ac_cv_HAVE___VA_COPY,[
  169. AC_TRY_LINK([#include <stdarg.h>
  170. va_list ap1,ap2;], [__va_copy(ap1,ap2);],
  171. ac_cv_HAVE___VA_COPY=yes,
  172. ac_cv_HAVE___VA_COPY=no)])
  173. if test x"$ac_cv_HAVE___VA_COPY" = x"yes"; then
  174. AC_DEFINE(HAVE___VA_COPY,1,[Whether __va_copy() is available])
  175. fi
  176. fi
  177. AC_CHECK_FUNC(vsnprintf,,SNPRINTF_O=./snprintf.o)
  178. AC_CHECK_FUNC(snprintf,,SNPRINTF_O=./snprintf.o)
  179. AC_CHECK_FUNC(asprintf,,SNPRINTF_O=./snprintf.o)
  180. AC_CHECK_FUNC(vasprintf,,SNPRINTF_O=./snprintf.o)
  181. AC_CACHE_CHECK([for C99 vsnprintf],ac_cv_HAVE_C99_VSNPRINTF,[
  182. AC_TRY_RUN([
  183. #include <sys/types.h>
  184. #include <stdarg.h>
  185. void foo(const char *format, ...) {
  186. va_list ap;
  187. int len;
  188. char buf[5];
  189. va_start(ap, format);
  190. len = vsnprintf(buf, 0, format, ap);
  191. va_end(ap);
  192. if (len != 5) exit(1);
  193. va_start(ap, format);
  194. len = vsnprintf(0, 0, format, ap);
  195. va_end(ap);
  196. if (len != 5) exit(1);
  197. if (snprintf(buf, 3, "hello") != 5 || strcmp(buf, "he") != 0) exit(1);
  198. exit(0);
  199. }
  200. main() { foo("hello"); }
  201. ],
  202. ac_cv_HAVE_C99_VSNPRINTF=yes,ac_cv_HAVE_C99_VSNPRINTF=no,ac_cv_HAVE_C99_VSNPRINTF=cross)])
  203. if test x"$ac_cv_HAVE_C99_VSNPRINTF" = x"yes"; then
  204. AC_DEFINE(HAVE_C99_VSNPRINTF,1,[Define if system has C99 compatible vsnprintf])
  205. fi
  206. dnl AC_CHECK_FUNC(snprintf,AC_DEFINE(HAVE_SNPRINTF),SNPRINTF_O=./snprintf.o)
  207. dnl Check for getopt_long (Solaris)
  208. AC_CHECK_FUNCS([getopt_long],,AC_CHECK_LIB([iberty],[getopt_long],OTHERLIBS="$OTHERLIBS -liberty"))
  209. dnl Checks for library functions.
  210. AC_CHECK_LIB(nsl,main,SOCKETLIBS="$SOCKETLIBS -lnsl")
  211. AC_CHECK_LIB(socket,socket,SOCKETLIBS="$SOCKETLIBS -lsocket")
  212. AC_CHECK_LIB(wrap,main,[
  213. LIBWRAPLIBS="$LIBWRAPLIBS -lwrap"
  214. AC_DEFINE(HAVE_LIBWRAP,[1],[Have the TCP wrappers library])
  215. AC_TRY_LINK([#include <tcpd.h>
  216. ],[int a = rfc931_timeout;],AC_DEFINE(HAVE_RFC931_TIMEOUT))
  217. ])
  218. AC_CHECK_FUNCS(strdup strstr strtoul strtok_r initgroups closesocket sigaction scandir)
  219. dnl socklen_t check - from curl
  220. AC_CHECK_TYPE([socklen_t], ,[
  221. AC_MSG_CHECKING([for socklen_t equivalent])
  222. AC_CACHE_VAL([curl_cv_socklen_t_equiv],
  223. [
  224. # Systems have either "struct sockaddr *" or
  225. # "void *" as the second argument to getpeername
  226. curl_cv_socklen_t_equiv=
  227. for arg2 in "struct sockaddr" void; do
  228. for t in int size_t unsigned long "unsigned long"; do
  229. AC_TRY_COMPILE([
  230. #ifdef HAVE_SYS_TYPES_H
  231. #include <sys/types.h>
  232. #endif
  233. #ifdef HAVE_SYS_SOCKET_H
  234. #include <sys/socket.h>
  235. #endif
  236. int getpeername (int, $arg2 *, $t *);
  237. ],[
  238. $t len;
  239. getpeername(0,0,&len);
  240. ],[
  241. curl_cv_socklen_t_equiv="$t"
  242. break
  243. ])
  244. done
  245. done
  246. if test "x$curl_cv_socklen_t_equiv" = x; then
  247. AC_MSG_ERROR([Cannot find a type to use in place of socklen_t])
  248. fi
  249. ])
  250. AC_MSG_RESULT($curl_cv_socklen_t_equiv)
  251. AC_DEFINE_UNQUOTED(socklen_t, $curl_cv_socklen_t_equiv,
  252. [type to use in place of socklen_t if not defined])],
  253. [#include <sys/types.h>
  254. #include <sys/socket.h>])
  255. AC_MSG_CHECKING(for type of socket size)
  256. AC_TRY_COMPILE([#include <stdlib.h>
  257. #include <sys/types.h>
  258. #include <sys/socket.h>
  259. ],
  260. [int a = send(1, (const void *)0, (size_t *) 0, (int *) 0);],
  261. [AC_DEFINE(SOCKET_SIZE_TYPE, size_t, [Socket Size Type]) AC_MSG_RESULT(size_t)],
  262. [AC_DEFINE(SOCKET_SIZE_TYPE, int, [Socket Size Type]) AC_MSG_RESULT(int)])
  263. dnl Does user want to check for SSL?
  264. AC_ARG_ENABLE([ssl],
  265. AS_HELP_STRING([--disable-ssl],[disables native SSL support @<:@default=check@:>@]),[
  266. if test x$enableval = xyes; then
  267. check_for_ssl=yes
  268. else
  269. check_for_ssl=no
  270. fi
  271. ],check_for_ssl=yes)
  272. need_dh=yes
  273. AC_ARG_WITH([need_dh],
  274. AS_HELP_STRING([--with-need-dh],[set to 'no' to not include Diffie-Hellman SSL logic]),
  275. [need_dh=$withval],
  276. [nrpe_group=need_dh])
  277. dnl Optional SSL library and include paths
  278. if test x$check_for_ssl = xyes; then
  279. # need_dh should only be set for NRPE
  280. need_dh=yes
  281. AC_NAGIOS_GET_SSL
  282. fi
  283. AC_ARG_WITH([log_facility],
  284. AS_HELP_STRING([--with-log-facility=<facility>],
  285. [sets NRPE syslog facility]),
  286. [log_facility=$withval],
  287. [log_facility=daemon])
  288. AC_DEFINE_UNQUOTED(NRPE_LOG_FACILITY,["$log_facility"],[NRPE syslog facility])
  289. AC_ARG_WITH([nrpe_user],
  290. AS_HELP_STRING([--with-nrpe-user=<user>],[sets user name to run NRPE]),
  291. [nrpe_user=$withval],
  292. [nrpe_user=nagios])
  293. AC_ARG_WITH([nrpe_group],
  294. AS_HELP_STRING([--with-nrpe-group=<group>],[sets group name to run NRPE]),
  295. [nrpe_group=$withval],
  296. [nrpe_group=nagios])
  297. AC_ARG_WITH([nrpe_port],
  298. AS_HELP_STRING([--with-nrpe-port=<port>],
  299. [sets port number for NRPE to listen on]),
  300. [nrpe_port=$withval],
  301. [nrpe_port=5666])
  302. NRPE_INSTALL_OPTS="-o $nrpe_user -g $nrpe_group"
  303. AC_DEFINE_UNQUOTED(DEFAULT_SERVER_PORT,$nrpe_port,[Default port for NRPE daemon])
  304. AC_ARG_WITH([nagios_user],
  305. AS_HELP_STRING([--with-nagios-user=<user>],
  306. [sets user name for file permissions]),
  307. [nagios_user=$withval],
  308. [nagios_user=nagios])
  309. AC_ARG_WITH([nagios_group],
  310. AS_HELP_STRING([--with-nagios-group=<grp>],
  311. [sets group name file permissions]),
  312. [nagios_group=$withval],
  313. [nagios_group=nagios])
  314. NAGIOS_INSTALL_OPTS="-o $nagios_user -g $nagios_group"
  315. dnl On HP-UX the compile will fail with a 'Duplicate symbol "setenv"' error
  316. dnl in '/usr/local/lib/libwrap.a(setenv.o)' and '/usr/local/lib/libiberty.a(setenv.o)'
  317. dnl so allow duplicate symbols, and use the first one
  318. if test "`uname -s`" = "HP-UX" ; then
  319. LDFLAGS="$LDFLAGS -Wl,+allowdups";
  320. fi
  321. AC_ARG_ENABLE([command-args],
  322. 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!]),
  323. AC_DEFINE_UNQUOTED(ENABLE_COMMAND_ARGUMENTS,[1],[Enable command-line arguments]))
  324. AC_ARG_ENABLE([bash-command-substitution],
  325. 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!]),
  326. AC_DEFINE_UNQUOTED(ENABLE_BASH_COMMAND_SUBSTITUTION,[1],[Enable bash command substitution]))
  327. AC_PATH_PROG(PERL,perl)
  328. AC_OUTPUT()
  329. dnl Review options
  330. echo ""
  331. echo ""
  332. AC_MSG_RESULT([*** Configuration summary for $PKG_NAME $PKG_VERSION $PKG_REL_DATE ***:])
  333. echo "";\
  334. echo " General Options:";\
  335. echo " -------------------------"
  336. AC_MSG_RESULT([ NRPE port: $nrpe_port])
  337. AC_MSG_RESULT([ NRPE user: $nrpe_user])
  338. AC_MSG_RESULT([ NRPE group: $nrpe_group])
  339. AC_MSG_RESULT([ Nagios user: $nagios_user])
  340. AC_MSG_RESULT([ Nagios group: $nagios_group])
  341. echo "";\
  342. echo "";\
  343. echo "Review the options above for accuracy. If they look okay,";\
  344. echo "type 'make all' to compile the NRPE daemon and client";\
  345. echo "or type 'make' to get a list of make options.";\
  346. echo ""