Blame configure.ac

Packit Service 97d2fb
dnl Process this file with autoconf to produce a configure script.
Packit Service 97d2fb
dnl Configure input file for elfutils.                     -*-autoconf-*-
Packit Service 97d2fb
dnl
Packit Service 97d2fb
dnl Copyright (C) 1996-2019 Red Hat, Inc.
Packit Service 97d2fb
dnl
Packit Service 97d2fb
dnl This file is part of elfutils.
Packit Service 97d2fb
dnl
Packit Service 97d2fb
dnl  This file is free software; you can redistribute it and/or modify
Packit Service 97d2fb
dnl  it under the terms of the GNU General Public License as published by
Packit Service 97d2fb
dnl  the Free Software Foundation; either version 3 of the License, or
Packit Service 97d2fb
dnl  (at your option) any later version.
Packit Service 97d2fb
dnl
Packit Service 97d2fb
dnl  elfutils is distributed in the hope that it will be useful, but
Packit Service 97d2fb
dnl  WITHOUT ANY WARRANTY; without even the implied warranty of
Packit Service 97d2fb
dnl  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
Packit Service 97d2fb
dnl  GNU General Public License for more details.
Packit Service 97d2fb
dnl
Packit Service 97d2fb
dnl  You should have received a copy of the GNU General Public License
Packit Service 97d2fb
dnl  along with this program.  If not, see <http://www.gnu.org/licenses/>.
Packit Service 97d2fb
AC_INIT([elfutils],[0.182],[https://sourceware.org/bugzilla],[elfutils],[http://elfutils.org/])
Packit Service 97d2fb
Packit Service 97d2fb
dnl Workaround for older autoconf < 2.64
Packit Service 97d2fb
m4_ifndef([AC_PACKAGE_URL],
Packit Service 97d2fb
         [AC_DEFINE([PACKAGE_URL], ["http://elfutils.org/"],
Packit Service 97d2fb
                    [Define to home page for this package])
Packit Service 97d2fb
          AC_SUBST([PACKAGE_URL], ["http://elfutils.org/"])])
Packit Service 97d2fb
Packit Service 97d2fb
# We want eu- as default program prefix if none was given by the user.
Packit Service 97d2fb
# But if the user explicitly provided --program-prefix="" then pretend
Packit Service 97d2fb
# it wasn't set at all (NONE). We want to test this really early before
Packit Service 97d2fb
# configure has a chance to use the value.
Packit Service 97d2fb
Packit Service 97d2fb
if test "x$program_prefix" = "xNONE"; then
Packit Service 97d2fb
  AC_MSG_NOTICE([No --program-prefix given, using "eu-"])
Packit Service 97d2fb
  program_prefix="eu-"
Packit Service 97d2fb
elif test "x$program_prefix" = "x"; then
Packit Service 97d2fb
  AC_MSG_NOTICE([Using no program-prefix])
Packit Service 97d2fb
  program_prefix=NONE
Packit Service 97d2fb
fi
Packit Service 97d2fb
Packit Service 97d2fb
AC_CONFIG_AUX_DIR([config])
Packit Service 97d2fb
AC_CONFIG_FILES([config/Makefile])
Packit Service 97d2fb
Packit Service 97d2fb
AC_COPYRIGHT([Copyright (C) 1996-2020 The elfutils developers.])
Packit Service 97d2fb
AC_PREREQ(2.63)			dnl Minimum Autoconf version required.
Packit Service 97d2fb
Packit Service 97d2fb
dnl We use GNU make extensions; automake 1.10 defaults to -Wportability.
Packit Service 97d2fb
AM_INIT_AUTOMAKE([gnits 1.11 -Wno-portability dist-bzip2 no-dist-gzip parallel-tests])
Packit Service 97d2fb
AM_MAINTAINER_MODE
Packit Service 97d2fb
Packit Service 97d2fb
AM_SILENT_RULES([yes])
Packit Service 97d2fb
Packit Service 97d2fb
AC_CONFIG_SRCDIR([libelf/libelf.h])
Packit Service 97d2fb
AC_CONFIG_FILES([Makefile])
Packit Service 97d2fb
AC_CONFIG_HEADERS([config.h])
Packit Service 97d2fb
Packit Service 97d2fb
AC_CONFIG_MACRO_DIR([m4])
Packit Service 97d2fb
AC_CONFIG_FILES([m4/Makefile])
Packit Service 97d2fb
Packit Service 97d2fb
dnl The RPM spec file.  We substitute a few values in the file.
Packit Service 97d2fb
AC_CONFIG_FILES([elfutils.spec:config/elfutils.spec.in])
Packit Service 97d2fb
Packit Service 97d2fb
dnl debuginfo-server client & server parts.
Packit Service 97d2fb
AC_CONFIG_FILES([debuginfod/Makefile])
Packit Service 97d2fb
Packit Service 97d2fb
AC_CANONICAL_HOST
Packit Service 97d2fb
Packit Service 97d2fb
AC_ARG_ENABLE(deterministic-archives,
Packit Service 97d2fb
[AS_HELP_STRING([--enable-deterministic-archives],
Packit Service 97d2fb
		[ar and ranlib default to -D behavior])], [
Packit Service 97d2fb
if test "${enableval}" = no; then
Packit Service 97d2fb
  default_ar_deterministic=false
Packit Service 97d2fb
else
Packit Service 97d2fb
  default_ar_deterministic=true
Packit Service 97d2fb
fi], [default_ar_deterministic=false])
Packit Service 97d2fb
AC_DEFINE_UNQUOTED(DEFAULT_AR_DETERMINISTIC, $default_ar_deterministic,
Packit Service 97d2fb
		   [Should ar and ranlib use -D behavior by default?])
Packit Service 97d2fb
Packit Service 97d2fb
AC_ARG_ENABLE([thread-safety],
Packit Service 97d2fb
AS_HELP_STRING([--enable-thread-safety],
Packit Service 97d2fb
               [enable thread safety of libraries EXPERIMENTAL]),
Packit Service 97d2fb
               use_locks=$enableval, use_locks=no)
Packit Service 97d2fb
AM_CONDITIONAL(USE_LOCKS, test "$use_locks" = yes)
Packit Service 97d2fb
AS_IF([test "$use_locks" = yes], [AC_DEFINE(USE_LOCKS)])
Packit Service 97d2fb
AS_IF([test "$use_locks" = yes],
Packit Service 97d2fb
      [AC_MSG_WARN([thread-safety is EXPERIMENTAL tests might fail.])])
Packit Service 97d2fb
Packit Service 97d2fb
AH_TEMPLATE([USE_LOCKS], [Defined if libraries should be thread-safe.])
Packit Service 97d2fb
Packit Service 97d2fb
AC_PROG_CC
Packit Service 97d2fb
AC_PROG_RANLIB
Packit Service 97d2fb
AC_PROG_YACC
Packit Service 97d2fb
AM_PROG_LEX
Packit Service 97d2fb
# Only available since automake 1.12
Packit Service 97d2fb
m4_ifdef([AM_PROG_AR], [AM_PROG_AR])
Packit Service 97d2fb
AC_CHECK_TOOL([READELF], [readelf])
Packit Service 97d2fb
AC_CHECK_TOOL([NM], [nm])
Packit Service 97d2fb
Packit Service 97d2fb
# We use -std=gnu99 but have explicit checks for some language constructs
Packit Service 97d2fb
# and GNU extensions since some compilers claim GNU99 support, but don't
Packit Service 97d2fb
# really support all language extensions. In particular we need
Packit Service 97d2fb
# Mixed Declarations and Code
Packit Service 97d2fb
# https://gcc.gnu.org/onlinedocs/gcc/Mixed-Declarations.html
Packit Service 97d2fb
# Nested Functions
Packit Service 97d2fb
# https://gcc.gnu.org/onlinedocs/gcc/Nested-Functions.html
Packit Service 97d2fb
# Arrays of Variable Length
Packit Service 97d2fb
# https://gcc.gnu.org/onlinedocs/gcc/Variable-Length.html
Packit Service 97d2fb
AC_CACHE_CHECK([for gcc with GNU99 support], ac_cv_c99, [dnl
Packit Service 97d2fb
old_CFLAGS="$CFLAGS"
Packit Service 97d2fb
CFLAGS="$CFLAGS -std=gnu99"
Packit Service 97d2fb
AC_COMPILE_IFELSE([AC_LANG_SOURCE([dnl
Packit Service 97d2fb
int foo (int a)
Packit Service 97d2fb
{
Packit Service 97d2fb
  for (int i = 0; i < a; ++i) if (i % 4) break; int s = a; return s;
Packit Service 97d2fb
}
Packit Service 97d2fb
Packit Service 97d2fb
double bar (double a, double b)
Packit Service 97d2fb
{
Packit Service 97d2fb
  double square (double z) { return z * z; }
Packit Service 97d2fb
  return square (a) + square (b);
Packit Service 97d2fb
}
Packit Service 97d2fb
Packit Service 97d2fb
void baz (int n)
Packit Service 97d2fb
{
Packit Service 97d2fb
  struct S { int x[[n]]; };
Packit Service 97d2fb
}])],
Packit Service 97d2fb
		  ac_cv_c99=yes, ac_cv_c99=no)
Packit Service 97d2fb
CFLAGS="$old_CFLAGS"])
Packit Service 97d2fb
AS_IF([test "x$ac_cv_c99" != xyes],
Packit Service 97d2fb
      AC_MSG_ERROR([gcc with GNU99 support required]))
Packit Service 97d2fb
Packit Service 97d2fb
AC_CACHE_CHECK([whether gcc supports __attribute__((visibility()))],
Packit Service 97d2fb
	ac_cv_visibility, [dnl
Packit Service 97d2fb
save_CFLAGS="$CFLAGS"
Packit Service 97d2fb
CFLAGS="$save_CFLAGS -Werror"
Packit Service 97d2fb
AC_COMPILE_IFELSE([AC_LANG_SOURCE([dnl
Packit Service 97d2fb
int __attribute__((visibility("hidden")))
Packit Service 97d2fb
foo (int a)
Packit Service 97d2fb
{
Packit Service 97d2fb
  return a;
Packit Service 97d2fb
}])], ac_cv_visibility=yes, ac_cv_visibility=no)
Packit Service 97d2fb
CFLAGS="$save_CFLAGS"])
Packit Service 97d2fb
if test "$ac_cv_visibility" = "yes"; then
Packit Service 97d2fb
	AC_DEFINE([HAVE_VISIBILITY], [1],
Packit Service 97d2fb
		  [Defined if __attribute__((visibility())) is supported])
Packit Service 97d2fb
fi
Packit Service 97d2fb
Packit Service 97d2fb
AC_CACHE_CHECK([whether gcc supports __attribute__((gcc_struct))],
Packit Service 97d2fb
	ac_cv_gcc_struct, [dnl
Packit Service 97d2fb
save_CFLAGS="$CFLAGS"
Packit Service 97d2fb
CFLAGS="$save_CFLAGS -Werror"
Packit Service 97d2fb
AC_COMPILE_IFELSE([AC_LANG_SOURCE([dnl
Packit Service 97d2fb
struct test { int x; } __attribute__((gcc_struct));
Packit Service 97d2fb
])], ac_cv_gcc_struct=yes, ac_cv_gcc_struct=no)
Packit Service 97d2fb
CFLAGS="$save_CFLAGS"])
Packit Service 97d2fb
if test "$ac_cv_gcc_struct" = "yes"; then
Packit Service 97d2fb
	AC_DEFINE([HAVE_GCC_STRUCT], [1],
Packit Service 97d2fb
		  [Defined if __attribute__((gcc_struct)) is supported])
Packit Service 97d2fb
fi
Packit Service 97d2fb
Packit Service 97d2fb
AC_CACHE_CHECK([whether gcc supports -fPIC], ac_cv_fpic, [dnl
Packit Service 97d2fb
save_CFLAGS="$CFLAGS"
Packit Service 97d2fb
CFLAGS="$save_CFLAGS -fPIC -Werror"
Packit Service 97d2fb
AC_COMPILE_IFELSE([AC_LANG_SOURCE()], ac_cv_fpic=yes, ac_cv_fpic=no)
Packit Service 97d2fb
CFLAGS="$save_CFLAGS"
Packit Service 97d2fb
])
Packit Service 97d2fb
if test "$ac_cv_fpic" = "yes"; then
Packit Service 97d2fb
	fpic_CFLAGS="-fPIC"
Packit Service 97d2fb
else
Packit Service 97d2fb
	fpic_CFLAGS=""
Packit Service 97d2fb
fi
Packit Service 97d2fb
AC_SUBST([fpic_CFLAGS])
Packit Service 97d2fb
Packit Service 97d2fb
AC_CACHE_CHECK([whether gcc supports -fPIE], ac_cv_fpie, [dnl
Packit Service 97d2fb
save_CFLAGS="$CFLAGS"
Packit Service 97d2fb
CFLAGS="$save_CFLAGS -fPIE -Werror"
Packit Service 97d2fb
AC_COMPILE_IFELSE([AC_LANG_SOURCE()], ac_cv_fpie=yes, ac_cv_fpie=no)
Packit Service 97d2fb
CFLAGS="$save_CFLAGS"
Packit Service 97d2fb
])
Packit Service 97d2fb
if test "$ac_cv_fpie" = "yes"; then
Packit Service 97d2fb
	fpie_CFLAGS="-fPIE"
Packit Service 97d2fb
else
Packit Service 97d2fb
	fpie_CFLAGS=""
Packit Service 97d2fb
fi
Packit Service 97d2fb
AC_SUBST([fpie_CFLAGS])
Packit Service 97d2fb
Packit Service 97d2fb
dso_LDFLAGS="-shared"
Packit Service 97d2fb
Packit Service 97d2fb
ZDEFS_LDFLAGS="-Wl,-z,defs"
Packit Service 97d2fb
AC_CACHE_CHECK([whether gcc supports $ZDEFS_LDFLAGS], ac_cv_zdefs, [dnl
Packit Service 97d2fb
save_LDFLAGS="$LDFLAGS"
Packit Service 97d2fb
LDFLAGS="$ZDEFS_LDFLAGS $save_LDFLAGS"
Packit Service 97d2fb
AC_LINK_IFELSE([AC_LANG_PROGRAM()], ac_cv_zdefs=yes, ac_cv_zdefs=no)
Packit Service 97d2fb
LDFLAGS="$save_LDFLAGS"
Packit Service 97d2fb
])
Packit Service 97d2fb
if test "$ac_cv_zdefs" = "yes"; then
Packit Service 97d2fb
	dso_LDFLAGS="$dso_LDFLAGS $ZDEFS_LDFLAGS"
Packit Service 97d2fb
fi
Packit Service 97d2fb
Packit Service 97d2fb
# We really want build-ids. Warn and force generating them if gcc was
Packit Service 97d2fb
# configure without --enable-linker-build-id
Packit Service 97d2fb
AC_CACHE_CHECK([whether the compiler generates build-ids], ac_cv_buildid, [dnl
Packit Service 97d2fb
AC_LINK_IFELSE([AC_LANG_PROGRAM()],[ac_cv_buildid=yes; $READELF -n conftest$EXEEXT | grep -q NT_GNU_BUILD_ID || ac_cv_buildid=no],AC_MSG_FAILURE([unexpected compile failure]))])
Packit Service 97d2fb
if test "$ac_cv_buildid" = "no"; then
Packit Service 97d2fb
	AC_MSG_WARN([compiler doesn't generate build-id by default])
Packit Service 97d2fb
	LDFLAGS="$LDFLAGS -Wl,--build-id"
Packit Service 97d2fb
fi
Packit Service 97d2fb
Packit Service 97d2fb
ZRELRO_LDFLAGS="-Wl,-z,relro"
Packit Service 97d2fb
AC_CACHE_CHECK([whether gcc supports $ZRELRO_LDFLAGS], ac_cv_zrelro, [dnl
Packit Service 97d2fb
save_LDFLAGS="$LDFLAGS"
Packit Service 97d2fb
LDFLAGS="$ZRELRO_LDFLAGS $save_LDFLAGS"
Packit Service 97d2fb
AC_LINK_IFELSE([AC_LANG_PROGRAM()], ac_cv_zrelro=yes, ac_cv_zrelro=no)
Packit Service 97d2fb
LDFLAGS="$save_LDFLAGS"
Packit Service 97d2fb
])
Packit Service 97d2fb
if test "$ac_cv_zrelro" = "yes"; then
Packit Service 97d2fb
	dso_LDFLAGS="$dso_LDFLAGS $ZRELRO_LDFLAGS"
Packit Service 97d2fb
fi
Packit Service 97d2fb
Packit Service 97d2fb
AC_SUBST([dso_LDFLAGS])
Packit Service 97d2fb
Packit Service 97d2fb
AC_CACHE_CHECK([for __thread support], ac_cv_tls, [dnl
Packit Service 97d2fb
# Use the same flags that we use for our DSOs, so the test is representative.
Packit Service 97d2fb
# Some old compiler/linker/libc combinations fail some ways and not others.
Packit Service 97d2fb
save_CFLAGS="$CFLAGS"
Packit Service 97d2fb
save_LDFLAGS="$LDFLAGS"
Packit Service 97d2fb
CFLAGS="$fpic_CFLAGS $CFLAGS"
Packit Service 97d2fb
LDFLAGS="$dso_LDFLAGS $LDFLAGS"
Packit Service 97d2fb
AC_LINK_IFELSE([dnl
Packit Service 97d2fb
AC_LANG_PROGRAM([[#include <stdlib.h>
Packit Service 97d2fb
#undef __thread
Packit Service 97d2fb
static __thread int a; int foo (int b) { return a + b; }]],
Packit Service 97d2fb
		[[exit (foo (0));]])],
Packit Service 97d2fb
	       ac_cv_tls=yes, ac_cv_tls=no)
Packit Service 97d2fb
CFLAGS="$save_CFLAGS"
Packit Service 97d2fb
LDFLAGS="$save_LDFLAGS"])
Packit Service 97d2fb
AS_IF([test "x$ac_cv_tls" != xyes],
Packit Service 97d2fb
      AC_MSG_ERROR([__thread support required]))
Packit Service 97d2fb
Packit Service 97d2fb
dnl Before 4.9 gcc doesn't ship stdatomic.h, but the nessesary atomics are
Packit Service 97d2fb
dnl available by (at least) 4.7. So if the system doesn't have a stdatomic.h we
Packit Service 97d2fb
dnl fall back on one copied from FreeBSD that handles the difference.
Packit Service 97d2fb
AC_CACHE_CHECK([whether gcc provides stdatomic.h], ac_cv_has_stdatomic,
Packit Service 97d2fb
  [AC_COMPILE_IFELSE([AC_LANG_SOURCE([[#include <stdatomic.h>]])],
Packit Service 97d2fb
		     ac_cv_has_stdatomic=yes, ac_cv_has_stdatomic=no)])
Packit Service 97d2fb
AM_CONDITIONAL(HAVE_STDATOMIC_H, test "x$ac_cv_has_stdatomic" = xyes)
Packit Service 97d2fb
AS_IF([test "x$ac_cv_has_stdatomic" = xyes], [AC_DEFINE(HAVE_STDATOMIC_H)])
Packit Service 97d2fb
Packit Service 97d2fb
AH_TEMPLATE([HAVE_STDATOMIC_H], [Define to 1 if `stdatomic.h` is provided by the
Packit Service 97d2fb
                                 system, 0 otherwise.])
Packit Service 97d2fb
Packit Service 97d2fb
dnl This test must come as early as possible after the compiler configuration
Packit Service 97d2fb
dnl tests, because the choice of the file model can (in principle) affect
Packit Service 97d2fb
dnl whether functions and headers are available, whether they work, etc.
Packit Service 97d2fb
AC_SYS_LARGEFILE
Packit Service 97d2fb
Packit Service 97d2fb
dnl Older glibc had a broken fts that didn't work with Large File Systems.
Packit Service 97d2fb
dnl We want the version that can handler LFS, but include workaround if we
Packit Service 97d2fb
dnl get a bad one. Add define to CFLAGS (not AC_DEFINE it) since we need to
Packit Service 97d2fb
dnl check it before including config.h (which might define _FILE_OFFSET_BITS).
Packit Service 97d2fb
AC_CACHE_CHECK([whether fts.h is bad when included (with LFS)], ac_cv_bad_fts,
Packit Service 97d2fb
  [AC_COMPILE_IFELSE([AC_LANG_SOURCE([[#include <fts.h>]])],
Packit Service 97d2fb
		     ac_cv_bad_fts=no, ac_cv_bad_fts=yes)])
Packit Service 97d2fb
AS_IF([test "x$ac_cv_bad_fts" = "xyes"],
Packit Service 97d2fb
      [CFLAGS="$CFLAGS -DBAD_FTS=1" CXXFLAGS="$CXXFLAGS -DBAD_FTS=1"])
Packit Service 97d2fb
Packit Service 97d2fb
# See if we can add -D_FORTIFY_SOURCE=2. Don't do it if it is already
Packit Service 97d2fb
# (differently) defined or if it generates warnings/errors because we
Packit Service 97d2fb
# don't use the right optimisation level (string.h will warn about that).
Packit Service 97d2fb
AC_MSG_CHECKING([whether to add -D_FORTIFY_SOURCE=2 to CFLAGS])
Packit Service 97d2fb
case "$CFLAGS" in
Packit Service 97d2fb
  *-D_FORTIFY_SOURCE=2*)
Packit Service 97d2fb
    AC_MSG_RESULT([no, already there])
Packit Service 97d2fb
    ;;
Packit Service 97d2fb
  *)
Packit Service 97d2fb
    save_CFLAGS="$CFLAGS"
Packit Service 97d2fb
    CFLAGS="-D_FORTIFY_SOURCE=2 $CFLAGS -Werror"
Packit Service 97d2fb
    AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
Packit Service 97d2fb
      #include <string.h>
Packit Service 97d2fb
      int main() { return 0; }
Packit Service 97d2fb
    ]])], [ AC_MSG_RESULT([yes])
Packit Service 97d2fb
            CFLAGS="-D_FORTIFY_SOURCE=2 $save_CFLAGS" ],
Packit Service 97d2fb
          [ AC_MSG_RESULT([no])
Packit Service 97d2fb
            CFLAGS="$save_CFLAGS"])
Packit Service 97d2fb
  ;;
Packit Service 97d2fb
esac
Packit Service 97d2fb
Packit Service 97d2fb
dnl enable debugging of branch prediction.
Packit Service 97d2fb
AC_ARG_ENABLE([debugpred],
Packit Service 97d2fb
AS_HELP_STRING([--enable-debugpred],[build binaries with support to debug branch prediction]),
Packit Service 97d2fb
[use_debugpred=$enableval], [use_debugpred=no])
Packit Service 97d2fb
case $use_debugpred in
Packit Service 97d2fb
 yes) use_debugpred_val=1 ;;
Packit Service 97d2fb
 *)   use_debugpred_val=0 ;;
Packit Service 97d2fb
esac
Packit Service 97d2fb
AC_SUBST([DEBUGPRED], $use_debugpred_val)
Packit Service 97d2fb
Packit Service 97d2fb
dnl Enable gprof suport.
Packit Service 97d2fb
AC_ARG_ENABLE([gprof],
Packit Service 97d2fb
AS_HELP_STRING([--enable-gprof],[build binaries with gprof support]), [use_gprof=$enableval], [use_gprof=no])
Packit Service 97d2fb
if test "$use_gprof" = yes; then
Packit Service 97d2fb
  CFLAGS="$CFLAGS -pg"
Packit Service 97d2fb
  LDFLAGS="$LDFLAGS -pg"
Packit Service 97d2fb
fi
Packit Service 97d2fb
AM_CONDITIONAL(GPROF, test "$use_gprof" = yes)
Packit Service 97d2fb
Packit Service 97d2fb
# Enable gcov suport.
Packit Service 97d2fb
AC_ARG_ENABLE([gcov],
Packit Service 97d2fb
AS_HELP_STRING([--enable-gcov],[build binaries with gcov support]), [use_gcov=$enableval], [use_gcov=no])
Packit Service 97d2fb
if test "$use_gcov" = yes; then
Packit Service 97d2fb
  CFLAGS="$CFLAGS -fprofile-arcs -ftest-coverage"
Packit Service 97d2fb
  CXXFLAGS="$CXXFLAGS -fprofile-arcs -ftest-coverage"
Packit Service 97d2fb
  LDFLAGS="$LDFLAGS -fprofile-arcs"
Packit Service 97d2fb
fi
Packit Service 97d2fb
AM_CONDITIONAL(GCOV, test "$use_gcov" = yes)
Packit Service 97d2fb
Packit Service 97d2fb
AC_ARG_ENABLE([sanitize-undefined],
Packit Service 97d2fb
              AS_HELP_STRING([--enable-sanitize-undefined],
Packit Service 97d2fb
                             [Use gcc undefined behaviour sanitizer]),
Packit Service 97d2fb
                             [use_undefined=$enableval], [use_undefined=no])
Packit Service 97d2fb
if test "$use_undefined" = yes; then
Packit Service 97d2fb
  old_CFLAGS="$CFLAGS"
Packit Service 97d2fb
  old_CXXFLAGS="$CXXFLAGS"
Packit Service 97d2fb
  # We explicitly use unaligned access when possible (see ALLOW_UNALIGNED)
Packit Service 97d2fb
  # We want to fail immediately on first error, don't try to recover.
Packit Service 97d2fb
  CFLAGS="$CFLAGS -fsanitize=undefined -fno-sanitize-recover"
Packit Service 97d2fb
  CXXFLAGS="$CXXFLAGS -fsanitize=undefined -fno-sanitize-recover"
Packit Service 97d2fb
  AC_LINK_IFELSE([AC_LANG_SOURCE([int main (int argc, char **argv) { return 0; }])], use_undefined=yes, use_undefined=no)
Packit Service 97d2fb
  AS_IF([test "x$use_undefined" != xyes],
Packit Service 97d2fb
        AC_MSG_WARN([gcc undefined behaviour sanitizer not available])
Packit Service 97d2fb
        CFLAGS="$old_CFLAGS" CXXFLAGS="$old_CXXFLAGS")
Packit Service 97d2fb
fi
Packit Service 97d2fb
case $use_undefined in
Packit Service 97d2fb
 yes) check_undefined_val=1 ;;
Packit Service 97d2fb
 *)   check_undefined_val=0 ;;
Packit Service 97d2fb
esac
Packit Service 97d2fb
AC_DEFINE_UNQUOTED(CHECK_UNDEFINED, $check_undefined_val,
Packit Service 97d2fb
		   [Building with -fsanitize=undefined or not])
Packit Service 97d2fb
Packit Service 97d2fb
AC_ARG_ENABLE([valgrind],
Packit Service 97d2fb
AS_HELP_STRING([--enable-valgrind],[run all tests under valgrind]),
Packit Service 97d2fb
[use_valgrind=$enableval], [use_valgrind=no])
Packit Service 97d2fb
if test "$use_valgrind" = yes; then
Packit Service 97d2fb
  AC_CHECK_PROG(HAVE_VALGRIND, valgrind, yes, no)
Packit Service 97d2fb
  if test "$HAVE_VALGRIND" = "no"; then
Packit Service 97d2fb
    AC_MSG_ERROR([valgrind not found])
Packit Service 97d2fb
  fi
Packit Service 97d2fb
fi
Packit Service 97d2fb
AM_CONDITIONAL(USE_VALGRIND, test "$use_valgrind" = yes)
Packit Service 97d2fb
Packit Service 97d2fb
AC_ARG_WITH([valgrind],
Packit Service 97d2fb
AS_HELP_STRING([--with-valgrind],[include directory for Valgrind headers]),
Packit Service 97d2fb
[with_valgrind_headers=$withval], [with_valgrind_headers=no])
Packit Service 97d2fb
if test "x$with_valgrind_headers" != xno; then
Packit Service 97d2fb
    save_CFLAGS="$CFLAGS"
Packit Service 97d2fb
    CFLAGS="$CFLAGS -I$with_valgrind_headers"
Packit Service 97d2fb
    AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
Packit Service 97d2fb
      #include <valgrind/valgrind.h>
Packit Service 97d2fb
      int main() { return 0; }
Packit Service 97d2fb
    ]])], [ HAVE_VALGRIND_HEADERS="yes"
Packit Service 97d2fb
            CFLAGS="$save_CFLAGS -I$with_valgrind_headers" ],
