pmdalibvirt: add to the build, packaging, qa tweaks
[pcp.git] / configure.ac
blob3e8cd54017e97bfec83232112698e5ffa0f3e319
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@oss.sgi.com 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         dnl qmake-qt5 [/usr/lib64/qt5/bin:/usr/lib/qt5/bin]
1056         AC_PATH_PROGS(QMAKE, [qmake-qt4 qmake],, [$QTDIR/bin:/usr/bin:/usr/lib64/qt4/bin:/usr/lib/qt4/bin:/usr/local/bin])
1057         test "x$cc_is_gcc" = xyes -a $target_os = solaris && QMAKE="$QMAKE -spec solaris-g++"
1058     fi
1059     qmake=$QMAKE
1060     if test -z "$QMAKE"
1061     then
1062         enable_qt=false
1063     else
1064         AC_MSG_CHECKING([Qt version])
1065         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 }'`
1066         AC_MSG_RESULT([$QT_MAJOR.$QT_MINOR.$QT_POINT])
1067         if test "$QT_MAJOR" -lt 4; then
1068             echo WARNING: Qt version 4.4 or later does not seem to be installed.
1069             echo Cannot proceed with the Qt $QT_MAJOR installation found.
1070             enable_qt=false
1071         fi
1072         if test "$QT_MAJOR" -eq 4 -a "$QT_MINOR" -lt 4 ; then
1073             echo WARNING: Qt version 4.$QT_MINOR is too old.
1074             echo Qt version 4.4 or later is required for Qt builds.
1075             enable_qt=false
1076         fi
1077     fi
1079     if test "$do_qt" != "check" -a "$enable_qt" != "true"
1080     then
1081         AC_MSG_ERROR([cannot enable Qt - no supported Qt installation found])
1082     elif test "$enable_qt" = "true" -a "x$cxx" = "x"
1083     then
1084         enable_qt=false
1085         test "$do_qt" != "check" && \
1086         AC_MSG_ERROR([C++ compiler unavailable, cannot build Qt components])
1087     elif test "$do_qt" = "debug"
1088     then
1089         dnl Debug/release style build? (non-debug by default)
1090         qt_release=debug
1091         enable_qt=true
1092     fi
1094 AC_SUBST(qt_release)
1095 AC_SUBST(enable_qt)
1096 AC_SUBST(qmake)
1098 dnl check if user wants their own make program
1099 dnl note: all makefiles in this package use the gmake syntax
1100 if test -z "$MAKE"
1101 then
1102     AC_PATH_PROG(MAKE, gmake)
1103     if test -z "$MAKE" 
1104     then
1105         # look elsewhere ...
1106         AC_MSG_CHECKING([for GNU make elsewhere])
1107         for f in /usr/local/bin/gmake /usr/freeware/bin/gmake /usr/local/bin/make /opt/sfw/bin/gmake nowhere
1108         do
1109             if test -x $f
1110             then
1111                 MAKE=$f
1112                 break
1113             fi
1114         done
1115         if test $f = nowhere
1116         then
1117             # Check if /usr/bin/make is any good
1118             mver=`/usr/bin/make --version 2>/dev/null | sed -n -e1p | cut -c1-8`
1119             if test "$mver" != "GNU Make"
1120             then
1121                 echo
1122                 echo "FATAL ERROR: could not find GNU make anywhere"
1123                 echo "You need to set \$MAKE as the full path to GNU make "
1124                 echo "in the environment."
1125                 rm -rf conftest conftest.*
1126                 exit 1
1127             else
1128                 MAKE=/usr/bin/make
1129             fi
1130         fi
1131         AC_MSG_RESULT($MAKE)
1132     fi 
1134 make=$MAKE
1135 AC_SUBST(make)
1137 dnl check if users wants their own CPP
1138 if test -z "$CPP"; then
1139     AC_PROG_CPP
1141 cpp=$CPP
1142 AC_SUBST(cpp)
1144 dnl check if users wants their own linker
1145 if test -z "$LD"; then
1146     AC_PATH_PROG(LD, ld, /usr/bin/ld)
1148 ld=$LD
1149 AC_SUBST(ld)
1151 dnl Provide ways to override owner and group for installed files
1152 if test -z "$PCP_USER_INSTALL" ; then
1153     pcp_user_install=root
1154 else
1155     pcp_user_install="$PCP_USER_INSTALL"
1157 AC_SUBST(pcp_user_install)
1158 if test -z "$PCP_GROUP_INSTALL" ; then
1159     case "$target_os"
1160     in
1161         darwin|freebsd|netbsd|openbsd)
1162             pcp_group_install=wheel
1163             ;;
1164         *)
1165             pcp_group_install=root
1166             ;;
1167     esac
1168 else
1169     pcp_group_install="$PCP_GROUP_INSTALL"
1171 AC_SUBST(pcp_group_install)
1173 dnl check if the tar program is available
1174 if test -z "$TAR"; then
1175     AC_PATH_PROGS(TAR, gtar tar, tar)
1177 if test $target_os = darwin -a -x /usr/bin/gnutar
1178 then
1179     TAR=/usr/bin/gnutar
1181 tar=$TAR
1182 AC_SUBST(tar)
1184 dnl check if the gzip program is available
1185 dnl (needed to gzip man pages on some platforms)
1186 if test -z "$ZIP"; then
1187     AC_PATH_PROG(ZIP, gzip, /bin/gzip)
1189 test ! -x "$ZIP" && ZIP=/usr/local/bin/gzip
1190 test ! -x "$ZIP" && ZIP=/usr/freeware/bin/gzip
1191 test ! -x "$ZIP" && ZIP=/usr/bin/gzip
1192 gzip=$ZIP
1193 test -z "$gzip" && gzip=no-gzip
1194 AC_SUBST(gzip)
1196 dnl check if the bzip2 program is available
1197 dnl (needed to bzip2 man pages on some platforms)
1198 if test -z "$BZIP2"; then
1199     AC_PATH_PROG(BZIP2, bzip2, /bin/bzip2)
1201 test ! -x "$BZIP2" && BZIP2=/usr/bin/bzip2
1202 test ! -x "$BZIP2" && BZIP2=/usr/local/bin/bzip2
1203 test ! -x "$BZIP2" && BZIP2=/usr/freeware/bin/bzip2
1204 bzip2=$BZIP2
1205 test -z "$bzip2" && bzip2=no-bzip2
1206 AC_SUBST(bzip2)
1208 dnl check if the lzma program is available
1209 dnl (needed to lzma man pages on some platforms)
1210 if test -z "$LZMA"; then
1211     AC_PATH_PROG(LZMA, lzma, /bin/lzma)
1213 test ! -x "$LZMA" && LZMA=/usr/bin/lzma
1214 test ! -x "$LZMA" && LZMA=/usr/local/bin/lzma
1215 test ! -x "$LZMA" && LZMA=/usr/freeware/bin/lzma
1216 lzma=$LZMA
1217 test -z "$lzma" && lzma=no-lzma
1218 AC_SUBST(lzma)
1220 dnl check if the xz program is available
1221 dnl (needed to xz man pages on some platforms)
1222 if test -z "$XZ"; then
1223     AC_PATH_PROG(XZ, xz, /bin/xz)
1225 test ! -x "$XZ" && XZ=/usr/bin/xz
1226 test ! -x "$XZ" && XZ=/usr/local/bin/xz
1227 test ! -x "$XZ" && XZ=/usr/freeware/bin/xz
1228 xz=$XZ
1229 test -z "$xz" && xz=no-xz
1230 AC_SUBST(xz)
1232 dnl Check for mac PackageMaker
1233 AC_MSG_CHECKING([for PackageMaker])
1234 if test -z "$PACKAGE_MAKER"
1235 then
1236     if test $target_os = darwin
1237     then
1238         if test -x /Applications/PackageMaker.app/Contents/MacOS/PackageMaker
1239         then # local XCode extras install
1240             package_maker=/Applications/PackageMaker.app/Contents/MacOS/PackageMaker
1241             AC_MSG_RESULT([ yes (local install)])
1242         elif test -x /Developer/Applications/PackageMaker.app/Contents/MacOS/PackageMaker
1243         then # Darwin 6.x
1244             package_maker=/Developer/Applications/PackageMaker.app/Contents/MacOS/PackageMaker
1245             AC_MSG_RESULT([ yes (darwin 6.x)])
1246         elif test -x /Developer/Applications/Utilities/PackageMaker.app/Contents/MacOS/PackageMaker
1247         then # Darwin 7.x
1248             AC_MSG_RESULT([ yes (darwin 7.x)])
1249             package_maker=/Developer/Applications/Utilities/PackageMaker.app/Contents/MacOS/PackageMaker
1250         else
1251             AC_MSG_RESULT([ not found!])
1252             AC_MSG_WARN([PackageMaker not found, mac packages will not be made])
1253         fi
1254     else
1255         AC_MSG_RESULT([ no])    
1256     fi
1257 else
1258     package_maker="$PACKAGE_MAKER"
1260 AC_SUBST(package_maker)
1262 dnl check if the hdiutil program is available
1263 if test -z "$HDIUTIL"; then
1264     AC_PATH_PROG(HDIUTIL, hdiutil)
1266 hdiutil=$HDIUTIL
1267 AC_SUBST(hdiutil)
1269 dnl check if the mkinstallp program is available (AIX)
1270 if test -z "$MKINSTALLP"; then
1271     AC_PATH_PROG(MKINSTALLP, mkinstallp)
1273 mkinstallp=$MKINSTALLP
1274 AC_SUBST(mkinstallp)
1276 dnl check for the Solaris pmgmk package maker
1277 if test -z "$PKGMK"; then
1278     AC_PATH_PROG(PKGMK, pkgmk)
1280 pkgmk=$PKGMK
1281 AC_SUBST(pkgmk)
1283 dnl check if the dlltool program is available
1284 if test -z "$DLLTOOL"; then
1285     AC_PATH_PROG(DLLTOOL, dlltool)
1287 dlltool=$DLLTOOL
1288 AC_SUBST(dlltool)
1290 dnl check if the rpmbuild program is available
1291 if test -z "$RPMBUILD"; then
1292     AC_PATH_PROG(RPMBUILD, rpmbuild)
1294 test $target_distro = slackware && RPMBUILD=''
1295 rpmbuild=$RPMBUILD
1296 AC_SUBST(rpmbuild)
1298 dnl check if the rpm program is available
1299 if test -z "$RPM"; then
1300     AC_PATH_PROG(RPM, rpm)
1302 test $target_distro = slackware && RPM=''
1303 rpm=$RPM
1304 AC_SUBST(rpm)
1306 dnl if rpmbuild exists, use it, otherwise use rpm
1307 if test -n "$RPMBUILD" -a -x "$RPMBUILD"
1308 then
1309     rpmprog=$RPMBUILD
1310 else
1311     rpmprog=$RPM
1313 AC_SUBST(rpmprog)
1315 dnl check if the pod2man program is available (perl man page builder)
1316 if test -z "$POD2MAN"; then
1317     AC_PATH_PROG(POD2MAN, pod2man)
1319 pod2man=$POD2MAN
1320 AC_SUBST(pod2man)
1322 dnl extra check for the Perl MakeMaker package
1323 AC_MSG_CHECKING([if ExtUtils::MakeMaker is installed])
1324 perl -e "use ExtUtils::MakeMaker" 2>/dev/null
1325 if test $? -eq 0
1326 then
1327     AC_MSG_RESULT([ yes])
1328 else
1329     AC_MSG_RESULT([ no])
1330     echo
1331     echo "FATAL ERROR: Perl ExtUtils::MakeMaker module missing."
1332     echo "You can either install this from your distribution, or"
1333     echo "download from CPAN (Comprehensive Perl Archive Network)."
1334     rm -rf conftest conftest.*
1335     exit 1
1338 AC_PATH_PROG(TRUEPROG, true)
1340 dnl check if the makedepend program is available
1341 if test -z "$MAKEDEPEND"; then
1342     AC_PATH_PROG(MAKEDEPEND, makedepend, $TRUEPROG)
1344 makedepend=$MAKEDEPEND
1345 AC_SUBST(makedepend)
1347 dnl check if the md5sum program is available
1348 if test -z "$MD5SUM"; then
1349    AC_PATH_PROG(MD5SUM, md5sum, $TRUEPROG)
1351 md5sum=$MD5SUM
1352 AC_SUBST(md5sum)
1354 dnl check if the Debian dpkg program is available
1355 if test -z "$DPKG"; then
1356    AC_PATH_PROG(DPKG, dpkg)
1358 dpkg=$DKPG
1359 AC_SUBST(dpkg)
1361 dnl check for the Slackware makepkg packaging tool
1362 if test -z "$MAKEPKG"; then
1363    AC_PATH_PROG(MAKEPKG, makepkg)
1365 makepkg=$MAKEPKG
1366 AC_SUBST(makepkg)
1368 dnl check if a toolchain is available for the books
1369 test -z "$PUBLICAN" && AC_PATH_PROG(PUBLICAN, publican)
1370 publican=$PUBLICAN
1371 AC_SUBST(publican)
1372 test -z "$DBLATEX" && AC_PATH_PROG(DBLATEX, dblatex)
1373 dblatex=$DBLATEX
1374 AC_SUBST(dblatex)
1375 test -z "$XMLTO" && AC_PATH_PROG(XMLTO, xmlto)
1376 xmlto=$XMLTO
1377 AC_SUBST(xmlto)
1379 book_toolchain=""
1380 if test "$do_books" = "check" -o "$do_books" = "yes"
1381 then
1382     if test "$BOOK_TOOLCHAIN" != ""
1383     then
1384         book_toolchain=$BOOK_TOOLCHAIN
1385     elif test "$DBLATEX" != ""
1386     then
1387         book_toolchain=dblatex
1388     elif test "$PUBLICAN" != ""
1389     then
1390         book_toolchain=publican
1391     elif test "$XMLTO" != ""
1392     then
1393         book_toolchain=xmlto
1394     elif test "$do_books" = "yes"
1395     then
1396         AC_MSG_ERROR([cannot enable books build - no toolchain found])
1397     fi
1399 AC_SUBST(book_toolchain)
1401 book_brand="common"
1402 if test "$do_books_brand" != ""
1403 then
1404     book_brand=$do_books_brand
1406 AC_SUBST(book_brand)
1408 dnl check if symbolic links are supported
1409 AC_PROG_LN_S
1410 if test $target_os = mingw; then
1411     as_ln_s=/bin/true
1414 dnl if /proc is not mounted, try and mount it
1415 dnl before trying to run the ps style test below
1416 if test -d /proc
1417 then
1418     test -f /proc/stat || mount /proc >/dev/null 2>&1
1421 dnl set platform specific ps
1422 if test -n "$PROCPS"
1423 then
1424     pcp_ps_prog="$PROCPS"
1425 else
1426     pcp_ps_prog=ps
1428 AC_SUBST(pcp_ps_prog)
1430 dnl set platform specific event logger
1431 if test $target_os = mingw
1432 then
1433     pcp_syslog_prog=pcp-eventlog
1434 else
1435     pcp_syslog_prog=logger
1437 AC_SUBST(pcp_syslog_prog)
1439 grep=grep
1440 if test $target_os = solaris
1441 then
1442     test -f /usr/xpg4/bin/grep && grep=/usr/xpg4/bin/grep
1444 AC_SUBST(grep)
1446 dnl checks for /proc pseudo file system
1447 AC_MSG_CHECKING([for /proc ])
1448 if test "$cross_compiling" = "yes"; then
1449     ans=$have_procfs
1450     echo "cross-compile -> \"$ans\"" >&5
1451 elif test -d /proc
1452 then
1453     have_procfs=true
1454 else
1455     have_procfs=false
1457 if $have_procfs
1458 then
1459     AC_MSG_RESULT(yes)
1460     AC_DEFINE(HAVE_PROCFS, [1], [Support for /proc pseudo-filesystem])
1461 else
1462     AC_MSG_RESULT(no)
1465 dnl Checks for C header files.
1466 AC_HEADER_DIRENT
1467 AC_HEADER_STDC
1468 AC_HEADER_SYS_WAIT
1469 AC_CHECK_HEADERS(fcntl.h limits.h malloc.h strings.h syslog.h)
1470 AC_CHECK_HEADERS(stddef.h sched.h dlfcn.h dl.h)
1471 AC_CHECK_HEADERS(sys/times.h sys/resource.h sys/prctl.h)
1472 AC_CHECK_HEADERS(sys/sysinfo.h sys/systeminfo.h)
1473 AC_CHECK_HEADERS(endian.h standards.h sys/byteorder.h)
1474 AC_CHECK_HEADERS(libgen.h sys/mman.h sys/un.h)
1475 AC_CHECK_HEADERS(values.h stdint.h ieeefp.h math.h)
1476 AC_CHECK_HEADERS(pwd.h grp.h regex.h sys/wait.h)
1477 AC_CHECK_HEADERS(termio.h termios.h sys/termios.h)
1478 AC_CHECK_HEADERS(sys/ioctl.h sys/select.h sys/socket.h)
1479 AC_CHECK_HEADERS(netdb.h)
1480 if test $target_os = darwin -o $target_os = openbsd
1481 then
1482     AC_CHECK_HEADERS(net/if.h, [], [], [#include <sys/types.h>
1483 #include <sys/socket.h>])
1484 else
1485     AC_CHECK_HEADERS(net/if.h)
1487 AC_CHECK_HEADERS(netinet/in.h netinet/tcp.h arpa/inet.h)
1488 AC_CHECK_HEADERS(windows.h winsock2.h ws2tcpip.h)
1489 AC_CHECK_HEADERS(execinfo.h bits/wordsize.h)
1490 AC_CHECK_HEADERS(iptypes.h, [], [], [#include <windows.h>])
1491 AC_CHECK_HEADERS(iphlpapi.h, [], [], [#include <winsock2.h>])
1492 AC_CHECK_HEADERS(fts.h libzfs.h)
1493 AC_CHECK_HEADERS(sys/statvfs.h sys/statfs.h sys/mount.h)
1495 dnl Check if we have <sys/endian.h> ... standard way
1496 AC_MSG_CHECKING([for sys/endian.h ])
1497 AC_TRY_COMPILE(
1498 [  
1499     #include <sys/endian.h> 
1502 ], AC_DEFINE(HAVE_SYS_ENDIAN_H, [1], [sys/endian.h]) AC_MSG_RESULT(yes), AC_MSG_RESULT(no))
1504 dnl Check if we have <machine/endian.h> ... MacOSX way
1505 AC_MSG_CHECKING([for machine/endian.h ])
1506 AC_TRY_COMPILE(
1507 [  
1508     #include <machine/endian.h> 
1511 ], AC_DEFINE(HAVE_MACHINE_ENDIAN_H, [1], [machine/endian.h]) AC_MSG_RESULT(yes), AC_MSG_RESULT(no))
1513 dnl Check if we have <sys/endian.h> ... IRIX strangeness
1514 AC_MSG_CHECKING([for sys/endian.h (IRIX variant) ])
1515 AC_TRY_COMPILE(
1516 [  
1517     #include <standards.h>
1518     #include <sys/endian.h> 
1521 ], AC_DEFINE(HAVE_SYS_ENDIAN_H, [1], [IRIX sys/endian.h]) AC_MSG_RESULT(yes), AC_MSG_RESULT(no))
1523 dnl Checks for typedefs, structures, and compiler characteristics.
1524 AC_C_CONST
1525 AC_TYPE_OFF_T
1526 AC_TYPE_PID_T
1527 AC_TYPE_SIZE_T
1528 AC_HEADER_TIME
1529 AC_STRUCT_TM
1530 AC_C_INLINE
1532 dnl check if regex functions come from libregex (mingw)
1533 AC_CHECK_LIB(regex, regcomp)
1534 lib_for_regex=""
1535 if test $ac_cv_lib_regex_regcomp = yes
1536 then
1537     lib_for_regex="-lregex"
1539 AC_SUBST(lib_for_regex)
1541 PKG_CHECK_MODULES([ncurses], [ncurses], [have_ncurses=true], [have_ncurses=false])
1542 AC_SUBST(HAVE_NCURSES, [$have_ncurses])
1544 PKG_CHECK_MODULES([SYSTEMD], [libsystemd],
1545                   [pmda_systemd=true], [pmda_systemd=false])
1546 AC_MSG_CHECKING([if the systemd PMDA should be included])
1547 AC_SUBST(PMDA_SYSTEMD, $pmda_systemd)
1548 if $pmda_systemd; then AC_MSG_RESULT(yes); else AC_MSG_RESULT(no); fi
1550 pmda_infiniband=false
1551 AS_IF([test "x$do_infiniband" != "xno"], [
1552     AC_CHECK_HEADERS([infiniband/umad.h], [
1553         AC_CHECK_HEADERS([infiniband/mad.h], [pmda_infiniband=true], [])
1554     ], [])
1555     savedLIBS=$LIBS
1556     IB_LIBS=""
1557     AC_CHECK_LIB(ibmad, madrpc_init)
1558     AC_CHECK_LIB(ibumad, umad_init)
1559     if test $ac_cv_lib_ibmad_madrpc_init = yes -a $ac_cv_lib_ibumad_umad_init = yes
1560     then
1561         IB_LIBS="-libmad -libumad"
1562         LIBS="$IB_LIBS"
1563         AC_MSG_CHECKING([for port_performance_query_via])
1564         AC_TRY_LINK_FUNC(port_performance_query_via,
1565                 AC_DEFINE(HAVE_PORT_PERFORMANCE_QUERY_VIA, [1], [port_performance_query_via API])
1566                 have_port_performance_query_via=true
1567                 AC_MSG_RESULT(yes),
1568                 have_port_performance_query_via=false
1569                 AC_MSG_RESULT(no))
1570         AC_MSG_CHECKING([for pma_query_via])
1571         AC_TRY_LINK_FUNC(pma_query_via,
1572                 AC_DEFINE(HAVE_PMA_QUERY_VIA, [1], [pma_query_via API])
1573                 have_pma_query_via=true
1574                 AC_MSG_RESULT(yes),
1575                 have_pma_query_via=false
1576                 AC_MSG_RESULT(no))
1577         LIBS=$savedLIBS
1578         if test $have_pma_query_via -o $have_port_performance_query_via
1579         then
1580             :
1581         else
1582             pmda_infiniband=false
1583         fi
1584     else
1585         pmda_infiniband=false
1586     fi
1587     LIBS=$savedLIBS
1588     AC_SUBST(IB_LIBS)
1590 AC_MSG_CHECKING([if the infiniband PMDA should be included])
1591 AC_SUBST(PMDA_INFINIBAND, $pmda_infiniband)
1592 if $pmda_infiniband; then AC_MSG_RESULT(yes); else AC_MSG_RESULT(no); fi
1594 pmda_papi=false
1595 AS_IF([test "x$do_papi" != "xno"], [
1596     enable_papi=true
1598     saved_LDFLAGS="$LDFLAGS"
1599     saved_CFLAGS="$CFLAGS"
1600     savedLIBS=$LIBS
1602     dnl potentially from the environment, else empty
1603     CFLAGS="$papi_CFLAGS"
1604     LDFLAGS="$papi_LIBS"
1606     case "$do_papi" in
1607         yes|no|check)
1608             ;;
1609         */*)
1610             PAPI_ROOTDIR=$do_papi;
1611             CFLAGS="-I$PAPI_ROOTDIR/include"
1612             LDFLAGS="-L$PAPI_ROOTDIR/lib"
1613             ;;
1614          *)
1615             PKG_CHECK_MODULES(papi,[$do_papi],[
1616                   CFLAGS="$papi_CFLAGS"
1617                   LDFLAGS="$papi_LIBS"])
1618             ;;
1619     esac
1621     # $papi_LIBS may include -lpapi harmlessly redudantly with AC_CHECK_LIB
1622     AC_CHECK_LIB([papi], [PAPI_library_init],
1623                  [papi_libs="$LDFLAGS -lpapi"],
1624                  [enable_papi=false])
1625     AC_CHECK_HEADERS([papi.h], [papi_cflags="$CFLAGS"], [enable_papi=false])
1626     if test "$do_papi" != "check" -a "$enable_papi" != "true"
1627     then
1628         AC_MSG_ERROR([PAPI is not installed, cannot enable the PAPI PMDA])
1629     else
1630         pmda_papi=$enable_papi
1631     fi
1632     LIBS=$savedLIBS
1633     CFLAGS="$saved_CFLAGS"
1634     LDFLAGS="$saved_LDFLAGS"
1635     AC_SUBST(PAPI_CFLAGS, $papi_cflags)
1636     AC_SUBST(PAPI_LIBS, $papi_libs)
1638 AC_MSG_CHECKING([if the papi PMDA should be included])
1639 AC_SUBST(PMDA_PAPI, $pmda_papi)
1640 if $pmda_papi; then AC_MSG_RESULT(yes); else AC_MSG_RESULT(no); fi
1642 AS_IF([test "x$pmda_papi" = "xtrue"], [
1643         dnl check if struct PAPI_component_info_t has a disabled field
1644         AC_MSG_CHECKING([whether struct PAPI_component_info_t has a disabled field])
1645 cat <<End-of-File >conftest.c
1646 #include <papi.h>
1647 int main() { PAPI_component_info_t *c; c->disabled = 0; }
1648 End-of-File
1649         (eval $ac_compile) 2>conftest.out
1650         cat conftest.out >&5
1651         if test -s conftest.out
1652         then
1653            AC_MSG_RESULT(no)
1654         else
1655            AC_DEFINE(HAVE_PAPI_DISABLED_COMP, [1], [PAPI_component_info_t field])
1656            AC_MSG_RESULT(yes)
1658         fi
1659         rm -f conftest.*
1662 pmda_perfevent=false
1663 AS_IF([test "x$do_perfevent" != "xno" ], [
1664     enable_perfevent=true
1666     savedLIBS=$LIBS
1667     AC_CHECK_LIB([pfm], [pfm_get_os_event_encoding],
1668                  [pfm_libs="-lpfm"],
1669                  [enable_perfevent=false])
1670     AC_CHECK_HEADERS([perfmon/pfmlib_perf_event.h], [], [enable_perfevent=false])
1671     if test "$do_perfevent" != "check" -a "$enable_papi" != "true"
1672     then
1673         AC_MSG_ERROR([libpfm is not installed, cannot enable the perfevent PMDA])
1674     else
1675         pmda_perfevent=$enable_perfevent
1676     fi
1677     LIBS=$savedLIBS
1678     AC_SUBST(PFM_LIBS, $pfm_libs)
1680 AC_MSG_CHECKING([if the perfevent PMDA should be included])
1681 AC_SUBST(PMDA_PERFEVENT, $pmda_perfevent)
1682 if $pmda_perfevent; then AC_MSG_RESULT(yes); else AC_MSG_RESULT(no); fi
1684 dnl Do you have RPM Package Manager libraries for pmdarpm?
1685 pmda_rpm=false
1686 savedLIBS=$LIBS
1687 AC_MSG_CHECKING([for rpmlib > 4.4.2])
1688 AC_COMPILE_IFELSE(
1689    [AC_LANG_PROGRAM([[#include <rpm/header.h>]],
1690                     [[(void)HEADERGET_EXT;]])],
1691    [AC_MSG_RESULT([yes])
1692     pmda_rpm=true],
1693    [AC_MSG_RESULT([no])])
1694 AC_MSG_CHECKING([if the rpm PMDA should be included])
1695 AC_SUBST(PMDA_RPM,$pmda_rpm)
1696 if $pmda_rpm; then AC_MSG_RESULT(yes); else AC_MSG_RESULT(no); fi
1697 LIBS=$savedLIBS
1699 dnl Do you have the required qshape script for the postfix PMDA
1700 dnl The logic here is copied from the PMDA's Install script
1701 pmda_postfix=false
1702 AC_CHECK_PROGS(QSHAPE, qshape, [], path=[$PATH:/usr/sbin])
1703 AC_MSG_CHECKING([if the postfix PMDA should be included])
1704 if test -n "$QSHAPE"
1705 then
1706     pmda_postfix=true
1707 else
1708     for script in /usr/share/doc/packages/postfix-doc/auxiliary/qshape/qshape.pl
1709     do
1710         if test -f "$script"
1711         then
1712             pmda_postfix=true
1713             break
1714         fi
1715     done
1717 AC_SUBST(PMDA_POSTFIX,$pmda_postfix)
1718 if $pmda_postfix; then AC_MSG_RESULT(yes); else AC_MSG_RESULT(no); fi
1720 dnl Do you have system microhttpd libraries for pmwebapi?
1721 PKG_CHECK_MODULES([libmicrohttpd], [libmicrohttpd > 0.9.9], [have_libmicrohttpd=true], [have_libmicrohttpd=false])
1722 AC_SUBST(HAVE_LIBMICROHTTPD, [$have_libmicrohttpd])
1724 dnl Do you have graphics libraries for pmwebapi?
1725 PKG_CHECK_MODULES([cairo], [cairo >= 1.2, cairo-ft >= 1.2, cairo-png >= 1.2], [have_cairo=true], [have_cairo=false])
1726 AC_SUBST(HAVE_CAIRO, [$have_cairo])
1728 enable_webapi=false
1729 AS_IF([test "x$do_webapi" != "xno"], [
1730     enable_webapi=true
1732     if test "$have_libmicrohttpd" != "true"
1733     then
1734         enable_webapi=false
1735         test "$do_webapi" != "check" && \
1736         AC_MSG_ERROR([libmicrohttpd is not installed, cannot enable the web API])
1737     elif test "$do_webapi" != "check" -a "x$cxx" = "x"
1738     then
1739         enable_webapi=false
1740         test "$do_webapi" != "check" && \
1741         AC_MSG_ERROR([C++ compiler unavailable, cannot enable the web API])
1742     fi
1744 AC_SUBST(enable_webapi)
1746 enable_manager=false
1747 AS_IF([test "x$do_manager" != "xno"], [
1748     enable_manager=true
1750     if test "$target_os" = "mingw"
1751     then
1752         enable_manager=false
1753         test "$do_manager" != "check" && \
1754         AC_MSG_ERROR([MinGW build, cannot enable daemon manager])
1755     elif test "x$cxx" = "x"
1756     then
1757         enable_manager=false
1758         test "$do_manager" != "check" && \
1759         AC_MSG_ERROR([C++ compiler unavailable, cannot enable daemon manager])
1760     fi
1761     AC_MSG_CHECKING([compilation features for daemon manager])
1762     AC_TRY_COMPILE(
1763         [ #ifndef _XOPEN_SOURCE
1764           #define _XOPEN_SOURCE 600
1765           #endif
1766           #include <stdio.h>
1767         ], [],
1768         AC_MSG_RESULT(yes),
1769         enable_manager=false
1770         AC_MSG_RESULT(no))
1772 AC_SUBST(enable_manager)
1774 dnl Checks for library functions.
1775 AC_TYPE_SIGNAL
1776 AC_FUNC_WAIT3
1777 AC_FUNC_VPRINTF
1778 AC_CHECK_FUNCS(mktime nanosleep usleep unsetenv)
1779 AC_CHECK_FUNCS(select socket gethostname getpeerucred getpeereid)
1780 AC_CHECK_FUNCS(uname syslog __clone pipe2 fcntl ioctl)
1781 AC_CHECK_FUNCS(prctl setlinebuf waitpid atexit kill)
1782 AC_CHECK_FUNCS(chown fchmod getcwd scandir mkstemp)
1783 AC_CHECK_FUNCS(brk sbrk posix_memalign memalign valloc)
1784 AC_CHECK_FUNCS(signal sighold sigrelse tcgetattr)
1785 AC_CHECK_FUNCS(regex regcmp regexec regcomp)
1786 AC_CHECK_FUNCS(strtod strtol strtoll strtoull strndup strchrnul)
1787 AC_CHECK_FUNCS(getuid getgid)
1788 AC_CHECK_FUNCS(getgrent getgrent_r getgrnam getgrnam_r getgrgid getgrgid_r)
1789 AC_CHECK_FUNCS(getpwent getpwent_r getpwnam getpwnam_r getpwuid getpwuid_r)
1790 AC_CHECK_FUNCS(sysinfo trace_back_stack backtrace)
1791 AC_CHECK_FUNCS(sendmsg recvmsg setns)
1793 dnl only define readdir64 on non-linux platforms that support it
1794 if test $target_os != linux -a $target_os != freebsd -a $target_os != kfreebsd -a $target_os != netbsd; then
1795     AC_CHECK_FUNCS(readdir64)
1798 dnl typedefs missing from sys/types.h, stdlib.h or stddef.h
1799 if test $target_os = solaris
1800 then
1801    AC_CHECK_TYPE(__int32_t, int32_t)
1802    AC_CHECK_TYPE(__uint32_t, uint32_t)
1803    AC_CHECK_TYPE(__int64_t, int64_t)
1804    AC_CHECK_TYPE(__uint64_t, uint64_t)
1805    AC_CHECK_TYPE(uint_t, u_int32_t)
1806 else
1807     AC_CHECK_TYPE(__int32_t, int)
1808     AC_CHECK_TYPE(__uint32_t, unsigned int)
1809     AC_CHECK_TYPE(__int64_t, long long)
1810     AC_CHECK_TYPE(__uint64_t, unsigned long long)
1811     AC_CHECK_TYPE(uint_t, unsigned int)
1814 dnl check if we have a type for the pointer's size integer (__psint_t)
1815 AC_MSG_CHECKING([for __psint_t ])
1816 AC_TRY_COMPILE(
1817 [  
1818     #include <sys/types.h>
1819     #include <stdlib.h> 
1820     #include <stddef.h>
1821 ], [ __psint_t psint; ],
1822 AC_DEFINE(HAVE___PSINT_T, [1], [__psint_t type]) AC_MSG_RESULT(yes), AC_MSG_RESULT(no))
1824 dnl check if we have a type for pointer difference (ptrdiff_t)
1825 AC_MSG_CHECKING([for ptrdiff_t ])
1826 AC_TRY_COMPILE([
1827     #include <stddef.h>
1828     #ifdef HAVE_MALLOC_H
1829     #include <malloc.h>
1830     #endif
1831 ], [ ptrdiff_t ptrdiff; ],
1832 AC_DEFINE(HAVE_PTRDIFF_T, [1], [ptrdiff_t type]) AC_MSG_RESULT(yes), AC_MSG_RESULT(no))
1834 dnl check if we have types for uid_t, gid_t (POSIX) or SID (Win32)
1835 AC_MSG_CHECKING([for uid_t ])
1836 AC_TRY_COMPILE([
1837     #include <sys/types.h>
1838     #ifdef HAVE_PWD_H
1839     #include <pwd.h>
1840     #endif
1841 ], [ uid_t uid; ],
1842 AC_DEFINE(HAVE_UID_T, [1], [uid_t type]) AC_MSG_RESULT(yes), AC_MSG_RESULT(no))
1843 AC_MSG_CHECKING([for gid_t ])
1844 AC_TRY_COMPILE([
1845     #include <sys/types.h>
1846     #ifdef HAVE_GRP_H
1847     #include <grp.h>
1848     #endif
1849 ], [ gid_t gid; ],
1850 AC_DEFINE(HAVE_GID_T, [1], [gid_t type]) AC_MSG_RESULT(yes), AC_MSG_RESULT(no))
1851 AC_MSG_CHECKING([for SID ])
1852 AC_TRY_COMPILE([
1853     #ifdef HAVE_WINDOWS_H
1854     #include <windows.h>
1855     #endif
1856 ], [ SID sid; ],
1857 AC_DEFINE(HAVE_SID, [1], [sid type]) AC_MSG_RESULT(yes), AC_MSG_RESULT(no))
1859 dnl check if we have a type for socklen_t
1860 AC_MSG_CHECKING([for socklen_t ])
1861 AC_TRY_COMPILE([
1862     #include <sys/types.h>
1863     #ifdef HAVE_SYS_SOCKET_H
1864     #include <sys/socket.h>
1865     #endif
1866 ], [ socklen_t len; ],
1867 AC_DEFINE(HAVE_SOCKLEN_T, [1], [socklen_t type]) AC_MSG_RESULT(yes), AC_MSG_RESULT(no))
1869 dnl check if LL suffix on constants is supported
1870 AC_TRY_COMPILE([
1871     #include <stdio.h>
1872 ], [ long long x = 0LL; ],
1873 AC_DEFINE(HAVE_CONST_LONGLONG, [1], [LL suffix on constants]))
1875 dnl check if _environ is declared globally
1876 AC_TRY_LINK([
1877     #include <stdlib.h>
1878     #include <unistd.h>
1879 ], [ char **x = _environ; ],
1880 AC_DEFINE(HAVE_UNDERBAR_ENVIRON, [1], [_environ declared globally]))
1882 dnl check for PR_TERMCHILD and PR_SET_PDEATHSIG in <sys/prctl.h>
1883 AC_MSG_CHECKING([for PR_TERMCHILD constant in sys/prctl.h])
1884 AC_TRY_COMPILE([
1885     #ifdef HAVE_SYS_PRCTL_H
1886     #include <sys/prctl.h>
1887     #endif
1888 ], [ int i = PR_TERMCHILD; ],
1889 AC_DEFINE(HAVE_PR_TERMCHILD, [1], [PR_TERMCHILD constant]) AC_MSG_RESULT(yes), AC_MSG_RESULT(no))
1891 AC_MSG_CHECKING([for PR_SET_PDEATHSIG constant in sys/prctl.h])
1892 AC_TRY_COMPILE([
1893     #ifdef HAVE_SYS_PRCTL_H
1894     #include <sys/prctl.h>
1895     #endif
1896 ], [ int i = PR_SET_PDEATHSIG; ],
1897 AC_DEFINE(HAVE_PR_SET_PDEATHSIG, [1], [PR_SET_PDEATHSIG constant]) AC_MSG_RESULT(yes), AC_MSG_RESULT(no))
1899 AC_HEADER_TIOCGWINSZ
1901 dnl check if linker needs -rdynamic for dynamically loaded shared
1902 dnl libraries to see the symbols in the process loading them.
1903 dnl This is e.g., needed on linux for pmcd loading pmda_pmcd.so.
1904 AC_MSG_CHECKING([if linker supports -rdynamic])
1905 save_CFLAGS="$CFLAGS"
1906 CFLAGS="-rdynamic"
1907 AC_LINK_IFELSE([AC_LANG_PROGRAM([])],
1908     [AC_MSG_RESULT([yes])
1909      rdynamic_flag=-rdynamic],
1910     [AC_MSG_RESULT([no])
1911      rdynamic_flag=]
1913 CFLAGS="$save_CFLAGS"
1914 AC_SUBST([rdynamic_flag])
1917 dnl check if argument to user's select() method in scandir call is const
1918 AC_MSG_CHECKING([whether const arg for scandir() select method])
1919 cat <<End-of-File >conftest.c
1920 #include <stdlib.h>
1921 #include <unistd.h>
1922 #include <dirent.h>
1923 static int
1924 my_select(const struct dirent *foo) { return 0; }
1925 int main() { struct dirent **list; return scandir(".", &list, my_select, NULL); }
1926 End-of-File
1927 (eval $ac_compile) 2>conftest.out
1928 cat conftest.out >&5
1929 if test -s conftest.out
1930 then
1931     AC_MSG_RESULT(no)
1932 else
1933     AC_DEFINE(HAVE_CONST_DIRENT, [1], [const arg for scandir() select method])
1934     AC_MSG_RESULT(yes)
1936 rm -f conftest.*
1938 dnl check if struct dirent has a d_off (directory offset) field
1939 AC_MSG_CHECKING([whether struct dirent has a d_off field])
1940 cat <<End-of-File >conftest.c
1941 #include <stdlib.h>
1942 #include <unistd.h>
1943 #include <dirent.h>
1944 int main() { struct dirent d; d.d_off = 0; }
1945 End-of-File
1946 (eval $ac_compile) 2>conftest.out
1947 cat conftest.out >&5
1948 if test -s conftest.out
1949 then
1950     AC_MSG_RESULT(no)
1951 else
1952     AC_DEFINE(HAVE_DIRENT_D_OFF, [1], [struct dirent d_off field])
1953     AC_MSG_RESULT(yes)
1955 rm -f conftest.*
1957 dnl check if printf %p has 0x prefix
1958 AC_MSG_CHECKING([if printf %p produces 0x prefix])
1959 if test "$cross_compiling" = "yes"; then
1960     ans=$printf_p_prefix
1961     echo "cross-compile -> \"$ans\"" >&5
1962 else
1963     cat <<End-of-File >conftest.c
1964 #include <stdio.h>
1965 int main(int argc,  char **argv) { printf("%p", argv); return(0); }
1966 End-of-File
1967     (eval $ac_compile) 2>&5
1968     (eval $ac_link) 2>&5
1969     ans=`./conftest`
1970     echo "./conftest -> \"$ans\"" >&5
1972 case "$ans"
1974     0x*)
1975         AC_DEFINE(HAVE_PRINTF_P_PFX, [1], [printf %p produces 0x])
1976         AC_MSG_RESULT(yes)
1977         ;;
1978     *)
1979         AC_MSG_RESULT(no)
1980         ;;
1981 esac
1982 rm -rf conftest conftest.*
1984 _do_type()
1986     # need to deal with this sort of cpp output ...
1987     #   typedef long pid_t;
1988     #   typedef unsigned int pid_t;
1989     #   typedef unsigned int pid_t __attribute__ ((__mode__ (__SI__)));
1990     #   __extension__ typedef int pid_t;
1991     #   typedef foo_t
1992     #                  pid_t;
1993     #   typedef struct {
1994     #         ....
1995     #   } pid_t;
1996     #   typedef ... *pid;
1997     # and chaining of the form
1998     #   typedef long __pid_t;
1999     #   typedef __pid_t pid_t;
2000     #
2001     _raw=`$CPP conftest.c \
2002     | $SED \
2003         -e 's/[[        ]]__attribute__ ((.*));/;/' \
2004         -e 's/__extension__[[   ]][[    ]]*//' \
2005     | $AWK '
2006 /bozo/          { print; next }
2007 $1 == "typedef" { printf "%s",$0
2008                   if ($NF ~ /;$/) {
2009                       print ""
2010                       next
2011                   }
2012                   wantsemi = 1
2013                   if ($0 ~ /{/) depth = 1
2014                   next
2015                 }
2016 wantsemi == 1   { printf " %s",$0
2017                   if ($0 ~ /{/) depth++
2018                   if (depth) {
2019                       if ($0 ~ /}/) depth--
2020                       if (depth > 0) next
2021                   }
2022                   if ($NF ~ /;$/) {
2023                       print ""
2024                       wantsemi = 0
2025                       next
2026                   }
2027                 }' \
2028     | $SED \
2029         -e 's/\*/* /g' \
2030         -e 's/^[[       ]]*//' \
2031         -e 's/;[[       ]]*$//' \
2032     | $AWK '
2033 $1 == "typedef" { map[[$NF]] = ""
2034                   for (i = 2; i < NF; i++) {
2035                     if (i == 2)
2036                         map[[$NF]] = $i
2037                     else
2038                         map[[$NF]] = map[[$NF]] " " $i
2039                   }
2040                   print $NF " -> " map[[$NF]] >"conftest.debug"
2041                   next
2042                 }
2043 $2 == "bozo"    { t = $1
2044                   printf "best guess: %s",t >"conftest.debug"
2045                   while (map[[t]] != "") {
2046                     t = map[[t]]
2047                     printf " -> %s",t >"conftest.debug"
2048                   }
2049                   print "" >"conftest.debug"
2050                   print t
2051                   exit
2052                 }'`
2053     case "$_raw"
2054     in
2055     int)
2056         _fmt='"d"'
2057         ;;
2058     unsigned|'unsigned int')
2059         _fmt='"u"'
2060         ;;
2061     long|'long int')
2062         _fmt='"ld"'
2063         ;;
2064     'long long'|'long long int')
2065         if test $target_os = mingw; then
2066             _fmt='"I64d"'
2067         else
2068             _fmt='"lld"'
2069         fi
2070         ;;
2071     'unsigned long'|'unsigned long int'|'long unsigned int')
2072         _fmt='"lu"'
2073         ;;
2074     'unsigned long long'|'unsigned long long int')
2075         if test $target_os = mingw; then
2076             _fmt='"I64u"'
2077         else
2078             _fmt='"llu"'
2079         fi
2080         ;;
2081     *\*)        # pointer to a something
2082         _fmt='"p"'
2083         ;;
2084     struct\ *)  # not much can be done here ...
2085         _fmt='"p"'
2086         ;;
2087     *)
2088         echo
2089         echo "FATAL ERROR: don't know what to do with type \"$_raw\""
2090         echo "... typedef mapping ..."
2091         cat conftest.debug
2092         rm -rf conftest conftest.*
2093         exit 1
2094         ;;
2095     esac
2098 dnl printf type for pid_t
2099 AC_MSG_CHECKING([printf type for pid_t])
2100 if test "$cross_compiling" = "yes"; then
2101     ans=$printf_fmt_pid
2102     echo "cross-compile -> \"$ans\"" >&5
2103     fmt_pid="$ans"
2104 else
2105     cat <<End-of-File >conftest.c
2106 #include <sys/types.h>
2107 #include <unistd.h>
2108 pid_t bozo;
2109 End-of-File
2110     _do_type
2111     fmt_pid="$_fmt"
2113 AC_MSG_RESULT($fmt_pid)
2114 AC_SUBST(fmt_pid)
2115 rm -rf conftest.c conftest.debug
2117 dnl printf type for int64_t
2118 AC_MSG_CHECKING([printf type for int64_t ])
2119 if test "$cross_compiling" = "yes"; then
2120     ans=$printf_fmt_int64
2121     echo "cross-compile -> \"$ans\"" >&5
2122 else
2123     cat <<End-of-File >conftest.c
2124 #include <stdio.h>
2125 #include <stdint.h>
2126 #include <inttypes.h>
2127 int main()
2129     printf("\"%s\"\n", __PRI64_PREFIX "d");
2130     return(0);
2132 End-of-File
2133     ans=''
2134     (eval $ac_link) 2>&5
2135     if test -x ./conftest
2136     then
2137         ans=`./conftest`
2138         echo "./conftest -> \"$ans\"" >&5
2139     fi
2140     if test -z "$ans"
2141     then
2142         dnl have to try the hardway ...
2143         cat <<End-of-File >conftest.c
2144 #include <stdio.h>
2145 #include <stdint.h>
2146 #include <string.h>
2147 int main()
2149     char buf[[17]];
2150     int64_t bozo = 0x12345678abcdLL;
2151     sprintf(buf, "%lx", bozo);
2152     if (strcmp(buf, "12345678abcd") == 0)
2153         printf("\"ld\"\n");
2154     else {
2155         sprintf(buf, "%llx", bozo);
2156         if (strcmp(buf, "12345678abcd") == 0)
2157             printf("\"lld\"\n");
2158     }
2159     return(0);
2161 End-of-File
2162         (eval $ac_link) 2>&5
2163         if test -x ./conftest
2164         then
2165             ans=`./conftest`
2166             echo "./conftest -> \"$ans\"" >&5
2167         fi
2168     fi
2170 if test -z "$ans"
2171 then
2172     echo 'FATAL ERROR: Cannot determine printf format for int64_t type'
2173     rm -rf conftest conftest.*
2174     exit 1
2176 fmt_int64="$ans"
2177 AC_MSG_RESULT("$fmt_int64")
2178 AC_SUBST(fmt_int64)
2179 rm -rf conftest.* conftest
2181 AC_MSG_CHECKING([strtol or strtoll for int64_t])
2182 if test "$cross_compiling" = "yes"; then
2183     ans=$strtoint64
2184     echo "cross-compile -> \"$ans\"" >&5
2185 else
2186     cat <<End-of-File >conftest.c
2187 #include <stdio.h>
2188 #include <stdlib.h>
2189 main()
2191     long long int       value = -1;
2192     value = strtol("1234567812345678", NULL, 16);
2193     if (value == 0x1234567812345678LL) {
2194         printf("strotol\n");
2195         exit(0);
2196     }
2197     value = strtoll("1234567812345678", NULL, 16);
2198     if (value == 0x1234567812345678LL) {
2199         printf("strtoll\n");
2200         exit(0);
2201     }
2202     exit(1);
2204 End-of-File
2205     (eval $ac_compile) 2>&5
2206     (eval $ac_link) 2>&5
2207     ans=`./conftest`
2208     echo "./conftest -> \"$ans\"" >&5
2210 case "$ans"
2212     strtol)
2213         AC_DEFINE(strtoint64, strtol)
2214         AC_DEFINE(strtouint64, strtoul)
2215         AC_MSG_RESULT([strtol])
2216         ;;
2217     strtoll)
2218         AC_DEFINE(strtoint64, strtoll)
2219         AC_DEFINE(strtouint64, strtoull)
2220         AC_MSG_RESULT([strtoll])
2221         ;;
2222     *)
2223         AC_DEFINE(strtoint64, strtoll)
2224         AC_DEFINE(strtouint64, strtoull)
2225         AC_MSG_RESULT([assuming strtoll])
2226         ;;
2227 esac
2228 rm -rf conftest conftest.*
2230 if test "$do_threads" = "check" -o "$do_threads" = "yes"
2231 then
2232     AC_CHECK_HEADERS(
2233         pthread.h,
2234         [],
2235         [
2236             if test "$do_threads" = "yes"
2237             then
2238                 AC_MSG_ERROR([cannot enable multi-threaded mode - no pthread.h])
2239             fi
2240         ])
2242     dnl Check if pthread_mutex_t is defined in pthread.h
2243     dnl Ignore the fact that pthread.h could be missing - we don't
2244     dnl really care if this test fails because of missing pthread_mutex_t
2245     dnl or because of missing headers.
2246     AC_MSG_CHECKING([for pthread_mutex_t in pthread.h])
2247     AC_TRY_COMPILE(
2248         [#include <pthread.h>], [pthread_mutex_t mymutex;],
2249         AC_DEFINE(HAVE_PTHREAD_MUTEX_T, [1], [pthread_mutex_t type]) AC_MSG_RESULT(yes),
2250         [
2251             if test "$do_threads" = "yes"
2252             then
2253                 AC_MSG_ERROR([cannot enable multi-threaded mode - no mutexes])
2254             else
2255                 AC_MSG_RESULT(no)
2256             fi
2257         ])
2259     dnl Check which library provide pthread stuff
2260     AC_MSG_CHECKING([where pthread_create() is defined])
2261     for cand in "" pthreads pthread ; do
2262         savedLIBS=$LIBS
2263         if test -n "$cand" 
2264         then
2265             LIBS=`echo $LIBS -l$cand`
2266         fi
2267         AC_TRY_LINK(
2268         [
2269             #include <pthread.h>
2270         ],
2271         [
2272             pthread_create(NULL, NULL, NULL, NULL);
2273         ],  AC_MSG_RESULT(lib${cand:-c})
2274             if test -z "$cand"
2275             then
2276                 lib_for_pthreads="$cand"
2277             else
2278                 lib_for_pthreads="-l$cand"
2279             fi
2280             LIBS=$savedLIBS
2281             break )
2282         LIBS=$savedLIBS
2283     done
2284     AC_SUBST(lib_for_pthreads)
2286     if test "$ac_cv_header_pthread_h" = "yes"
2287     then
2288         dnl printf type for pthread_t
2289         AC_MSG_CHECKING([printf type for pthread_t])
2290         cat <<End-of-File >conftest.c
2291 #include <pthread.h>
2292 pthread_t bozo;
2293 End-of-File
2294         _do_type
2295         fmt_pthread="$_fmt"
2296         AC_MSG_RESULT($fmt_pthread)
2297         AC_SUBST(fmt_pthread)
2298         rm -rf conftest.c conftest.debug
2300         dnl check if gcc supports __thread for thread private data
2301         AC_MSG_CHECKING([if compiler supports __thread])
2302         dnl __thread support is broken in some places
2303         if test $target_os = netbsd
2304         then
2305             AC_TRY_COMPILE([#include <pthread.h>
2306 #if __GNUC__ < 4 || ( __GNUC__ == 4 && __GNUC_MINOR__ < 5 )
2307 broken!
2308 #else
2309 __thread int x;
2310 #endif], [],
2311                 AC_DEFINE(HAVE___THREAD, [1], [__thread private data]) AC_MSG_RESULT(yes), AC_MSG_RESULT(no))
2312         else
2313             AC_TRY_COMPILE([#include <pthread.h>
2314 __thread int x;], [],
2315                 AC_DEFINE(HAVE___THREAD, [1], [__thread private data]) AC_MSG_RESULT(yes), AC_MSG_RESULT(no))
2316         fi
2318         dnl Check if pthread_barrier_t is defined in pthread.h
2319         AC_MSG_CHECKING([for pthread_barrier_t in pthread.h])
2320         AC_TRY_COMPILE([#include <pthread.h>], [pthread_barrier_t mybarrier;],
2321             AC_DEFINE(HAVE_PTHREAD_BARRIER_T, [1], [pthread_barrier_t type]) AC_MSG_RESULT(yes),
2322             AC_MSG_RESULT(no))
2323     fi
2326 AC_MSG_CHECKING([sizeof suseconds_t])
2327 if test "$cross_compiling" = "yes"; then
2328     ans=$sizeof_suseconds_t
2329     echo "cross-compile -> \"$ans\"" >&5
2330 else
2331     cat <<End-of-File >conftest.c
2332 #include <sys/time.h>
2333 main() { printf("%d", (int)sizeof(suseconds_t)); }
2334 End-of-File
2335     (eval $ac_compile) 2>&5
2336     (eval $ac_link) 2>&5
2337     ans=`./conftest`
2338     echo "./conftest -> \"$ans\"" >&5
2339     rm -rf conftest conftest.*
2341 AC_MSG_RESULT($ans)
2342 AC_DEFINE_UNQUOTED(SIZEOF_SUSECONDS_T, $ans, [sizeof suseconds_t])
2344 AC_MSG_CHECKING([sizeof time_t])
2345 if test "$cross_compiling" = "yes"; then
2346     ans=$sizeof_time_t
2347     echo "cross-compile -> \"$ans\"" >&5
2348 else
2349     cat <<End-of-File >conftest.c
2350 #include <sys/time.h>
2351 main() { printf("%d", (int)sizeof(time_t)); }
2352 End-of-File
2353     (eval $ac_compile) 2>&5
2354     (eval $ac_link) 2>&5
2355     ans=`./conftest`
2356     echo "./conftest -> \"$ans\"" >&5
2357     rm -rf conftest conftest.*
2359 AC_MSG_RESULT($ans)
2360 AC_DEFINE_UNQUOTED(SIZEOF_TIME_T, $ans, [sizeof time_t])
2362 dnl check sizeof long
2363 AC_MSG_CHECKING([sizeof long])
2364 if test "$cross_compiling" = "yes"; then
2365     ans=$sizeof_long
2366     echo "cross-compile -> \"$ans\"" >&5
2367 else
2368     cat <<End-of-File >conftest.c
2369 #include <stdio.h>
2370 main() { printf("%d", (int)sizeof(long)); }
2371 End-of-File
2372     (eval $ac_compile) 2>&5
2373     (eval $ac_link) 2>&5
2374     ans=`./conftest`
2375     echo "./conftest -> \"$ans\"" >&5
2377 AC_MSG_RESULT($ans)
2378 if test "$ans" = 4; then
2379     AC_DEFINE(HAVE_32BIT_LONG, [1], [sizeof long])
2380 elif test "$ans" = 8; then
2381     AC_DEFINE(HAVE_64BIT_LONG, [1], [sizeof long])
2382 else
2383     echo
2384     echo "FATAL ERROR: size of long is not 32 or 64 bits, cannot proceed."
2385     echo "sizeof(char *) -> $ans"
2386     rm -rf conftest conftest.*
2387     exit 1
2389 rm -rf conftest conftest.*
2391 dnl check sizeof pointer
2392 AC_MSG_CHECKING([sizeof pointer])
2393 if test "$cross_compiling" = "yes"; then
2394     ans=$sizeof_pointer
2395     echo "cross-compile -> \"$ans\"" >&5
2396 else
2397     cat <<End-of-File >conftest.c
2398 #include <stdio.h>
2399 main() { printf("%d", (int)sizeof(char *)); }
2400 End-of-File
2401     (eval $ac_compile) 2>&5
2402     (eval $ac_link) 2>&5
2403     ans=`./conftest`
2404     echo "./conftest -> \"$ans\"" >&5
2406 AC_MSG_RESULT($ans)
2407 if test "$ans" = 4; then
2408     AC_DEFINE(HAVE_32BIT_PTR, [1], [pointer size])
2409     PCP_PTR_SIZE=32
2410 elif test "$ans" = 8; then
2411     AC_DEFINE(HAVE_64BIT_PTR, [1], [pointer size])
2412     PCP_PTR_SIZE=64
2413 else
2414     echo
2415     echo "FATAL ERROR: size of pointer is not 32 or 64 bits, cannot proceed."
2416     echo "sizeof(char *) -> $ans"
2417     rm -rf conftest conftest.*
2418     exit 1
2420 rm -rf conftest conftest.*
2422 dnl check sizeof int. If not 32, we die
2423 AC_MSG_CHECKING([sizeof int])
2424 if test "$cross_compiling" = "yes"; then
2425     ans=$sizeof_int
2426     echo "cross-compile -> \"$ans\"" >&5
2427 else
2428     cat <<End-of-File >conftest.c
2429 #include <stdio.h>
2430 main() { printf("%d", (int)sizeof(int)); }
2431 End-of-File
2432     (eval $ac_compile) 2>&5
2433     (eval $ac_link) 2>&5
2434     ans=`./conftest`
2435     echo "./conftest -> \"$ans\"" >&5
2437 AC_MSG_RESULT($ans)
2438 if test "$ans" != 4
2439 then
2440     echo
2441     echo "FATAL ERROR: sizeof(int) is not 32 bits, cannot proceed."
2442     echo "Note: 32-bit ints are assumed in the PCP external file formats and"
2443     echo "      the over-the-wire PDU formats"
2444     rm -rf conftest conftest.*
2445     exit 1
2447 rm -rf conftest conftest.*
2449 dnl check bit field allocation order within a word
2450 AC_MSG_CHECKING([if bit fields allocated left-to-right])
2451 if test "$cross_compiling" = "yes"; then
2452     ans=$bit_field_scheme
2453     echo "cross-compile -> \"$ans\"" >&5
2454 else
2455     cat <<End-of-File >conftest.c
2456 union { struct { unsigned int b:4; unsigned int c:4; } a; int p; } u;
2457 main() { u.a.b = 1; u.a.c = 2; printf("%0*x", 2*sizeof(int), u.p); }
2458 End-of-File
2459     (eval $ac_compile) 2>&5
2460     (eval $ac_link) 2>&5
2461     ans=`./conftest`
2462     echo "./conftest -> \"$ans\"" >&5
2464 case "$ans"
2466     1200*|*0012)
2467         # left-to-right starting from MSB (SGI cc on MIPS), or
2468         # left-to-right ending at LSB
2469         AC_DEFINE(HAVE_BITFIELDS_LTOR, [1], [left-to-right bitfield ordering])
2470         AC_MSG_RESULT(yes)
2471         ;;
2472     2100*|*0021)
2473         # right-to-left ending at MSB, or
2474         # right-to-left starting from LSB (gcc in Intel)
2475         AC_MSG_RESULT(no)
2476         ;;
2477     *)
2478         AC_MSG_RESULT(unknown)
2479         echo "FATAL ERROR: could not fathom your compiler's bit field allocation scheme"
2480         rm -f conftest conftest.*
2481         exit 1
2482         ;;
2483 esac
2484 rm -rf conftest conftest.*
2486 dnl check if compiler can cast __uint64_t to double
2487 AC_TRY_LINK(
2489     #include <stdlib.h>
2490     #include <unistd.h>
2493     __uint64_t x = 0;
2494     double y = (double)x;
2495 ], AC_DEFINE(HAVE_CAST_U64_DOUBLE, [1], [compiler casts u64 to double]))
2497 dnl check if basename and dirname need -lgen, -lpcp or nothing to work
2498 dnl (assume both go together)
2499 AC_CHECK_FUNCS(basename)
2500 if test $ac_cv_func_basename = yes
2501 then
2502     AC_DEFINE(HAVE_BASENAME, [1], [basename API])
2503     AC_DEFINE(HAVE_DIRNAME, [1], [dirname API])
2504     lib_for_basename=""
2505 else
2506     AC_CHECK_LIB(gen, basename)
2507     if test $ac_cv_lib_gen_basename = yes
2508     then
2509         AC_DEFINE(HAVE_BASENAME, [1], [basename API])
2510         AC_DEFINE(HAVE_DIRNAME, [1], [dirname API])
2511         lib_for_basename="-lgen"
2512     else
2513         lib_for_basename="-lpcp"
2514     fi
2516 AC_SUBST(lib_for_basename)
2518 dnl check if clock_gettime needs -lrt to work
2519 lib_for_clock_gettime=
2520 AC_CHECK_FUNCS(clock_gettime)
2521 if test $ac_cv_func_clock_gettime = no
2522 then
2523     AC_CHECK_LIB(rt, clock_gettime)
2524     if test $ac_cv_lib_rt_clock_gettime = yes
2525     then
2526         AC_DEFINE(HAVE_CLOCK_GETTIME, [1], [clock_gettime API])
2527         lib_for_rt=-lrt
2528     fi
2530 AC_SUBST(lib_for_rt)
2532 dnl check if dlopen et al need -ldl to work
2533 lib_for_dlopen=
2534 AC_CHECK_FUNCS(dlopen)
2535 if test $ac_cv_func_dlopen = no
2536 then
2537     AC_CHECK_LIB(dl, dlopen)
2538     if test $ac_cv_lib_dl_dlopen = yes
2539     then
2540         AC_DEFINE(HAVE_DLOPEN, [1], [dlopen API])
2541         lib_for_dlopen=-ldl
2542     fi
2544 AC_SUBST(lib_for_dlopen)
2546 dnl check if flog10, pow, fpclassify and isnanf are available
2547 dnl in the maths library
2548 lib_for_math=
2549 AC_CHECK_FUNCS(flog10)
2550 if test $ac_cv_func_flog10 = no
2551 then
2552     AC_CHECK_LIB(m, flog10)
2553     if test $ac_cv_lib_m_flog10 = yes
2554     then
2555         AC_DEFINE(HAVE_FLOG10, [1], [flog10 math API])
2556         lib_for_math=-lm
2557     fi
2558 else
2559     AC_DEFINE(HAVE_FLOG10, [1], [flog10 math API])
2561 AC_CHECK_FUNCS(pow)
2562 if test $ac_cv_func_pow = no
2563 then
2564     AC_CHECK_LIB(m, pow)
2565     if test $ac_cv_lib_m_pow = yes
2566     then
2567         AC_DEFINE(HAVE_POW, [1], [pow math API])
2568         lib_for_math=-lm
2569     fi
2570 else
2571     AC_DEFINE(HAVE_POW, [1], [pow math API])
2573 AC_MSG_CHECKING([for fpclassify()])
2574 ac_cv_func_fpclassify=no
2575 AC_TRY_LINK(
2577     #include <math.h>
2580     double x = 123.456;
2581     if (fpclassify(x) == FP_NAN) exit(1);
2582 ], ac_cv_func_fpclassify=yes)
2583 AC_MSG_RESULT($ac_cv_func_fpclassify)
2584 if test $ac_cv_func_fpclassify = no
2585 then
2586     dnl try with -lm
2587     AC_MSG_CHECKING([for fpclassify() with -lm])
2588     savedLIBS=$LIBS
2589     LIBS=-lm
2590     AC_TRY_LINK(
2592     #include <math.h>
2595     double x = 123.456;
2596     if (fpclassify(x) == FP_NAN) exit(1);
2597 ], ac_cv_func_fpclassify=yes)
2598     AC_MSG_RESULT($ac_cv_func_fpclassify)
2599     if test $ac_cv_func_fpclassify = yes
2600     then
2601         lib_for_math=-lm
2602     fi
2603     LIBS=$savedLIBS
2605 if test $ac_cv_func_fpclassify = yes
2606 then
2607     AC_DEFINE(HAVE_FPCLASSIFY, [1], [fpclassify math API])
2608 else
2609     dnl prefer fpclassify() but will take isnan() and isnanf() as
2610     dnl possible alternates
2611     AC_CHECK_FUNCS(isnan)
2612     if test $ac_cv_func_isnan = no
2613     then
2614         AC_CHECK_LIB(m, isnan)
2615         if test $ac_cv_lib_m_isnan = yes
2616         then
2617             AC_DEFINE(HAVE_ISNAN, [1], [isnan math API])
2618             lib_for_math=-lm
2619         fi
2620     fi
2621     AC_CHECK_FUNCS(isnanf)
2622     if test $ac_cv_func_isnanf = no
2623     then
2624         AC_CHECK_LIB(m, isnanf)
2625         if test $ac_cv_lib_m_isnanf = yes
2626         then
2627             AC_DEFINE(HAVE_ISNANF, [1], [isnanf math API])
2628             lib_for_math=-lm
2629         fi
2630     fi
2632 AC_SUBST(lib_for_math)
2634 dnl check if we have the SIG_PF typedef
2635 AC_TRY_LINK([#include <signal.h>], [SIG_PF x;],
2636     AC_DEFINE(HAVE_SIGPF, [1], [SIG_PF typedef]))
2638 dnl check if we have the SA_SIGINFO #define
2639 AC_TRY_LINK([#include <signal.h>], [int x = SA_SIGINFO;],
2640     AC_DEFINE(HAVE_SA_SIGINFO, [1], [SA_SIGINFO macro]))
2642 dnl check if we support the SIGPIPE signal
2643 AC_TRY_LINK([#include <signal.h>], [int x = SIGPIPE;],
2644     AC_DEFINE(HAVE_SIGPIPE, [1], [SIGPIPE signal]))
2646 dnl check if we support the SIGHUP signal
2647 AC_TRY_LINK([#include <signal.h>], [int x = SIGHUP;],
2648     AC_DEFINE(HAVE_SIGHUP, [1], [SIGHUP signal]))
2650 dnl check if we support the SIGBUS signal
2651 AC_TRY_LINK([#include <signal.h>], [int x = SIGBUS;],
2652     AC_DEFINE(HAVE_SIGBUS, [1], [SIGBUS signal]))
2654 dnl check if we need to explicitly include signal.h
2655 AC_TRY_LINK([#include <sys/wait.h>],
2656 [   typedef void (*SIGRET)(int);
2657     SIGRET x = SIG_IGN;
2658 ], AC_DEFINE(HAVE_WAIT_INCLUDES_SIGNAL, [1], [indirect signal.h]))
2660 dnl check for name and type of time fields in struct stat
2661 dnl IRIX example        timespec_t st_mtim;     
2662 dnl Linux example       struct timespec st_mtim;
2663 dnl Darwin example      struct timespec st_mtimespec;
2664 dnl Solaris example     timestruc_t st_mtim;
2665 dnl FreeBSD (6.1)       struct timespec st_mtimespec;
2666 dnl                     struct timespec {
2667 dnl                             time_t tv_sec;
2668 dnl                             long tv_nsec;
2669 dnl                     };
2671 have_stat_type=false
2672 have_stat_name=false
2673 if test $have_stat_name = false
2674 then
2675     AC_EGREP_HEADER(
2676     changequote(<<, >>)<<[      ]st_mtimespec>>changequote([, ]),
2677     sys/stat.h, [ have_stat_name=true;
2678     AC_DEFINE(HAVE_ST_MTIME_WITH_SPEC, [1], [st_mtimespec stat field]) ])
2680 if test $have_stat_name = false -a $target_os != darwin -a $target_os != linux -a $target_os != kfreebsd -a $target_os != netbsd
2681 then
2682     AC_EGREP_HEADER(
2683     changequote(<<, >>)<<[      ]st_mtime>>changequote([, ]),
2684     sys/stat.h, [ have_stat_name=true;
2685     AC_DEFINE(HAVE_ST_MTIME_WITH_E, [1], [st_mtime stat field]) ])
2687 if test $have_stat_type = false
2688 then
2689     AC_EGREP_HEADER(
2690     changequote(<<, >>)<<timestruc_t[   ][      ]*st_mtim>>changequote([, ]),
2691     sys/stat.h, [ have_stat_type=true;
2692     AC_DEFINE(HAVE_STAT_TIMESTRUC, [1], [timestruc_t type]) ])
2694 if test $have_stat_type = false
2695 then
2696     AC_EGREP_HEADER(
2697     changequote(<<, >>)<<timespec_t[    ][      ]*st_mtim>>changequote([, ]),
2698     sys/stat.h, [ have_stat_type=true;
2699     AC_DEFINE(HAVE_STAT_TIMESPEC_T, [1], [timespec_t type]) ])
2701 if test $have_stat_type = false
2702 then
2703     AC_EGREP_HEADER(
2704     changequote(<<, >>)<<timespec[      ][      ]*st_mtim>>changequote([, ]),
2705     sys/stat.h, [ have_stat_type=true;
2706     AC_DEFINE(HAVE_STAT_TIMESPEC, [1], [timespec type]) ])
2708 if test $have_stat_type = false
2709 then
2710     AC_EGREP_HEADER(
2711     changequote(<<, >>)<<time_t[        ][      ]*st_mtim>>changequote([, ]),
2712     sys/stat.h, [ have_stat_type=true;
2713     AC_DEFINE(HAVE_STAT_TIME_T, [1], [time_t type]) ])
2715 if test $have_stat_type = false
2716 then
2717     echo 'FATAL ERROR: Cannot determine struct stat time types.'
2718     rm -rf conftest conftest.*
2719     exit 1
2723 dnl Work out where to install stuff for this package
2724 dnl (and where to find stuff at run-time for add-on packages).
2728 dnl Predictable directory containing pcp.conf, or overridden
2729 dnl by the $PCP_CONF environment variable. If this is not set
2730 dnl (default /etc/pcp.conf), then $PCP_CONF must be set in
2731 dnl the environment.
2733 dnl The eval echo stuff is used to get around unfavourable
2734 dnl elements of the GNU standards, which cause embedding of
2735 dnl ${prefix} within many of these various $dirs.
2736 dnl http://www.gnu.org/software/autoconf/manual/autoconf.html#Installation-Directory-Variables
2738 pcp_etc_dir=`eval echo $sysconfdir`
2739 pcp_etc_dir=`eval echo $pcp_etc_dir`
2740 AC_SUBST(pcp_etc_dir)
2741 pcp_saslconf_dir=`eval echo $sysconfdir/sasl2`
2742 pcp_saslconf_dir=`eval echo $pcp_saslconf_dir`
2743 AC_SUBST(pcp_saslconf_dir)
2744 pcp_sysconf_dir=`eval echo $sysconfdir/pcp`
2745 pcp_sysconf_dir=`eval echo $pcp_sysconf_dir`
2746 AC_SUBST(pcp_sysconf_dir)
2747 pcp_pmcdconf_path=$pcp_sysconf_dir/pmcd/pmcd.conf
2748 pcp_pmcdrclocal_path=$pcp_sysconf_dir/pmcd/rc.local
2749 pcp_pmcdoptions_path=$pcp_sysconf_dir/pmcd/pmcd.options
2750 pcp_pmwebdoptions_path=$pcp_sysconf_dir/pmwebd/pmwebd.options
2751 pcp_pmmgroptions_path=$pcp_sysconf_dir/pmmgr/pmmgr.options
2752 pcp_pmproxyoptions_path=$pcp_sysconf_dir/pmproxy/pmproxy.options
2753 pcp_pmiecontrol_path=$pcp_sysconf_dir/pmie/control
2754 pcp_pmsnapcontrol_path=$pcp_sysconf_dir/pmsnap/control
2755 pcp_pmloggercontrol_path=$pcp_sysconf_dir/pmlogger/control
2756 AC_SUBST(pcp_pmcdconf_path)
2757 AC_SUBST(pcp_pmcdoptions_path)
2758 AC_SUBST(pcp_pmcdrclocal_path)
2759 AC_SUBST(pcp_pmwebdoptions_path)
2760 AC_SUBST(pcp_pmmgroptions_path)
2761 AC_SUBST(pcp_pmproxyoptions_path)
2762 AC_SUBST(pcp_pmiecontrol_path)
2763 AC_SUBST(pcp_pmsnapcontrol_path)
2764 AC_SUBST(pcp_pmloggercontrol_path)
2766 dnl shared PCP files (shareable for diskless)
2767 pcp_share_dir=`eval echo $datarootdir/pcp`
2768 pcp_share_dir=`eval echo $pcp_share_dir`
2769 AC_SUBST(pcp_share_dir)
2771 dnl private PCP executables
2772 pcp_binadm_dir=`eval echo $libexecdir/pcp/bin`
2773 pcp_binadm_dir=`eval echo $pcp_binadm_dir`
2774 AC_SUBST(pcp_binadm_dir)
2776 dnl non-shared (i.e. system local) PCP files
2777 pcp_var_dir=`eval echo $localstatedir/lib/pcp`
2778 pcp_var_dir=`eval echo $pcp_var_dir`
2779 AC_SUBST(pcp_var_dir)
2781 dnl pmcd control and options files
2782 AC_ARG_WITH(configdir,[AC_HELP_STRING([--with-configdir],[configuration directory [LOCALSTATEDIR/pcp/config]])],
2783                       [pcp_config_dir=$withval],
2784                       [pcp_config_dir=$pcp_var_dir/config])
2786 pcp_pmdas_dir=$pcp_var_dir/pmdas
2787 AC_SUBST(pcp_pmdas_dir)
2789 dnl runtime shared libraries
2790 pcp_lib_dir=`eval echo $libdir`
2791 pcp_lib_dir=`eval echo $pcp_lib_dir`
2792 pcp_lib32_dir=`echo $pcp_lib_dir | sed -e s,64,, -e s,//,/,`
2793 AC_SUBST(pcp_lib_dir)
2794 AC_SUBST(pcp_lib32_dir)
2796 dnl perl modules
2797 AC_ARG_WITH(perl_installdirs,[AC_HELP_STRING([--with-perl_installdirs],[perl installdirs [vendor]])],
2798                       [perl_installdirs=$withval],
2799                       [perl_installdirs=vendor])
2800 perl_installdirs=`eval echo $perl_installdirs`
2801 perl_installdirs=`eval echo $perl_installdirs`
2802 AC_SUBST(perl_installdirs)
2803 AC_ARG_WITH(perl_install_base,[AC_HELP_STRING([--with-perl_install_base],[perl install_base [PREFIX]])],
2804                       [perl_install_base=$withval],
2805                       [perl_install_base=$prefix])
2806 perl_install_base=`eval echo $perl_install_base`
2807 perl_install_base=`eval echo $perl_install_base`
2808 AC_SUBST(perl_install_base)
2810 AC_ARG_WITH(python_prefix,[AC_HELP_STRING([--with-python_prefix],[python setup.py prefix [PREFIX]])],
2811                       [python_prefix=$withval],
2812                       [python_prefix=$prefix])
2813 python_prefix=`eval echo $python_prefix`
2814 python_prefix=`eval echo $python_prefix`
2815 AC_SUBST(python_prefix)
2817 AC_PATH_XTRA
2818 pcp_x11_incflags=$X_CFLAGS
2819 AC_SUBST(pcp_x11_incflags)
2820 pcp_x11_libflags=$X_LIBS
2821 AC_SUBST(pcp_x11_libflags)
2822 pcp_x11_extra=$X_EXTRA_LIBS
2823 AC_SUBST(pcp_x11_extra)
2824 pcp_x11_pre=$X_PRE_LIBS
2825 AC_SUBST(pcp_x11_pre)
2827 dnl man pages (source)
2828 have_gzipped_manpages=false
2829 have_bzip2ed_manpages=false
2830 have_lzmaed_manpages=false
2831 have_xzed_manpages=false
2832 need_old_tbl_header=false
2833 man_header=
2834 pcp_man_dir=`eval echo $mandir`
2835 pcp_man_dir=`eval echo $pcp_man_dir`
2837 dnl guess compression in use
2838 for d in /usr/man /usr/share/man $pcp_man_dir
2840     for sd in man1 sman1
2841     do
2842         if test -f $d/$sd/man.1.gz
2843         then
2844             have_gzipped_manpages=true
2845             man_header=`$ZIP -d < $d/$sd/man.1.gz | head -1`
2846             break
2847         elif test -f $d/$sd/man.1.bz2
2848         then
2849             have_bzip2ed_manpages=true
2850             man_header=`$BZIP2 -d < $d/$sd/man.1.bz2 | head -1`
2851             break
2852         elif test -f $d/$sd/man.1.lzma
2853         then
2854             have_lzmaed_manpages=true
2855             man_header=`$LZMA -d < $d/$sd/man.1.lzma | head -1`
2856             break
2857         elif test -f $d/$sd/man.1.xz
2858         then
2859             have_xzed_manpages=true
2860             man_header=`$XZ -d < $d/$sd/man.1.xz | head -1`
2861             break
2862         elif test -f $d/$sd/man.1
2863         then
2864             man_header=`head -1 $d/$sd/man.1`
2865             break
2866         fi
2867     done
2868 done
2869 if test x"$man_header" = "x'\\\" t" -o x"$man_header" = "x'\\\" te" ; then
2870     need_old_tbl_header=true
2872 AC_SUBST(pcp_man_dir)
2873 AC_SUBST(have_gzipped_manpages)
2874 AC_SUBST(have_bzip2ed_manpages)
2875 AC_SUBST(have_lzmaed_manpages)
2876 AC_SUBST(have_xzed_manpages)
2877 AC_SUBST(need_old_tbl_header)
2879 dnl public binaries
2880 pcp_bin_dir=`eval echo $bindir`
2881 pcp_bin_dir=`eval echo $pcp_bin_dir`
2882 AC_SUBST(pcp_bin_dir)
2884 pcp_sbin_dir=`eval echo $sbindir`
2885 pcp_sbin_dir=`eval echo $pcp_sbin_dir`
2886 AC_SUBST(pcp_sbin_dir)
2888 dnl include files
2889 pcp_inc_dir=`eval echo $includedir/pcp`
2890 pcp_inc_dir=`eval echo $pcp_inc_dir`
2891 AC_SUBST(pcp_inc_dir)
2893 dnl books - pdfs, html
2894 if test $target_os = linux; then
2895     pcp_books_dir=`eval echo $datarootdir/doc/pcp-doc`
2896 else
2897     pcp_books_dir=`eval echo $datarootdir/doc/pcp`
2899 pcp_books_dir=`eval echo $pcp_books_dir`
2900 pcp_html_dir=`eval echo $pcp_books_dir/html`
2901 AC_SUBST(pcp_books_dir)
2902 AC_SUBST(pcp_html_dir)
2904 dnl icon pixmap files
2905 if test $target_os = linux; then
2906     pcp_icons_dir=`eval echo $datarootdir/pcp-gui/pixmaps`
2907 else
2908     pcp_icons_dir=`eval echo $datarootdir/pcp/pixmaps`
2910 pcp_icons_dir=`eval echo $pcp_icons_dir`
2911 AC_SUBST(pcp_icons_dir)
2913 dnl desktop application entries
2914 pcp_desktop_dir=`eval echo $datarootdir/applications`
2915 pcp_desktop_dir=`eval echo $pcp_desktop_dir`
2916 AC_SUBST(pcp_desktop_dir)
2918 dnl rc/startup files
2919 AC_ARG_WITH(rcdir,[AC_HELP_STRING([--with-rcdir],[rc directory [SYSCONFDIR/rc.d]])],
2920                   [pcp_rc_dir=$withval], [
2921 if $enable_systemd
2922 then
2923     pcp_rc_dir="$pcp_share_dir/lib"
2924 else
2925     pcp_rc_dir="$pcp_etc_dir/init.d"
2926 fi])
2927 AC_SUBST(pcp_rc_dir)
2929 dnl rc sysconfig dir
2930 AC_ARG_WITH(sysconfigdir,[AC_HELP_STRING([--with-sysconfigdir],[sysconfig directory [SYSCONFDIR/sysconfig]])],
2931                   [pcp_sysconfig_dir=$withval],
2932                   [pcp_sysconfig_dir=$pcp_etc_dir/sysconfig])
2933 AC_SUBST(pcp_sysconfig_dir)
2935 dnl logs
2936 AC_ARG_WITH(logdir,[AC_HELP_STRING([--with-logdir],[log directory [LOCALSTATEDIR/log/pcp]])],
2937                    [pcp_log_dir=$withval],
2938                    [pcp_log_dir=$localstatedir/log/pcp])
2939 pcp_log_dir=`eval echo $pcp_log_dir`
2940 pcp_log_dir=`eval echo $pcp_log_dir`
2941 AC_SUBST(pcp_log_dir)
2943 AC_ARG_WITH(rundir,[AC_HELP_STRING([--with-rundir],[run directory [LOCALSTATEDIR/run/pcp]])],
2944                    [pcp_run_dir=$withval],
2945                    [pcp_run_dir=$localstatedir/run/pcp])
2946 pcp_run_dir=`eval echo $pcp_run_dir`
2947 pcp_run_dir=`eval echo $pcp_run_dir`
2948 AC_SUBST(pcp_run_dir)
2950 dnl world-writeable temporary files directory
2951 AC_ARG_WITH(tmpdir,[AC_HELP_STRING([--with-tmpdir],[tmp directory [LOCALSTATEDIR/tmp]])],
2952                    [pcp_tmpfile_dir=$withval],
2953                    [pcp_tmpfile_dir=$localstatedir/tmp])
2954 pcp_tmpfile_dir=`eval echo $pcp_tmpfile_dir`
2955 pcp_tmpfile_dir=`eval echo $pcp_tmpfile_dir`
2956 AC_SUBST(pcp_tmpfile_dir)
2958 dnl non-world-writeable status files directory
2959 pcp_tmp_dir=`eval echo $pcp_var_dir/tmp`
2960 AC_SUBST(pcp_tmp_dir)
2962 dnl doc directory
2963 AC_ARG_WITH(docdir,[AC_HELP_STRING([--with-docdir],[docs directory [DOCDIR/pcp-VERSION]])],
2964                    [pcp_doc_dir=$withval],
2965                    [PACKAGE=pcp-${PACKAGE_VERSION}; pcp_doc_dir=$docdir])
2966 pcp_doc_dir=`eval echo $pcp_doc_dir`
2967 pcp_doc_dir=`eval echo $pcp_doc_dir`
2968 AC_SUBST(pcp_doc_dir)
2970 dnl demos directory
2971 AC_ARG_WITH(demosdir,[AC_HELP_STRING([--with-demosdir],[run directory [DATADIR/pcp/demos]])],
2972                    [pcp_demos_dir=$withval],
2973                    [pcp_demos_dir=$pcp_share_dir/demos])
2974 AC_SUBST(pcp_demos_dir)
2976 if test -z "$XCONFIRM" 
2977 then
2978     AC_PATH_PROG(ac_xconfirm_prog, xconfirm, $pcp_bin_dir/pmconfirm)
2979 else
2980     ac_xconfirm_prog=$XCONFIRM
2982 AC_SUBST(ac_xconfirm_prog)
2984 dnl Check for FNDELAY defined in <fcntl.h>
2985 if test "$ac_cv_header_fcntl_h" = "yes"
2986 then
2987     AC_MSG_CHECKING([for FNDELAY in fcntl.h])
2988     AC_TRY_COMPILE([#include <fcntl.h>],
2989         [ int i = FNDELAY; ],
2990         AC_DEFINE(HAVE_FNDELAY, [1], [FNDELAY macro])
2991         AC_MSG_RESULT(yes), AC_MSG_RESULT(no))
2994 dnl check for zpool_vdev_name API style from <libzfs.h>
2995 if test "$ac_cv_header_libzfs_h" = "yes"
2996 then
2997     AC_MSG_CHECKING([for 5-argument style zpool_vdev_name])
2998     AC_TRY_COMPILE([#include <libzfs.h>],
2999         [ libzfs_handle_t *zh;
3000           zpool_handle_t *zp;
3001           nvlist_t *np;
3002           (void) zpool_vdev_name(zh, zp, np, B_FALSE, B_FALSE);
3003         ],
3004         AC_DEFINE(HAVE_ZPOOL_VDEV_NAME_5ARG, [1], [5-arg zpool_vdev_name])
3005         AC_MSG_RESULT(yes), AC_MSG_RESULT(no))
3007     AC_MSG_CHECKING([for 4-argument style zpool_vdev_name])
3008     AC_TRY_COMPILE([#include <libzfs.h>],
3009         [ libzfs_handle_t *zh;
3010           zpool_handle_t *zp;
3011           nvlist_t *np;
3012           (void) zpool_vdev_name(zh, zp, np, B_FALSE);
3013         ],
3014         AC_DEFINE(HAVE_ZPOOL_VDEV_NAME_4ARG, [1], [4-arg zpool_vdev_name])
3015         AC_MSG_RESULT(yes), AC_MSG_RESULT(no))
3018 dnl Check for Network Security Services (NSS) and
3019 dnl Simple Authentication and Security Layer (SASL)
3020 if test "$do_secure" = "check" -o "$do_secure" = "yes"
3021 then
3022     enable_secure=true
3024     saved_CFLAGS="$CFLAGS"
3025     saved_CPPFLAGS="$CPPFLAGS"
3026     NSS_INC_DIRS="-I/usr/include/nss -I/usr/include/nss3"
3027     NSPR_INC_DIRS="-I/usr/include/nspr -I/usr/include/nspr4"
3028     CFLAGS="$CFLAGS $NSS_INC_DIRS $NSPR_INC_DIRS"
3029     CPPFLAGS="$CPPFLAGS $NSS_INC_DIRS $NSPR_INC_DIRS"
3031     AC_CHECK_HEADERS([nss/nss.h], [NSSCFLAGS=-I/usr/include/nss], [
3032         AC_CHECK_HEADERS([nss3/nss.h], [NSSCFLAGS=-I/usr/include/nss3], [
3033             enable_secure=false
3034             if test "$do_secure" = "yes"
3035             then
3036                 AC_MSG_ERROR([cannot enable secure sockets mode - no NSS header])
3037             fi
3038         ])
3039     ])
3040     AC_SUBST(NSSCFLAGS)
3042     AC_CHECK_HEADERS([nspr/nspr.h], [NSPRCFLAGS=-I/usr/include/nspr], [
3043         AC_CHECK_HEADERS([nspr4/nspr.h], [NSPRCFLAGS=-I/usr/include/nspr4], [
3044             enable_secure=false
3045             if test "$do_secure" = "yes"
3046             then
3047                 AC_MSG_ERROR([cannot enable secure sockets mode - no NSPR header])
3048             fi
3049         ])
3050     ])
3051     AC_SUBST(NSPRCFLAGS)
3053     AC_CHECK_HEADERS([sasl/sasl.h], [SASLCFLAGS=-I/usr/include/sasl], [
3054         enable_secure=false
3055         if test "$do_secure" = "yes"
3056         then
3057             AC_MSG_ERROR([cannot enable secure sockets mode - no SASL header])
3058         fi
3059     ])
3060     AC_SUBST(SASLCFLAGS)
3062     AC_CHECK_LIB(sasl2, sasl_server_init, [lib_for_sasl="-lsasl2"], [
3063         enable_secure=false
3064         if test "$do_secure" = "yes"
3065         then
3066             AC_MSG_ERROR([cannot enable secure sockets mode - no SASL library])
3067         fi
3068     ])
3069     AC_SUBST(lib_for_sasl)
3071     AC_CHECK_LIB(ssl, SSL_ImportFD, [lib_for_ssl="-lssl"], [
3072         AC_CHECK_LIB(ssl3, SSL_ImportFD, [lib_for_ssl="-lssl3"], [
3073             enable_secure=false
3074             if test "$do_secure" = "yes"
3075             then
3076                 AC_MSG_ERROR([cannot enable secure sockets mode - no SSL library])
3077             fi
3078         ])
3079     ])
3080     AC_SUBST(lib_for_ssl)
3082     AC_CHECK_LIB(nss, NSS_Init, [lib_for_nss="-lnss"], [
3083         AC_CHECK_LIB(nss3, NSS_Init, [lib_for_nss="-lnss3"], [
3084             enable_secure=false
3085             if test "$do_secure" = "yes"
3086             then
3087                 AC_MSG_ERROR([cannot enable secure sockets mode - no NSS library])
3088             fi
3089         ])
3090     ])
3091     AC_SUBST(lib_for_nss)
3093     AC_CHECK_LIB(nspr, PR_Init, [lib_for_nspr="-lnspr"], [
3094         AC_CHECK_LIB(nspr4, PR_Init, [lib_for_nspr="-lnspr4"], [
3095             enable_secure=false
3096             if test "$do_secure" = "yes"
3097             then
3098                 AC_MSG_ERROR([cannot enable secure sockets mode - no NSPR library])
3099             fi
3100         ])
3101     ])
3102     AC_SUBST(lib_for_nspr)
3104     if test "$enable_secure" = "true"
3105     then
3106         AC_DEFINE(HAVE_SECURE_SOCKETS, [1], [Encrypted sockets])
3107     fi
3108     AC_SUBST(enable_secure)
3110     CPPFLAGS="$saved_CPPFLAGS"
3111     CFLAGS="$saved_CFLAGS"
3114 dnl check for -latomic, needed for some -march=i386 builds with i686 c++ distro headers
3115 AC_CHECK_LIB(atomic, __atomic_fetch_add_4, [lib_for_atomic="-latomic"])
3116 AC_SUBST(lib_for_atomic)
3118 dnl check for array sessions
3119 if test -f /usr/include/sn/arsess.h
3120 then
3121     pcp_mpi_dirs=libpcp_mpi\ libpcp_mpiread
3122 else
3123     pcp_mpi_dirs=
3125 AC_SUBST(pcp_mpi_dirs)
3127 dnl check for Unix Domain socket family structure
3128 AC_MSG_CHECKING([for struct sockaddr_un in sys/un.h])
3129 AC_TRY_COMPILE([
3130     #include <sys/types.h>
3131     #ifdef HAVE_SYS_SOCKET_H
3132     #include <sys/socket.h>
3133     #endif
3134     #ifdef HAVE_SYS_UN_H
3135     #include <sys/un.h>
3136     #endif
3137 ], [ struct sockaddr_un sa; sa.sun_family = AF_UNIX; ],
3138 AC_DEFINE(HAVE_STRUCT_SOCKADDR_UN, [1], [sockaddr_un type]) AC_MSG_RESULT(yes), AC_MSG_RESULT(no))
3140 dnl check for Linux Unix Domain socket credential structure
3141 AC_MSG_CHECKING([for struct ucred in sys/socket.h])
3142 AC_TRY_COMPILE([
3143     #include <sys/types.h>
3144     #ifdef HAVE_SYS_SOCKET_H
3145     #include <sys/socket.h>
3146     #endif
3147     #ifdef HAVE_SYS_UN_H
3148     #include <sys/un.h>
3149     #endif
3150 ], [ struct ucred ucred; ucred.uid = 0; ],
3151 AC_DEFINE(HAVE_STRUCT_UCRED, [1], [ucred type]) AC_MSG_RESULT(yes), AC_MSG_RESULT(no))
3153 dnl check for struct timespec in <time.h>
3154 AC_MSG_CHECKING([for struct timespec in time.h])
3155 AC_TRY_COMPILE([
3156     #include <time.h>
3157 ], [ struct timespec foo; ],
3158 AC_DEFINE(HAVE_STRUCT_TIMESPEC, [1], [timespec type]) AC_MSG_RESULT(yes), AC_MSG_RESULT(no))
3160 dnl check if we have IRIX style altzone 
3161 AC_MSG_CHECKING([for altzone in time.h])
3162 AC_TRY_COMPILE([
3163     #include <time.h>
3164 ], [ time_t az = altzone; ],
3165 AC_DEFINE(HAVE_ALTZONE, [1], [altzone global]) AC_MSG_RESULT(yes), AC_MSG_RESULT(no))
3167 dnl If there is no altzone, check if strftime can handle %z
3168 AC_MSG_CHECKING([if strftime knows about %z])
3169 AC_TRY_RUN(
3171 #include <time.h>
3172 int main () {
3173     char b[32]="";
3174     time_t t = time(NULL);
3175     struct tm * t1 = localtime (&t);
3176     if (strftime (b, 32, "%z", t1) < 3)
3177        return (1);
3178     if (strcmp(b, "%z") == 0)
3179        return(1);
3180     return (0);
3182 ], AC_DEFINE(HAVE_STRFTIME_z, [1], [strftime with %z]) AC_MSG_RESULT(yes), AC_MSG_RESULT(no), AC_MSG_RESULT(no))
3184 dnl does strerror_r return char * a la GNU
3185 dnl (as opposed to the int return for XSI-compliant variants)
3186 AC_MSG_CHECKING([if strerror_r returns char *])
3187 AC_TRY_COMPILE(
3188     [#include <string.h>], [strerror_r(0, NULL, 0)[0];],
3189     AC_DEFINE(HAVE_STRERROR_R_PTR, [1], [strerror_r return]) AC_MSG_RESULT(yes), AC_MSG_RESULT(no))
3191 dnl first check for readline on its own then with curses
3192 savedLIBS=$LIBS
3193 LIBS=
3194 lib_for_curses=
3195 lib_for_readline=
3196 AC_CHECK_FUNC(readline,,
3197     [
3198         AC_CHECK_LIB(readline, readline,,
3199             [
3200                 dnl AC seems to cache lib/func results
3201                 dnl so use another readline func here
3202                 AC_CHECK_LIB(readline, add_history,,,[-lcurses])
3203             ])
3204     ])
3205 if test $ac_cv_func_readline = yes
3206 then
3207     AC_DEFINE(HAVE_READLINE, [1], [readline API])
3208 elif test $ac_cv_lib_readline_readline = yes
3209 then
3210     AC_DEFINE(HAVE_READLINE, [1], [readline API])
3211     lib_for_readline=-lreadline
3212 elif test $ac_cv_lib_readline_add_history = yes
3213 then
3214     AC_DEFINE(HAVE_READLINE, [1], [readline API])
3215     lib_for_curses=-lcurses
3216     lib_for_readline=-lreadline
3218 AC_SUBST(lib_for_readline)
3219 AC_SUBST(lib_for_curses)
3220 LIBS=$savedLIBS
3222 dnl Look for zlib
3223 PKG_CHECK_MODULES([zlib], [zlib >= 1.0.0], [have_zlib=true], [have_zlib=false])
3224 AC_SUBST(HAVE_ZLIB, [$have_zlib])
3226 dnl Check if we have AI_ADDRCONFIG
3227 AC_MSG_CHECKING([for AI_ADDRCONFIG])
3228 AC_TRY_COMPILE(
3229 [  
3230     #include <netdb.h>
3231     int test = AI_ADDRCONFIG;
3234 ], AC_DEFINE(HAVE_AI_ADDRCONFIG, [1], [AI_ADDRCONFIG macro]) AC_MSG_RESULT(yes), AC_MSG_RESULT(no))
3236 dnl Find external source tarballs for packaging
3238 have_parfait=false
3239 if test -f ./build/tar/parfait.tar.gz
3240 then
3241     AC_MSG_NOTICE([adding Parfait package to the build])
3242     have_parfait=true
3244 AC_SUBST(have_parfait)
3246 have_vector=false
3247 if test -f ./build/tar/vector.tar.gz
3248 then
3249     AC_MSG_NOTICE([adding Vector webapp to the build])
3250     have_vector=true
3252 AC_SUBST(have_vector)
3254 have_webjs=false
3255 if test -f ./build/tar/webjs.tar.gz
3256 then
3257     AC_MSG_NOTICE([adding webjs webapps to the build])
3258     have_webjs=true
3260 AC_SUBST(have_webjs)
3262 dnl Capture special options passed to configure
3263 AC_SUBST(PACKAGE_CONFIGURE)
3266 dnl output files
3269 AC_OUTPUT(
3270 dnl   Build definitions for use in Makefiles
3271     src/include/builddefs
3272 dnl   PCP paths and other defs
3273     src/include/pcp.conf
3274 dnl   Linux Software Map entry
3275     pcp.lsm
3276 dnl   Preamble for deb install scripts
3277     debian/pcp.preinst.head
3278     debian/pcp.postinst.head
3279 dnl   Preamble for tar install scripts
3280     build/tar/preinstall.head
3281     build/tar/postinstall.head
3282 dnl   Build definitions for use in packaging
3283     build/GNUlocaldefs
3284     build/mac/uninstall-pcp
3287 dnl verbose diagnostics
3289 dnl echo config.status: settings dump begin
3290 dnl grep '^S.".*=' config.status
3291 dnl echo config.status: settings dump end