| # Copyright (C) 2013-2020 Red Hat, Inc |
| # |
| # This file is part of the GNU Application Binary Interface Generic |
| # Analysis and Instrumentation Library (libabigail). This library is |
| # free software; you can redistribute it and/or modify it under the |
| # terms of the GNU General Public License as published by the Free |
| # Software Foundation; either version 3, or (at your option) any |
| # later version. |
| # |
| # This library is distributed in the hope that it will be useful, but |
| # WITHOUT ANY WARRANTY; without even the implied warranty of |
| # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
| # General Public License for more details. |
| # |
| # Under Section 7 of GPL version 3, you are granted additional |
| # permissions described in the GCC Runtime Library Exception, version |
| # 3.1, as published by the Free Software Foundation. |
| # |
| # You should have received a copy of the GNU General Public License |
| # and a copy of the GCC Runtime Library Exception along with this |
| # program; see the files COPYING3 and COPYING.RUNTIME respectively. |
| # If not, see <http://www.gnu.org/licenses/>. |
| # |
| #// Author: Dodji Seketeli <dodji@redhat.com> |
| |
| # ABIGAIL_INIT |
| # |
| # Handle the detection of the libabigail header and library files on |
| # the system. If these are present, set the 'abigailinc' variable to |
| # the compiler option necessary to locate the headers of the library; |
| # also set the 'abigaillibs' variable to the compiler/linker option |
| # necessary to locate the library. |
| # |
| # Note that this macro defines the handling of --with-abigail, |
| # --with-abigail-include, --with-abigail-lib and |
| # --enable-abigail-version-check switches to the configure script. |
| # |
| # If libabigail has been found, this macro sets the variable |
| # HAVE_LIBABIGAIL to 'yes', otherwise, it sets it to 'no'. |
| AC_DEFUN([ABIGAIL_INIT], |
| [ |
| AC_ARG_WITH([abigail], |
| [AS_HELP_STRING([--with-abigail], |
| [Prefix directory for abigail library])], |
| [], |
| []) |
| |
| AC_ARG_WITH([abigail-include], |
| [AS_HELP_STRING([--with-abigail-include], |
| [Directory for installed abigail include files])], |
| [], |
| []) |
| |
| AC_ARG_WITH([abigail-lib], |
| [AS_HELP_STRING([--with-abigail-lib], |
| [Directory for installed abigail library])], |
| [], |
| []) |
| |
| AC_ARG_ENABLE(abigail-version-check, |
| [AS_HELP_STRING([--enable-abigail-version-check], |
| [Enable check for libabigail version])], |
| [ENABLE_ABIGAIL_VERSION_CHECK=$enableval], |
| [ENABLE_ABIGAIL_VERSION_CHECK=yes]) |
| |
| if test x$with_abigail != x -a x$with_abigail != xno; then |
| abigailinc="-I$with_abigail/include/libabigail" |
| abigaillibs="-L$with_abigail/lib" |
| found_abigail_lib=yes |
| found_abigail_inc=yes |
| fi |
| |
| if test x$with_abigail_include != x -a x$with_abigail != xno; then |
| abigailinc="-I$with_abigail_include" |
| found_abigail_inc=yes |
| fi |
| |
| if test x$with_abigail_lib != x -a x$with_abigail != xno; then |
| abigaillibs="-L$with_abigail_lib" |
| found_abigail_lib=yes |
| fi |
| |
| if test x$abigaillibs = x; then |
| AC_CHECK_LIB(abigail, abigail_get_library_version, |
| [found_abigail_lib=yes], [], []) |
| fi |
| |
| if test x$abigailinc = x; then |
| AC_LANG_PUSH(C++) |
| AC_CHECK_HEADER([libabigail/abg-version.h], |
| [found_abigail_inc=yes], [], []) |
| AC_LANG_POP(C++) |
| fi |
| |
| if test x$found_abigail_lib = xyes -a x$found_abigail_inc = xyes; then |
| HAVE_LIBABIGAIL=yes |
| else |
| HAVE_LIBABIGAIL=no |
| fi |
| |
| #Test whether libabigail is in the gcc source tree. |
| if test x$HAVE_LIBABIGAIL != xyes; then |
| if test -d $srcdir/libabigail -a -f $srcdir/gcc/gcc.c; then |
| libpath='$$r/$(HOST_SUBDIR)/libabigail/src/'"${lt_cv_objdir}" |
| abigaillibs="-L$libpath ${abigaillibs}" |
| abigailinc='-I${srcdir}/libabigail/include '"${abigailinc}" |
| found_abigail_lib=yes |
| found_abigail_inc=yes |
| HAVE_LIBABIGAIL=yes |
| AC_MSG_WARN([using in-tree libabigail, disabling version check]); |
| ENABLE_ABIGAIL_VERSION_CHECK=no |
| fi |
| fi |
| |
| if test x$found_abigail_lib = xyes; then |
| abigaillibs="$abigaillibs -Wl,-Bstatic -labigail -Wl,-Bdynamic" |
| fi |
| |
| ] |
| ) |
| |
| # IF_ABIGAIL_PRESENT(ACTION-IF-PRESENT) |
| AC_DEFUN([IF_ABIGAIL_PRESENT], |
| [ |
| AC_REQUIRE([ABIGAIL_INIT]) |
| |
| if test x$HAVE_LIBABIGAIL = xyes; then |
| $1 |
| fi |
| ] |
| ) |
| |
| # IF_ABIGAIL_NOT_PRESENT(ACTION-IF-NOT-PRESENT) |
| AC_DEFUN([IF_ABIGAIL_NOT_PRESENT], |
| [ |
| AC_REQUIRE([ABIGAIL_INIT]) |
| if test x$HAVE_LIBABIGAIL != xyes; then |
| $1 |
| fi |
| ] |
| ) |
| |
| # ABIGAIL_CHECK_VERSION(MAJOR, MINOR) |
| # |
| # Test the whether the found major and minor version numbers of the |
| # found abigail library is compatible with the MAJOR.MINOR version |
| # number given in argument. The result of the test ('yes' or 'no') is |
| # put in the variable has_right_abigail_version. |
| AC_DEFUN([ABIGAIL_CHECK_VERSION], |
| [ |
| AC_REQUIRE([ABIGAIL_INIT]) |
| |
| if test x$ENABLE_ABIGAIL_VERSION_CHECK = xyes; then |
| _abigail_saved_CXXFLAGS=$CXXFLAGLS |
| _abigail_saved_LDFLAGS=$LDFLAGS |
| |
| CXXFLAGS="$abigailinc" |
| LDFLAGS="$abigaillibs" |
| |
| AC_MSG_CHECKING([for version $1.$2 of libabigail]) |
| AC_LANG_PUSH(C++) |
| AC_COMPILE_IFELSE([AC_LANG_PROGRAM([#include "abg-version.h"], |
| [#if ABIGAIL_VERSION_MAJOR != $1 || ABIGAIL_VERSION_MINOR < $2 |
| choke here |
| #endif |
| ]) |
| ], |
| has_right_abigail_version=yes, |
| has_right_abigail_version=no) |
| AC_LANG_POP(C++) |
| AC_MSG_RESULT([$has_right_abigail_version]) |
| |
| CXXFLAGS=$_abigail_saved_CXXFLAGS |
| LDFLAGS=$_abigail_saved_LDFLAGS |
| else |
| # Version checking was disabled, so assume we have the right |
| # version of libabigail. |
| has_right_abigail_version=yes |
| fi |
| ] |
| ) |