1 dnl Process this file with autoconf to produce a configure script.
3 dnl Copyright (C) 2021-2024 Free Software Foundation, Inc.
5 dnl This file is free software; you can redistribute it and/or modify
6 dnl it under the terms of the GNU General Public License as published by
7 dnl the Free Software Foundation; either version 3 of the License, or
8 dnl (at your option) any later version.
10 dnl This program is distributed in the hope that it will be useful,
11 dnl but WITHOUT ANY WARRANTY; without even the implied warranty of
12 dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 dnl GNU General Public License for more details.
15 dnl You should have received a copy of the GNU General Public License
16 dnl along with this program; see the file COPYING3. If not see
17 dnl <http://www.gnu.org/licenses/>.
19 m4_include([../bfd/version.m4])
20 m4_include([../config/zlib.m4])
21 AC_INIT([gprofng], BFD_VERSION)
23 AM_INIT_AUTOMAKE([subdir-objects])
26 AC_USE_SYSTEM_EXTENSIONS
32 gl_PROG_BISON([BISON],[3.0.4])
37 GPROFNG_LIBADD="-L../../libiberty -liberty"
38 if test "$enable_shared" = "yes"; then
39 GPROFNG_LIBADD="-L../../libiberty/pic -liberty"
41 AC_SUBST(GPROFNG_LIBADD)
43 # Figure out what compiler warnings we can enable.
44 # See config/warnings.m4 for details.
46 ACX_PROG_CC_WARNINGS_ARE_ERRORS([manual])
47 ACX_PROG_CC_WARNING_OPTS([-Wall], [gprofng_cflags])
48 ACX_PROG_CC_WARNING_OPTS([-Wno-switch], [GPROFNG_NO_SWITCH_CFLAGS])
49 gprofng_cppflags="-U_ASM"
67 AC_ARG_ENABLE(gprofng-tools,
68 AS_HELP_STRING([--disable-gprofng-tools], [do not build gprofng/src directory]),
71 AM_CONDITIONAL([BUILD_COLLECTOR], [test x$build_collector = xtrue])
72 AM_CONDITIONAL([BUILD_SRC], [test x$build_src = xtrue])
74 if test x$build_collector = xtrue; then
75 AC_CONFIG_SUBDIRS([libcollector])
79 # Specify a location for JDK
83 [AS_HELP_STRING([--with-jdk=PATH],
84 [specify prefix directory for installed JDK.])])
86 if test "x$with_jdk" != x; then
87 jdk_inc="-I$with_jdk/include -I$with_jdk/include/linux"
90 AC_PATH_PROG([JAVAC], [javac], [javac])
91 if test -f $JAVAC; then
92 x=`readlink -f $JAVAC`
95 if ! test -f $x/include/jni.h; then
98 if test -f $x/include/jni.h; then
99 jdk_inc="-I$x/include -I$x/include/linux"
100 enable_gprofng_jp=yes
104 if test "x$enable_gprofng_jp" = x; then
105 AC_PATH_PROG([JAVA], [java], [java])
106 if test -f $JAVA; then
107 x=`readlink -f $JAVA`
110 if ! test -f $x/include/jni.h; then
113 if test -f $x/include/jni.h; then
114 jdk_inc="-I$x/include -I$x/include/linux"
115 enable_gprofng_jp=yes
119 if test "x$enable_gprofng_jp" = x; then
120 AC_CHECK_HEADER([jni.h], [ enable_gprofng_jp=yes ], [], [] )
122 GPROFNG_BROKEN_JAVAC=no
123 if test "x$enable_gprofng_jp" = x; then
124 AC_MSG_WARN([ Cannot find the JDK include directory.
125 gprofng will be build without support for profiling Java applications.
126 Use --with-jdk=PATH to specify directory for the installed JDK])
128 AC_DEFINE(GPROFNG_JAVA_PROFILING, 1, [Enable java profiling])
129 if test "x$JAVAC" != x; then
130 cat > Simple.java << EOF
132 public static void main(String args[]){
133 System.out.println("Hello Java");
137 if AC_TRY_COMMAND($JAVAC Simple.java >&AS_MESSAGE_LOG_FD 2>&AS_MESSAGE_LOG_FD); then
138 GPROFNG_BROKEN_JAVAC=no
140 GPROFNG_BROKEN_JAVAC=yes
145 AC_SUBST(GPROFNG_BROKEN_JAVAC)
149 GCC_ENABLE([gprofng-debug], [no], [], [Enable debugging output])
150 if test "${enable_gprofng_debug}" = yes; then
151 AC_DEFINE(DEBUG, 1, [Enable debugging output.])
154 cat > "dummy.c" << EOF
155 #include <features.h>
156 #if defined(__UCLIBC__)
158 #elif defined(__dietlibc__)
160 #elif defined(__GLIBC__)
164 /* First heuristic to detect musl libc. */
165 #ifdef __DEFINED_va_list
172 cc_set_libc=`$CC -E "dummy.c" 2>/dev/null | grep '^LIBC=' | sed 's, ,,g'`
174 if test "$LIBC" = musl; then
175 AC_DEFINE(__MUSL_LIBC, 1, [Build with musl-libc.])
179 # Check if linker supports --as-needed and --no-as-needed options.
180 AC_CACHE_CHECK(linker --as-needed support, bfd_cv_ld_as_needed,
181 [bfd_cv_ld_as_needed=no
182 if $LD --help 2>/dev/null | grep as-needed > /dev/null; then
183 bfd_cv_ld_as_needed=yes
188 if test x"$bfd_cv_ld_as_needed" = xyes; then
189 no_as_needed='-Wl,--no-as-needed'
192 AC_PATH_PROG([EXPECT], [expect])
193 AC_CACHE_CHECK([for Tcl supporting try/catch], [ac_cv_libctf_tcl_try],
194 [ac_cv_libctf_tcl_try=`if test -z $EXPECT; then echo no; else $EXPECT << EOF
195 if @<:@llength @<:@info commands try@:>@@:>@ then { puts yes } else { puts no }
200 # Only native testing and only on supported platforms:
201 AM_CONDITIONAL(TCL_TRY, [test "${ac_cv_libctf_tcl_try}" = yes \
202 -a "x${build_src}" = xtrue -a "x${build_collector}" = xtrue \
203 -a "x${host}" = "x${target}"])
207 # Generate manpages, if possible.
210 if test $cross_compiling = no; then
211 AC_CHECK_PROGS([MAKEINFO], makeinfo, [$MISSING makeinfo])
213 x | */missing\ makeinfo*)
214 AC_MSG_WARN([gprofng: makeinfo is missing. Info documentation will not be built.])
217 case x"`$MAKEINFO --version | grep 'GNU texinfo'`" in
218 x*\ [[1-5]].*|x*\ 6.[[0-4]].* )
219 AC_MSG_WARN([gprofng: $MAKEINFO is too old. Info documentation will not be built.])
220 MAKEINFO="@echo $MAKEINFO is too old, 6.5 or newer required; true"
222 x* ) build_doc=true ;;
228 AM_CONDITIONAL([BUILD_MAN], [test x$build_man = xtrue])
229 AM_CONDITIONAL([BUILD_DOC], [test x$build_doc = xtrue])
231 AC_SUBST(LD_NO_AS_NEEDED, [${no_as_needed}])
232 AC_SUBST(GPROFNG_CFLAGS, [${gprofng_cflags}])
233 AC_SUBST(GPROFNG_NO_FORMAT_TRUNCATION_CFLAGS)
234 AC_SUBST(GPROFNG_NO_SWITCH_CFLAGS)
235 AC_SUBST(GPROFNG_CPPFLAGS, [${gprofng_cppflags}])
237 AC_CHECK_DECLS([basename])
238 AC_CHECK_FUNCS(clock_gettime strsignal)
241 # At least for glibc, clock_gettime is in librt. But don't
242 # pull that in if it still doesn't give us the function we want. This
243 # test is copied from libgomp, and modified to not link in -lrt as
244 # we're using this for test timing only.
245 if test "$ac_cv_func_clock_gettime" = no; then
246 AC_CHECK_LIB(rt, clock_gettime,
247 [CLOCK_GETTIME_LINK=-lrt
248 AC_DEFINE(HAVE_CLOCK_GETTIME, 1,
249 [Define to 1 if you have the `clock_gettime' function.])])
251 AC_SUBST(CLOCK_GETTIME_LINK)
253 AC_SUBST(BUILD_SUBDIRS)
255 AC_CONFIG_FILES([Makefile src/Makefile gp-display-html/Makefile doc/Makefile])
256 AC_CONFIG_HEADERS([config.h:common/config.h.in])