Home | History | Annotate | Line # | Download | only in gprofng
      1 dnl Process this file with autoconf to produce a configure script.
      2 dnl
      3 dnl   Copyright (C) 2021-2025 Free Software Foundation, Inc.
      4 dnl
      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.
      9 dnl
     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.
     14 dnl
     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/>.
     18 
     19 m4_include([../bfd/version.m4])
     20 m4_include([../config/zlib.m4])
     21 AC_INIT([gprofng], [BFD_VERSION])
     22 AC_CANONICAL_TARGET
     23 AM_INIT_AUTOMAKE([subdir-objects])
     24 AM_MAINTAINER_MODE
     25 
     26 AC_USE_SYSTEM_EXTENSIONS
     27 AC_PROG_CC
     28 AC_PROG_CXX
     29 AC_PROG_INSTALL
     30 AC_PROG_RANLIB
     31 AM_PROG_AR
     32 gl_PROG_BISON([BISON],[3.0.4])
     33 
     34 AC_DISABLE_SHARED
     35 LT_INIT
     36 AC_C_BIGENDIAN
     37 
     38 GPROFNG_LIBADD="-L../../libiberty -liberty"
     39 if test "$enable_shared" = "yes"; then
     40   GPROFNG_LIBADD="-L../../libiberty/pic -liberty"
     41 fi
     42 AC_SUBST(GPROFNG_LIBADD)
     43 
     44 # Figure out what compiler warnings we can enable.
     45 # See config/warnings.m4 for details.
     46 
     47 ACX_PROG_CC_WARNINGS_ARE_ERRORS([manual])
     48 ACX_PROG_CC_WARNING_OPTS([-Wall], [gprofng_cflags])
     49 ACX_PROG_CC_WARNING_OPTS([-Wno-switch], [GPROFNG_NO_SWITCH_CFLAGS])
     50 gprofng_cppflags="-U_ASM"
     51 build_collector=
     52 build_src=
     53 
     54   case "${host}" in
     55     x86_64-*-linux*)
     56       build_src=true
     57       build_collector=true
     58       ;;
     59     i?86-*-linux*)
     60       build_src=true
     61       build_collector=true
     62       ;;
     63     aarch64-*-linux*)
     64       build_src=true
     65       build_collector=true
     66       ;;
     67     riscv*-*-linux*)
     68       build_src=true
     69       build_collector=true
     70       ;;
     71   esac
     72   AC_ARG_ENABLE(gprofng-tools,
     73     AS_HELP_STRING([--disable-gprofng-tools], [do not build gprofng/src directory]),
     74     build_src=$enableval)
     75 
     76 AM_CONDITIONAL([BUILD_COLLECTOR], [test x$build_collector = xtrue])
     77 AM_CONDITIONAL([BUILD_SRC], [test x$build_src = xtrue])
     78 
     79 if test x$build_collector = xtrue; then
     80   AC_CONFIG_SUBDIRS([libcollector])
     81 fi
     82 AX_PTHREAD
     83 
     84 # Specify a location for JDK
     85 enable_gprofng_jp=
     86 jdk_inc=
     87 AC_ARG_WITH(jdk,
     88 [AS_HELP_STRING([--with-jdk=PATH],
     89 		[specify prefix directory for installed JDK.])])
     90 
     91 if test "x$with_jdk" != x; then
     92   jdk_inc="-I$with_jdk/include -I$with_jdk/include/linux"
     93   enable_gprofng_jp=yes
     94 else
     95   AC_PATH_PROG([JAVAC], [javac], [javac])
     96   if test -f $JAVAC; then
     97     x=`readlink -f $JAVAC`
     98     x=`dirname $x`
     99     x=`dirname $x`
    100     if ! test -f $x/include/jni.h; then
    101       x=`dirname $x`
    102     fi
    103     if test -f $x/include/jni.h; then
    104       jdk_inc="-I$x/include -I$x/include/linux"
    105       enable_gprofng_jp=yes
    106     fi
    107   fi
    108 fi
    109 if test "x$enable_gprofng_jp" = x; then
    110   AC_PATH_PROG([JAVA], [java], [java])
    111   if test -f $JAVA; then
    112     x=`readlink -f $JAVA`
    113     x=`dirname $x`
    114     x=`dirname $x`
    115     if ! test -f $x/include/jni.h; then
    116       x=`dirname $x`
    117     fi
    118     if test -f $x/include/jni.h; then
    119       jdk_inc="-I$x/include -I$x/include/linux"
    120       enable_gprofng_jp=yes
    121     fi
    122   fi
    123 fi
    124 if test "x$enable_gprofng_jp" = x; then
    125   AC_CHECK_HEADER([jni.h], [ enable_gprofng_jp=yes ], [], [] )
    126 fi
    127 GPROFNG_BROKEN_JAVAC=no
    128 if test "x$enable_gprofng_jp" = x; then
    129     AC_MSG_WARN([ Cannot find the JDK include directory.
    130       gprofng will be build without support for profiling Java applications.
    131       Use --with-jdk=PATH to specify directory for the installed JDK])
    132 else
    133     AC_DEFINE(GPROFNG_JAVA_PROFILING, 1, [Enable java profiling])
    134     if test "x$JAVAC" != x; then
    135       cat > Simple.java << EOF
    136 class Simple{
    137   public static void main(String args[]){
    138     System.out.println("Hello Java");
    139   }
    140 }
    141 EOF
    142       if AC_TRY_COMMAND($JAVAC Simple.java >&AS_MESSAGE_LOG_FD 2>&AS_MESSAGE_LOG_FD); then
    143 	GPROFNG_BROKEN_JAVAC=no
    144       else
    145 	GPROFNG_BROKEN_JAVAC=yes
    146       fi
    147       rm -f Simple.*
    148     fi
    149 fi
    150 AC_SUBST(GPROFNG_BROKEN_JAVAC)
    151 AC_SUBST(jdk_inc)
    152 
    153 DEBUG=
    154 GCC_ENABLE([gprofng-debug], [no], [], [Enable debugging output])
    155 if test "${enable_gprofng_debug}" = yes; then
    156     AC_DEFINE(DEBUG, 1, [Enable debugging output.])
    157 fi
    158 
    159 cat > "dummy.c" << EOF
    160 #include <features.h>
    161 #if defined(__UCLIBC__)
    162 LIBC=uclibc
    163 #elif defined(__dietlibc__)
    164 LIBC=dietlibc
    165 #elif defined(__GLIBC__)
    166 LIBC=gnu
    167 #else
    168 #include <stdarg.h>
    169 /* First heuristic to detect musl libc.  */
    170 #ifdef __DEFINED_va_list
    171 LIBC=musl
    172 #else
    173 LIBC=gnu
    174 #endif
    175 #endif
    176 EOF
    177 cc_set_libc=`$CC -E "dummy.c" 2>/dev/null | grep '^LIBC=' | sed 's, ,,g'`
    178 eval "$cc_set_libc"
    179 if test "$LIBC" = musl; then
    180   AC_DEFINE(__MUSL_LIBC, 1, [Build with musl-libc.])
    181 fi
    182 rm -f dummy.c
    183 
    184 # Check if linker supports --as-needed and --no-as-needed options.
    185 AC_CACHE_CHECK(linker --as-needed support, bfd_cv_ld_as_needed,
    186 	[bfd_cv_ld_as_needed=no
    187 	if $LD --help 2>/dev/null | grep as-needed > /dev/null; then
    188 		bfd_cv_ld_as_needed=yes
    189 	fi
    190 	])
    191 
    192 no_as_needed=
    193 if test x"$bfd_cv_ld_as_needed" = xyes; then
    194     no_as_needed='-Wl,--no-as-needed'
    195 fi
    196 
    197 AC_PATH_PROG([EXPECT], [expect])
    198 AC_CACHE_CHECK([for Tcl supporting try/catch], [ac_cv_libctf_tcl_try],
    199   [ac_cv_libctf_tcl_try=`if test -z $EXPECT; then echo no; else $EXPECT << EOF
    200 if @<:@llength @<:@info commands try@:>@@:>@ then { puts yes } else { puts no }
    201 EOF
    202 fi`
    203 ])
    204 
    205 # Only native testing and only on supported platforms:
    206 AM_CONDITIONAL(TCL_TRY, [test "${ac_cv_libctf_tcl_try}" = yes \
    207 	-a "x${build_src}" = xtrue -a "x${build_collector}" = xtrue \
    208 	-a "x${host}" = "x${target}"])
    209 
    210 AM_ZLIB
    211 
    212 # Generate manpages, if possible.
    213 build_man=false
    214 build_doc=false
    215 if test $cross_compiling = no; then
    216   AC_CHECK_PROGS([MAKEINFO], makeinfo, [$MISSING makeinfo])
    217   case "x$MAKEINFO" in
    218     x | */missing\ makeinfo*)
    219       AC_MSG_WARN([gprofng: makeinfo is missing. Info documentation will not be built.])
    220       ;;
    221     *)
    222       case x"`$MAKEINFO --version | grep 'GNU texinfo'`" in
    223 	x*\ [[1-5]].*|x*\ 6.[[0-4]].* )
    224 	  AC_MSG_WARN([gprofng: $MAKEINFO is too old. Info documentation will not be built.])
    225 	  MAKEINFO="@echo $MAKEINFO is too old, 6.5 or newer required; true"
    226 	  ;;
    227 	x* ) build_doc=true ;;
    228 	esac
    229       ;;
    230     esac
    231   AC_SUBST(MAKEINFO)
    232 fi
    233 AM_CONDITIONAL([BUILD_MAN], [test x$build_man = xtrue])
    234 AM_CONDITIONAL([BUILD_DOC], [test x$build_doc = xtrue])
    235 
    236 AC_PATH_PROG([BASH], [bash])
    237 AC_SUBST([BASH])
    238 
    239 AC_SUBST(LD_NO_AS_NEEDED, [${no_as_needed}])
    240 AC_SUBST(GPROFNG_CFLAGS, [${gprofng_cflags}])
    241 AC_SUBST(GPROFNG_NO_FORMAT_TRUNCATION_CFLAGS)
    242 AC_SUBST(GPROFNG_NO_SWITCH_CFLAGS)
    243 AC_SUBST(GPROFNG_CPPFLAGS, [${gprofng_cppflags}])
    244 
    245 AC_CHECK_DECLS([basename])
    246 AC_CHECK_FUNCS(clock_gettime strsignal)
    247 
    248 # For riscv builds inside incomplete environments such as during intermediate
    249 # steps of cross toolchain building, or with outdated Linux headers.
    250 AC_CHECK_HEADERS(asm/hwprobe.h)
    251 
    252 clock_gettime_link=
    253 # At least for glibc, clock_gettime is in librt.  But don't
    254 # pull that in if it still doesn't give us the function we want.  This
    255 # test is copied from libgomp, and modified to not link in -lrt as
    256 # we're using this for test timing only.
    257 if test "$ac_cv_func_clock_gettime" = no; then
    258   AC_CHECK_LIB(rt, clock_gettime,
    259     [CLOCK_GETTIME_LINK=-lrt
    260      AC_DEFINE(HAVE_CLOCK_GETTIME, 1,
    261 	       [Define to 1 if you have the `clock_gettime' function.])])
    262 fi
    263 AC_SUBST(CLOCK_GETTIME_LINK)
    264 
    265 AC_SUBST(BUILD_SUBDIRS)
    266 
    267 AC_CONFIG_FILES([Makefile src/Makefile gp-display-html/Makefile doc/Makefile])
    268 AC_CONFIG_HEADERS([config.h:common/config.h.in])
    269 
    270 AC_OUTPUT
    271 
    272