Packit Service 97d2fb
          [ AC_MSG_ERROR([invalid valgrind include directory: $with_valgrind_headers]) ])
Packit Service 97d2fb
fi
Packit Service 97d2fb
Packit Service 97d2fb
AC_ARG_ENABLE([valgrind-annotations],
Packit Service 97d2fb
AS_HELP_STRING([--enable-valgrind-annotations],[insert extra annotations for better valgrind support]),
Packit Service 97d2fb
[use_vg_annotations=$enableval], [use_vg_annotations=no])
Packit Service 97d2fb
if test "$use_vg_annotations" = yes; then
Packit Service 97d2fb
    if test "x$HAVE_VALGRIND_HEADERS" != "xyes"; then
Packit Service 97d2fb
      AC_MSG_CHECKING([whether Valgrind headers are available])
Packit Service 97d2fb
      AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
Packit Service 97d2fb
        #include <valgrind/valgrind.h>
Packit Service 97d2fb
        int main() { return 0; }
Packit Service 97d2fb
      ]])], [ AC_MSG_RESULT([yes]) ],
Packit Service 97d2fb
            [ AC_MSG_ERROR([valgrind annotations requested but no headers are available]) ])
Packit Service 97d2fb
    fi
Packit Service 97d2fb
fi
Packit Service 97d2fb
AM_CONDITIONAL(USE_VG_ANNOTATIONS, test "$use_vg_annotations" = yes)
Packit Service 97d2fb
Packit Service 97d2fb
AC_ARG_ENABLE([install-elfh],
Packit Service 97d2fb
AS_HELP_STRING([--enable-install-elfh],[install elf.h in include dir]),
Packit Service 97d2fb
               [install_elfh=$enableval], [install_elfh=no])
