pmlogger: allow default primary pmlogger interval to be set
[pcp.git] / configure.ac
blob523271fa36b384c99ae4da92ccbffce2bdb30faf
1 dnl
2 dnl Copyright (c) 2012-2016 Red Hat.
3 dnl Copyright (c) 2008 Aconex.  All Rights Reserved.
4 dnl Copyright (c) 2000-2004,2008 Silicon Graphics, Inc.  All Rights Reserved.
5 dnl 
6 dnl This program is free software; you can redistribute it and/or modify it
7 dnl under the terms of the GNU General Public License as published by the
8 dnl Free Software Foundation; either version 2 of the License, or (at your
9 dnl option) any later version.
10 dnl 
11 dnl This program is distributed in the hope that it will be useful, but
12 dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
13 dnl or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
14 dnl for more details.
15 dnl 
17 dnl unpacking check - this file must exist
18 AC_INIT(src/include/pcp/pmapi.h)
20 dnl need 2.63 for AS_VAR_IF and AS_VAR_COPY
21 AC_PREREQ([2.63])dnl
23 dnl Irix build issue ... use the tools from the local filesystems
24 unset ROOT TOOLROOT
26 AC_ARG_WITH(
27     [64bit],
28     [AS_HELP_STRING([--with-64bit],
29                     [turn on 64 bit compilation mode (default is platform dependent)])],
30     [use_64bit=$withval; PACKAGE_CONFIGURE="$PACKAGE_CONFIGURE --with-64bit=$withval"])
32 AC_ARG_WITH(
33     [optimization],
34     [AS_HELP_STRING([--with-optimization],
35                     [enable optimization for C/C++ code (default is yes)])],
36     [use_optimization=$withval; PACKAGE_CONFIGURE="$PACKAGE_CONFIGURE --with-optimization=$withval"],
37     [use_optimizaton=yes])
39 AC_ARG_WITH(
40     [threads],
41     [AC_HELP_STRING([--with-threads],
42                     [enable support for multiple threads (default is on)])],
43     [do_threads=$withval; PACKAGE_CONFIGURE="$PACKAGE_CONFIGURE --with-threads=$withval"],
44     [do_threads=check])
46 AC_ARG_WITH(
47     [secure-sockets],
48     [AC_HELP_STRING([--with-secure-sockets],
49                     [enable support for secure sockets (default is on)])],
50     [do_secure=$withval; PACKAGE_CONFIGURE="$PACKAGE_CONFIGURE --with-secure-sockets=$withval"],
51     [do_secure=check])
53 AC_ARG_WITH(
54     [static-probes],
55     [AC_HELP_STRING([--with-static-probes],
56                     [enable support for static probes (default is on)])],
57     [do_probes=$withval; PACKAGE_CONFIGURE="$PACKAGE_CONFIGURE --with-static-probes=$withval"],
58     [do_probes=check])
60 AC_ARG_WITH(
61     [infiniband],
62     [AC_HELP_STRING([--with-infiniband],
63                     [enable support for Infiniband metrics (default is on)])],
64     [do_infiniband=$withval; PACKAGE_CONFIGURE="$PACKAGE_CONFIGURE --with-infiniband=$withval"],
65     [do_infiniband=check])
67 AC_ARG_WITH(
68     [user],
69     [AS_HELP_STRING([--with-user],
70                     [user account under which daemons run (default is pcp)])],
71     [pcp_user=$withval; PACKAGE_CONFIGURE="$PACKAGE_CONFIGURE --with-user-account=$withval"],
72     [pcp_user=pcp])
73 AC_SUBST(pcp_user)
75 AC_ARG_WITH(
76     [group],
77     [AS_HELP_STRING([--with-group],
78                     [user group under which daemons run (default is pcp)])],
79     [pcp_group=$withval; PACKAGE_CONFIGURE="$PACKAGE_CONFIGURE --with-group-account=$withval"],
80     [pcp_group=pcp])
81 AC_SUBST(pcp_group)
83 AC_ARG_WITH([discovery],
84     [AC_HELP_STRING([--with-discovery],
85                     [enable support for service discovery (default is on)])],
86     [do_discovery=$withval; PACKAGE_CONFIGURE="$PACKAGE_CONFIGURE --with-discovery=$withval"],
87     [do_discovery=check])
89 AC_ARG_WITH([systemd],
90     [AC_HELP_STRING([--with-systemd],
91                     [enable support for systemd services (default is on)])],
92     [do_systemd=$withval; PACKAGE_CONFIGURE="$PACKAGE_CONFIGURE --with-systemd=$withval"],
93     [do_systemd=check])
95 AC_ARG_WITH([qt],
96     [AC_HELP_STRING([--with-qt],
97                     [enable support for tools requiring Qt (default is on)])],
98     [do_qt=$withval; PACKAGE_CONFIGURE="$PACKAGE_CONFIGURE --with-qt=$withval"],
99     [do_qt=check])
101 AC_ARG_WITH([python],
102     [AC_HELP_STRING([--with-python],
103                     [enable support for tools requiring Python (default is on)])],
104     [do_python=$withval; PACKAGE_CONFIGURE="$PACKAGE_CONFIGURE --with-python=$withval"],
105     [do_python=check])
107 AC_ARG_WITH([python3],
108     [AC_HELP_STRING([--with-python3],
109                     [enable support for tools requiring Python3 (default is on)])],
110     [do_python3=$withval; PACKAGE_CONFIGURE="$PACKAGE_CONFIGURE --with-python3=$withval"],
111     [do_python3=check])
113 AC_ARG_WITH([books],
114     [AC_HELP_STRING([--with-books],
115                     [enable building of the PCP books (default is off)])],
116     [do_books=$withval; PACKAGE_CONFIGURE="$PACKAGE_CONFIGURE --with-books=$withval"],
117     [do_books=no])
119 AC_ARG_WITH([books-brand],
120     [AC_HELP_STRING([--with-books-brand=BRAND],
121                     [choose the docbook brand when building the PCP books (default is common)])],
122     [do_books_brand=$withval; PACKAGE_CONFIGURE="$PACKAGE_CONFIGURE --with-books-brand=$withval"],
123     [do_books_brand=common])
125 AC_ARG_WITH([papi],
126     [AC_HELP_STRING([--with-papi@<:@=DIR|=MODULE@:>@],
127                    [enable performance api counter pmda (default is on)
128                    The optional argument may be a full path of a PAPI installation prefix,
129                    or a pkgconfig module name.])],
130     [do_papi=$withval; PACKAGE_CONFIGURE="$PACKAGE_CONFIGURE --with-papi=$withval"],
131     [do_papi=check])
133 AC_ARG_WITH([perfevent],
134     [AC_HELP_STRING([--with-perfevent],
135                    [enable perfevent pmda (default is on)])],
136     [do_perfevent=$withval; PACKAGE_CONFIGURE="$PACKAGE_CONFIGURE --with-perfevent=$withval"],
137     [do_perfevent=check])
139 AC_ARG_WITH([pmdajson],
140     [AC_HELP_STRING([--with-pmdajson],
141                    [enable JSON pmda (default is on)])],
142     [do_pmdajson=$withval; PACKAGE_CONFIGURE="$PACKAGE_CONFIGURE --with-pmdajson=$withval"],
143     [do_pmdajson=check])
145 AC_ARG_WITH([pmdasnmp],
146     [AC_HELP_STRING([--with-pmdasnmp],
147                    [enable SNMP pmda (default is on)])],
148     [do_pmdasnmp=$withval; PACKAGE_CONFIGURE="$PACKAGE_CONFIGURE --with-pmdasnmp=$withval"],
149     [do_pmdasnmp=check])
151 AC_ARG_WITH([manager],
152     [AC_HELP_STRING([--with-manager],
153                    [enable daemon manager (default is on)])],
154     [do_manager=$withval; PACKAGE_CONFIGURE="$PACKAGE_CONFIGURE --with-manager=$withval"],
155     [do_manager=check])
157 AC_ARG_WITH([webapi],
158     [AC_HELP_STRING([--with-webapi],
159                    [enable REST API daemon (default is on)])],
160     [do_webapi=$withval; PACKAGE_CONFIGURE="$PACKAGE_CONFIGURE --with-webapi=$withval"],
161     [do_webapi=check])
163 AC_ARG_WITH([webjs],
164     [AC_HELP_STRING([--with-webjs],
165                     [enable building of webjs packages (default is off)])],
166     [do_webjs=$withval; PACKAGE_CONFIGURE="$PACKAGE_CONFIGURE --with-webjs=$withval"],
167     [do_webjs=no])
169 AC_ARG_WITH([vector],
170     [AC_HELP_STRING([--with-vector],
171                     [enable building of vector package (default is off)])],
172     [do_vector=$withval; PACKAGE_CONFIGURE="$PACKAGE_CONFIGURE --with-vector=$withval"],
173     [do_vector=no])
175 AC_ARG_WITH([parfait],
176     [AC_HELP_STRING([--with-parfait],
177                     [enable building of parfait package (default is off)])],
178     [do_parfait=$withval; PACKAGE_CONFIGURE="$PACKAGE_CONFIGURE --with-parfait=$withval"],
179     [do_parfait=no])
181 dnl things set in the environment by Makepkgs never make it into an RPM
182 dnl build where the environment is stripped ... use a --with-foo=path
183 dnl construct to workaround this
185 AC_ARG_WITH([make],
186     [AC_HELP_STRING([--with-make],
187                     [path to GNU compatible make(1) (default is empty for auto discovery)])],
188     [MAKE=$withval; PACKAGE_CONFIGURE="$PACKAGE_CONFIGURE --with-make=$withval"],
189     [MAKE=''])
191 AC_ARG_WITH([tar],
192     [AC_HELP_STRING([--with-tar],
193                     [path to GNU compatible tar(1) (default is empty for auto discovery)])],
194     [TAR=$withval; PACKAGE_CONFIGURE="$PACKAGE_CONFIGURE --with-tar=$withval"],
195     [TAR=''])
197 AC_ARG_WITH([zip],
198     [AC_HELP_STRING([--with-zip],
199                     [path to GNU compatible zip(1) (default is empty for auto discovery)])],
200     [ZIP=$withval; PACKAGE_CONFIGURE="$PACKAGE_CONFIGURE --with-zip=$withval"],
201     [ZIP=''])
204 # Note: the following environment variables may be
205 # set to override the defaults.
207 # MAKE CC CPP LD LEX YACC INSTALL AWK SED ECHO
210 dnl Guess target platfrom
211 AC_CANONICAL_SYSTEM
212 if test -z "$target"
213 then
214     echo '
215 FATAL ERROR: Cannot guess your target, try explicit specification
216              using --target or mailto: pcp@groups.io to ask.'
217     rm -rf conftest conftest.*
218     exit 1
219 else
220     dnl Remove 4th name component, if present, from target, target_os,
221     dnl  build and build_os. Squash all x86 cpus into one LCD form - i386
222     target=`echo $target | sed '[s/^\([^-][^-]*-[^-][^-]*-[^-][^-]*\)-.*$/\1/]'`
223     target_os=`echo $target_os | sed '[s/solaris2\..*/solaris/]'`
224     target_os=`echo $target_os | sed '[s/^\([^-][^-]*\)-.*$/\1/]' | sed '[s/[\.0-9]*//g]'`
226     build=`echo $build | sed '[s/^\([^-][^-]*-[^-][^-]*-[^-][^-]*\)-.*$/\1/]'`
227     build_os=`echo $build_os | sed '[s/solaris2\..*/solaris/]'`
228     build_os=`echo $build_os | sed '[s/^\([^-][^-]*\)-.*$/\1/]'`
231 echo Building on $build for $target 
232 echo "Build: os=$build_os cpu=$build_cpu"
233 echo "Target: os=$target_os cpu=$target_cpu"
235 if test "$cross_compiling" = "yes"; then
236     if test -f ./config.$target_os; then
237         . ./config.$target_os
238     else
239         echo
240         echo "
241 FATAL ERROR: Cannot perform cross-compilation without a file to source
242              configuration information from (config.$target_os is missing)"
243         rm -rf conftest conftest.*
244         exit 1
245     fi
247 AC_SUBST(cross_compiling)
249 dnl CFLAGS setting is a co-dependency between here and PCFLAGS in
250 dnl src/include/builddefs.in ... need to be the same in both places
252 target_distro=$target_os
253 if test $target_os = linux
254 then
255     AC_DEFINE(IS_LINUX, [1], [Platform is Linux])
256     test -f /etc/SuSE-release && target_distro=suse
257     test -f /etc/fedora-release && target_distro=fedora
258     test -f /etc/redhat-release && target_distro=redhat
259     test -f /etc/debian_version && target_distro=debian
260     test -f /etc/slackware-version && target_distro=slackware
261     test -f /etc/gentoo-release && target_distro=gentoo
262     test -f /etc/mandriva-release && target_distro=mandriva
263     test -f /etc/arch-release && target_distro=arch
264     export CFLAGS="-fPIC -fno-strict-aliasing -D_GNU_SOURCE"
265     pcp_platform_paths='/usr/bin/X11:/usr/local/bin'
266     pcp_ps_all_flags=-efw
267 elif test $target_os = darwin
268 then
269     AC_DEFINE(IS_DARWIN, [1], [Platform is Darwin (Mac OS X)])
270     target_distro=macosx
271     version=`sw_vers -productVersion | sed -e 's/\.//' -e 's/\..*//g'`
272     CFLAGS="-fPIC -no-cpp-precomp -fno-strict-aliasing -arch i386"
273     if test $version -ge 106
274     then
275         target_distro=cocoa
276         CFLAGS="$CFLAGS -arch x86_64"
277     fi
278     export CFLAGS
279     pcp_platform_paths='/usr/local/bin'
280     pcp_ps_all_flags="-axw -o user,pid,ppid,cpu,stime,tty,time,command"
281 elif test $target_os = mingw
282 then
283     AC_DEFINE(IS_MINGW, [1], [Platform is MinGW (Windows)])
284     CFLAGS="-fno-strict-aliasing"
285     pcp_platform_paths=''
286     pcp_ps_all_flags=-efW
287 elif test $target_os = solaris
288 then
289     AC_DEFINE(IS_SOLARIS, [1], [Platform is Solaris])
290     export CFLAGS_IF_GCC="-fPIC -fno-strict-aliasing"
291     export CFLAGS_IF_SUNCC="-fPIC -xalias_level=any -D_XPG4_2 -D__EXTENSIONS__"
292     pcp_platform_paths='/usr/bin/X11:/usr/local/bin:/opt/sfw/bin:/opt/csw/bin'
293     pcp_ps_all_flags=-ef
294 elif test $target_os = aix
295 then
296     AC_DEFINE(IS_AIX, [1], [Platform is AIX])
297     export CFLAGS="-qcpluscmt"
298     pcp_platform_paths='/usr/bin/X11:/usr/local/bin'
299     pcp_ps_all_flags=-ef
300 elif test $target_os = freebsd || test $target_os = kfreebsd
301 then
302     AC_DEFINE(IS_FREEBSD, [1], [Platform is FreeBSD])
303     test -f /etc/debian_version && target_distro=debian
304     export CFLAGS="-fPIC -fno-strict-aliasing -D_GNU_SOURCE"
305     if test $target_os = kfreebsd
306     then
307         pcp_ps_all_flags=-efw
308     else
309         pcp_ps_all_flags=auxww
310     fi
311     pcp_platform_paths='/usr/bin/X11'
312     test -d /usr/local/bin && pcp_platform_paths="$pcp_platform_paths:/usr/local/bin"
313     test -d /usr/bsd && pcp_platform_paths="$pcp_platform_paths:/usr/bsd"
314 elif test $target_os = gnu
315 then
316     AC_DEFINE(IS_GNU, [1], [Platform is GNU Hurd])
317     test -f /etc/debian_version && target_distro=debian
318     export CFLAGS="-fPIC -fno-strict-aliasing -D_GNU_SOURCE"
319     pcp_platform_paths='/usr/bin/X11:/usr/local/bin'
320     pcp_ps_all_flags=-efw
321 elif test $target_os = netbsdelf
322 then
323     target_os=netbsd
324     AC_DEFINE(IS_NETBSD, [1], [Platform is NetBSD])
325     export CFLAGS="-fPIC -fno-strict-aliasing -D_GNU_SOURCE -D_NETBSD_SOURCE"
326     pcp_platform_paths='/usr/pkg/bin'
327     pcp_ps_all_flags=auxww
328 elif test $target_os = openbsd
329 then
330     target_os=openbsd
331     AC_DEFINE(IS_OPENBSD, [1], [Platform is OpenBSD])
332     export CFLAGS="-fPIC -fno-strict-aliasing -D_GNU_SOURCE"
333     pcp_platform_paths='/usr/local/bin'
334     pcp_ps_all_flags=auxww
335 else
336     echo
337     echo "FATAL ERROR: need platform-specific customization for \"$target_os\""
338     rm -rf conftest conftest.*
339     exit 1
341 AC_SUBST(pcp_platform_paths)
342 AC_SUBST(pcp_ps_all_flags)
344 dnl default C and C++ compiler optimization to -O2 -g
345 if test "$use_optimization" = no
346 then
347     optimization="-O0 -g"
348 else
349     optimization="-O2 -g"
351 AC_SUBST(optimization)
353 PKG_PROG_PKG_CONFIG
354 if test -z "$PKG_CONFIG"; then
355     AC_MSG_ERROR([cannot find a 'pkg-config' command])
358 dnl check if user wants their own C compiler
359 cflags_abi=
360 AC_PROG_CC(suncc egcc gcc cc)
361 if test $target_os = solaris
362 then
363     AC_PATH_PROG(CCPATH,$CC,$CC)
364     cc=$CCPATH
365     if test "$GCC" = "yes"
366     then
367         CFLAGS="$CFLAGS $CFLAGS_IF_GCC"
368     else
369         CFLAGS="$CFLAGS $CFLAGS_IF_SUNCC"
370     fi
371     if test "$use_64bit" = "no"
372     then
373         :
374     else
375         AC_MSG_CHECKING([for 64 bit Solaris host])
376         case `isainfo -k`
377         in
378             amd64|sparcv9)
379                 cflags_abi=-m64
380                 CFLAGS="$CFLAGS -m64"
381                 LDFLAGS="$LDFLAGS -m64"
382                 AC_MSG_RESULT(yes)
383                 ;;
384             *)
385                 AC_MSG_RESULT(no)
386                 ;;
387         esac
388     fi
389 else
390     cc=$CC
392 AC_SUBST(cc)
393 cc_is_gcc=$GCC
394 AC_SUBST(cc_is_gcc)
395 AC_SUBST(cflags_abi)
396 dnl these become CFLAGS and LDFLAGS for the build
397 PCFLAGS="$CFLAGS"
398 PLDFLAGS=$LDFLAGS
400 if echo "$CFLAGS" | grep 'D_FORTIFY_SOURCE' >/dev/null
401 then
402     dnl for cc use locally in configure (not exported via $PCFLAGS),
403     dnl add -O in case -D_FORTIFY_SOURCE has been added to CFLAGS above,
404     dnl as -D_FORTIFY_SOURCE requires -O but we've separated optimization
405     dnl flags out into $CFLAGS_OPT for our build infrastructure
406     CFLAGS="-O $PCFLAGS"
409 dnl some versions of gcc (e.g. version 4.8.4 on Gentoo Hardened) have added
410 dnl a predefined for _FORTIFY_SOURCE but only when -O is specified ... so
411 dnl to be safe we have -U_FORTIFY_SOURCE before -D_FORTIFY_SOURCE=2 below
413 # Add some security-related gcc flags
414 if echo "$CFLAGS" | grep stack-protector >/dev/null
415 then
416     dnl already set, probably from the environment
417     :
418 else
419     AC_ARG_ENABLE([ssp],
420     [AS_HELP_STRING([--disable-ssp], [disable gcc stack-protector])])
421     AS_IF([test "x$cc_is_gcc" = xyes -a "x$enable_ssp" != xno ],[
422        save_CFLAGS="$CFLAGS"
423        CFLAGS="$CFLAGS -O -fstack-protector-all -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2"
424        AC_COMPILE_IFELSE([AC_LANG_SOURCE([int something ();])], [
425            AC_MSG_NOTICE([Compiling with gcc -fstack-protector-all et al.])
426            PCFLAGS="$PCFLAGS -fstack-protector-all -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2"],[
427            AC_MSG_NOTICE([Compiler does not support -fstack-protector-all et al.])
428            CFLAGS="$save_CFLAGS"
429        ])
430     ])
432 AC_SUBST(PCFLAGS)
433 AC_SUBST(PLDFLAGS)
435 # Check for even more security-related gcc/linker flags, useful for daemons
436 AC_ARG_ENABLE([pie],
437   [AS_HELP_STRING([--disable-pie], [disable position-independent-executable])])
438 AS_IF([test "x$cc_is_gcc" = xyes -a "x$enable_pie" != xno],[
439    PIECFLAGS='-fPIE'
440    PIELDFLAGS='-pie -Wl,-z,relro -Wl,-z,now'
441    save_CFLAGS="$CFLAGS"
442    save_LDFLAGS="$LDFLAGS"
443    CFLAGS="$CFLAGS $PIECFLAGS"
444    LDFLAGS="$LDFLAGS $PIELDFLAGS"
445    AC_LINK_IFELSE([AC_LANG_SOURCE([void main () {}])], [
446        AC_MSG_NOTICE([Compiling with gcc pie et al.])
447    ], [
448        AC_MSG_NOTICE([Compiler does not support -pie et al.])
449        PIECFLAGS=""
450        PIELDFLAGS=""
451    ])
452    CFLAGS="$save_CFLAGS"
453    LDFLAGS="$save_LDFLAGS"
455 AC_SUBST(PIELDFLAGS)
456 AC_SUBST(PIECFLAGS)
458 # Check for support for symbol hiding via gcc flags
459 AC_ARG_ENABLE([visibility],
460   [AS_HELP_STRING([--disable-visibility], [disable gcc symbol visibility])])
461 AS_IF([test "x$cc_is_gcc" = xyes -a "$enable_visibility" != no],[
462    INVISIBILITY="-fvisibility=hidden"
463    save_CFLAGS="$CFLAGS"
464    CFLAGS="$CFLAGS -c $INVISIBILITY"
465    AC_COMPILE_IFELSE([AC_LANG_SOURCE([int visible () { return 0; }])], [
466        AC_MSG_NOTICE([Compiling DSO PMDAs with gcc -fvisibility=hidden])
467    ], [
468        AC_MSG_NOTICE([Compiler does not support -fvisibility.])
469        INVISIBILITY=""
470    ])
471    CFLAGS="$save_CFLAGS"
473 AC_SUBST(INVISIBILITY)
475 AC_PROG_CXX(eg++ g++ c++)
476 cxx=$CXX
477 AC_SUBST(cxx)
478 AC_MSG_CHECKING([for working C++ compiler])
479 AC_LANG_PUSH([C++])
480 AC_COMPILE_IFELSE(
481    [AC_LANG_PROGRAM([[#include <cstdio>]],
482                     [[const char gday[] = "G'day, world\n";]])],
483    [AC_MSG_RESULT([yes])],
484    [AC_MSG_RESULT([no])
485     cxx=""])
486 AC_LANG_POP([C++])
488 # Prevent shared libraries from being built for libpcp and other core libraries
489 AC_ARG_ENABLE([shared],
490   [AS_HELP_STRING([--disable-shared], [disable core shared libary generation])],
491   [PACKAGE_CONFIGURE="$PACKAGE_CONFIGURE --disable-shared=$withval"])
492 AC_SUBST(enable_shared)
494 dnl check if user wants to use any of their own commands;
495 dnl ordering is important: some tests use earlier results
497 test -z "$AWK" && AC_PATH_PROGS(AWK, gawk awk, /usr/bin/awk)
498 case "$AWK"
500     gawk|*/gawk)
501         awk="$AWK --posix"
502         ;;
503     *)
504         awk=$AWK
505         ;;
506 esac
507 AC_SUBST(awk)
509 if test -z "$SED"; then
510     AC_PATH_PROG(SED, sed, /bin/sed)
512 if test ! -x "$SED"; then
513     AC_MSG_ERROR([cannot find a valid 'sed' command.])
515 sed=$SED
516 AC_SUBST(sed)
518 if test -z "$ECHO"; then
519     AC_PATH_PROG(ECHO, echo, /bin/echo)
521 if test ! -x "$ECHO"; then
522     AC_MSG_ERROR([cannot find a valid 'echo' command.])
524 echo=$ECHO
525 AC_SUBST(echo)
527 if test -z "$FIND"; then
528     AC_PATH_PROG(FIND, find, /usr/bin/find)
530 if test ! -x "$FIND"; then
531     AC_MSG_ERROR([cannot find a valid 'find' command.])
533 find=$FIND
534 AC_SUBST(find)
536 if test -z "$WHICH"; then
537     AC_PATH_PROG(WHICH, which, /usr/bin/which)
539 if test ! -x "$WHICH"; then
540     AC_MSG_ERROR([cannot find a valid 'which' command.])
542 which=$WHICH
543 AC_SUBST(which)
545 AC_PROG_LEX
546 lex=`$echo $LEX | awk '{print $1}'`
547 lex=`$which "$lex"`
548 if test ! -x "$lex"; then
549     AC_MSG_ERROR([cannot find a valid 'lex'/'flex' command.])
551 lex=$LEX
552 AC_SUBST(lex)
554 AC_PROG_YACC
555 yacc=`$echo $YACC | awk '{print $1}'`
556 yacc=`$which "$yacc"`
557 if test ! -x "$yacc"; then
558     AC_MSG_ERROR([cannot find a valid 'yacc'/'bison' command.])
560 yacc=$YACC
561 AC_SUBST(yacc)
563 dnl check we don't get the Windows sort ...
564 AC_MSG_CHECKING([where unix-like sort(1) lives])
565 if test $target_os = mingw; then
566     for d in /bin /usr/bin /mingw/bin /mingw/usr/bin
567     do
568         if test -x $d/sort; then
569             sort=$d/sort
570             break
571         fi
572     done
573 else
574     sort=`$which sort`
576 AC_MSG_RESULT($sort)
577 $sort -n </dev/null
578 if test $? != 0
579 then
580     echo
581     echo "FATAL ERROR: $sort -n failed!"
582     rm -rf conftest conftest.*
583     exit 1
585 AC_SUBST(sort)
587 dnl echo_n set to -n if echo understands -n to suppress newline
588 dnl echo_c set to \c if echo understands \c to suppress newline
589 AC_MSG_CHECKING([if echo uses -n or backslash-c to suppress newlines])
590 if ( $echo "testing\c"; $echo 1,2,3 ) | grep c >/dev/null
591 then
592   if ( $echo -n testing; $echo 1,2,3 ) | sed s/-n/xn/ | grep xn >/dev/null
593   then
594     echo_n= echo_c=
595     AC_MSG_RESULT([neither?])
596   else
597     echo_n=-n echo_c=
598     AC_MSG_RESULT([ -n])
599   fi
600 else
601   echo_n= echo_c='\c'
602   AC_MSG_RESULT([backslash-c])
604 AC_SUBST(echo_n)
605 AC_SUBST(echo_c)
607 dnl subsequent configure checks rely on $EGREP being set
608 AC_PROG_EGREP
610 dnl Check for static probes (dtrace, systemtap)
611 if test "$do_probes" = "check" -o "$do_probes" = "yes"
612 then
613     enable_probes=true
614     AC_CHECK_PROGS(DTRACE, dtrace, [])
615     if test -z "$DTRACE"
616     then
617         if test "$do_probes" = "yes"
618         then
619             AC_MSG_ERROR([cannot enable static probes - no dtrace executable])
620         fi
621         enable_probes=false
622     fi
623     AC_CHECK_HEADERS([sys/sdt.h], [
624         if $enable_probes = true
625         then
626             if test $target_os = kfreebsd
627             then
628                 enable_probes=false
629             elif test $target_os = freebsd
630             then
631                 dnl dtrace support in FreeBSD depends on configuration of kernel
632                 rm -f conftest.d conftest.h
633                 cat <<End-of-File >conftest.d
634 provider eek {
635 probe urk(int);
637 End-of-File
638                 if dtrace -s conftest.d -h >/dev/null 2>&1
639                 then
640                     if test ! -f conftest.h
641                     then
642                         enable_probes=false
643                         if test "$do_probes" = "yes"
644                         then
645                             AC_MSG_ERROR([cannot enable static probes - no .h from dtrace -h])
646                         fi
647                     fi
648                 else
649                     enable_probes=false
650                     if test "$do_probes" = "yes"
651                     then
652                         AC_MSG_ERROR([cannot enable static probes - dtrace failed])
653                     fi
654                 fi
655             fi
656         fi
657     ], [
658         enable_probes=false
659         if test "$do_probes" = "yes"
660         then
661             AC_MSG_ERROR([cannot enable static probes - no SDT header])
662         fi
663     ])
665     if test "$enable_probes" = "true"
666     then
667         AC_DEFINE(HAVE_STATIC_PROBES, [1], [Static probes (dtrace, systemtap)])
668     fi
669     AC_SUBST(enable_probes)
670     AC_SUBST(DTRACE)
673 dnl Check for service discovery mechanisms (DNS-SD, Avahi)
674 AS_IF([test "x$do_discovery" != "xno"], [
675     # on Mac OS X, dns_sd.h
677     # on Linux, aloha Avahi
678     enable_avahi=true
679     PKG_CHECK_MODULES([avahi], [avahi-client],
680         [AC_CHECK_LIB(avahi-client, avahi_client_new,
681                       [lib_for_avahi="-lavahi-common -lavahi-client"],
682                       [enable_avahi=false])
683         ],[enable_avahi=false])
684     AC_CHECK_HEADERS([avahi-client/publish.h],, [enable_avahi=false])
685     AC_CHECK_HEADERS([avahi-common/alternative.h],, [enable_avahi=false])
687     if test "$enable_avahi" = "true"
688     then
689         AC_SUBST(lib_for_avahi)
690         AC_SUBST(avahi_CFLAGS)
691         AC_DEFINE(HAVE_AVAHI, [1], [Service discovery via Avahi])
692         enable_discovery=true
693     fi
695     if test "$do_discovery" != "check" -a "$enable_discovery" != "true"
696     then
697         AC_MSG_ERROR([cannot enable service discovery - no supported mechanisms])
698     fi
699     if test "$enable_discovery" = "true"
700     then
701         AC_DEFINE(HAVE_SERVICE_DISCOVERY, [1], [Service discovery mechanisms])
702     fi
704 AC_SUBST(enable_discovery)
705 AC_SUBST(enable_avahi)
707 dnl Check for systemd services
708 enable_systemd=false
709 AS_IF([test "x$do_systemd" != "xno"], [
710     enable_systemd=true
712     PKG_CHECK_VAR([SYSTEMD_SYSTEMUNITDIR], [systemd], [systemdsystemunitdir],
713         [pcp_systemdunit_dir=$SYSTEMD_SYSTEMUNITDIR], [enable_systemd=false])
714     AC_SUBST(pcp_systemdunit_dir)
715     if test -z "$pcp_systemdunit_dir"
716     then
717         if test "$do_systemd" = "yes"
718         then
719             AC_MSG_ERROR([cannot enable systemd support - no systemunitdir path])
720         fi
721         enable_systemd=false
722     fi
724 AC_SUBST(enable_systemd)
726 # NB: No AC_PREFIX_DEFAULT is needed, as the default configure invocation
727 # targets a build for non-system directories such as /usr/local.
728 # AC_PREFIX_DEFAULT([])
730 . ./VERSION.pcp
731 PACKAGE_VERSION=${PACKAGE_MAJOR}.${PACKAGE_MINOR}.${PACKAGE_REVISION}
732 AC_SUBST(PACKAGE_VERSION)
733 AC_SUBST(PACKAGE_MAJOR)
734 AC_SUBST(PACKAGE_MINOR)
735 AC_SUBST(PACKAGE_REVISION)
736 AC_SUBST(PACKAGE_BUILD)
738 if test -z "$PACKAGE_BUILD_DATE" ; then
739     PACKAGE_BUILD_DATE=`date +%Y-%m-%d`
741 AC_SUBST(PACKAGE_BUILD_DATE)
743 if test -z "$PACKAGE_DISTRIBUTION" ; then
744     PACKAGE_DISTRIBUTION=$target_distro
746 AC_SUBST(PACKAGE_DISTRIBUTION)
748 dnl generate PM_VERSION_CURRENT for header
749 pm_version_current=`awk </dev/null "BEGIN { print (${PACKAGE_MAJOR}*256+${PACKAGE_MINOR})*256+${PACKAGE_REVISION} }"`
750 AC_SUBST(pm_version_current)
752 dnl output header files with cpp defs HAVE_*, etc
753 AC_CONFIG_HEADERS(src/include/pcp/config.h src/include/pcp/configsz.h)
754 AC_OUTPUT(src/include/pcp/platform_defs.h src/include/pcp/platformsz.h)
756 AC_CHECK_PROGS(GIT, git)
757 AC_SUBST(GIT)
759 dnl check if python available for the build and runtime
760 AC_CHECK_PROGS(PYTHON, python, python2.7)
761 AC_SUBST(PYTHON)
763 dnl check if python3 available for the build and runtime
764 AC_CHECK_PROGS(PYTHON3, python3, python3.4)
765 AC_SUBST(PYTHON3)
767 dnl check if python tools/packages wanted (need python >= 2.6)
768 enable_python2=false
769 AS_IF([test "x$do_python" != "xno"], [
770     enable_python2=true
771     if test -z "$PYTHON"
772     then
773         enable_python2=false
774     else
775         AC_MSG_CHECKING([Python version])
776         eval `$PYTHON -V 2>&1 | awk '/^Python/ { ver=2; print $ver }' | awk -F. '{ major=1; minor=2; point=3; printf "export PY_MAJOR=%d PY_MINOR=%d PY_POINT=%d\n",$major,$minor,$point }'`
777         AC_MSG_RESULT([$PY_MAJOR.$PY_MINOR.$PY_POINT])
778         if test "$PY_MAJOR" -lt 2; then
779             echo WARNING: Python version 2.6 or later does not seem to be installed.
780             enable_python2=false
781         else
782             if test "$PY_MAJOR" -eq 2 -a "$PY_MINOR" -lt 6 ; then
783                 echo WARNING: Python version 2.$PY_MINOR is too old.
784                 echo Python version 2.6 or later is required for Python builds.
785                 enable_python2=false
786             else
787                 AC_CHECK_HEADERS([python${PY_MAJOR}.${PY_MINOR}/Python.h], [], [
788                     echo WARNING: Python version $PY_MAJOR.$PY_MINOR header file missing.
789                     echo Cannot proceed with the Python $PY_MAJOR installation found.
790                     enable_python2=false
791                 ])
792             fi
793         fi
794     fi
796     if test "$do_python" != "check" -a "$enable_python2" != "true"
797     then
798         AC_MSG_ERROR([cannot enable Python - no supported version found])
799     fi
801 AC_SUBST(enable_python2)
803 dnl check if python3 tools/packages wanted (need python >= 3.3)
804 enable_python3=false
805 AS_IF([test "x$do_python3" != "xno"], [
806     enable_python3=true
807     if test -z "$PYTHON3"
808     then
809         enable_python3=false
810     else
811         AC_MSG_CHECKING([Python3 version])
812         eval `$PYTHON3 -V 2>&1 | awk '/^Python/ { ver=2; print $ver }' | awk -F. '{ major=1; minor=2; point=3; printf "export PY_MAJOR=%d PY_MINOR=%d PY_POINT=%d\n",$major,$minor,$point }'`
813         AC_MSG_RESULT([$PY_MAJOR.$PY_MINOR.$PY_POINT])
814         if test "$PY_MAJOR" -lt 3; then
815             echo WARNING: Python version 3.3 or later does not seem to be installed.
816             enable_python3=false
817         else
818             if test "$PY_MAJOR" -eq 3 -a "$PY_MINOR" -lt 3 ; then
819                 echo WARNING: Python version 3.$PY_MINOR is too old.
820                 echo Python version 3.3 or later is required for Python builds.
821                 enable_python3=false
822             else
823                 AC_CHECK_HEADERS([python${PY_MAJOR}.${PY_MINOR}m/Python.h], [], [
824                     echo WARNING: Python version $PY_MAJOR.$PY_MINOR header file missing.
825                     echo Cannot proceed with the Python $PY_MAJOR installation found.
826                     enable_python3=false
827                 ])
828             fi
829         fi
830     fi
832     if test "$do_python3" != "check" -a "$enable_python3" != "true"
833     then
834         AC_MSG_ERROR([cannot enable Python3 - no supported version found])
835     fi
837 AC_SUBST(enable_python3)
839 dnl convenience macro to determine if either python is available
840 AC_MSG_CHECKING([for any python version])
841 if test "$cross_compiling" = "yes"; then
842     ans=$have_python
843     echo "cross-compile -> \"$ans\"" >&5
844 elif test "$enable_python2" = "true" -o "$enable_python3" = "true"
845 then
846     have_python=true
847 else
848     have_python=false
850 AC_SUBST(have_python)
851 if $have_python; then AC_MSG_RESULT(yes); else AC_MSG_RESULT(no); fi
853 dnl choose the prefered python executable (py2 -> py3 transtion)
854 if test "$enable_python3" = "true"
855 then
856     pcp_python_prog=$PYTHON3
857 elif test "$enable_python2" = "true"
858 then
859     pcp_python_prog=$PYTHON
860 else
861     pcp_python_prog=""
863 AC_SUBST(pcp_python_prog)
865 dnl check availability of some Python modules
866 dnl usage PCP_CHECK_PYTHON_MODULE(module_name) or
867 dnl PCP_CHECK_PYTHON_MODULE(module_name, <import string>)
868 dnl default <import string> is "import module_name"
870 dnl sets $have_python_<module_name> as true or false
872 AC_DEFUN(PCP_CHECK_PYTHON_MODULE,
873   [ AC_MSG_CHECKING(for Python module $1)
874     if test -n "$2"
875     then
876         txt="$2"
877     else
878         txt="import $1"
879     fi
880     $pcp_python_prog -c 'import sys;
881 '"$txt" >>config.log 2>&1
882     if test "$?" = 0
883     then
884         AC_MSG_RESULT(yes)
885         eval have_python_$1=true
886     else
887         AC_MSG_RESULT(no)
888         eval have_python_$1=false
889     fi
890   ])
891 PCP_CHECK_PYTHON_MODULE(jsonpointer)
892 AC_SUBST(have_python_jsonpointer)
893 PCP_CHECK_PYTHON_MODULE(requests)
894 AC_SUBST(have_python_requests)
895 PCP_CHECK_PYTHON_MODULE(six)
896 AC_SUBST(have_python_six)
898 AC_MSG_CHECKING([if the json PMDA should be included])
899 pmda_json=false
900 AS_IF([test "x$do_pmdajson" = "xyes"], [pmda_json=true])
901 AS_IF([test "x$do_pmdajson" = "xcheck"], [
902     dnl JSON PMDA needs both the six and jsonpointer Python modules
903     $have_python_jsonpointer && $have_python_six && pmda_json=true
905 AC_SUBST(PMDA_JSON, $pmda_json)
906 if $pmda_json; then AC_MSG_RESULT(yes); else AC_MSG_RESULT(no); fi
908 PCP_CHECK_PYTHON_MODULE(libvirt)
909 AC_SUBST(have_python_libvirt)
911 dnl check if perl available for the build and runtime
912 AC_CHECK_PROGS(PERL, perl)
913 AC_SUBST(PERL)
915 AC_MSG_CHECKING([for any perl version])
916 if test "$cross_compiling" = "yes"; then
917     ans=$have_perl
918     echo "cross-compile -> \"$ans\"" >&5
919 elif test -n "$PERL"
920 then
921     pcp_perl_prog=$PERL
922     have_perl=true
923 else
924     pcp_perl_prog=""
925     have_perl=false
927 AC_SUBST(pcp_perl_prog)
928 AC_SUBST(have_perl)
929 AC_MSG_RESULT($pcp_perl_prog)
931 AC_MSG_CHECKING([if the SNMP PMDA should be included])
932 pmda_snmp=false
933 AS_IF([test "x$do_pmdasnmp" = "xyes"], [pmda_snmp=true])
934 AS_IF([test "x$do_pmdasnmp" = "xcheck"], [
935     dnl SNMP PMDA needs perl and the Net::SNMP module
936     if test "$have_perl" = true
937     then
938         if $pcp_perl_prog -e "use Net::SNMP" >/dev/null 2>&1
939         then
940             pmda_snmp=true
941         fi
942     fi
944 AC_SUBST(PMDA_SNMP, $pmda_snmp)
945 if $pmda_snmp; then AC_MSG_RESULT(yes); else AC_MSG_RESULT(no); fi
947 AC_MSG_CHECKING([if the mysql PMDA should be included])
948 pmda_mysql=false
949 if test "$have_perl" = true
950 then
951     dnl rpm build for mysql PMDA needs Perl DBI and DBD::mysql
952     if $pcp_perl_prog -e "use DBI" >/dev/null 2>&1
953     then
954         if $pcp_perl_prog -e "use DBD::mysql" >/dev/null 2>&1
955         then
956             pmda_mysql=true
957         fi
958     fi
960 AC_SUBST(PMDA_MYSQL, $pmda_mysql)
961 if $pmda_mysql; then AC_MSG_RESULT(yes); else AC_MSG_RESULT(no); fi
963 AC_MSG_CHECKING([if the postgresql PMDA should be included])
964 pmda_postgresql=false
965 if test "$have_perl" = true
966 then
967     dnl rpm build for postgresql PMDA needs Perl DBI and DBD::Pg
968     if $pcp_perl_prog -e "use DBI" >/dev/null 2>&1
969     then
970         if $pcp_perl_prog -e "use DBD::Pg" >/dev/null 2>&1
971         then
972             pmda_postgresql=true
973         fi
974     fi
976 AC_SUBST(PMDA_POSTGRESQL, $pmda_postgresql)
977 if $pmda_postgresql; then AC_MSG_RESULT(yes); else AC_MSG_RESULT(no); fi
979 AC_MSG_CHECKING([if the oracle PMDA should be included])
980 pmda_oracle=false
981 if test "$have_perl" = true
982 then
983     dnl rpm build for oracle PMDA needs Perl DBI
984     if $pcp_perl_prog -e "use DBI" >/dev/null 2>&1
985     then
986         pmda_oracle=true
987     fi
989 AC_SUBST(PMDA_ORACLE, $pmda_oracle)
990 if $pmda_oracle; then AC_MSG_RESULT(yes); else AC_MSG_RESULT(no); fi
992 AC_MSG_CHECKING([if the elasticsearch PMDA should be included])
993 pmda_elasticsearch=false
994 if test "$have_perl" = true
995 then
996     dnl rpm build for elasticsearch PMDA needs Perl LWP::UserAgent
997     if $pcp_perl_prog -e "use LWP::UserAgent" >/dev/null 2>&1
998     then
999         pmda_elasticsearch=true
1000     fi
1002 AC_SUBST(PMDA_ELASTICSEARCH, $pmda_elasticsearch)
1003 if $pmda_elasticsearch; then AC_MSG_RESULT(yes); else AC_MSG_RESULT(no); fi
1005 AC_MSG_CHECKING([if the nginx PMDA should be included])
1006 pmda_nginx=false
1007 if test "$have_perl" = true
1008 then
1009     dnl rpm build for nginx PMDA needs Perl LWP::UserAgent
1010     if $pcp_perl_prog -e "use LWP::UserAgent" >/dev/null 2>&1
1011     then
1012         pmda_nginx=true
1013     fi
1015 AC_SUBST(PMDA_NGINX, $pmda_nginx)
1016 if $pmda_nginx; then AC_MSG_RESULT(yes); else AC_MSG_RESULT(no); fi
1018 AC_MSG_CHECKING([if the activemq PMDA should be included])
1019 pmda_activemq=false
1020 if test "$have_perl" = true
1021 then
1022     dnl rpm build for activemq PMDA needs Perl LWP::UserAgent
1023     if $pcp_perl_prog -e "use LWP::UserAgent" >/dev/null 2>&1
1024     then
1025         pmda_activemq=true
1026     fi
1028 AC_SUBST(PMDA_ACTIVEMQ, $pmda_activemq)
1029 if $pmda_activemq; then AC_MSG_RESULT(yes); else AC_MSG_RESULT(no); fi
1031 AC_MSG_CHECKING([if the libvirt PMDA should be included])
1032 pmda_libvirt=false
1033 if test "$have_python" = true
1034 then
1035     dnl rpm build for libvirt PMDA needs Python libvirt and lxml modules
1036     if $pcp_python_prog -c "import libvirt" >/dev/null 2>&1
1037     then
1038         if $pcp_python_prog -c "import lxml" >/dev/null 2>&1
1039         then
1040             pmda_libvirt=true
1041         fi
1042     fi
1044 AC_SUBST(PMDA_LIBVIRT, $pmda_libvirt)
1045 if $pmda_libvirt; then AC_MSG_RESULT(yes); else AC_MSG_RESULT(no); fi
1047 qmake=$QMAKE
1048 enable_qt=false
1049 qt_release=release
1050 AS_IF([test "x$do_qt" != "xno"], [
1051     enable_qt=true
1052     
1053     if test -z "$QMAKE"
1054     then
1055         AC_PATH_PROGS(QMAKE, [qmake-qt5 qmake-qt4 qmake],, [$QTDIR/bin:/usr/bin:/usr/lib64/qt5/bin:/usr/lib/qt5/bin:/usr/lib64/qt4/bin:/usr/lib/qt4/bin:/usr/local/bin])
1056         test "x$cc_is_gcc" = xyes -a $target_os = solaris && QMAKE="$QMAKE -spec solaris-g++"
1057     fi
1058     qmake=$QMAKE
1059     if test -z "$QMAKE"
1060     then
1061         enable_qt=false
1062     else
1063         AC_MSG_CHECKING([Qt version])
1064         eval `$qmake --version | awk '/Using Qt version/ { ver=4; print $ver }' | awk -F. '{ major=1; minor=2; point=3; printf "export QT_MAJOR=%d QT_MINOR=%d QT_POINT=%d\n",$major,$minor,$point }'`
1065         AC_MSG_RESULT([$QT_MAJOR.$QT_MINOR.$QT_POINT])
1066         if test "$QT_MAJOR" -lt 4; then
1067             echo WARNING: Qt version 4.4 or later does not seem to be installed.
1068             echo Cannot proceed with the Qt $QT_MAJOR installation found.
1069             enable_qt=false
1070         fi
1071         if test "$QT_MAJOR" -eq 4 -a "$QT_MINOR" -lt 4 ; then
1072             echo WARNING: Qt version 4.$QT_MINOR is too old.
1073             echo Qt version 4.4 or later is required for Qt builds.
1074             enable_qt=false
1075         fi
1076     fi
1078     if test "$do_qt" != "check" -a "$enable_qt" != "true"
1079     then
1080         AC_MSG_ERROR([cannot enable Qt - no supported Qt installation found])
1081     elif test "$enable_qt" = "true" -a "x$cxx" = "x"
1082     then
1083         enable_qt=false
1084         test "$do_qt" != "check" && \
1085         AC_MSG_ERROR([C++ compiler unavailable, cannot build Qt components])
1086     elif test "$do_qt" = "debug"
1087     then
1088         dnl Debug/release style build? (non-debug by default)
1089         qt_release=debug
1090         enable_qt=true
1091     fi
1093 AC_SUBST(qt_release)
1094 AC_SUBST(enable_qt)
1095 AC_SUBST(qmake)
1097 dnl check if user wants their own make program
1098 dnl note: all makefiles in this package use the gmake syntax
1099 if test -z "$MAKE"
1100 then
1101     AC_PATH_PROG(MAKE, gmake)
1102     if test -z "$MAKE" 
1103     then
1104         # look elsewhere ...
1105         AC_MSG_CHECKING([for GNU make elsewhere])
1106         for f in /usr/local/bin/gmake /usr/freeware/bin/gmake /usr/local/bin/make /opt/sfw/bin/gmake nowhere
1107         do
1108             if test -x $f
1109             then
1110                 MAKE=$f
1111                 break
1112             fi
1113         done
1114         if test $f = nowhere
1115         then
1116             # Check if /usr/bin/make is any good
1117             mver=`/usr/bin/make --version 2>/dev/null | sed -n -e1p | cut -c1-8`
1118             if test "$mver" != "GNU Make"
1119             then
1120                 echo
1121                 echo "FATAL ERROR: could not find GNU make anywhere"
1122                 echo "You need to set \$MAKE as the full path to GNU make "
1123                 echo "in the environment."
1124                 rm -rf conftest conftest.*
1125                 exit 1
1126             else
1127                 MAKE=/usr/bin/make
1128             fi
1129         fi
1130         AC_MSG_RESULT($MAKE)
1131     fi 
1133 make=$MAKE
1134 AC_SUBST(make)
1136 dnl check if users wants their own CPP
1137 if test -z "$CPP"; then
1138     AC_PROG_CPP
1140 cpp=$CPP
1141 AC_SUBST(cpp)
1143 dnl check if users wants their own linker
1144 if test -z "$LD"; then
1145     AC_PATH_PROG(LD, ld, /usr/bin/ld)
1147 ld=$LD
1148 AC_SUBST(ld)
1150 dnl Provide ways to override owner and group for installed files
1151 if test -z "$PCP_USER_INSTALL" ; then
1152     pcp_user_install=root
1153 else
1154     pcp_user_install="$PCP_USER_INSTALL"
1156 AC_SUBST(pcp_user_install)
1157 if test -z "$PCP_GROUP_INSTALL" ; then
1158     case "$target_os"
1159     in
1160         darwin|freebsd|netbsd|openbsd)
1161             pcp_group_install=wheel
1162             ;;
1163         *)
1164             pcp_group_install=root
1165             ;;
1166     esac
1167 else
1168     pcp_group_install="$PCP_GROUP_INSTALL"
1170 AC_SUBST(pcp_group_install)
1172 dnl check if the tar program is available
1173 if test -z "$TAR"; then
1174     AC_PATH_PROGS(TAR, gtar tar, tar)
1176 if test $target_os = darwin -a -x /usr/bin/gnutar
1177 then
1178     TAR=/usr/bin/gnutar
1180 tar=$TAR
1181 AC_SUBST(tar)
1183 dnl check if the gzip program is available
1184 dnl (needed to gzip man pages on some platforms)
1185 if test -z "$ZIP"; then
1186     AC_PATH_PROG(ZIP, gzip, /bin/gzip)
1188 test ! -x "$ZIP" && ZIP=/usr/local/bin/gzip
1189 test ! -x "$ZIP" && ZIP=/usr/freeware/bin/gzip
1190 test ! -x "$ZIP" && ZIP=/usr/bin/gzip
1191 gzip=$ZIP
1192 test -z "$gzip" && gzip=no-gzip
1193 AC_SUBST(gzip)
1195 dnl check if the bzip2 program is available
1196 dnl (needed to bzip2 man pages on some platforms)
1197 if test -z "$BZIP2"; then
1198     AC_PATH_PROG(BZIP2, bzip2, /bin/bzip2)
1200 test ! -x "$BZIP2" && BZIP2=/usr/bin/bzip2
1201 test ! -x "$BZIP2" && BZIP2=/usr/local/bin/bzip2
1202 test ! -x "$BZIP2" && BZIP2=/usr/freeware/bin/bzip2
1203 bzip2=$BZIP2
1204 test -z "$bzip2" && bzip2=no-bzip2
1205 AC_SUBST(bzip2)
1207 dnl check if the lzma program is available
1208 dnl (needed to lzma man pages on some platforms)
1209 if test -z "$LZMA"; then
1210     AC_PATH_PROG(LZMA, lzma, /bin/lzma)
1212 test ! -x "$LZMA" && LZMA=/usr/bin/lzma
1213 test ! -x "$LZMA" && LZMA=/usr/local/bin/lzma
1214 test ! -x "$LZMA" && LZMA=/usr/freeware/bin/lzma
1215 lzma=$LZMA
1216 test -z "$lzma" && lzma=no-lzma
1217 AC_SUBST(lzma)
1219 dnl check if the xz program is available
1220 dnl (needed to xz man pages on some platforms)
1221 if test -z "$XZ"; then
1222     AC_PATH_PROG(XZ, xz, /bin/xz)
1224 test ! -x "$XZ" && XZ=/usr/bin/xz
1225 test ! -x "$XZ" && XZ=/usr/local/bin/xz
1226 test ! -x "$XZ" && XZ=/usr/freeware/bin/xz
1227 xz=$XZ
1228 test -z "$xz" && xz=no-xz
1229 AC_SUBST(xz)
1231 dnl Check for mac PackageMaker
1232 AC_MSG_CHECKING([for PackageMaker])
1233 if test -z "$PACKAGE_MAKER"
1234 then
1235     if test $target_os = darwin
1236     then
1237         if test -x /Applications/PackageMaker.app/Contents/MacOS/PackageMaker
1238         then # local XCode extras install
1239             package_maker=/Applications/PackageMaker.app/Contents/MacOS/PackageMaker
1240             AC_MSG_RESULT([ yes (local install)])
1241         elif test -x /Developer/Applications/PackageMaker.app/Contents/MacOS/PackageMaker
1242         then # Darwin 6.x
1243             package_maker=/Developer/Applications/PackageMaker.app/Contents/MacOS/PackageMaker
1244             AC_MSG_RESULT([ yes (darwin 6.x)])
1245         elif test -x /Developer/Applications/Utilities/PackageMaker.app/Contents/MacOS/PackageMaker
1246         then # Darwin 7.x
1247             AC_MSG_RESULT([ yes (darwin 7.x)])
1248             package_maker=/Developer/Applications/Utilities/PackageMaker.app/Contents/MacOS/PackageMaker
1249         else
1250             AC_MSG_RESULT([ not found!])
1251             AC_MSG_WARN([PackageMaker not found, mac packages will not be made])
1252         fi
1253     else
1254         AC_MSG_RESULT([ no])    
1255     fi
1256 else
1257     package_maker="$PACKAGE_MAKER"
1259 AC_SUBST(package_maker)
1261 dnl check if the hdiutil program is available
1262 if test -z "$HDIUTIL"; then
1263     AC_PATH_PROG(HDIUTIL, hdiutil)
1265 hdiutil=$HDIUTIL
1266 AC_SUBST(hdiutil)
1268 dnl check if the mkinstallp program is available (AIX)
1269 if test -z "$MKINSTALLP"; then
1270     AC_PATH_PROG(MKINSTALLP, mkinstallp)
1272 mkinstallp=$MKINSTALLP
1273 AC_SUBST(mkinstallp)
1275 dnl check for the Solaris pmgmk package maker
1276 if test -z "$PKGMK"; then
1277     AC_PATH_PROG(PKGMK, pkgmk)
1279 pkgmk=$PKGMK
1280 AC_SUBST(pkgmk)
1282 dnl check if the dlltool program is available
1283 if test -z "$DLLTOOL"; then
1284     AC_PATH_PROG(DLLTOOL, dlltool)
1286 dlltool=$DLLTOOL
1287 AC_SUBST(dlltool)
1289 dnl check if the rpmbuild program is available
1290 if test -z "$RPMBUILD"; then
1291     AC_PATH_PROG(RPMBUILD, rpmbuild)
1293 test $target_distro = slackware && RPMBUILD=''
1294 rpmbuild=$RPMBUILD
1295 AC_SUBST(rpmbuild)
1297 dnl check if the rpm program is available
1298 if test -z "$RPM"; then
1299     AC_PATH_PROG(RPM, rpm)
1301 test $target_distro = slackware && RPM=''
1302 rpm=$RPM
1303 AC_SUBST(rpm)
1305 dnl if rpmbuild exists, use it, otherwise use rpm
1306 if test -n "$RPMBUILD" -a -x "$RPMBUILD"
1307 then
1308     rpmprog=$RPMBUILD
1309 else
1310     rpmprog=$RPM
1312 AC_SUBST(rpmprog)
1314 dnl check if the pod2man program is available (perl man page builder)
1315 if test -z "$POD2MAN"; then
1316     AC_PATH_PROG(POD2MAN, pod2man)
1318 pod2man=$POD2MAN
1319 AC_SUBST(pod2man)
1321 dnl extra check for the Perl MakeMaker package
1322 AC_MSG_CHECKING([if ExtUtils::MakeMaker is installed])
1323 perl -e "use ExtUtils::MakeMaker" 2>/dev/null
1324 if test $? -eq 0
1325 then
1326     AC_MSG_RESULT([ yes])
1327 else
1328     AC_MSG_RESULT([ no])
1329     echo
1330     echo "FATAL ERROR: Perl ExtUtils::MakeMaker module missing."
1331     echo "You can either install this from your distribution, or"
1332     echo "download from CPAN (Comprehensive Perl Archive Network)."
1333     rm -rf conftest conftest.*
1334     exit 1
1337 AC_PATH_PROG(TRUEPROG, true)
1339 dnl check if the makedepend program is available
1340 if test -z "$MAKEDEPEND"; then
1341     AC_PATH_PROG(MAKEDEPEND, makedepend, $TRUEPROG)
1343 makedepend=$MAKEDEPEND
1344 AC_SUBST(makedepend)
1346 dnl check if the md5sum program is available
1347 if test -z "$MD5SUM"; then
1348    AC_PATH_PROG(MD5SUM, md5sum, $TRUEPROG)
1350 md5sum=$MD5SUM
1351 AC_SUBST(md5sum)
1353 dnl check if the Debian dpkg program is available
1354 if test -z "$DPKG"; then
1355    AC_PATH_PROG(DPKG, dpkg)
1357 dpkg=$DKPG
1358 AC_SUBST(dpkg)
1360 dnl check for the Slackware makepkg packaging tool
1361 if test -z "$MAKEPKG"; then
1362    AC_PATH_PROG(MAKEPKG, makepkg)
1364 makepkg=$MAKEPKG
1365 AC_SUBST(makepkg)
1367 dnl check if a toolchain is available for the books
1368 test -z "$PUBLICAN" && AC_PATH_PROG(PUBLICAN, publican)
1369 publican=$PUBLICAN
1370 AC_SUBST(publican)
1371 test -z "$DBLATEX" && AC_PATH_PROG(DBLATEX, dblatex)
1372 dblatex=$DBLATEX
1373 AC_SUBST(dblatex)
1374 test -z "$XMLTO" && AC_PATH_PROG(XMLTO, xmlto)
1375 xmlto=$XMLTO
1376 AC_SUBST(xmlto)
1378 book_toolchain=""
1379 if test "$do_books" = "check" -o "$do_books" = "yes"
1380 then
1381     if test "$BOOK_TOOLCHAIN" != ""
1382     then
1383         book_toolchain=$BOOK_TOOLCHAIN
1384     elif test "$DBLATEX" != ""
1385     then
1386         book_toolchain=dblatex
1387     elif test "$PUBLICAN" != ""
1388     then
1389         book_toolchain=publican
1390     elif test "$XMLTO" != ""
1391     then
1392         book_toolchain=xmlto
1393     elif test "$do_books" = "yes"
1394     then
1395         AC_MSG_ERROR([cannot enable books build - no toolchain found])
1396     fi
1398 AC_SUBST(book_toolchain)
1400 book_brand="common"
1401 if test "$do_books_brand" != ""
1402 then
1403     book_brand=$do_books_brand
1405 AC_SUBST(book_brand)
1407 dnl check if symbolic links are supported
1408 AC_PROG_LN_S
1409 if test $target_os = mingw; then
1410     as_ln_s=/bin/true
1413 dnl if /proc is not mounted, try and mount it
1414 dnl before trying to run the ps style test below
1415 if test -d /proc
1416 then
1417     test -f /proc/stat || mount /proc >/dev/null 2>&1
1420 dnl set platform specific ps
1421 if test -n "$PROCPS"
1422 then
1423     pcp_ps_prog="$PROCPS"
1424 else
1425     pcp_ps_prog=ps
1427 AC_SUBST(pcp_ps_prog)
1429 dnl set platform specific event logger
1430 if test $target_os = mingw
1431 then
1432     pcp_syslog_prog=pcp-eventlog
1433 else
1434     pcp_syslog_prog=logger
1436 AC_SUBST(pcp_syslog_prog)
1438 grep=grep
1439 if test $target_os = solaris
1440 then
1441     test -f /usr/xpg4/bin/grep && grep=/usr/xpg4/bin/grep
1443 AC_SUBST(grep)
1445 dnl checks for /proc pseudo file system
1446 AC_MSG_CHECKING([for /proc ])
1447 if test "$cross_compiling" = "yes"; then
1448     ans=$have_procfs
1449     echo "cross-compile -> \"$ans\"" >&5
1450 elif test -d /proc
1451 then
1452     have_procfs=true
1453 else
1454     have_procfs=false
1456 if $have_procfs
1457 then
1458     AC_MSG_RESULT(yes)
1459     AC_DEFINE(HAVE_PROCFS, [1], [Support for /proc pseudo-filesystem])
1460 else
1461     AC_MSG_RESULT(no)
1464 dnl Checks for C header files.
1465 AC_HEADER_DIRENT
1466 AC_HEADER_STDC
1467 AC_HEADER_SYS_WAIT
1468 AC_CHECK_HEADERS(fcntl.h limits.h malloc.h strings.h syslog.h)
1469 AC_CHECK_HEADERS(stddef.h sched.h dlfcn.h dl.h)
1470 AC_CHECK_HEADERS(sys/times.h sys/resource.h sys/prctl.h)
1471 AC_CHECK_HEADERS(sys/sysinfo.h sys/systeminfo.h)
1472 AC_CHECK_HEADERS(endian.h standards.h sys/byteorder.h)
1473 AC_CHECK_HEADERS(libgen.h sys/mman.h sys/un.h)
1474 AC_CHECK_HEADERS(values.h stdint.h ieeefp.h math.h)
1475 AC_CHECK_HEADERS(pwd.h grp.h regex.h sys/wait.h)
1476 AC_CHECK_HEADERS(termio.h termios.h sys/termios.h)
1477 AC_CHECK_HEADERS(sys/ioctl.h sys/select.h sys/socket.h)
1478 AC_CHECK_HEADERS(netdb.h)
1479 if test $target_os = darwin -o $target_os = openbsd
1480 then
1481     AC_CHECK_HEADERS(net/if.h, [], [], [#include <sys/types.h>
1482 #include <sys/socket.h>])
1483 else
1484     AC_CHECK_HEADERS(net/if.h)
1486 AC_CHECK_HEADERS(netinet/in.h netinet/tcp.h arpa/inet.h)
1487 AC_CHECK_HEADERS(windows.h winsock2.h ws2tcpip.h)
1488 AC_CHECK_HEADERS(execinfo.h bits/wordsize.h)
1489 AC_CHECK_HEADERS(iptypes.h, [], [], [#include <windows.h>])
1490 AC_CHECK_HEADERS(iphlpapi.h, [], [], [#include <winsock2.h>])
1491 AC_CHECK_HEADERS(fts.h libzfs.h)
1492 AC_CHECK_HEADERS(sys/statvfs.h sys/statfs.h sys/mount.h)
1494 dnl Check if we have <sys/endian.h> ... standard way
1495 AC_MSG_CHECKING([for sys/endian.h ])
1496 AC_TRY_COMPILE(
1497 [  
1498     #include <sys/endian.h> 
1501 ], AC_DEFINE(HAVE_SYS_ENDIAN_H, [1], [sys/endian.h]) AC_MSG_RESULT(yes), AC_MSG_RESULT(no))
1503 dnl Check if we have <machine/endian.h> ... MacOSX way
1504 AC_MSG_CHECKING([for machine/endian.h ])
1505 AC_TRY_COMPILE(
1506 [  
1507     #include <machine/endian.h> 
1510 ], AC_DEFINE(HAVE_MACHINE_ENDIAN_H, [1], [machine/endian.h]) AC_MSG_RESULT(yes), AC_MSG_RESULT(no))
1512 dnl Check if we have <sys/endian.h> ... IRIX strangeness
1513 AC_MSG_CHECKING([for sys/endian.h (IRIX variant) ])
1514 AC_TRY_COMPILE(
1515 [  
1516     #include <standards.h>
1517     #include <sys/endian.h> 
1520 ], AC_DEFINE(HAVE_SYS_ENDIAN_H, [1], [IRIX sys/endian.h]) AC_MSG_RESULT(yes), AC_MSG_RESULT(no))
1522 dnl Checks for typedefs, structures, and compiler characteristics.
1523 AC_C_CONST
1524 AC_TYPE_OFF_T
1525 AC_TYPE_PID_T
1526 AC_TYPE_SIZE_T
1527 AC_HEADER_TIME
1528 AC_STRUCT_TM
1529 AC_C_INLINE
1531 dnl check if regex functions come from libregex (mingw)
1532 AC_CHECK_LIB(regex, regcomp)
1533 lib_for_regex=""
1534 if test $ac_cv_lib_regex_regcomp = yes
1535 then
1536     lib_for_regex="-lregex"
1538 AC_SUBST(lib_for_regex)
1540 PKG_CHECK_MODULES([ncurses], [ncurses], [have_ncurses=true], [have_ncurses=false])
1541 AC_SUBST(HAVE_NCURSES, [$have_ncurses])
1543 PKG_CHECK_MODULES([SYSTEMD], [libsystemd],
1544                   [pmda_systemd=true], [pmda_systemd=false])
1545 if $pmda_systemd
1546 then
1547     :
1548 else
1549     dnl libsystemd-journal is an alternative for older distros
1550     PKG_CHECK_MODULES([SYSTEMD], [libsystemd-journal],
1551                       [pmda_systemd=true], [pmda_systemd=false])
1553 AC_MSG_CHECKING([if the systemd PMDA should be included])
1554 AC_SUBST(PMDA_SYSTEMD, $pmda_systemd)
1555 if $pmda_systemd; then AC_MSG_RESULT(yes); else AC_MSG_RESULT(no); fi
1557 pmda_infiniband=false
1558 AS_IF([test "x$do_infiniband" != "xno"], [
1559     AC_CHECK_HEADERS([infiniband/umad.h], [
1560         AC_CHECK_HEADERS([infiniband/mad.h], [pmda_infiniband=true], [])
1561     ], [])
1562     savedLIBS=$LIBS
1563     IB_LIBS=""
1564     AC_CHECK_LIB(ibmad, madrpc_init)
1565     AC_CHECK_LIB(ibumad, umad_init)
1566     if test $ac_cv_lib_ibmad_madrpc_init = yes -a $ac_cv_lib_ibumad_umad_init = yes
1567     then
1568         IB_LIBS="-libmad -libumad"
1569         LIBS="$IB_LIBS"
1570         AC_MSG_CHECKING([for port_performance_query_via])
1571         AC_TRY_LINK_FUNC(port_performance_query_via,
1572                 AC_DEFINE(HAVE_PORT_PERFORMANCE_QUERY_VIA, [1], [port_performance_query_via API])
1573                 have_port_performance_query_via=true
1574                 AC_MSG_RESULT(yes),
1575                 have_port_performance_query_via=false
1576                 AC_MSG_RESULT(no))
1577         AC_MSG_CHECKING([for pma_query_via])
1578         AC_TRY_LINK_FUNC(pma_query_via,
1579                 AC_DEFINE(HAVE_PMA_QUERY_VIA, [1], [pma_query_via API])
1580                 have_pma_query_via=true
1581                 AC_MSG_RESULT(yes),
1582                 have_pma_query_via=false
1583                 AC_MSG_RESULT(no))
1584         LIBS=$savedLIBS
1585         if test $have_pma_query_via -o $have_port_performance_query_via
1586         then
1587             :
1588         else
1589             pmda_infiniband=false
1590         fi
1591     else
1592         pmda_infiniband=false
1593     fi
1594     LIBS=$savedLIBS
1595     AC_SUBST(IB_LIBS)
1597 AC_MSG_CHECKING([if the infiniband PMDA should be included])
1598 AC_SUBST(PMDA_INFINIBAND, $pmda_infiniband)
1599 if $pmda_infiniband; then AC_MSG_RESULT(yes); else AC_MSG_RESULT(no); fi
1601 pmda_papi=false
1602 AS_IF([test "x$do_papi" != "xno"], [
1603     enable_papi=true
1605     saved_LDFLAGS="$LDFLAGS"
1606     saved_CFLAGS="$CFLAGS"
1607     savedLIBS=$LIBS
1609     dnl potentially from the environment, else empty
1610     CFLAGS="$papi_CFLAGS"
1611     LDFLAGS="$papi_LIBS"
1613     case "$do_papi" in
1614         yes|no|check)
1615             ;;
1616         */*)
1617             PAPI_ROOTDIR=$do_papi;
1618             CFLAGS="-I$PAPI_ROOTDIR/include"
1619             LDFLAGS="-L$PAPI_ROOTDIR/lib"
1620             ;;
1621          *)
1622             PKG_CHECK_MODULES(papi,[$do_papi],[
1623                   CFLAGS="$papi_CFLAGS"
1624                   LDFLAGS="$papi_LIBS"])
1625             ;;
1626     esac
1628     # $papi_LIBS may include -lpapi harmlessly redudantly with AC_CHECK_LIB
1629     AC_CHECK_LIB([papi], [PAPI_library_init],
1630                  [papi_libs="$LDFLAGS -lpapi"],
1631                  [enable_papi=false])
1632     AC_CHECK_HEADERS([papi.h], [papi_cflags="$CFLAGS"], [enable_papi=false])
1633     if test "$do_papi" != "check" -a "$enable_papi" != "true"
1634     then
1635         AC_MSG_ERROR([PAPI is not installed, cannot enable the PAPI PMDA])
1636     else
1637         pmda_papi=$enable_papi
1638     fi
1639     LIBS=$savedLIBS
1640     CFLAGS="$saved_CFLAGS"
1641     LDFLAGS="$saved_LDFLAGS"
1642     AC_SUBST(PAPI_CFLAGS, $papi_cflags)
1643     AC_SUBST(PAPI_LIBS, $papi_libs)
1645 AC_MSG_CHECKING([if the papi PMDA should be included])
1646 AC_SUBST(PMDA_PAPI, $pmda_papi)
1647 if $pmda_papi; then AC_MSG_RESULT(yes); else AC_MSG_RESULT(no); fi
1649 AS_IF([test "x$pmda_papi" = "xtrue"], [
1650         dnl check if struct PAPI_component_info_t has a disabled field
1651         AC_MSG_CHECKING([whether struct PAPI_component_info_t has a disabled field])
1652 cat <<End-of-File >conftest.c
1653 #include <papi.h>
1654 int main() { PAPI_component_info_t *c; c->disabled = 0; }
1655 End-of-File
1656         (eval $ac_compile) 2>conftest.out
1657         cat conftest.out >&5
1658         if test -s conftest.out
1659         then
1660            AC_MSG_RESULT(no)
1661         else
1662            AC_DEFINE(HAVE_PAPI_DISABLED_COMP, [1], [PAPI_component_info_t field])
1663            AC_MSG_RESULT(yes)
1665         fi
1666         rm -f conftest.*
1669 pmda_perfevent=false
1670 AS_IF([test "x$do_perfevent" != "xno" ], [
1671     enable_perfevent=true
1673     savedLIBS=$LIBS
1674     AC_CHECK_LIB([pfm], [pfm_get_os_event_encoding],
1675                  [pfm_libs="-lpfm"],
1676                  [enable_perfevent=false])
1677     AC_CHECK_HEADERS([perfmon/pfmlib_perf_event.h], [], [enable_perfevent=false])
1678     if test "$do_perfevent" != "check" -a "$enable_perfevent" != "true"
1679     then
1680         AC_MSG_ERROR([libpfm is not installed, cannot enable the perfevent PMDA])
1681     else
1682         pmda_perfevent=$enable_perfevent
1683     fi
1684     LIBS=$savedLIBS
1685     AC_SUBST(PFM_LIBS, $pfm_libs)
1687 AC_MSG_CHECKING([if the perfevent PMDA should be included])
1688 AC_SUBST(PMDA_PERFEVENT, $pmda_perfevent)
1689 if $pmda_perfevent; then AC_MSG_RESULT(yes); else AC_MSG_RESULT(no); fi
1691 dnl Do you have RPM Package Manager libraries for pmdarpm?
1692 pmda_rpm=false
1693 savedLIBS=$LIBS
1694 AC_MSG_CHECKING([for rpmlib > 4.4.2])
1695 AC_COMPILE_IFELSE(
1696    [AC_LANG_PROGRAM([[#include <rpm/header.h>]],
1697                     [[(void)HEADERGET_EXT;]])],
1698    [AC_MSG_RESULT([yes])
1699     pmda_rpm=true],
1700    [AC_MSG_RESULT([no])])
1701 AC_MSG_CHECKING([if the rpm PMDA should be included])
1702 AC_SUBST(PMDA_RPM,$pmda_rpm)
1703 if $pmda_rpm; then AC_MSG_RESULT(yes); else AC_MSG_RESULT(no); fi
1704 LIBS=$savedLIBS
1706 dnl Do you have the required qshape script for the postfix PMDA
1707 dnl The logic here is copied from the PMDA's Install script
1708 pmda_postfix=false
1709 AC_CHECK_PROGS(QSHAPE, qshape, [], path=[$PATH:/usr/sbin])
1710 AC_MSG_CHECKING([if the postfix PMDA should be included])
1711 if test -n "$QSHAPE"
1712 then
1713     pmda_postfix=true
1714 else
1715     for script in /usr/share/doc/packages/postfix-doc/auxiliary/qshape/qshape.pl
1716     do
1717         if test -f "$script"
1718         then
1719             pmda_postfix=true
1720             break
1721         fi
1722     done
1724 AC_SUBST(PMDA_POSTFIX,$pmda_postfix)
1725 if $pmda_postfix; then AC_MSG_RESULT(yes); else AC_MSG_RESULT(no); fi
1727 dnl Do you have system microhttpd libraries for pmwebapi?
1728 PKG_CHECK_MODULES([libmicrohttpd], [libmicrohttpd > 0.9.9], [have_libmicrohttpd=true], [have_libmicrohttpd=false])
1729 AC_SUBST(HAVE_LIBMICROHTTPD, [$have_libmicrohttpd])
1731 dnl Do you have graphics libraries for pmwebapi?
1732 PKG_CHECK_MODULES([cairo], [cairo >= 1.2, cairo-ft >= 1.2, cairo-png >= 1.2], [have_cairo=true], [have_cairo=false])
1733 AC_SUBST(HAVE_CAIRO, [$have_cairo])
1735 enable_webapi=false
1736 AS_IF([test "x$do_webapi" != "xno"], [
1737     enable_webapi=true
1739     if test "$have_libmicrohttpd" != "true"
1740     then
1741         enable_webapi=false
1742         test "$do_webapi" != "check" && \
1743         AC_MSG_ERROR([libmicrohttpd is not installed, cannot enable the web API])
1744     elif test "$do_webapi" != "check" -a "x$cxx" = "x"
1745     then
1746         enable_webapi=false
1747         test "$do_webapi" != "check" && \
1748         AC_MSG_ERROR([C++ compiler unavailable, cannot enable the web API])
1749     fi
1751 AC_SUBST(enable_webapi)
1753 enable_manager=false
1754 AS_IF([test "x$do_manager" != "xno"], [
1755     enable_manager=true
1757     if test "$target_os" = "mingw"
1758     then
1759         enable_manager=false
1760         test "$do_manager" != "check" && \
1761         AC_MSG_ERROR([MinGW build, cannot enable daemon manager])
1762     elif test "x$cxx" = "x"
1763     then
1764         enable_manager=false
1765         test "$do_manager" != "check" && \
1766         AC_MSG_ERROR([C++ compiler unavailable, cannot enable daemon manager])
1767     fi
1768     AC_MSG_CHECKING([compilation features for daemon manager])
1769     AC_TRY_COMPILE(
1770         [ #ifndef _XOPEN_SOURCE
1771           #define _XOPEN_SOURCE 600
1772           #endif
1773           #include <stdio.h>
1774         ], [],
1775         AC_MSG_RESULT(yes),
1776         enable_manager=false
1777         AC_MSG_RESULT(no))
1779 AC_SUBST(enable_manager)
1781 dnl Checks for library functions.
1782 AC_TYPE_SIGNAL
1783 AC_FUNC_WAIT3
1784 AC_FUNC_VPRINTF
1785 AC_CHECK_FUNCS(mktime nanosleep usleep unsetenv)
1786 AC_CHECK_FUNCS(select socket gethostname getpeerucred getpeereid)
1787 AC_CHECK_FUNCS(uname syslog __clone pipe2 fcntl ioctl)
1788 AC_CHECK_FUNCS(prctl setlinebuf waitpid atexit kill)
1789 AC_CHECK_FUNCS(chown fchmod getcwd scandir mkstemp)
1790 AC_CHECK_FUNCS(brk sbrk posix_memalign memalign valloc)
1791 AC_CHECK_FUNCS(signal sighold sigrelse tcgetattr)
1792 AC_CHECK_FUNCS(regex regcmp regexec regcomp)
1793 AC_CHECK_FUNCS(strtod strtol strtoll strtoull strndup strchrnul)
1794 AC_CHECK_FUNCS(getuid getgid)
1795 AC_CHECK_FUNCS(getgrent getgrent_r getgrnam getgrnam_r getgrgid getgrgid_r)
1796 AC_CHECK_FUNCS(getpwent getpwent_r getpwnam getpwnam_r getpwuid getpwuid_r)
1797 AC_CHECK_FUNCS(sysinfo trace_back_stack backtrace)
1798 AC_CHECK_FUNCS(sendmsg recvmsg setns)
1800 dnl only define readdir64 on non-linux platforms that support it
1801 if test $target_os != linux -a $target_os != freebsd -a $target_os != kfreebsd -a $target_os != netbsd; then
1802     AC_CHECK_FUNCS(readdir64)
1805 dnl typedefs missing from sys/types.h, stdlib.h or stddef.h
1806 if test $target_os = solaris
1807 then
1808    AC_CHECK_TYPE(__int32_t, int32_t)
1809    AC_CHECK_TYPE(__uint32_t, uint32_t)
1810    AC_CHECK_TYPE(__int64_t, int64_t)
1811    AC_CHECK_TYPE(__uint64_t, uint64_t)
1812    AC_CHECK_TYPE(uint_t, u_int32_t)
1813 else
1814     AC_CHECK_TYPE(__int32_t, int)
1815     AC_CHECK_TYPE(__uint32_t, unsigned int)
1816     AC_CHECK_TYPE(__int64_t, long long)
1817     AC_CHECK_TYPE(__uint64_t, unsigned long long)
1818     AC_CHECK_TYPE(uint_t, unsigned int)
1821 dnl check if we have a type for the pointer's size integer (__psint_t)
1822 AC_MSG_CHECKING([for __psint_t ])
1823 AC_TRY_COMPILE(
1824 [  
1825     #include <sys/types.h>
1826     #include <stdlib.h> 
1827     #include <stddef.h>
1828 ], [ __psint_t psint; ],
1829 AC_DEFINE(HAVE___PSINT_T, [1], [__psint_t type]) AC_MSG_RESULT(yes), AC_MSG_RESULT(no))
1831 dnl check if we have a type for pointer difference (ptrdiff_t)
1832 AC_MSG_CHECKING([for ptrdiff_t ])
1833 AC_TRY_COMPILE([
1834     #include <stddef.h>
1835     #ifdef HAVE_MALLOC_H
1836     #include <malloc.h>
1837     #endif
1838 ], [ ptrdiff_t ptrdiff; ],
1839 AC_DEFINE(HAVE_PTRDIFF_T, [1], [ptrdiff_t type]) AC_MSG_RESULT(yes), AC_MSG_RESULT(no))
1841 dnl check if we have types for uid_t, gid_t (POSIX) or SID (Win32)
1842 AC_MSG_CHECKING([for uid_t ])
1843 AC_TRY_COMPILE([
1844     #include <sys/types.h>
1845     #ifdef HAVE_PWD_H
1846     #include <pwd.h>
1847     #endif
1848 ], [ uid_t uid; ],
1849 AC_DEFINE(HAVE_UID_T, [1], [uid_t type]) AC_MSG_RESULT(yes), AC_MSG_RESULT(no))
1850 AC_MSG_CHECKING([for gid_t ])
1851 AC_TRY_COMPILE([
1852     #include <sys/types.h>
1853     #ifdef HAVE_GRP_H
1854     #include <grp.h>
1855     #endif
1856 ], [ gid_t gid; ],
1857 AC_DEFINE(HAVE_GID_T, [1], [gid_t type]) AC_MSG_RESULT(yes), AC_MSG_RESULT(no))
1858 AC_MSG_CHECKING([for SID ])
1859 AC_TRY_COMPILE([
1860     #ifdef HAVE_WINDOWS_H
1861     #include <windows.h>
1862     #endif
1863 ], [ SID sid; ],
1864 AC_DEFINE(HAVE_SID, [1], [sid type]) AC_MSG_RESULT(yes), AC_MSG_RESULT(no))
1866 dnl check if we have a type for socklen_t
1867 AC_MSG_CHECKING([for socklen_t ])
1868 AC_TRY_COMPILE([
1869     #include <sys/types.h>
1870     #ifdef HAVE_SYS_SOCKET_H
1871     #include <sys/socket.h>
1872     #endif
1873 ], [ socklen_t len; ],
1874 AC_DEFINE(HAVE_SOCKLEN_T, [1], [socklen_t type]) AC_MSG_RESULT(yes), AC_MSG_RESULT(no))
1876 dnl check if LL suffix on constants is supported
1877 AC_TRY_COMPILE([
1878     #include <stdio.h>
1879 ], [ long long x = 0LL; ],
1880 AC_DEFINE(HAVE_CONST_LONGLONG, [1], [LL suffix on constants]))
1882 dnl check if _environ is declared globally
1883 AC_TRY_LINK([
1884     #include <stdlib.h>
1885     #include <unistd.h>
1886 ], [ char **x = _environ; ],
1887 AC_DEFINE(HAVE_UNDERBAR_ENVIRON, [1], [_environ declared globally]))
1889 dnl check for PR_TERMCHILD and PR_SET_PDEATHSIG in <sys/prctl.h>
1890 AC_MSG_CHECKING([for PR_TERMCHILD constant in sys/prctl.h])
1891 AC_TRY_COMPILE([
1892     #ifdef HAVE_SYS_PRCTL_H
1893     #include <sys/prctl.h>
1894     #endif
1895 ], [ int i = PR_TERMCHILD; ],
1896 AC_DEFINE(HAVE_PR_TERMCHILD, [1], [PR_TERMCHILD constant]) AC_MSG_RESULT(yes), AC_MSG_RESULT(no))
1898 AC_MSG_CHECKING([for PR_SET_PDEATHSIG constant in sys/prctl.h])
1899 AC_TRY_COMPILE([
1900     #ifdef HAVE_SYS_PRCTL_H
1901     #include <sys/prctl.h>
1902     #endif
1903 ], [ int i = PR_SET_PDEATHSIG; ],
1904 AC_DEFINE(HAVE_PR_SET_PDEATHSIG, [1], [PR_SET_PDEATHSIG constant]) AC_MSG_RESULT(yes), AC_MSG_RESULT(no))
1906 AC_HEADER_TIOCGWINSZ
1908 dnl check if linker needs -rdynamic for dynamically loaded shared
1909 dnl libraries to see the symbols in the process loading them.
1910 dnl This is e.g., needed on linux for pmcd loading pmda_pmcd.so.
1911 AC_MSG_CHECKING([if linker supports -rdynamic])
1912 save_CFLAGS="$CFLAGS"
1913 CFLAGS="-rdynamic"
1914 AC_LINK_IFELSE([AC_LANG_PROGRAM([])],
1915     [AC_MSG_RESULT([yes])
1916      rdynamic_flag=-rdynamic],
1917     [AC_MSG_RESULT([no])
1918      rdynamic_flag=]
1920 CFLAGS="$save_CFLAGS"
1921 AC_SUBST([rdynamic_flag])
1924 dnl check if argument to user's select() method in scandir call is const
1925 AC_MSG_CHECKING([whether const arg for scandir() select method])
1926 cat <<End-of-File >conftest.c
1927 #include <stdlib.h>
1928 #include <unistd.h>
1929 #include <dirent.h>
1930 static int
1931 my_select(const struct dirent *foo) { return 0; }
1932 int main() { struct dirent **list; return scandir(".", &list, my_select, NULL); }
1933 End-of-File
1934 (eval $ac_compile) 2>conftest.out
1935 cat conftest.out >&5
1936 if test -s conftest.out
1937 then
1938     AC_MSG_RESULT(no)
1939 else
1940     AC_DEFINE(HAVE_CONST_DIRENT, [1], [const arg for scandir() select method])
1941     AC_MSG_RESULT(yes)
1943 rm -f conftest.*
1945 dnl check if struct dirent has a d_off (directory offset) field
1946 AC_MSG_CHECKING([whether struct dirent has a d_off field])
1947 cat <<End-of-File >conftest.c
1948 #include <stdlib.h>
1949 #include <unistd.h>
1950 #include <dirent.h>
1951 int main() { struct dirent d; d.d_off = 0; }
1952 End-of-File
1953 (eval $ac_compile) 2>conftest.out
1954 cat conftest.out >&5
1955 if test -s conftest.out
1956 then
1957     AC_MSG_RESULT(no)
1958 else
1959     AC_DEFINE(HAVE_DIRENT_D_OFF, [1], [struct dirent d_off field])
1960     AC_MSG_RESULT(yes)
1962 rm -f conftest.*
1964 dnl check if printf %p has 0x prefix
1965 AC_MSG_CHECKING([if printf %p produces 0x prefix])
1966 if test "$cross_compiling" = "yes"; then
1967     ans=$printf_p_prefix
1968     echo "cross-compile -> \"$ans\"" >&5
1969 else
1970     cat <<End-of-File >conftest.c
1971 #include <stdio.h>
1972 int main(int argc,  char **argv) { printf("%p", argv); return(0); }
1973 End-of-File
1974     (eval $ac_compile) 2>&5
1975     (eval $ac_link) 2>&5
1976     ans=`./conftest`
1977     echo "./conftest -> \"$ans\"" >&5
1979 case "$ans"
1981     0x*)
1982         AC_DEFINE(HAVE_PRINTF_P_PFX, [1], [printf %p produces 0x])
1983         AC_MSG_RESULT(yes)
1984         ;;
1985     *)
1986         AC_MSG_RESULT(no)
1987         ;;
1988 esac
1989 rm -rf conftest conftest.*
1991 _do_type()
1993     # need to deal with this sort of cpp output ...
1994     #   typedef long pid_t;
1995     #   typedef unsigned int pid_t;
1996     #   typedef unsigned int pid_t __attribute__ ((__mode__ (__SI__)));
1997     #   __extension__ typedef int pid_t;
1998     #   typedef foo_t
1999     #                  pid_t;
2000     #   typedef struct {
2001     #         ....
2002     #   } pid_t;
2003     #   typedef ... *pid;
2004     # and chaining of the form
2005     #   typedef long __pid_t;
2006     #   typedef __pid_t pid_t;
2007     #
2008     _raw=`$CPP conftest.c \
2009     | $SED \
2010         -e 's/[[        ]]__attribute__ ((.*));/;/' \
2011         -e 's/__extension__[[   ]][[    ]]*//' \
2012     | $AWK '
2013 /bozo/          { print; next }
2014 $1 == "typedef" { printf "%s",$0
2015                   if ($NF ~ /;$/) {
2016                       print ""
2017                       next
2018                   }
2019                   wantsemi = 1
2020                   if ($0 ~ /{/) depth = 1
2021                   next
2022                 }
2023 wantsemi == 1   { printf " %s",$0
2024                   if ($0 ~ /{/) depth++
2025                   if (depth) {
2026                       if ($0 ~ /}/) depth--
2027                       if (depth > 0) next
2028                   }
2029                   if ($NF ~ /;$/) {
2030                       print ""
2031                       wantsemi = 0
2032                       next
2033                   }
2034                 }' \
2035     | $SED \
2036         -e 's/\*/* /g' \
2037         -e 's/^[[       ]]*//' \
2038         -e 's/;[[       ]]*$//' \
2039     | $AWK '
2040 $1 == "typedef" { map[[$NF]] = ""
2041                   for (i = 2; i < NF; i++) {
2042                     if (i == 2)
2043                         map[[$NF]] = $i
2044                     else
2045                         map[[$NF]] = map[[$NF]] " " $i
2046                   }
2047                   print $NF " -> " map[[$NF]] >"conftest.debug"
2048                   next
2049                 }
2050 $2 == "bozo"    { t = $1
2051                   printf "best guess: %s",t >"conftest.debug"
2052                   while (map[[t]] != "") {
2053                     t = map[[t]]
2054                     printf " -> %s",t >"conftest.debug"
2055                   }
2056                   print "" >"conftest.debug"
2057                   print t
2058                   exit
2059                 }'`
2060     case "$_raw"
2061     in
2062     int)
2063         _fmt='"d"'
2064         ;;
2065     unsigned|'unsigned int')
2066         _fmt='"u"'
2067         ;;
2068     long|'long int')
2069         _fmt='"ld"'
2070         ;;
2071     'long long'|'long long int')
2072         if test $target_os = mingw; then
2073             _fmt='"I64d"'
2074         else
2075             _fmt='"lld"'
2076         fi
2077         ;;
2078     'unsigned long'|'unsigned long int'|'long unsigned int')
2079         _fmt='"lu"'
2080         ;;
2081     'unsigned long long'|'unsigned long long int')
2082         if test $target_os = mingw; then
2083             _fmt='"I64u"'
2084         else
2085             _fmt='"llu"'
2086         fi
2087         ;;
2088     *\*)        # pointer to a something
2089         _fmt='"p"'
2090         ;;
2091     struct\ *)  # not much can be done here ...
2092         _fmt='"p"'
2093         ;;
2094     *)
2095         echo
2096         echo "FATAL ERROR: don't know what to do with type \"$_raw\""
2097         echo "... typedef mapping ..."
2098         cat conftest.debug
2099         rm -rf conftest conftest.*
2100         exit 1
2101         ;;
2102     esac
2105 dnl printf type for pid_t
2106 AC_MSG_CHECKING([printf type for pid_t])
2107 if test "$cross_compiling" = "yes"; then
2108     ans=$printf_fmt_pid
2109     echo "cross-compile -> \"$ans\"" >&5
2110     fmt_pid="$ans"
2111 else
2112     cat <<End-of-File >conftest.c
2113 #include <sys/types.h>
2114 #include <unistd.h>
2115 pid_t bozo;
2116 End-of-File
2117     _do_type
2118     fmt_pid="$_fmt"
2120 AC_MSG_RESULT($fmt_pid)
2121 AC_SUBST(fmt_pid)
2122 rm -rf conftest.c conftest.debug
2124 dnl printf type for int64_t
2125 AC_MSG_CHECKING([printf type for int64_t ])
2126 if test "$cross_compiling" = "yes"; then
2127     ans=$printf_fmt_int64
2128     echo "cross-compile -> \"$ans\"" >&5
2129 else
2130     cat <<End-of-File >conftest.c
2131 #include <stdio.h>
2132 #include <stdint.h>
2133 #include <inttypes.h>
2134 int main()
2136     printf("\"%s\"\n", __PRI64_PREFIX "d");
2137     return(0);
2139 End-of-File
2140     ans=''
2141     (eval $ac_link) 2>&5
2142     if test -x ./conftest
2143     then
2144         ans=`./conftest`
2145         echo "./conftest -> \"$ans\"" >&5
2146     fi
2147     if test -z "$ans"
2148     then
2149         dnl have to try the hardway ...
2150         cat <<End-of-File >conftest.c
2151 #include <stdio.h>
2152 #include <stdint.h>
2153 #include <string.h>
2154 int main()
2156     char buf[[17]];
2157     int64_t bozo = 0x12345678abcdLL;
2158     sprintf(buf, "%lx", bozo);
2159     if (strcmp(buf, "12345678abcd") == 0)
2160         printf("\"ld\"\n");
2161     else {
2162         sprintf(buf, "%llx", bozo);
2163         if (strcmp(buf, "12345678abcd") == 0)
2164             printf("\"lld\"\n");
2165     }
2166     return(0);
2168 End-of-File
2169         (eval $ac_link) 2>&5
2170         if test -x ./conftest
2171         then
2172             ans=`./conftest`
2173             echo "./conftest -> \"$ans\"" >&5
2174         fi
2175     fi
2177 if test -z "$ans"
2178 then
2179     echo 'FATAL ERROR: Cannot determine printf format for int64_t type'
2180     rm -rf conftest conftest.*
2181     exit 1
2183 fmt_int64="$ans"
2184 AC_MSG_RESULT("$fmt_int64")
2185 AC_SUBST(fmt_int64)
2186 rm -rf conftest.* conftest
2188 AC_MSG_CHECKING([strtol or strtoll for int64_t])
2189 if test "$cross_compiling" = "yes"; then
2190     ans=$strtoint64
2191     echo "cross-compile -> \"$ans\"" >&5
2192 else
2193     cat <<End-of-File >conftest.c
2194 #include <stdio.h>
2195 #include <stdlib.h>
2196 main()
2198     long long int       value = -1;
2199     value = strtol("1234567812345678", NULL, 16);
2200     if (value == 0x1234567812345678LL) {
2201         printf("strotol\n");
2202         exit(0);
2203     }
2204     value = strtoll("1234567812345678", NULL, 16);
2205     if (value == 0x1234567812345678LL) {
2206         printf("strtoll\n");
2207         exit(0);
2208     }
2209     exit(1);
2211 End-of-File
2212     (eval $ac_compile) 2>&5
2213     (eval $ac_link) 2>&5
2214     ans=`./conftest`
2215     echo "./conftest -> \"$ans\"" >&5
2217 case "$ans"
2219     strtol)
2220         AC_DEFINE(strtoint64, strtol)
2221         AC_DEFINE(strtouint64, strtoul)
2222         AC_MSG_RESULT([strtol])
2223         ;;
2224     strtoll)
2225         AC_DEFINE(strtoint64, strtoll)
2226         AC_DEFINE(strtouint64, strtoull)
2227         AC_MSG_RESULT([strtoll])
2228         ;;
2229     *)
2230         AC_DEFINE(strtoint64, strtoll)
2231         AC_DEFINE(strtouint64, strtoull)
2232         AC_MSG_RESULT([assuming strtoll])
2233         ;;
2234 esac
2235 rm -rf conftest conftest.*
2237 if test "$do_threads" = "check" -o "$do_threads" = "yes"
2238 then
2239     AC_CHECK_HEADERS(
2240         pthread.h,
2241         [],
2242         [
2243             if test "$do_threads" = "yes"
2244             then
2245                 AC_MSG_ERROR([cannot enable multi-threaded mode - no pthread.h])
2246             fi
2247         ])
2249     dnl Check if pthread_mutex_t is defined in pthread.h
2250     dnl Ignore the fact that pthread.h could be missing - we don't
2251     dnl really care if this test fails because of missing pthread_mutex_t
2252     dnl or because of missing headers.
2253     AC_MSG_CHECKING([for pthread_mutex_t in pthread.h])
2254     AC_TRY_COMPILE(
2255         [#include <pthread.h>], [pthread_mutex_t mymutex;],
2256         AC_DEFINE(HAVE_PTHREAD_MUTEX_T, [1], [pthread_mutex_t type]) AC_MSG_RESULT(yes),
2257         [
2258             if test "$do_threads" = "yes"
2259             then
2260                 AC_MSG_ERROR([cannot enable multi-threaded mode - no mutexes])
2261             else
2262                 AC_MSG_RESULT(no)
2263             fi
2264         ])
2266     dnl Check which library provide pthread stuff
2267     AC_MSG_CHECKING([where pthread_create() is defined])
2268     for cand in "" pthreads pthread ; do
2269         savedLIBS=$LIBS
2270         if test -n "$cand" 
2271         then
2272             LIBS=`echo $LIBS -l$cand`
2273         fi
2274         AC_TRY_LINK(
2275         [
2276             #include <pthread.h>
2277         ],
2278         [
2279             pthread_create(NULL, NULL, NULL, NULL);
2280         ],  AC_MSG_RESULT(lib${cand:-c})
2281             if test -z "$cand"
2282             then
2283                 lib_for_pthreads="$cand"
2284             else
2285                 lib_for_pthreads="-l$cand"
2286             fi
2287             LIBS=$savedLIBS
2288             break )
2289         LIBS=$savedLIBS
2290     done
2291     AC_SUBST(lib_for_pthreads)
2293     if test "$ac_cv_header_pthread_h" = "yes"
2294     then
2295         dnl printf type for pthread_t
2296         AC_MSG_CHECKING([printf type for pthread_t])
2297         cat <<End-of-File >conftest.c
2298 #include <pthread.h>
2299 pthread_t bozo;
2300 End-of-File
2301         _do_type
2302         fmt_pthread="$_fmt"
2303         AC_MSG_RESULT($fmt_pthread)
2304         AC_SUBST(fmt_pthread)
2305         rm -rf conftest.c conftest.debug
2307         dnl check if gcc supports __thread for thread private data
2308         AC_MSG_CHECKING([if compiler supports __thread])
2309         dnl __thread support is broken in some places
2310         if test $target_os = netbsd
2311         then
2312             AC_TRY_COMPILE([#include <pthread.h>
2313 #if __GNUC__ < 4 || ( __GNUC__ == 4 && __GNUC_MINOR__ < 5 )
2314 broken!
2315 #else
2316 __thread int x;
2317 #endif], [],
2318                 AC_DEFINE(HAVE___THREAD, [1], [__thread private data]) AC_MSG_RESULT(yes), AC_MSG_RESULT(no))
2319         else
2320             AC_TRY_COMPILE([#include <pthread.h>
2321 __thread int x;], [],
2322                 AC_DEFINE(HAVE___THREAD, [1], [__thread private data]) AC_MSG_RESULT(yes), AC_MSG_RESULT(no))
2323         fi
2325         dnl Check if pthread_barrier_t is defined in pthread.h
2326         AC_MSG_CHECKING([for pthread_barrier_t in pthread.h])
2327         AC_TRY_COMPILE([#include <pthread.h>], [pthread_barrier_t mybarrier;],
2328             AC_DEFINE(HAVE_PTHREAD_BARRIER_T, [1], [pthread_barrier_t type]) AC_MSG_RESULT(yes),
2329             AC_MSG_RESULT(no))
2330     fi
2333 AC_MSG_CHECKING([sizeof suseconds_t])
2334 if test "$cross_compiling" = "yes"; then
2335     ans=$sizeof_suseconds_t
2336     echo "cross-compile -> \"$ans\"" >&5
2337 else
2338     cat <<End-of-File >conftest.c
2339 #include <sys/time.h>
2340 main() { printf("%d", (int)sizeof(suseconds_t)); }
2341 End-of-File
2342     (eval $ac_compile) 2>&5
2343     (eval $ac_link) 2>&5
2344     ans=`./conftest`
2345     echo "./conftest -> \"$ans\"" >&5
2346     rm -rf conftest conftest.*
2348 AC_MSG_RESULT($ans)
2349 AC_DEFINE_UNQUOTED(SIZEOF_SUSECONDS_T, $ans, [sizeof suseconds_t])
2351 AC_MSG_CHECKING([sizeof time_t])
2352 if test "$cross_compiling" = "yes"; then
2353     ans=$sizeof_time_t
2354     echo "cross-compile -> \"$ans\"" >&5
2355 else
2356     cat <<End-of-File >conftest.c
2357 #include <sys/time.h>
2358 main() { printf("%d", (int)sizeof(time_t)); }
2359 End-of-File
2360     (eval $ac_compile) 2>&5
2361     (eval $ac_link) 2>&5
2362     ans=`./conftest`
2363     echo "./conftest -> \"$ans\"" >&5
2364     rm -rf conftest conftest.*
2366 AC_MSG_RESULT($ans)
2367 AC_DEFINE_UNQUOTED(SIZEOF_TIME_T, $ans, [sizeof time_t])
2369 dnl check sizeof long
2370 AC_MSG_CHECKING([sizeof long])
2371 if test "$cross_compiling" = "yes"; then
2372     ans=$sizeof_long
2373     echo "cross-compile -> \"$ans\"" >&5
2374 else
2375     cat <<End-of-File >conftest.c
2376 #include <stdio.h>
2377 main() { printf("%d", (int)sizeof(long)); }
2378 End-of-File
2379     (eval $ac_compile) 2>&5
2380     (eval $ac_link) 2>&5
2381     ans=`./conftest`
2382     echo "./conftest -> \"$ans\"" >&5
2384 AC_MSG_RESULT($ans)
2385 if test "$ans" = 4; then
2386     AC_DEFINE(HAVE_32BIT_LONG, [1], [sizeof long])
2387 elif test "$ans" = 8; then
2388     AC_DEFINE(HAVE_64BIT_LONG, [1], [sizeof long])
2389 else
2390     echo
2391     echo "FATAL ERROR: size of long is not 32 or 64 bits, cannot proceed."
2392     echo "sizeof(char *) -> $ans"
2393     rm -rf conftest conftest.*
2394     exit 1
2396 rm -rf conftest conftest.*
2398 dnl check sizeof pointer
2399 AC_MSG_CHECKING([sizeof pointer])
2400 if test "$cross_compiling" = "yes"; then
2401     ans=$sizeof_pointer
2402     echo "cross-compile -> \"$ans\"" >&5
2403 else
2404     cat <<End-of-File >conftest.c
2405 #include <stdio.h>
2406 main() { printf("%d", (int)sizeof(char *)); }
2407 End-of-File
2408     (eval $ac_compile) 2>&5
2409     (eval $ac_link) 2>&5
2410     ans=`./conftest`
2411     echo "./conftest -> \"$ans\"" >&5
2413 AC_MSG_RESULT($ans)
2414 if test "$ans" = 4; then
2415     AC_DEFINE(HAVE_32BIT_PTR, [1], [pointer size])
2416     PCP_PTR_SIZE=32
2417 elif test "$ans" = 8; then
2418     AC_DEFINE(HAVE_64BIT_PTR, [1], [pointer size])
2419     PCP_PTR_SIZE=64
2420 else
2421     echo
2422     echo "FATAL ERROR: size of pointer is not 32 or 64 bits, cannot proceed."
2423     echo "sizeof(char *) -> $ans"
2424     rm -rf conftest conftest.*
2425     exit 1
2427 rm -rf conftest conftest.*
2429 dnl check sizeof int. If not 32, we die
2430 AC_MSG_CHECKING([sizeof int])
2431 if test "$cross_compiling" = "yes"; then
2432     ans=$sizeof_int
2433     echo "cross-compile -> \"$ans\"" >&5
2434 else
2435     cat <<End-of-File >conftest.c
2436 #include <stdio.h>
2437 main() { printf("%d", (int)sizeof(int)); }
2438 End-of-File
2439     (eval $ac_compile) 2>&5
2440     (eval $ac_link) 2>&5
2441     ans=`./conftest`
2442     echo "./conftest -> \"$ans\"" >&5
2444 AC_MSG_RESULT($ans)
2445 if test "$ans" != 4
2446 then
2447     echo
2448     echo "FATAL ERROR: sizeof(int) is not 32 bits, cannot proceed."
2449     echo "Note: 32-bit ints are assumed in the PCP external file formats and"
2450     echo "      the over-the-wire PDU formats"
2451     rm -rf conftest conftest.*
2452     exit 1
2454 rm -rf conftest conftest.*
2456 dnl check bit field allocation order within a word
2457 AC_MSG_CHECKING([if bit fields allocated left-to-right])
2458 if test "$cross_compiling" = "yes"; then
2459     ans=$bit_field_scheme
2460     echo "cross-compile -> \"$ans\"" >&5
2461 else
2462     cat <<End-of-File >conftest.c
2463 union { struct { unsigned int b:4; unsigned int c:4; } a; int p; } u;
2464 main() { u.a.b = 1; u.a.c = 2; printf("%0*x", 2*sizeof(int), u.p); }
2465 End-of-File
2466     (eval $ac_compile) 2>&5
2467     (eval $ac_link) 2>&5
2468     ans=`./conftest`
2469     echo "./conftest -> \"$ans\"" >&5
2471 case "$ans"
2473     1200*|*0012)
2474         # left-to-right starting from MSB (SGI cc on MIPS), or
2475         # left-to-right ending at LSB
2476         AC_DEFINE(HAVE_BITFIELDS_LTOR, [1], [left-to-right bitfield ordering])
2477         AC_MSG_RESULT(yes)
2478         ;;
2479     2100*|*0021)
2480         # right-to-left ending at MSB, or
2481         # right-to-left starting from LSB (gcc in Intel)
2482         AC_MSG_RESULT(no)
2483         ;;
2484     *)
2485         AC_MSG_RESULT(unknown)
2486         echo "FATAL ERROR: could not fathom your compiler's bit field allocation scheme"
2487         rm -f conftest conftest.*
2488         exit 1
2489         ;;
2490 esac
2491 rm -rf conftest conftest.*
2493 dnl check if compiler can cast __uint64_t to double
2494 AC_TRY_LINK(
2496     #include <stdlib.h>
2497     #include <unistd.h>
2500     __uint64_t x = 0;
2501     double y = (double)x;
2502 ], AC_DEFINE(HAVE_CAST_U64_DOUBLE, [1], [compiler casts u64 to double]))
2504 dnl check if basename and dirname need -lgen, -lpcp or nothing to work
2505 dnl (assume both go together)
2506 AC_CHECK_FUNCS(basename)
2507 if test $ac_cv_func_basename = yes
2508 then
2509     AC_DEFINE(HAVE_BASENAME, [1], [basename API])
2510     AC_DEFINE(HAVE_DIRNAME, [1], [dirname API])
2511     lib_for_basename=""
2512 else
2513     AC_CHECK_LIB(gen, basename)
2514     if test $ac_cv_lib_gen_basename = yes
2515     then
2516         AC_DEFINE(HAVE_BASENAME, [1], [basename API])
2517         AC_DEFINE(HAVE_DIRNAME, [1], [dirname API])
2518         lib_for_basename="-lgen"
2519     else
2520         lib_for_basename="-lpcp"
2521     fi
2523 AC_SUBST(lib_for_basename)
2525 dnl check if clock_gettime needs -lrt to work
2526 lib_for_clock_gettime=
2527 AC_CHECK_FUNCS(clock_gettime)
2528 if test $ac_cv_func_clock_gettime = no
2529 then
2530     AC_CHECK_LIB(rt, clock_gettime)
2531     if test $ac_cv_lib_rt_clock_gettime = yes
2532     then
2533         AC_DEFINE(HAVE_CLOCK_GETTIME, [1], [clock_gettime API])
2534         lib_for_rt=-lrt
2535     fi
2537 AC_SUBST(lib_for_rt)
2539 dnl check if dlopen et al need -ldl to work
2540 lib_for_dlopen=
2541 AC_CHECK_FUNCS(dlopen)
2542 if test $ac_cv_func_dlopen = no
2543 then
2544     AC_CHECK_LIB(dl, dlopen)
2545     if test $ac_cv_lib_dl_dlopen = yes
2546     then
2547         AC_DEFINE(HAVE_DLOPEN, [1], [dlopen API])
2548         lib_for_dlopen=-ldl
2549     fi
2551 AC_SUBST(lib_for_dlopen)
2553 dnl check if flog10, pow, fpclassify and isnanf are available
2554 dnl in the maths library
2555 lib_for_math=
2556 AC_CHECK_FUNCS(flog10)
2557 if test $ac_cv_func_flog10 = no
2558 then
2559     AC_CHECK_LIB(m, flog10)
2560     if test $ac_cv_lib_m_flog10 = yes
2561     then
2562         AC_DEFINE(HAVE_FLOG10, [1], [flog10 math API])
2563         lib_for_math=-lm
2564     fi
2565 else
2566     AC_DEFINE(HAVE_FLOG10, [1], [flog10 math API])
2568 AC_CHECK_FUNCS(pow)
2569 if test $ac_cv_func_pow = no
2570 then
2571     AC_CHECK_LIB(m, pow)
2572     if test $ac_cv_lib_m_pow = yes
2573     then
2574         AC_DEFINE(HAVE_POW, [1], [pow math API])
2575         lib_for_math=-lm
2576     fi
2577 else
2578     AC_DEFINE(HAVE_POW, [1], [pow math API])
2580 AC_MSG_CHECKING([for fpclassify()])
2581 ac_cv_func_fpclassify=no
2582 AC_TRY_LINK(
2584     #include <math.h>
2587     double x = 123.456;
2588     if (fpclassify(x) == FP_NAN) exit(1);
2589 ], ac_cv_func_fpclassify=yes)
2590 AC_MSG_RESULT($ac_cv_func_fpclassify)
2591 if test $ac_cv_func_fpclassify = no
2592 then
2593     dnl try with -lm
2594     AC_MSG_CHECKING([for fpclassify() with -lm])
2595     savedLIBS=$LIBS
2596     LIBS=-lm
2597     AC_TRY_LINK(
2599     #include <math.h>
2602     double x = 123.456;
2603     if (fpclassify(x) == FP_NAN) exit(1);
2604 ], ac_cv_func_fpclassify=yes)
2605     AC_MSG_RESULT($ac_cv_func_fpclassify)
2606     if test $ac_cv_func_fpclassify = yes
2607     then
2608         lib_for_math=-lm
2609     fi
2610     LIBS=$savedLIBS
2612 if test $ac_cv_func_fpclassify = yes
2613 then
2614     AC_DEFINE(HAVE_FPCLASSIFY, [1], [fpclassify math API])
2615 else
2616     dnl prefer fpclassify() but will take isnan() and isnanf() as
2617     dnl possible alternates
2618     AC_CHECK_FUNCS(isnan)
2619     if test $ac_cv_func_isnan = no
2620     then
2621         AC_CHECK_LIB(m, isnan)
2622         if test $ac_cv_lib_m_isnan = yes
2623         then
2624             AC_DEFINE(HAVE_ISNAN, [1], [isnan math API])
2625             lib_for_math=-lm
2626         fi
2627     fi
2628     AC_CHECK_FUNCS(isnanf)
2629     if test $ac_cv_func_isnanf = no
2630     then
2631         AC_CHECK_LIB(m, isnanf)
2632         if test $ac_cv_lib_m_isnanf = yes
2633         then
2634             AC_DEFINE(HAVE_ISNANF, [1], [isnanf math API])
2635             lib_for_math=-lm
2636         fi
2637     fi
2639 AC_SUBST(lib_for_math)
2641 dnl check if we have the SIG_PF typedef
2642 AC_TRY_LINK([#include <signal.h>], [SIG_PF x;],
2643     AC_DEFINE(HAVE_SIGPF, [1], [SIG_PF typedef]))
2645 dnl check if we have the SA_SIGINFO #define
2646 AC_TRY_LINK([#include <signal.h>], [int x = SA_SIGINFO;],
2647     AC_DEFINE(HAVE_SA_SIGINFO, [1], [SA_SIGINFO macro]))
2649 dnl check if we support the SIGPIPE signal
2650 AC_TRY_LINK([#include <signal.h>], [int x = SIGPIPE;],
2651     AC_DEFINE(HAVE_SIGPIPE, [1], [SIGPIPE signal]))
2653 dnl check if we support the SIGHUP signal
2654 AC_TRY_LINK([#include <signal.h>], [int x = SIGHUP;],
2655     AC_DEFINE(HAVE_SIGHUP, [1], [SIGHUP signal]))
2657 dnl check if we support the SIGBUS signal
2658 AC_TRY_LINK([#include <signal.h>], [int x = SIGBUS;],
2659     AC_DEFINE(HAVE_SIGBUS, [1], [SIGBUS signal]))
2661 dnl check if we need to explicitly include signal.h
2662 AC_TRY_LINK([#include <sys/wait.h>],
2663 [   typedef void (*SIGRET)(int);
2664     SIGRET x = SIG_IGN;
2665 ], AC_DEFINE(HAVE_WAIT_INCLUDES_SIGNAL, [1], [indirect signal.h]))
2667 dnl check for name and type of time fields in struct stat
2668 dnl IRIX example        timespec_t st_mtim;     
2669 dnl Linux example       struct timespec st_mtim;
2670 dnl Darwin example      struct timespec st_mtimespec;
2671 dnl Solaris example     timestruc_t st_mtim;
2672 dnl FreeBSD (6.1)       struct timespec st_mtimespec;
2673 dnl                     struct timespec {
2674 dnl                             time_t tv_sec;
2675 dnl                             long tv_nsec;
2676 dnl                     };
2678 have_stat_type=false
2679 have_stat_name=false
2680 if test $have_stat_name = false
2681 then
2682     AC_EGREP_HEADER(
2683     changequote(<<, >>)<<[      ]st_mtimespec>>changequote([, ]),
2684     sys/stat.h, [ have_stat_name=true;
2685     AC_DEFINE(HAVE_ST_MTIME_WITH_SPEC, [1], [st_mtimespec stat field]) ])
2687 if test $have_stat_name = false -a $target_os != darwin -a $target_os != linux -a $target_os != kfreebsd -a $target_os != netbsd
2688 then
2689     AC_EGREP_HEADER(
2690     changequote(<<, >>)<<[      ]st_mtime>>changequote([, ]),
2691     sys/stat.h, [ have_stat_name=true;
2692     AC_DEFINE(HAVE_ST_MTIME_WITH_E, [1], [st_mtime stat field]) ])
2694 if test $have_stat_type = false
2695 then
2696     AC_EGREP_HEADER(
2697     changequote(<<, >>)<<timestruc_t[   ][      ]*st_mtim>>changequote([, ]),
2698     sys/stat.h, [ have_stat_type=true;
2699     AC_DEFINE(HAVE_STAT_TIMESTRUC, [1], [timestruc_t type]) ])
2701 if test $have_stat_type = false
2702 then
2703     AC_EGREP_HEADER(
2704     changequote(<<, >>)<<timespec_t[    ][      ]*st_mtim>>changequote([, ]),
2705     sys/stat.h, [ have_stat_type=true;
2706     AC_DEFINE(HAVE_STAT_TIMESPEC_T, [1], [timespec_t type]) ])
2708 if test $have_stat_type = false
2709 then
2710     AC_EGREP_HEADER(
2711     changequote(<<, >>)<<timespec[      ][      ]*st_mtim>>changequote([, ]),
2712     sys/stat.h, [ have_stat_type=true;
2713     AC_DEFINE(HAVE_STAT_TIMESPEC, [1], [timespec type]) ])
2715 if test $have_stat_type = false
2716 then
2717     AC_EGREP_HEADER(
2718     changequote(<<, >>)<<time_t[        ][      ]*st_mtim>>changequote([, ]),
2719     sys/stat.h, [ have_stat_type=true;
2720     AC_DEFINE(HAVE_STAT_TIME_T, [1], [time_t type]) ])
2722 if test $have_stat_type = false
2723 then
2724     echo 'FATAL ERROR: Cannot determine struct stat time types.'
2725     rm -rf conftest conftest.*
2726     exit 1
2730 dnl Work out where to install stuff for this package
2731 dnl (and where to find stuff at run-time for add-on packages).
2735 dnl Predictable directory containing pcp.conf, or overridden
2736 dnl by the $PCP_CONF environment variable. If this is not set
2737 dnl (default /etc/pcp.conf), then $PCP_CONF must be set in
2738 dnl the environment.
2740 dnl The eval echo stuff is used to get around unfavourable
2741 dnl elements of the GNU standards, which cause embedding of
2742 dnl ${prefix} within many of these various $dirs.
2743 dnl http://www.gnu.org/software/autoconf/manual/autoconf.html#Installation-Directory-Variables
2745 pcp_etc_dir=`eval echo $sysconfdir`
2746 pcp_etc_dir=`eval echo $pcp_etc_dir`
2747 AC_SUBST(pcp_etc_dir)
2748 pcp_saslconf_dir=`eval echo $sysconfdir/sasl2`
2749 pcp_saslconf_dir=`eval echo $pcp_saslconf_dir`
2750 AC_SUBST(pcp_saslconf_dir)
2751 pcp_sysconf_dir=`eval echo $sysconfdir/pcp`
2752 pcp_sysconf_dir=`eval echo $pcp_sysconf_dir`
2753 AC_SUBST(pcp_sysconf_dir)
2754 pcp_pmcdconf_path=$pcp_sysconf_dir/pmcd/pmcd.conf
2755 pcp_pmcdrclocal_path=$pcp_sysconf_dir/pmcd/rc.local
2756 pcp_pmcdoptions_path=$pcp_sysconf_dir/pmcd/pmcd.options
2757 pcp_pmwebdoptions_path=$pcp_sysconf_dir/pmwebd/pmwebd.options
2758 pcp_pmmgroptions_path=$pcp_sysconf_dir/pmmgr/pmmgr.options
2759 pcp_pmproxyoptions_path=$pcp_sysconf_dir/pmproxy/pmproxy.options
2760 pcp_pmiecontrol_path=$pcp_sysconf_dir/pmie/control
2761 pcp_pmsnapcontrol_path=$pcp_sysconf_dir/pmsnap/control
2762 pcp_pmloggercontrol_path=$pcp_sysconf_dir/pmlogger/control
2763 AC_SUBST(pcp_pmcdconf_path)
2764 AC_SUBST(pcp_pmcdoptions_path)
2765 AC_SUBST(pcp_pmcdrclocal_path)
2766 AC_SUBST(pcp_pmwebdoptions_path)
2767 AC_SUBST(pcp_pmmgroptions_path)
2768 AC_SUBST(pcp_pmproxyoptions_path)
2769 AC_SUBST(pcp_pmiecontrol_path)
2770 AC_SUBST(pcp_pmsnapcontrol_path)
2771 AC_SUBST(pcp_pmloggercontrol_path)
2773 dnl shared PCP files (shareable for diskless)
2774 pcp_share_dir=`eval echo $datarootdir/pcp`
2775 pcp_share_dir=`eval echo $pcp_share_dir`
2776 AC_SUBST(pcp_share_dir)
2778 dnl private PCP executables
2779 pcp_binadm_dir=`eval echo $libexecdir/pcp/bin`
2780 pcp_binadm_dir=`eval echo $pcp_binadm_dir`
2781 AC_SUBST(pcp_binadm_dir)
2783 dnl non-shared (i.e. system local) PCP files
2784 pcp_var_dir=`eval echo $localstatedir/lib/pcp`
2785 pcp_var_dir=`eval echo $pcp_var_dir`
2786 AC_SUBST(pcp_var_dir)
2788 dnl pmcd control and options files
2789 AC_ARG_WITH(configdir,[AC_HELP_STRING([--with-configdir],[configuration directory [LOCALSTATEDIR/pcp/config]])],
2790                       [pcp_config_dir=$withval],
2791                       [pcp_config_dir=$pcp_var_dir/config])
2793 pcp_pmdas_dir=$pcp_var_dir/pmdas
2794 AC_SUBST(pcp_pmdas_dir)
2796 dnl runtime shared libraries
2797 pcp_lib_dir=`eval echo $libdir`
2798 pcp_lib_dir=`eval echo $pcp_lib_dir`
2799 pcp_lib32_dir=`echo $pcp_lib_dir | sed -e s,64,, -e s,//,/,`
2800 AC_SUBST(pcp_lib_dir)
2801 AC_SUBST(pcp_lib32_dir)
2803 dnl perl modules
2804 AC_ARG_WITH(perl_installdirs,[AC_HELP_STRING([--with-perl_installdirs],[perl installdirs [vendor]])],
2805                       [perl_installdirs=$withval],
2806                       [perl_installdirs=vendor])
2807 perl_installdirs=`eval echo $perl_installdirs`
2808 perl_installdirs=`eval echo $perl_installdirs`
2809 AC_SUBST(perl_installdirs)
2810 AC_ARG_WITH(perl_install_base,[AC_HELP_STRING([--with-perl_install_base],[perl install_base [PREFIX]])],
2811                       [perl_install_base=$withval],
2812                       [perl_install_base=$prefix])
2813 perl_install_base=`eval echo $perl_install_base`
2814 perl_install_base=`eval echo $perl_install_base`
2815 AC_SUBST(perl_install_base)
2817 AC_ARG_WITH(python_prefix,[AC_HELP_STRING([--with-python_prefix],[python setup.py prefix [PREFIX]])],
2818                       [python_prefix=$withval],
2819                       [python_prefix=$prefix])
2820 python_prefix=`eval echo $python_prefix`
2821 python_prefix=`eval echo $python_prefix`
2822 AC_SUBST(python_prefix)
2824 AC_PATH_XTRA
2825 pcp_x11_incflags=$X_CFLAGS
2826 AC_SUBST(pcp_x11_incflags)
2827 pcp_x11_libflags=$X_LIBS
2828 AC_SUBST(pcp_x11_libflags)
2829 pcp_x11_extra=$X_EXTRA_LIBS
2830 AC_SUBST(pcp_x11_extra)
2831 pcp_x11_pre=$X_PRE_LIBS
2832 AC_SUBST(pcp_x11_pre)
2834 dnl man pages (source)
2835 have_manpages=false
2836 have_gzipped_manpages=false
2837 have_bzip2ed_manpages=false
2838 have_lzmaed_manpages=false
2839 have_xzed_manpages=false
2840 need_old_tbl_header=false
2841 man_header=
2842 pcp_man_dir=`eval echo $mandir`
2843 pcp_man_dir=`eval echo $pcp_man_dir`
2845 dnl guess compression in use
2846 for d in /usr/man /usr/share/man $pcp_man_dir
2848     for sd in man1 sman1
2849     do
2850         if test -f $d/$sd/man.1.gz
2851         then
2852             have_gzipped_manpages=true
2853             have_manpages=true
2854             man_header=`$ZIP -d < $d/$sd/man.1.gz | head -1`
2855             break
2856         elif test -f $d/$sd/man.1.bz2
2857         then
2858             have_bzip2ed_manpages=true
2859             have_manpages=true
2860             man_header=`$BZIP2 -d < $d/$sd/man.1.bz2 | head -1`
2861             break
2862         elif test -f $d/$sd/man.1.lzma
2863         then
2864             have_lzmaed_manpages=true
2865             have_manpages=true
2866             man_header=`$LZMA -d < $d/$sd/man.1.lzma | head -1`
2867             break
2868         elif test -f $d/$sd/man.1.xz
2869         then
2870             have_xzed_manpages=true
2871             have_manpages=true
2872             man_header=`$XZ -d < $d/$sd/man.1.xz | head -1`
2873             break
2874         elif test -f $d/$sd/man.1
2875         then
2876             man_header=`head -1 $d/$sd/man.1`
2877             have_manpages=true
2878             break
2879         fi
2880     done
2881 done
2882 if test x"$man_header" = "x'\\\" t" -o x"$man_header" = "x'\\\" te" ; then
2883     need_old_tbl_header=true
2885 AC_SUBST(pcp_man_dir)
2886 AC_SUBST(have_manpages)
2887 AC_SUBST(have_gzipped_manpages)
2888 AC_SUBST(have_bzip2ed_manpages)
2889 AC_SUBST(have_lzmaed_manpages)
2890 AC_SUBST(have_xzed_manpages)
2891 AC_SUBST(need_old_tbl_header)
2893 dnl public binaries
2894 pcp_bin_dir=`eval echo $bindir`
2895 pcp_bin_dir=`eval echo $pcp_bin_dir`
2896 AC_SUBST(pcp_bin_dir)
2898 pcp_sbin_dir=`eval echo $sbindir`
2899 pcp_sbin_dir=`eval echo $pcp_sbin_dir`
2900 AC_SUBST(pcp_sbin_dir)
2902 dnl include files
2903 pcp_inc_dir=`eval echo $includedir/pcp`
2904 pcp_inc_dir=`eval echo $pcp_inc_dir`
2905 AC_SUBST(pcp_inc_dir)
2907 dnl books - pdfs, html
2908 if test $target_os = linux; then
2909     pcp_books_dir=`eval echo $datarootdir/doc/pcp-doc`
2910 else
2911     pcp_books_dir=`eval echo $datarootdir/doc/pcp`
2913 pcp_books_dir=`eval echo $pcp_books_dir`
2914 pcp_html_dir=`eval echo $pcp_books_dir/html`
2915 AC_SUBST(pcp_books_dir)
2916 AC_SUBST(pcp_html_dir)
2918 dnl icon pixmap files
2919 if test $target_os = linux; then
2920     pcp_icons_dir=`eval echo $datarootdir/pcp-gui/pixmaps`
2921 else
2922     pcp_icons_dir=`eval echo $datarootdir/pcp/pixmaps`
2924 pcp_icons_dir=`eval echo $pcp_icons_dir`
2925 AC_SUBST(pcp_icons_dir)
2927 dnl desktop application entries
2928 pcp_desktop_dir=`eval echo $datarootdir/applications`
2929 pcp_desktop_dir=`eval echo $pcp_desktop_dir`
2930 AC_SUBST(pcp_desktop_dir)
2932 dnl rc/startup files
2933 AC_ARG_WITH(rcdir,[AC_HELP_STRING([--with-rcdir],[rc directory [SYSCONFDIR/rc.d]])],
2934                   [pcp_rc_dir=$withval], [
2935 if $enable_systemd
2936 then
2937     pcp_rc_dir="$pcp_share_dir/lib"
2938 else
2939     pcp_rc_dir="$pcp_etc_dir/init.d"
2940 fi])
2941 AC_SUBST(pcp_rc_dir)
2943 dnl rc sysconfig dir
2944 AC_ARG_WITH(sysconfigdir,[AC_HELP_STRING([--with-sysconfigdir],[sysconfig directory [SYSCONFDIR/sysconfig]])],
2945                   [pcp_sysconfig_dir=$withval],
2946                   [pcp_sysconfig_dir=$pcp_etc_dir/sysconfig])
2947 AC_SUBST(pcp_sysconfig_dir)
2949 dnl logs
2950 AC_ARG_WITH(logdir,[AC_HELP_STRING([--with-logdir],[log directory [LOCALSTATEDIR/log/pcp]])],
2951                    [pcp_log_dir=$withval],
2952                    [pcp_log_dir=$localstatedir/log/pcp])
2953 pcp_log_dir=`eval echo $pcp_log_dir`
2954 pcp_log_dir=`eval echo $pcp_log_dir`
2955 AC_SUBST(pcp_log_dir)
2957 AC_ARG_WITH(rundir,[AC_HELP_STRING([--with-rundir],[run directory [LOCALSTATEDIR/run/pcp]])],
2958                    [pcp_run_dir=$withval],
2959                    [pcp_run_dir=$localstatedir/run/pcp])
2960 pcp_run_dir=`eval echo $pcp_run_dir`
2961 pcp_run_dir=`eval echo $pcp_run_dir`
2962 AC_SUBST(pcp_run_dir)
2964 dnl world-writeable temporary files directory
2965 AC_ARG_WITH(tmpdir,[AC_HELP_STRING([--with-tmpdir],[tmp directory [LOCALSTATEDIR/tmp]])],
2966                    [pcp_tmpfile_dir=$withval],
2967                    [pcp_tmpfile_dir=$localstatedir/tmp])
2968 pcp_tmpfile_dir=`eval echo $pcp_tmpfile_dir`
2969 pcp_tmpfile_dir=`eval echo $pcp_tmpfile_dir`
2970 AC_SUBST(pcp_tmpfile_dir)
2972 dnl non-world-writeable status files directory
2973 pcp_tmp_dir=`eval echo $pcp_var_dir/tmp`
2974 AC_SUBST(pcp_tmp_dir)
2976 dnl doc directory
2977 AC_ARG_WITH(docdir,[AC_HELP_STRING([--with-docdir],[docs directory [DOCDIR/pcp-VERSION]])],
2978                    [pcp_doc_dir=$withval],
2979                    [PACKAGE=pcp-${PACKAGE_VERSION}; pcp_doc_dir=$docdir])
2980 pcp_doc_dir=`eval echo $pcp_doc_dir`
2981 pcp_doc_dir=`eval echo $pcp_doc_dir`
2982 AC_SUBST(pcp_doc_dir)
2984 dnl demos directory
2985 AC_ARG_WITH(demosdir,[AC_HELP_STRING([--with-demosdir],[run directory [DATADIR/pcp/demos]])],
2986                    [pcp_demos_dir=$withval],
2987                    [pcp_demos_dir=$pcp_share_dir/demos])
2988 AC_SUBST(pcp_demos_dir)
2990 if test -z "$XCONFIRM" 
2991 then
2992     AC_PATH_PROG(ac_xconfirm_prog, xconfirm, $pcp_bin_dir/pmconfirm)
2993 else
2994     ac_xconfirm_prog=$XCONFIRM
2996 AC_SUBST(ac_xconfirm_prog)
2998 dnl Check for FNDELAY defined in <fcntl.h>
2999 if test "$ac_cv_header_fcntl_h" = "yes"
3000 then
3001     AC_MSG_CHECKING([for FNDELAY in fcntl.h])
3002     AC_TRY_COMPILE([#include <fcntl.h>],
3003         [ int i = FNDELAY; ],
3004         AC_DEFINE(HAVE_FNDELAY, [1], [FNDELAY macro])
3005         AC_MSG_RESULT(yes), AC_MSG_RESULT(no))
3008 dnl check for zpool_vdev_name API style from <libzfs.h>
3009 if test "$ac_cv_header_libzfs_h" = "yes"
3010 then
3011     AC_MSG_CHECKING([for 5-argument style zpool_vdev_name])
3012     AC_TRY_COMPILE([#include <libzfs.h>],
3013         [ libzfs_handle_t *zh;
3014           zpool_handle_t *zp;
3015           nvlist_t *np;
3016           (void) zpool_vdev_name(zh, zp, np, B_FALSE, B_FALSE);
3017         ],
3018         AC_DEFINE(HAVE_ZPOOL_VDEV_NAME_5ARG, [1], [5-arg zpool_vdev_name])
3019         AC_MSG_RESULT(yes), AC_MSG_RESULT(no))
3021     AC_MSG_CHECKING([for 4-argument style zpool_vdev_name])
3022     AC_TRY_COMPILE([#include <libzfs.h>],
3023         [ libzfs_handle_t *zh;
3024           zpool_handle_t *zp;
3025           nvlist_t *np;
3026           (void) zpool_vdev_name(zh, zp, np, B_FALSE);
3027         ],
3028         AC_DEFINE(HAVE_ZPOOL_VDEV_NAME_4ARG, [1], [4-arg zpool_vdev_name])
3029         AC_MSG_RESULT(yes), AC_MSG_RESULT(no))
3032 dnl Check for Network Security Services (NSS) and
3033 dnl Simple Authentication and Security Layer (SASL)
3034 if test "$do_secure" = "check" -o "$do_secure" = "yes"
3035 then
3036     enable_secure=true
3038     saved_CFLAGS="$CFLAGS"
3039     saved_CPPFLAGS="$CPPFLAGS"
3040     NSS_INC_DIRS="-I/usr/include/nss -I/usr/include/nss3"
3041     NSPR_INC_DIRS="-I/usr/include/nspr -I/usr/include/nspr4"
3042     CFLAGS="$CFLAGS $NSS_INC_DIRS $NSPR_INC_DIRS"
3043     CPPFLAGS="$CPPFLAGS $NSS_INC_DIRS $NSPR_INC_DIRS"
3045     AC_CHECK_HEADERS([nss/nss.h], [NSSCFLAGS=-I/usr/include/nss], [
3046         AC_CHECK_HEADERS([nss3/nss.h], [NSSCFLAGS=-I/usr/include/nss3], [
3047             enable_secure=false
3048             if test "$do_secure" = "yes"
3049             then
3050                 AC_MSG_ERROR([cannot enable secure sockets mode - no NSS header])
3051             fi
3052         ])
3053     ])
3054     AC_SUBST(NSSCFLAGS)
3056     AC_CHECK_HEADERS([nspr/nspr.h], [NSPRCFLAGS=-I/usr/include/nspr], [
3057         AC_CHECK_HEADERS([nspr4/nspr.h], [NSPRCFLAGS=-I/usr/include/nspr4], [
3058             enable_secure=false
3059             if test "$do_secure" = "yes"
3060             then
3061                 AC_MSG_ERROR([cannot enable secure sockets mode - no NSPR header])
3062             fi
3063         ])
3064     ])
3065     AC_SUBST(NSPRCFLAGS)
3067     AC_CHECK_HEADERS([sasl/sasl.h], [SASLCFLAGS=-I/usr/include/sasl], [
3068         enable_secure=false
3069         if test "$do_secure" = "yes"
3070         then
3071             AC_MSG_ERROR([cannot enable secure sockets mode - no SASL header])
3072         fi
3073     ])
3074     AC_SUBST(SASLCFLAGS)
3076     AC_CHECK_LIB(sasl2, sasl_server_init, [lib_for_sasl="-lsasl2"], [
3077         enable_secure=false
3078         if test "$do_secure" = "yes"
3079         then
3080             AC_MSG_ERROR([cannot enable secure sockets mode - no SASL library])
3081         fi
3082     ])
3083     AC_SUBST(lib_for_sasl)
3085     AC_CHECK_LIB(ssl, SSL_ImportFD, [lib_for_ssl="-lssl"], [
3086         AC_CHECK_LIB(ssl3, SSL_ImportFD, [lib_for_ssl="-lssl3"], [
3087             enable_secure=false
3088             if test "$do_secure" = "yes"
3089             then
3090                 AC_MSG_ERROR([cannot enable secure sockets mode - no SSL library])
3091             fi
3092         ])
3093     ])
3094     AC_SUBST(lib_for_ssl)
3096     AC_CHECK_LIB(nss, NSS_Init, [lib_for_nss="-lnss"], [
3097         AC_CHECK_LIB(nss3, NSS_Init, [lib_for_nss="-lnss3"], [
3098             enable_secure=false
3099             if test "$do_secure" = "yes"
3100             then
3101                 AC_MSG_ERROR([cannot enable secure sockets mode - no NSS library])
3102             fi
3103         ])
3104     ])
3105     AC_SUBST(lib_for_nss)
3107     AC_CHECK_LIB(nspr, PR_Init, [lib_for_nspr="-lnspr"], [
3108         AC_CHECK_LIB(nspr4, PR_Init, [lib_for_nspr="-lnspr4"], [
3109             enable_secure=false
3110             if test "$do_secure" = "yes"
3111             then
3112                 AC_MSG_ERROR([cannot enable secure sockets mode - no NSPR library])
3113             fi
3114         ])
3115     ])
3116     AC_SUBST(lib_for_nspr)
3118     if test "$enable_secure" = "true"
3119     then
3120         AC_DEFINE(HAVE_SECURE_SOCKETS, [1], [Encrypted sockets])
3121     fi
3122     AC_SUBST(enable_secure)
3124     CPPFLAGS="$saved_CPPFLAGS"
3125     CFLAGS="$saved_CFLAGS"
3128 dnl check for -latomic, needed for some -march=i386 builds with i686 c++ distro headers
3129 AC_CHECK_LIB(atomic, __atomic_fetch_add_4, [lib_for_atomic="-latomic"])
3130 AC_SUBST(lib_for_atomic)
3132 dnl check for array sessions
3133 if test -f /usr/include/sn/arsess.h
3134 then
3135     pcp_mpi_dirs=libpcp_mpi\ libpcp_mpiread
3136 else
3137     pcp_mpi_dirs=
3139 AC_SUBST(pcp_mpi_dirs)
3141 dnl check for Unix Domain socket family structure
3142 AC_MSG_CHECKING([for struct sockaddr_un in sys/un.h])
3143 AC_TRY_COMPILE([
3144     #include <sys/types.h>
3145     #ifdef HAVE_SYS_SOCKET_H
3146     #include <sys/socket.h>
3147     #endif
3148     #ifdef HAVE_SYS_UN_H
3149     #include <sys/un.h>
3150     #endif
3151 ], [ struct sockaddr_un sa; sa.sun_family = AF_UNIX; ],
3152 AC_DEFINE(HAVE_STRUCT_SOCKADDR_UN, [1], [sockaddr_un type]) AC_MSG_RESULT(yes), AC_MSG_RESULT(no))
3154 dnl check for Linux Unix Domain socket credential structure
3155 AC_MSG_CHECKING([for struct ucred in sys/socket.h])
3156 AC_TRY_COMPILE([
3157     #include <sys/types.h>
3158     #ifdef HAVE_SYS_SOCKET_H
3159     #include <sys/socket.h>
3160     #endif
3161     #ifdef HAVE_SYS_UN_H
3162     #include <sys/un.h>
3163     #endif
3164 ], [ struct ucred ucred; ucred.uid = 0; ],
3165 AC_DEFINE(HAVE_STRUCT_UCRED, [1], [ucred type]) AC_MSG_RESULT(yes), AC_MSG_RESULT(no))
3167 dnl check for struct timespec in <time.h>
3168 AC_MSG_CHECKING([for struct timespec in time.h])
3169 AC_TRY_COMPILE([
3170     #include <time.h>
3171 ], [ struct timespec foo; ],
3172 AC_DEFINE(HAVE_STRUCT_TIMESPEC, [1], [timespec type]) AC_MSG_RESULT(yes), AC_MSG_RESULT(no))
3174 dnl check if we have IRIX style altzone 
3175 AC_MSG_CHECKING([for altzone in time.h])
3176 AC_TRY_COMPILE([
3177     #include <time.h>
3178 ], [ time_t az = altzone; ],
3179 AC_DEFINE(HAVE_ALTZONE, [1], [altzone global]) AC_MSG_RESULT(yes), AC_MSG_RESULT(no))
3181 dnl If there is no altzone, check if strftime can handle %z
3182 AC_MSG_CHECKING([if strftime knows about %z])
3183 AC_TRY_RUN(
3185 #include <time.h>
3186 int main () {
3187     char b[32]="";
3188     time_t t = time(NULL);
3189     struct tm * t1 = localtime (&t);
3190     if (strftime (b, 32, "%z", t1) < 3)
3191        return (1);
3192     if (strcmp(b, "%z") == 0)
3193        return(1);
3194     return (0);
3196 ], AC_DEFINE(HAVE_STRFTIME_z, [1], [strftime with %z]) AC_MSG_RESULT(yes), AC_MSG_RESULT(no), AC_MSG_RESULT(no))
3198 dnl does strerror_r return char * a la GNU
3199 dnl (as opposed to the int return for XSI-compliant variants)
3200 AC_MSG_CHECKING([if strerror_r returns char *])
3201 AC_TRY_COMPILE(
3202     [#include <string.h>], [strerror_r(0, NULL, 0)[0];],
3203     AC_DEFINE(HAVE_STRERROR_R_PTR, [1], [strerror_r return]) AC_MSG_RESULT(yes), AC_MSG_RESULT(no))
3205 dnl first check for readline on its own then with curses
3206 savedLIBS=$LIBS
3207 LIBS=
3208 lib_for_curses=
3209 lib_for_readline=
3210 AC_CHECK_FUNC(readline,,
3211     [
3212         AC_CHECK_LIB(readline, readline,,
3213             [
3214                 dnl AC seems to cache lib/func results
3215                 dnl so use another readline func here
3216                 AC_CHECK_LIB(readline, add_history,,,[-lcurses])
3217             ])
3218     ])
3219 if test $ac_cv_func_readline = yes
3220 then
3221     AC_DEFINE(HAVE_READLINE, [1], [readline API])
3222 elif test $ac_cv_lib_readline_readline = yes
3223 then
3224     AC_DEFINE(HAVE_READLINE, [1], [readline API])
3225     lib_for_readline=-lreadline
3226 elif test $ac_cv_lib_readline_add_history = yes
3227 then
3228     AC_DEFINE(HAVE_READLINE, [1], [readline API])
3229     lib_for_curses=-lcurses
3230     lib_for_readline=-lreadline
3232 AC_SUBST(lib_for_readline)
3233 AC_SUBST(lib_for_curses)
3234 LIBS=$savedLIBS
3236 dnl Look for zlib
3237 PKG_CHECK_MODULES([zlib], [zlib >= 1.0.0], [have_zlib=true], [have_zlib=false])
3238 AC_SUBST(HAVE_ZLIB, [$have_zlib])
3240 dnl Check if we have AI_ADDRCONFIG
3241 AC_MSG_CHECKING([for AI_ADDRCONFIG])
3242 AC_TRY_COMPILE(
3243 [  
3244     #include <netdb.h>
3245     int test = AI_ADDRCONFIG;
3248 ], AC_DEFINE(HAVE_AI_ADDRCONFIG, [1], [AI_ADDRCONFIG macro]) AC_MSG_RESULT(yes), AC_MSG_RESULT(no))
3250 dnl Find external source tarballs for packaging
3252 have_parfait=false
3253 if test -f ./build/tar/parfait.tar.gz
3254 then
3255     AC_MSG_NOTICE([adding Parfait package to the build])
3256     have_parfait=true
3258 AC_SUBST(have_parfait)
3260 have_vector=false
3261 if test -f ./build/tar/vector.tar.gz
3262 then
3263     AC_MSG_NOTICE([adding Vector webapp to the build])
3264     have_vector=true
3266 AC_SUBST(have_vector)
3268 have_webjs=false
3269 if test -f ./build/tar/webjs.tar.gz
3270 then
3271     AC_MSG_NOTICE([adding webjs webapps to the build])
3272     have_webjs=true
3274 AC_SUBST(have_webjs)
3276 dnl Capture special options passed to configure
3277 AC_SUBST(PACKAGE_CONFIGURE)
3280 dnl output files
3283 AC_OUTPUT(
3284 dnl   Build definitions for use in Makefiles
3285     src/include/builddefs
3286 dnl   PCP paths and other defs
3287     src/include/pcp.conf
3288 dnl   Linux Software Map entry
3289     pcp.lsm
3290 dnl   Preamble for deb install scripts
3291     debian/pcp.preinst.head
3292     debian/pcp.postinst.head
3293 dnl   Preamble for tar install scripts
3294     build/tar/preinstall.head
3295     build/tar/postinstall.head
3296 dnl   Build definitions for use in packaging
3297     build/GNUlocaldefs
3298     build/mac/uninstall-pcp
3301 dnl verbose diagnostics
3303 dnl echo config.status: settings dump begin
3304 dnl grep '^S.".*=' config.status
3305 dnl echo config.status: settings dump end