1#   Autoconf script for oprofile
2#
3#   Copyright 1999 Olaf Titz <olaf@bigred.inka.de>
4#   Adapted for oprofile
5#
6#   This program is free software; you can redistribute it and/or
7#   modify it under the terms of the GNU General Public License
8#   as published by the Free Software Foundation; either version
9#   2 of the License, or (at your option) any later version.
10#
11
12AC_PREREQ(2.13)
13
14AC_INIT(libop/op_config.h)
15AM_INIT_AUTOMAKE(oprofile, 0.9.7cvs)
16AM_CONFIG_HEADER(config.h)
17
18AC_CHECK_DECLS([basename], [], [], [[#include <libgen.h>]])
19AC_PROG_RANLIB
20AC_PROG_LIBTOOL
21
22dnl for the man page
23DATE="`date '+%a %d %B %Y'`"
24AC_SUBST(DATE)
25
26dnl needed for module build
27OPROFILE_DIR=`pwd`
28AC_SUBST(OPROFILE_DIR)
29 
30# this needs to come before --with-gcc so we link with binutil's version
31# of libiberty ... sigh
32AC_ARG_WITH(binutils,
33[  --with-binutils=dir		Path to binutils installation to use], BINUTILSDIR=$withval)
34
35if test "$BINUTILSDIR" != ""; then
36	LD="$BINUTILSDIR/ld"
37	if test "$CFLAGS" = ""; then
38		CFLAGS="-g -O2"
39	fi
40	if test "$CXXFLAGS" = ""; then
41		CXXFLAGS="-g -O2"
42	fi
43	CFLAGS="$CFLAGS -I$BINUTILSDIR/include"
44	CXXFLAGS="$CXXFLAGS -I$BINUTILSDIR/include"
45	AC_ARG_WITH(binutils-libname,
46		[  --with-binutils-libname       Lib dir name under binutils installation; @<:@lib@:>@]],
47		BINUTILSLIB=$withval)
48	if test "$BINUTILSLIB" = ""; then
49		BINUTILSLIB="lib"
50	fi
51	LDFLAGS="$LDFLAGS -L$BINUTILSDIR/$BINUTILSLIB -Xlinker -R -Xlinker $BINUTILSDIR/$BINUTILSLIB"
52fi
53
54AC_ARG_WITH(gcc,
55[  --with-gcc=dir		Path to GCC installation to use], GCCDIR=$withval)
56
57if test "$GCCDIR" != ""; then
58	CC="$GCCDIR/bin/gcc"
59	CXX="$GCCDIR/bin/g++"
60	LDFLAGS="$LDFLAGS -L$GCCDIR/lib -Xlinker -R -Xlinker $GCCDIR/lib"
61fi
62
63AC_PROG_CC
64AC_PROG_CPP
65AC_PROG_CXX
66AC_CHECK_PROG(LD,ld,ld,)
67test "$LD" || AC_ERROR(ld not found)
68
69AX_FIND_KERNEL
70
71if test "$OPROFILE_26" = "no"; then
72	AX_CONFIG_MODULE
73fi
74
75AC_ARG_WITH(module-dir,
76[  --with-module-dir=dir        Path to module installation directory], MODINSTALLDIR=$withval)
77AC_SUBST(MODINSTALLDIR)
78
79AC_ARG_WITH(java,
80[  --with-java=java-home        Path to Java home directory], JAVA_HOMEDIR=$withval)
81AC_SUBST(JAVA_HOMEDIR)
82
83if test -n "$JAVA_HOMEDIR"; then
84	AC_CHECK_FILE("$JAVA_HOMEDIR/include/jvmti.h",JVMTI_H_EXISTS="yes",)
85	AC_CHECK_FILE("$JAVA_HOMEDIR/include/jvmpi.h",JVMPI_H_EXISTS="yes",)
86fi
87
88AM_CONDITIONAL(BUILD_JVMTI_AGENT, test -n "$JVMTI_H_EXISTS")
89AM_CONDITIONAL(BUILD_JVMPI_AGENT, test -n "$JVMPI_H_EXISTS")
90
91AX_MALLOC_ATTRIBUTE
92AX_BUILTIN_EXPECT
93
94AC_SUBST(EXTRA_CFLAGS_MODULE)
95
96topdir=`pwd`
97AC_SUBST(topdir)
98 
99AX_EXTRA_DIRS
100
101ORIG_SAVE_LIBS="$LIBS"
102
103dnl advanced glibc features which we need but may not be present
104AC_CHECK_FUNCS(sched_setaffinity perfmonctl)
105
106AC_CHECK_LIB(popt, poptGetContext,, AC_MSG_ERROR([popt library not found]))
107AX_BINUTILS
108AX_CELL_SPU
109
110# C++ tests
111 
112AC_LANG_CPLUSPLUS
113
114AX_POPT_CONST
115AX_CHECK_SSTREAM
116
117dnl bfd.h pre 1998 check only for gnu 2.xx series, so gcc 3.0 can't compile it
118AC_MSG_CHECKING([whether bfd defines bool])
119AC_TRY_COMPILE([#include <bfd.h>], [], 
120AC_MSG_RESULT([no]);,
121AC_MSG_RESULT([yes]); AC_DEFINE(TRUE_FALSE_ALREADY_DEFINED, 1, [whether bfd.h defines bool values]))
122
123dnl smart demangler need to know what are the underlined type for some typedef
124AX_TYPEDEFED_NAME(size_t, "unsigned" "unsigned long", SIZE_T_TYPE)
125AC_SUBST(SIZE_T_TYPE)
126AX_TYPEDEFED_NAME(ptrdiff_t, "int" "long", PTRDIFF_T_TYPE)
127AC_SUBST(PTRDIFF_T_TYPE)
128
129AC_PATH_XTRA
130ORIG_X_SAVE_LIBS="$LIBS"
131LIBS="$X_PRE_LIBS $LIBS $X_LIBS -lX11 $X_EXTRA_LIBS"
132X_LIBS="$LIBS"
133AC_SUBST(X_LIBS)
134QT_DO_IT_ALL
135LIBS="$ORIG_X_SAVE_LIBS"
136
137dnl enable pch for c++
138AC_ARG_ENABLE(pch,
139	[  --enable-pch                 enable precompiled header (default is disabled)],
140	enable_pch=$enableval, enable_pch=no)
141if test "$enable_pch" = yes; then
142	AX_CHECK_PRECOMPILED_HEADER(OP_CXXFLAGS)
143fi
144
145AX_CHECK_DOCBOOK
146
147dnl finally restore the original libs setting
148LIBS="$ORIG_SAVE_LIBS"
149LIBERTY_LIBS="-liberty $DL_LIB $INTL_LIB"
150BFD_LIBS="-lbfd -liberty $DL_LIB $INTL_LIB $Z_LIB"
151POPT_LIBS="-lpopt"
152AC_SUBST(LIBERTY_LIBS)
153AC_SUBST(BFD_LIBS)
154AC_SUBST(POPT_LIBS)
155
156# do NOT put tests here, they will fail in the case X is not installed !
157 
158AM_CONDITIONAL(have_qt, test -n "$QT_LIB")
159
160AX_CFLAGS_OPTION(OP_CFLAGS,[-W])
161AX_CXXFLAGS_OPTION(OP_CXXFLAGS,[-W])
162AX_CFLAGS_OPTION(OP_CFLAGS,[-Wall])
163AX_CXXFLAGS_OPTION(OP_CXXFLAGS,[-Wall])
164AX_CFLAGS_OPTION(OP_CFLAGS,[-fno-common])
165AX_CXXFLAGS_OPTION(OP_CXXFLAGS,[-fno-common])
166AX_CXXFLAGS_OPTION(OP_CXXFLAGS,[-ftemplate-depth-50])
167AX_CFLAGS_OPTION(OP_CFLAGS,[-Wdeclaration-after-statement])
168
169dnl enable option to use GCC test coverage
170AC_ARG_ENABLE(gcov,
171	[  --enable-gcov                enable option for gcov coverage testing (default is disabled)],
172	enable_gcov=$enableval, enable_gcov=no)
173if test "$enable_gcov" = yes; then
174	AX_CFLAGS_OPTION(OP_CFLAGS,[-fprofile-arcs])
175	AX_CXXFLAGS_OPTION(OP_CXXFLAGS,[-fprofile-arcs])
176	AX_CFLAGS_OPTION(OP_CFLAGS,[-ftest-coverage])
177	AX_CXXFLAGS_OPTION(OP_CXXFLAGS,[-ftest-coverage])
178fi
179
180AC_ARG_ENABLE(werror,
181	[  --disable-werror            disable -Werror flag (default is enabled for non-release)],
182        enable_werror=$enableval, enable_werror=yes)
183if test "$enable_werror" = yes; then
184	# enable -Werror for non-release versions.
185	if echo "$VERSION" | grep cvs >/dev/null; then
186		AX_CFLAGS_OPTION(OP_CFLAGS,[-Werror])
187		AX_CXXFLAGS_OPTION(OP_CXXFLAGS,[-Werror])
188	fi
189fi
190
191AC_ARG_ENABLE(optimization,
192	[  --disable-optimization      disable optimization flags (default is enabled)],
193	enable_optimization=$enableval, enable_optimisation=yes)
194if test "$enable_optimization" = "no"; then
195	CFLAGS=`echo $CFLAGS | sed 's/-O2//g'`
196	CXXFLAGS=`echo $CXXFLAGS | sed 's/-O2//g'`
197fi
198
199AC_ARG_ENABLE(account-check,
200	[  --disable-account-check     disable account check (default is enabled)],
201	enable_account_check=$enableval, enable_account_check=yes)
202
203AM_CONDITIONAL(CHECK_ACCOUNT, test "x$enable_account_check" = "xyes")
204
205AC_SUBST(OP_CFLAGS)
206AC_SUBST(OP_CXXFLAGS)
207
208# fixups for config.h
209if test "$prefix" = "NONE"; then
210	my_op_prefix="$ac_default_prefix"
211else
212	my_op_prefix="$prefix"
213fi
214my_op_datadir="$my_op_prefix/share"
215
216if test "$exec_prefix" = "NONE"; then
217	my_op_exec_prefix="$my_op_prefix"
218else
219	my_op_exec_prefix="$exec_prefix"
220fi
221my_op_bindir="$my_op_exec_prefix/bin"
222
223OP_DATADIR=`eval echo "$my_op_datadir/$PACKAGE/"`
224AC_DEFINE_UNQUOTED(OP_DATADIR, "$OP_DATADIR", [package data directory])
225OP_BINDIR=`eval echo "$my_op_bindir/"`
226AC_DEFINE_UNQUOTED(OP_BINDIR, "$OP_BINDIR", [package binary directory])
227OP_DOCDIR=`eval echo "${my_op_prefix}/share/doc/$PACKAGE/"`
228AC_SUBST(OP_DOCDIR)
229
230AC_OUTPUT(Makefile \
231	m4/Makefile \
232	libutil/Makefile \
233	libutil/tests/Makefile \
234	libutil++/Makefile \
235	libutil++/tests/Makefile \
236	libop/Makefile \
237	libop/tests/Makefile \
238	libopagent/Makefile \
239	libopt++/Makefile \
240	libdb/Makefile \
241	libdb/tests/Makefile \
242	libabi/Makefile \
243	libabi/tests/Makefile \
244	libregex/Makefile \
245	libregex/tests/Makefile \
246	libregex/stl.pat \
247	libregex/tests/mangled-name \
248	daemon/Makefile \
249	daemon/liblegacy/Makefile \
250	events/Makefile \
251	utils/Makefile \
252	doc/Makefile \
253	doc/xsl/catalog-1.xml \
254	doc/oprofile.1 \
255	doc/opcontrol.1 \
256	doc/ophelp.1 \
257	doc/opreport.1 \
258	doc/opannotate.1 \
259	doc/opgprof.1 \
260	doc/oparchive.1 \
261	doc/opimport.1 \
262	doc/srcdoc/Doxyfile \
263	libpp/Makefile \
264	opjitconv/Makefile \
265	pp/Makefile \
266	gui/Makefile \
267	gui/ui/Makefile \
268	module/Makefile \
269	module/x86/Makefile \
270	module/ia64/Makefile \
271	agents/Makefile \
272	agents/jvmti/Makefile \
273	agents/jvmpi/Makefile)
274
275AX_COPY_IF_CHANGE(doc/xsl/catalog-1.xml, doc/xsl/catalog.xml)
276
277if test -z "$QT_LIB"; then
278	echo "Warning: a working Qt not found; no GUI will be built"
279fi
280
281if ! test "x$enable_account_check" = "xyes"; then
282	:
283elif test "`getent passwd oprofile 2>/dev/null`" == "" || \
284     test "`getent group oprofile 2>/dev/null`" == ""; then
285	if test `id -u` != "0"; then
286		echo "Warning: The user account 'oprofile:oprofile' does not exist on the system."
287		echo "         To profile JITed code, this special user account must exist."
288		echo "         Please ask your system administrator to add the following user and group:"
289		echo "             user name : 'oprofile'"
290		echo "             group name: 'oprofile'"
291		echo "         The 'oprofile' group must be the default group for the 'oprofile' user."
292	else
293		echo "Warning: The user account 'oprofile:oprofile' does not exist on the system."
294		echo "         To profile JITed code, this special user account must exist."
295		echo "         Please add the following user and group:"
296		echo "             user name : 'oprofile'"
297		echo "             group name: 'oprofile'"
298		echo "         The 'oprofile' group must be the default group for the 'oprofile' user."
299	fi
300fi
301
302