Packit Service 97d2fb
AM_CONDITIONAL(INSTALL_ELFH, test "$install_elfh" = yes)
Packit Service 97d2fb
Packit Service 97d2fb
AM_CONDITIONAL(BUILD_STATIC, [dnl
Packit Service 97d2fb
test "$use_gprof" = yes -o "$use_gcov" = yes])
Packit Service 97d2fb
Packit Service 97d2fb
AC_ARG_ENABLE([tests-rpath],
Packit Service 97d2fb
AS_HELP_STRING([--enable-tests-rpath],[build $ORIGIN-using rpath into tests]),
Packit Service 97d2fb
	       [tests_use_rpath=$enableval], [tests_use_rpath=no])
Packit Service 97d2fb
AM_CONDITIONAL(TESTS_RPATH, test "$tests_use_rpath" = yes)
Packit Service 97d2fb
Packit Service 97d2fb
dnl zlib is mandatory.
Packit Service 97d2fb
save_LIBS="$LIBS"
Packit Service 97d2fb
LIBS=
Packit Service 97d2fb
eu_ZIPLIB(zlib,ZLIB,z,gzdirect,gzip)
Packit Service 97d2fb
AS_IF([test "x$with_zlib" = xno], [AC_MSG_ERROR([zlib not found but is required])])
Packit Service 97d2fb
LIBS="$save_LIBS"
Packit Service 97d2fb
Packit Service 97d2fb
dnl Test for bzlib and xz/lzma/zstd, gives BZLIB/LZMALIB/ZSTD .am
Packit Service 97d2fb
dnl conditional and config.h USE_BZLIB/USE_LZMALIB/USE_ZSTD #define.
Packit Service 97d2fb
save_LIBS="$LIBS"
Packit Service 97d2fb
LIBS=
Packit Service 97d2fb
eu_ZIPLIB(bzlib,BZLIB,bz2,BZ2_bzdopen,bzip2)
Packit Service 97d2fb
# We need this since bzip2 doesn't have a pkgconfig file.
Packit Service 97d2fb
BZ2_LIB="$LIBS"
Packit Service 97d2fb
AC_SUBST([BZ2_LIB])
Packit Service 97d2fb
eu_ZIPLIB(lzma,LZMA,lzma,lzma_auto_decoder,[LZMA (xz)])
Packit Service 97d2fb
AS_IF([test "x$with_lzma" = xyes], [LIBLZMA="liblzma"], [LIBLZMA=""])
Packit Service 97d2fb
AC_SUBST([LIBLZMA])
Packit Service 97d2fb
eu_ZIPLIB(zstd,ZSTD,zstd,ZSTD_decompress,[ZSTD (zst)])
Packit Service 97d2fb
AS_IF([test "x$with_zstd" = xyes], [LIBZSTD="libzstd"], [LIBLZSTD=""])
Packit Service 97d2fb
AC_SUBST([LIBZSTD])
Packit Service 97d2fb
zip_LIBS="$LIBS"
Packit Service 97d2fb
LIBS="$save_LIBS"
Packit Service 97d2fb
AC_SUBST([zip_LIBS])
Packit Service 97d2fb
Packit Service 97d2fb
AC_CHECK_DECLS([memrchr, rawmemchr],[],[],
Packit Service 97d2fb
               [#define _GNU_SOURCE
Packit Service 97d2fb
                #include <string.h>])
Packit Service 97d2fb
AC_CHECK_DECLS([powerof2],[],[],[#include <sys/param.h>])
Packit Service 97d2fb
AC_CHECK_DECLS([mempcpy],[],[],
Packit Service 97d2fb
               [#define _GNU_SOURCE
Packit Service 97d2fb
                #include <string.h>])
Packit Service 97d2fb
Packit Service 97d2fb
AC_CHECK_FUNCS([process_vm_readv])
Packit Service 97d2fb
Packit Service 97d2fb
AC_CHECK_LIB([stdc++], [__cxa_demangle], [dnl
Packit Service 97d2fb
AC_DEFINE([USE_DEMANGLE], [1], [Defined if demangling is enabled])])
Packit Service 97d2fb
AM_CONDITIONAL(DEMANGLE, test "x$ac_cv_lib_stdcpp___cxa_demangle" = "xyes")
Packit Service 97d2fb
AS_IF([test "x$ac_cv_lib_stdcpp___cxa_demangle" = "xyes"],
Packit Service 97d2fb
      [enable_demangler=yes],[enable_demangler=no])
Packit Service 97d2fb
Packit Service 97d2fb
AC_ARG_ENABLE([textrelcheck],
Packit Service 97d2fb
AS_HELP_STRING([--disable-textrelcheck],
Packit Service 97d2fb
               [Disable textrelcheck being a fatal error]))
Packit Service 97d2fb
AM_CONDITIONAL(FATAL_TEXTREL, [test "x$enable_textrelcheck" != "xno"])
Packit Service 97d2fb
AS_IF([test "x$enable_textrelcheck" != "xno"],
Packit Service 97d2fb
      [enable_textrelcheck=yes],[enable_textrelcheck=no])
Packit Service 97d2fb
Packit Service 97d2fb
AC_ARG_ENABLE([symbol-versioning],
Packit Service 97d2fb
AS_HELP_STRING([--disable-symbol-versioning],
Packit Service 97d2fb
               [Disable symbol versioning in shared objects]))
Packit Service 97d2fb
Packit Service 97d2fb
AC_CACHE_CHECK([whether symbol versioning is supported], ac_cv_symbol_versioning, [dnl
Packit Service 97d2fb
AC_COMPILE_IFELSE([AC_LANG_SOURCE([dnl
Packit Service 97d2fb
#define NEW_VERSION(name, version) \
Packit Service 97d2fb
  asm (".symver " #name "," #name "@@@" #version);
Packit Service 97d2fb
int foo(int x) { return x + 1; }
Packit Service 97d2fb
NEW_VERSION (foo, ELFUTILS_12.12)
Packit Service 97d2fb
])], ac_cv_symbol_versioning=yes, ac_cv_symbol_versioning=no)])
Packit Service 97d2fb
if test "$ac_cv_symbol_versioning" = "no"; then
Packit Service 97d2fb
    if test "x$enable_symbol_versioning" != "xno"; then
Packit Service 97d2fb
        AC_MSG_ERROR([Symbol versioning is not supported.
Packit Service 97d2fb
                      Use --disable-symbol-versioning to build without.])
Packit Service 97d2fb
    fi
Packit Service 97d2fb
fi
Packit Service 97d2fb
Packit Service 97d2fb
AM_CONDITIONAL(SYMBOL_VERSIONING, [test "x$enable_symbol_versioning" != "xno"])
Packit Service 97d2fb
AS_IF([test "x$enable_symbol_versioning" = "xno"],
Packit Service 97d2fb
      [AC_MSG_WARN([Disabling symbol versioning breaks ABI compatibility.])
Packit Service 97d2fb
       enable_symbol_versioning=no],[enable_symbol_versioning=yes])
Packit Service 97d2fb
Packit Service 97d2fb
AC_CACHE_CHECK([whether gcc accepts -Wstack-usage], ac_cv_stack_usage, [dnl
Packit Service 97d2fb
old_CFLAGS="$CFLAGS"
Packit Service 97d2fb
CFLAGS="$CFLAGS -Wstack-usage=262144 -Werror"
Packit Service 97d2fb
AC_COMPILE_IFELSE([AC_LANG_SOURCE([])],
Packit Service 97d2fb
		  ac_cv_stack_usage=yes, ac_cv_stack_usage=no)
Packit Service 97d2fb
CFLAGS="$old_CFLAGS"])
Packit Service 97d2fb
AM_CONDITIONAL(ADD_STACK_USAGE_WARNING, [test "x$ac_cv_stack_usage" != "xno"])
Packit Service 97d2fb
Packit Service 97d2fb
# -Wlogical-op was too fragile in the past, make sure we get a sane one.
Packit Service 97d2fb
AC_CACHE_CHECK([whether gcc has a sane -Wlogical-op], ac_cv_logical_op, [dnl
Packit Service 97d2fb
old_CFLAGS="$CFLAGS"
Packit Service 97d2fb
CFLAGS="$CFLAGS -Wlogical-op -Werror"
Packit Service 97d2fb
AC_COMPILE_IFELSE([AC_LANG_SOURCE(
Packit Service 97d2fb
	[#define FLAG 1
Packit Service 97d2fb
	int f (int r, int f) { return (r && (FLAG || (FLAG & f))); }])],
Packit Service 97d2fb
		  ac_cv_logical_op=yes, ac_cv_logical_op=no)
Packit Service 97d2fb
CFLAGS="$old_CFLAGS"])
Packit Service 97d2fb
AM_CONDITIONAL(SANE_LOGICAL_OP_WARNING,
Packit Service 97d2fb
	       [test "x$ac_cv_logical_op" != "xno"])
Packit Service 97d2fb
Packit Service 97d2fb
# -Wduplicated-cond was added by GCC6
Packit Service 97d2fb
AC_CACHE_CHECK([whether gcc accepts -Wduplicated-cond], ac_cv_duplicated_cond, [dnl
Packit Service 97d2fb
old_CFLAGS="$CFLAGS"
Packit Service 97d2fb
CFLAGS="$CFLAGS -Wduplicated-cond -Werror"
Packit Service 97d2fb
AC_COMPILE_IFELSE([AC_LANG_SOURCE([])],
Packit Service 97d2fb
		  ac_cv_duplicated_cond=yes, ac_cv_duplicated_cond=no)
Packit Service 97d2fb
CFLAGS="$old_CFLAGS"])
Packit Service 97d2fb
AM_CONDITIONAL(HAVE_DUPLICATED_COND_WARNING,
Packit Service 97d2fb
	       [test "x$ac_cv_duplicated_cond" != "xno"])
Packit Service 97d2fb
Packit Service 97d2fb
# -Wnull-dereference was added by GCC6
Packit Service 97d2fb
AC_CACHE_CHECK([whether gcc accepts -Wnull-dereference], ac_cv_null_dereference, [dnl
Packit Service 97d2fb
old_CFLAGS="$CFLAGS"
Packit Service 97d2fb
CFLAGS="$CFLAGS -Wnull-dereference -Werror"
Packit Service 97d2fb
AC_COMPILE_IFELSE([AC_LANG_SOURCE([])],
Packit Service 97d2fb
		  ac_cv_null_dereference=yes, ac_cv_null_dereference=no)
Packit Service 97d2fb
CFLAGS="$old_CFLAGS"])
Packit Service 97d2fb
AM_CONDITIONAL(HAVE_NULL_DEREFERENCE_WARNING,
Packit Service 97d2fb
	       [test "x$ac_cv_null_dereference" != "xno"])
Packit Service 97d2fb
Packit Service 97d2fb
# -Wimplicit-fallthrough was added by GCC7
Packit Service 97d2fb
AC_CACHE_CHECK([whether gcc accepts -Wimplicit-fallthrough], ac_cv_implicit_fallthrough, [dnl
Packit Service 97d2fb
old_CFLAGS="$CFLAGS"
Packit Service 97d2fb
CFLAGS="$CFLAGS -Wimplicit-fallthrough -Werror"
Packit Service 97d2fb
AC_COMPILE_IFELSE([AC_LANG_SOURCE([])],
Packit Service 97d2fb
		  ac_cv_implicit_fallthrough=yes, ac_cv_implicit_fallthrough=no)
Packit Service 97d2fb
CFLAGS="$old_CFLAGS"])
Packit Service 97d2fb
AM_CONDITIONAL(HAVE_IMPLICIT_FALLTHROUGH_WARNING,
Packit Service 97d2fb
	       [test "x$ac_cv_implicit_fallthrough" != "xno"])
Packit Service 97d2fb
Packit Service 97d2fb
# Assume the fallthrough attribute is supported if -Wimplict-fallthrough is supported
Packit Service 97d2fb
if test "$ac_cv_implicit_fallthrough" = "yes"; then
Packit Service 97d2fb
	AC_DEFINE([HAVE_FALLTHROUGH], [1],
Packit Service 97d2fb
		  [Defined if __attribute__((fallthrough)) is supported])
Packit Service 97d2fb
fi
Packit Service 97d2fb
Packit Service 97d2fb
dnl Check if we have argp available from our libc
Packit Service 97d2fb
AC_LINK_IFELSE(
Packit Service 97d2fb
	[AC_LANG_PROGRAM(
Packit Service 97d2fb
		[#include <argp.h>],
Packit Service 97d2fb
		[int argc=1; char *argv[]={"test"}; argp_parse(0,argc,&argv,0,0,0); return 0;]
Packit Service 97d2fb
		)],
Packit Service 97d2fb
	[libc_has_argp="true"],
Packit Service 97d2fb
	[libc_has_argp="false"]
Packit Service 97d2fb
)
Packit Service 97d2fb
Packit Service 97d2fb
dnl If our libc doesn't provide argp, then test for libargp
Packit Service 97d2fb
if test "$libc_has_argp" = "false" ; then
Packit Service 97d2fb
	AC_MSG_WARN("libc does not have argp")
Packit Service 97d2fb
	AC_CHECK_LIB([argp], [argp_parse], [have_argp="true"], [have_argp="false"])
Packit Service 97d2fb
Packit Service 97d2fb
	if test "$have_argp" = "false"; then
Packit Service 97d2fb
		AC_MSG_ERROR("no libargp found")
Packit Service 97d2fb
	else
Packit Service 97d2fb
		argp_LDADD="-largp"
Packit Service 97d2fb
	fi
Packit Service 97d2fb
else
Packit Service 97d2fb
	argp_LDADD=""
Packit Service 97d2fb
fi
Packit Service 97d2fb
AC_SUBST([argp_LDADD])
Packit Service 97d2fb
Packit Service 97d2fb
dnl The directories with content.
Packit Service 97d2fb
Packit Service 97d2fb
dnl Documentation.
Packit Service 97d2fb
AC_CONFIG_FILES([doc/Makefile])
Packit Service 97d2fb
Packit Service 97d2fb
dnl Support library.
Packit Service 97d2fb
AC_CONFIG_FILES([lib/Makefile])
Packit Service 97d2fb
Packit Service 97d2fb
dnl ELF library.
Packit Service 97d2fb
AC_CONFIG_FILES([libelf/Makefile])
Packit Service 97d2fb
Packit Service 97d2fb
dnl Higher-level ELF support library.
Packit Service 97d2fb
AC_CONFIG_FILES([libebl/Makefile])
Packit Service 97d2fb
Packit Service 97d2fb
dnl DWARF-ELF Lower-level Functions support library.
Packit Service 97d2fb
AC_CONFIG_FILES([libdwelf/Makefile])
Packit Service 97d2fb
Packit Service 97d2fb
dnl DWARF library.
Packit Service 97d2fb
AC_CONFIG_FILES([libdw/Makefile])
Packit Service 97d2fb
Packit Service 97d2fb
dnl Higher-level DWARF support library.
Packit Service 97d2fb
AC_CONFIG_FILES([libdwfl/Makefile])
Packit Service 97d2fb
Packit Service 97d2fb
dnl CPU handling library.
Packit Service 97d2fb
AC_CONFIG_FILES([libcpu/Makefile])
Packit Service 97d2fb
Packit Service 97d2fb
dnl Assembler library.
Packit Service 97d2fb
AM_CONDITIONAL(HAVE_LIBASM, true)dnl Used in tests/Makefile.am, which see.
Packit Service 97d2fb
AC_CONFIG_FILES([libasm/Makefile])
Packit Service 97d2fb
Packit Service 97d2fb
dnl CPU-specific backend libraries.
Packit Service 97d2fb
AC_CONFIG_FILES([backends/Makefile])
Packit Service 97d2fb
Packit Service 97d2fb
dnl Tools.
Packit Service 97d2fb
AC_CONFIG_FILES([src/Makefile po/Makefile.in])
Packit Service 97d2fb
Packit Service 97d2fb
dnl Test suite.
Packit Service 97d2fb
AM_CONDITIONAL(STANDALONE, false)dnl Used in tests/Makefile.am, which see.
Packit Service 97d2fb
AC_CONFIG_FILES([tests/Makefile])
Packit Service 97d2fb
Packit Service 97d2fb
dnl pkgconfig files
Packit Service 97d2fb
AC_CONFIG_FILES([config/libelf.pc config/libdw.pc config/libdebuginfod.pc])
Packit Service 97d2fb
Packit Service 97d2fb
# Get the definitions necessary to create the Makefiles in the po
Packit Service 97d2fb
# subdirectories.  This is a small subset of the gettext rules.
Packit Service 97d2fb
AC_SUBST(USE_NLS, yes)
Packit Service 97d2fb
AM_PO_SUBDIRS
Packit Service 97d2fb
Packit Service 97d2fb
dnl Appended to the config.h file.
Packit Service 97d2fb
dnl We hide all kinds of configuration magic in lib/eu-config.h.
Packit Service 97d2fb
AH_BOTTOM([#include <eu-config.h>])
Packit Service 97d2fb
Packit Service 97d2fb
dnl Version compatibility header.
Packit Service 97d2fb
AC_CONFIG_FILES([version.h:config/version.h.in])
Packit Service 97d2fb
AC_SUBST([eu_version])
Packit Service 97d2fb
Packit Service 97d2fb
# 1.234<whatever> -> 1234<whatever>
Packit Service 97d2fb
case "$PACKAGE_VERSION" in
Packit Service 97d2fb
[[0-9]].*) eu_version=`echo "$PACKAGE_VERSION" | sed 's@\.@@'` ;;
Packit Service 97d2fb
*)     	   AC_MSG_ERROR([confused by version number '$PACKAGE_VERSION']) ;;
Packit Service 97d2fb
esac
Packit Service 97d2fb
case "$eu_version" in
Packit Service 97d2fb
*.*)
Packit Service 97d2fb
  # 1234.567 -> "1234", "567"
Packit Service 97d2fb
  eu_extra_version="${eu_version#*.}"
Packit Service 97d2fb
  eu_version="${eu_version%%.*}"
Packit Service 97d2fb
  case "$eu_extra_version" in
Packit Service 97d2fb
  [[0-9]][[0-9]][[0-9]]) ;;
Packit Service 97d2fb
  [[0-9]][[0-9]])	eu_extra_version="${eu_extra_version}0" ;;
Packit Service 97d2fb
  [[0-9]])	   	eu_extra_version="${eu_extra_version}00" ;;
Packit Service 97d2fb
  *) AC_MSG_ERROR([confused by version number '$PACKAGE_VERSION']) ;;
Packit Service 97d2fb
  esac
Packit Service 97d2fb
  ;;
Packit Service 97d2fb
*)
Packit Service 97d2fb
  eu_extra_version=000
Packit Service 97d2fb
  ;;
Packit Service 97d2fb
esac
Packit Service 97d2fb
Packit Service 97d2fb
case "$eu_version" in
Packit Service 97d2fb
      0[[0-9]][[0-9]][[0-9]]) eu_version="${eu_version#0}$eu_extra_version" ;;
Packit Service 97d2fb
[[0-9]][[0-9]][[0-9]][[0-9]]) eu_version="${eu_version}$eu_extra_version" ;;
Packit Service 97d2fb
[[0-9]][[0-9]][[0-9]])	      eu_version="${eu_version}0$eu_extra_version" ;;
Packit Service 97d2fb
[[0-9]][[0-9]])	  	      eu_version="${eu_version}00$eu_extra_version";;
Packit Service 97d2fb
*) AC_MSG_ERROR([confused by version number '$PACKAGE_VERSION']) ;;
Packit Service 97d2fb
esac
Packit Service 97d2fb
Packit Service 97d2fb
# Round up to the next release API (x.y) version.
Packit Service 97d2fb
eu_version=$(( (eu_version + 999) / 1000 ))
Packit Service 97d2fb
Packit Service 97d2fb
AC_CHECK_SIZEOF(long)
Packit Service 97d2fb
Packit Service 97d2fb
# On aarch64 before glibc 2.20 we would get the kernel user_pt_regs instead
Packit Service 97d2fb
# of the user_regs_struct from sys/user.h. They are structurally the same
Packit Service 97d2fb
# but we get either one or the other.
Packit Service 97d2fb
AC_CHECK_TYPE([struct user_regs_struct],
Packit Service 97d2fb
              [sys_user_has_user_regs=yes], [sys_user_has_user_regs=no],
Packit Service 97d2fb
              [[#include <sys/ptrace.h>]
Packit Service 97d2fb
               [#include <sys/time.h>]
Packit Service 97d2fb
               [#include <sys/user.h>]])
Packit Service 97d2fb
if test "$sys_user_has_user_regs" = "yes"; then
Packit Service 97d2fb
  AC_DEFINE(HAVE_SYS_USER_REGS, 1,
Packit Service 97d2fb
            [Define to 1 if <sys/user.h> defines struct user_regs_struct])
Packit Service 97d2fb
fi
Packit Service 97d2fb
Packit Service 97d2fb
# On a 64-bit host where can can use $CC -m32, we'll run two sets of tests.
Packit Service 97d2fb
# Likewise in a 32-bit build on a host where $CC -m64 works.
Packit Service 97d2fb
utrace_BIARCH
Packit Service 97d2fb
# `$utrace_biarch' will be `-m64' even on an uniarch i386 machine.
Packit Service 97d2fb
CC_BIARCH="$CC $utrace_biarch"
Packit Service 97d2fb
AC_SUBST([CC_BIARCH])
Packit Service 97d2fb
Packit Service 97d2fb
# In maintainer mode we really need flex and bison.
Packit Service 97d2fb
# Otherwise we really need a release dir with maintainer files generated.
Packit Service 97d2fb
if test "x$enable_maintainer_mode" = xyes; then
Packit Service 97d2fb
  AC_CHECK_PROG(HAVE_FLEX, flex, yes, no)
Packit Service 97d2fb
  if test "$HAVE_FLEX" = "no"; then
Packit Service 97d2fb
    AC_MSG_ERROR([flex needed in maintainer mode])
Packit Service 97d2fb
  fi
Packit Service 97d2fb
  AC_CHECK_PROG(HAVE_BISON, bison, yes, no)
Packit Service 97d2fb
  if test "$HAVE_BISON" = "no"; then
Packit Service 97d2fb
    AC_MSG_ERROR([bison needed in maintainer mode])
Packit Service 97d2fb
  fi
Packit Service 97d2fb
  AC_CHECK_PROG(HAVE_GAWK, gawk, yes, no)
Packit Service 97d2fb
  if test "$HAVE_GAWK" = "no"; then
Packit Service 97d2fb
    AC_MSG_ERROR([gawk needed in maintainer mode])
Packit Service 97d2fb
  fi
Packit Service 97d2fb
else
Packit Service 97d2fb
  if test ! -f ${srcdir}/libdw/known-dwarf.h; then
Packit Service 97d2fb
    AC_MSG_ERROR([No libdw/known-dwarf.h. configure --enable-maintainer-mode])
Packit Service 97d2fb
  fi
Packit Service 97d2fb
fi
Packit Service 97d2fb
Packit Service 97d2fb
# The testfiles are all compressed, we need bunzip2 when running make check
Packit Service 97d2fb
AC_CHECK_PROG(HAVE_BUNZIP2, bunzip2, yes, no)
Packit Service 97d2fb
if test "$HAVE_BUNZIP2" = "no"; then
Packit Service 97d2fb
  AC_MSG_WARN([No bunzip2, needed to run make check])
Packit Service 97d2fb
fi
Packit Service 97d2fb
Packit Service 97d2fb
# For tests that need to use zstd compression
Packit Service 97d2fb
AC_CHECK_PROG(HAVE_ZSTD, zstd, yes, no)
Packit Service 97d2fb
AM_CONDITIONAL([HAVE_ZSTD],[test "x$HAVE_ZSTD" = "xyes"])
Packit Service 97d2fb
Packit Service 97d2fb
# Look for libcurl for libdebuginfod minimum version as per rhel7.
Packit Service 97d2fb
AC_ARG_ENABLE([libdebuginfod],AC_HELP_STRING([--enable-libdebuginfod], [Build debuginfod client library (can be =dummy)]))
Packit Service 97d2fb
AS_IF([test "x$enable_libdebuginfod" != "xno"], [
Packit Service 97d2fb
    if test "x$enable_libdebuginfod" != "xdummy"; then
Packit Service 97d2fb
      AC_MSG_NOTICE([checking libdebuginfod dependencies, --disable-libdebuginfod or --enable-libdebuginfo=dummy to skip])
Packit Service 97d2fb
      enable_libdebuginfod=yes # presume success
Packit Service 97d2fb
      PKG_PROG_PKG_CONFIG
Packit Service 97d2fb
      PKG_CHECK_MODULES([libcurl],[libcurl >= 7.29.0],[],[enable_libdebuginfod=no])
Packit Service 97d2fb
      if test "x$enable_libdebuginfod" = "xno"; then
Packit Service 97d2fb
        AC_MSG_ERROR([dependencies not found, use --disable-libdebuginfod to disable or --enable-libdebuginfod=dummy to build a (bootstrap) dummy library.])
Packit Service 97d2fb
      fi
Packit Service 97d2fb
    else
Packit Service 97d2fb
      AC_MSG_NOTICE([building (bootstrap) dummy libdebuginfo library])
Packit Service 97d2fb
    fi
Packit Service 97d2fb
])
Packit Service 97d2fb
Packit Service 97d2fb
AS_IF([test "x$enable_libdebuginfod" = "xyes" || test "x$enable_libdebuginfod" = "xdummy"],
Packit Service 97d2fb
      [AC_DEFINE([ENABLE_LIBDEBUGINFOD], [1], [Enable libdebuginfod])])
Packit Service 97d2fb
AS_IF([test "x$enable_libdebuginfod" = "xdummy"],
Packit Service 97d2fb
      [AC_DEFINE([DUMMY_LIBDEBUGINFOD], [1], [Build dummy libdebuginfod])])
Packit Service 97d2fb
AM_CONDITIONAL([LIBDEBUGINFOD],[test "x$enable_libdebuginfod" = "xyes" || test "x$enable_libdebuginfod" = "xdummy"])
Packit Service 97d2fb
AM_CONDITIONAL([DUMMY_LIBDEBUGINFOD],[test "x$enable_libdebuginfod" = "xdummy"])
Packit Service 97d2fb
Packit Service 97d2fb
# Look for libmicrohttpd, libarchive, sqlite for debuginfo server
Packit Service 97d2fb
# minimum versions as per rhel7.
Packit Service 97d2fb
AC_ARG_ENABLE([debuginfod],AC_HELP_STRING([--enable-debuginfod], [Build debuginfod server]))
Packit Service 97d2fb
AC_PROG_CXX
Packit Service 97d2fb
AS_IF([test "x$enable_debuginfod" != "xno"], [
Packit Service 97d2fb
    AC_MSG_NOTICE([checking debuginfod C++11 support, --disable-debuginfod to skip])
Packit Service 97d2fb
    AX_CXX_COMPILE_STDCXX(11, noext, mandatory)
Packit Service 97d2fb
    AC_MSG_NOTICE([checking debuginfod dependencies, --disable-debuginfod to skip])
Packit Service 97d2fb
    if test "x$enable_libdebuginfod" = "xno"; then
Packit Service 97d2fb
      AC_MSG_ERROR([need libdebuginfod (or dummy), use --disable-debuginfod to disable.])
Packit Service 97d2fb
    fi
Packit Service 97d2fb
    enable_debuginfod=yes # presume success
Packit Service 97d2fb
    PKG_PROG_PKG_CONFIG
Packit Service 97d2fb
    PKG_CHECK_MODULES([libmicrohttpd],[libmicrohttpd >= 0.9.33],[],[enable_debuginfod=no])
Packit Service 97d2fb
    PKG_CHECK_MODULES([sqlite3],[sqlite3 >= 3.7.17],[],[enable_debuginfod=no])
Packit Service 97d2fb
    PKG_CHECK_MODULES([libarchive],[libarchive >= 3.1.2],[],[enable_debuginfod=no])
Packit Service 97d2fb
    if test "x$enable_debuginfod" = "xno"; then
Packit Service 97d2fb
      AC_MSG_ERROR([dependencies not found, use --disable-debuginfod to disable.])
Packit Service 97d2fb
    fi
Packit Service 97d2fb
])
Packit Service 97d2fb
Packit Service 97d2fb
AS_IF([test "x$enable_debuginfod" != "xno"],AC_DEFINE([ENABLE_DEBUGINFOD],[1],[Build debuginfod]))
Packit Service 97d2fb
AM_CONDITIONAL([DEBUGINFOD],[test "x$enable_debuginfod" = "xyes"])
Packit Service 97d2fb
Packit Service 97d2fb
dnl for /etc/profile.d/elfutils.{csh,sh}
Packit Service 97d2fb
default_debuginfod_urls=""
Packit Service 97d2fb
AC_ARG_ENABLE(debuginfod-urls,
Packit Service 97d2fb
            [AS_HELP_STRING([--enable-debuginfod-urls@<:@=URLS@:>@],[add URLS to profile.d DEBUGINFOD_URLS])],
Packit Service 97d2fb
            [if test "x${enableval}" = "xyes";
Packit Service 97d2fb
             then default_debuginfod_urls="https://debuginfod.elfutils.org/";
Packit Service 97d2fb
             elif test "x${enableval}" != "xno"; then
Packit Service 97d2fb
             default_debuginfod_urls="${enableval}";
Packit Service 97d2fb
             fi],
Packit Service 97d2fb
            [default_debuginfod_urls=""])
Packit Service 97d2fb
AC_SUBST(DEBUGINFOD_URLS, $default_debuginfod_urls)                
Packit Service 97d2fb
AC_CONFIG_FILES([config/profile.sh config/profile.csh])
Packit Service 97d2fb
Packit Service 97d2fb
AC_OUTPUT
Packit Service 97d2fb
Packit Service 97d2fb
AC_MSG_NOTICE([
Packit Service 97d2fb
=====================================================================
Packit Service 97d2fb
        elfutils: ${PACKAGE_VERSION} (eu_version: ${eu_version})
Packit Service 97d2fb
=====================================================================
Packit Service 97d2fb
Packit Service 97d2fb
    Prefix                             : ${prefix}
Packit Service 97d2fb
    Program prefix ("eu-" recommended) : ${program_prefix}
Packit Service 97d2fb
    Source code location               : ${srcdir}
Packit Service 97d2fb
    Maintainer mode                    : ${enable_maintainer_mode}
Packit Service 97d2fb
    build arch                         : ${ac_cv_build}
Packit Service 97d2fb
Packit Service 97d2fb
  RECOMMENDED FEATURES (should all be yes)
Packit Service 97d2fb
    gzip support                       : ${with_zlib}
Packit Service 97d2fb
    bzip2 support                      : ${with_bzlib}
Packit Service 97d2fb
    lzma/xz support                    : ${with_lzma}
Packit Service 97d2fb
    zstd support                       : ${with_zstd}
Packit Service 97d2fb
    libstdc++ demangle support         : ${enable_demangler}
Packit Service 97d2fb
    File textrel check                 : ${enable_textrelcheck}
Packit Service 97d2fb
    Symbol versioning                  : ${enable_symbol_versioning}
Packit Service 97d2fb
Packit Service 97d2fb
  NOT RECOMMENDED FEATURES (should all be no)
Packit Service 97d2fb
    Experimental thread safety         : ${use_locks}
Packit Service 97d2fb
    install elf.h                      : ${install_elfh}
Packit Service 97d2fb
Packit Service 97d2fb
  OTHER FEATURES
Packit Service 97d2fb
    Deterministic archives by default  : ${default_ar_deterministic}
Packit Service 97d2fb
    Native language support            : ${USE_NLS}
Packit Service 97d2fb
    Extra Valgrind annotations         : ${use_vg_annotations}
Packit Service 97d2fb
    libdebuginfod client support       : ${enable_libdebuginfod}
Packit Service 97d2fb
    Debuginfod server support          : ${enable_debuginfod}
Packit Service 97d2fb
    Default DEBUGINFOD_URLS            : ${default_debuginfod_urls}
Packit Service 97d2fb
Packit Service 97d2fb
  EXTRA TEST FEATURES (used with make check)
Packit Service 97d2fb
    have bunzip2 installed (required)  : ${HAVE_BUNZIP2}
Packit Service 97d2fb
    have zstd installed                : ${HAVE_ZSTD}
Packit Service 97d2fb
    debug branch prediction            : ${use_debugpred}
Packit Service 97d2fb
    gprof support                      : ${use_gprof}
Packit Service 97d2fb
    gcov support                       : ${use_gcov}
Packit Service 97d2fb
    run all tests under valgrind       : ${use_valgrind}
Packit Service 97d2fb
    gcc undefined behaviour sanitizer  : ${use_undefined}
Packit Service 97d2fb
    use rpath in tests                 : ${tests_use_rpath}
Packit Service 97d2fb
    test biarch                        : ${utrace_cv_cc_biarch}
Packit Service 97d2fb
])
Packit Service 97d2fb
Packit Service 97d2fb
if test "$install_elfh" = yes; then
Packit Service 97d2fb
  if test "${prefix}" = "/usr/local" -o "${prefix}" = "/usr"; then
Packit Service 97d2fb
    AC_MSG_WARN([installing elf.h in ${includedir} might conflict with glibc/system elf.h])
Packit Service 97d2fb
  fi
Packit Service 97d2fb
fi