diff --git a/configure.ac b/configure.ac index a5e346ff56330da020eec12df6b686b0efbbc92c..a8a66c27c04025f3c14160a8a1c340ab15cf3e2b 100644 --- a/configure.ac +++ b/configure.ac @@ -962,7 +962,8 @@ fi TargetHasLibm=$HaveLibM AC_SUBST(TargetHasLibm) -FP_BFD_SUPPORT +FP_BFD_FLAG +AC_SUBST([UseLibbfd]) dnl ################################################################ dnl Check for libraries diff --git a/m4/fp_bfd_support.m4 b/m4/fp_bfd_support.m4 index 2f357820f7b62ce5d1b07737635417d774b2ce51..fcc1dcca9ecdf70b8dd2e4921bf50f4e5c6ba971 100644 --- a/m4/fp_bfd_support.m4 +++ b/m4/fp_bfd_support.m4 @@ -1,49 +1,59 @@ # FP_BFD_SUPPORT() # ---------------------- -# whether to use libbfd for debugging RTS -AC_DEFUN([FP_BFD_SUPPORT], [ - HaveLibbfd=NO - AC_ARG_ENABLE(bfd-debug, - [AS_HELP_STRING([--enable-bfd-debug], - [Enable symbol resolution for -debug rts ('+RTS -Di') via binutils' libbfd [default=no]])], - [ - # don't pollute general LIBS environment - save_LIBS="$LIBS" - AC_CHECK_HEADERS([bfd.h]) - dnl ** check whether this machine has BFD and libiberty installed (used for debugging) - dnl the order of these tests matters: bfd needs libiberty - AC_CHECK_LIB(iberty, xmalloc) - dnl 'bfd_init' is a rare non-macro in libbfd - AC_CHECK_LIB(bfd, bfd_init) +# Whether to use libbfd for debugging RTS +# +# Sets: +# UseLibbfd: [YES|NO] +AC_DEFUN([FP_BFD_FLAG], [ + UseLibbfd=NO + AC_ARG_ENABLE(bfd-debug, + [AS_HELP_STRING([--enable-bfd-debug], + [Enable symbol resolution for -debug rts ('+RTS -Di') via binutils' libbfd [default=no]])], + [UseLibbfd=YES], + [UseLibbfd=NO]) +]) + +# FP_WHEN_ENABLED_BFD +# ---------------------- +# Checks for libraries in the default way, which will define various +# `HAVE_*` macros. +AC_DEFUN([FP_WHEN_ENABLED_BFD], [ + # don't pollute general LIBS environment + save_LIBS="$LIBS" + AC_CHECK_HEADERS([bfd.h]) + dnl ** check whether this machine has BFD and libiberty installed (used for debugging) + dnl the order of these tests matters: bfd needs libiberty + AC_CHECK_LIB(iberty, xmalloc) + dnl 'bfd_init' is a rare non-macro in libbfd + AC_CHECK_LIB(bfd, bfd_init) - AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <bfd.h>]], - [[ - /* mimic our rts/Printer.c */ - bfd* abfd; - const char * name; - char **matching; + AC_LINK_IFELSE( + [AC_LANG_PROGRAM( + [[#include <bfd.h>]], + [[ + /* mimic our rts/Printer.c */ + bfd* abfd; + const char * name; + char **matching; - name = "some.executable"; - bfd_init(); - abfd = bfd_openr(name, "default"); - bfd_check_format_matches (abfd, bfd_object, &matching); - { - long storage_needed; - storage_needed = bfd_get_symtab_upper_bound (abfd); - } - { - asymbol **symbol_table; - long number_of_symbols; - symbol_info info; + name = "some.executable"; + bfd_init(); + abfd = bfd_openr(name, "default"); + bfd_check_format_matches (abfd, bfd_object, &matching); + { + long storage_needed; + storage_needed = bfd_get_symtab_upper_bound (abfd); + } + { + asymbol **symbol_table; + long number_of_symbols; + symbol_info info; - number_of_symbols = bfd_canonicalize_symtab (abfd, symbol_table); - bfd_get_symbol_info(abfd,symbol_table[0],&info); - } - ]])], - HaveLibbfd=YES,dnl bfd seems to work - [AC_MSG_ERROR([can't use 'bfd' library])]) - LIBS="$save_LIBS" - ] - ) - AC_SUBST([UseLibbfd],[$HaveLibbfd]) + number_of_symbols = bfd_canonicalize_symtab (abfd, symbol_table); + bfd_get_symbol_info(abfd,symbol_table[0],&info); + } + ]])], + [], dnl bfd seems to work + [AC_MSG_ERROR([can't use 'bfd' library])]) + LIBS="$save_LIBS" ]) diff --git a/rts/configure.ac b/rts/configure.ac index 4983685a93f657c01af080b8b8d2b04d307b3ce7..1fbd2164070eea73dbc8027aad363ab8f4912a2a 100644 --- a/rts/configure.ac +++ b/rts/configure.ac @@ -33,6 +33,8 @@ GHC_CONVERT_PLATFORM_PARTS([host], [Host]) FPTOOLS_SET_PLATFORM_VARS([host], [Host]) FPTOOLS_SET_HASKELL_PLATFORM_VARS([Host]) +AS_IF([test "$CABAL_FLAG_libbfd" = 1], [FP_WHEN_ENABLED_BFD]) + dnl ################################################################ dnl Check for libraries dnl ################################################################