From ede4bd3662b380d5ddf89a0b80794938c78be8d3 Mon Sep 17 00:00:00 2001 From: Jonathan G Rennison Date: Mon, 14 Sep 2015 23:00:45 +0100 Subject: [PATCH] Change to config libbfd detection. Include all used functions in test script, this is to catch unsatisfied dependency link errors. Try to compile with libiberty and then also with libintl if the initial test fails. Log the executed commands at level 2, for consistency with other config test compiles. --- config.lib | 93 +++++++++++++++++++++++++++++++++--------------------- 1 file changed, 57 insertions(+), 36 deletions(-) diff --git a/config.lib b/config.lib index eda27564f8..1e22ba9ce1 100644 --- a/config.lib +++ b/config.lib @@ -1442,6 +1442,34 @@ make_compiler_cflags() { eval "$5=\"$features\"" } +test_compile_libbfd() { + log 2 "executing $cc_host $CFLAGS $LDFLAGS -o tmp.config.bfd -x c++ - $1" + "$cc_host" $CFLAGS $LDFLAGS -o tmp.config.bfd -x c++ - $1 2> /dev/null << EOL + #define PACKAGE 1 + #define PACKAGE_VERSION 1 + #include + #include + int main() { + bfd_init(); + bfd *abfd = bfd_openr("test", "test"); + bfd_check_format(abfd, bfd_object); + bfd_get_file_flags(abfd); + bfd_map_over_sections(abfd, (void (*)(bfd*, asection*, void*)) 0, (void *) 0); + asymbol *syms = 0; + long symcount = bfd_read_minisymbols(abfd, false, (void**) &syms, (unsigned int *) 0); + bfd_get_section_flags(abfd, (asection*) 0); + bfd_get_section_vma(abfd, (asection*) 0); + bfd_section_size(abfd, (asection*) 0); + bfd_find_nearest_line(abfd, (asection*) 0, (asymbol **) 0, (bfd_vma) 0, (const char **) 0, (const char **) 0, (unsigned int *) 0); + return (int) symcount; + } +EOL + ret=$? + rm -f tmp.config.bfd + log 2 " exit code $ret" + return $ret +} + make_cflags_and_ldflags() { # General CFlags for BUILD CFLAGS_BUILD="$CFLAGS_BUILD" @@ -1567,6 +1595,7 @@ make_cflags_and_ldflags() { LIBS="$LIBS -lpthread" fi if [ "$os" != "CYGWIN" ] && [ "$os" != "HAIKU" ] && [ "$os" != "MINGW" ] && [ "$os" != "MORPHOS" ] && [ "$os" != "OSX" ] && [ "$os" != "DOS" ] && [ "$os" != "WINCE" ] && [ "$os" != "PSP" ] && [ "$os" != "OS2" ]; then + log 2 "executing $cc_host $CFLAGS $LDFLAGS -o tmp.config.libdl -x c++ - -ldl" "$cc_host" $CFLAGS $LDFLAGS -o tmp.config.libdl -x c++ - -ldl 2> /dev/null << EOL #include int main() { @@ -1574,43 +1603,42 @@ make_cflags_and_ldflags() { return dladdr(0, &info); } EOL - if [ $? -ne 0 ]; then + ret=$? + rm -f tmp.config.libdl + log 2 " exit code $ret" + if [ $ret -ne 0 ]; then log 1 "checking libdl... no" else log 1 "checking libdl... found" LIBS="$LIBS -ldl" CFLAGS="$CFLAGS -DWITH_DL" fi - rm -f tmp.config.libdl if [ "$with_libbfd" = "1" ]; then - "$cc_host" $CFLAGS $LDFLAGS -o tmp.config.bfd -x c++ - -lbfd 2> /dev/null << EOL - #define PACKAGE 1 - #define PACKAGE_VERSION 1 - #include - int main() { - bfd_init(); - unsigned int size; - asymbol *syms = 0; - long symcount = bfd_read_minisymbols((bfd *) 0, false, (void**) &syms, &size); - return 0; - } -EOL - if [ $? -ne 0 ]; then - log 1 "checking libbfd... no" + if test_compile_libbfd "-lbfd -lz"; then + LIBBFD_LIBS="-lbfd -lz" + elif test_compile_libbfd "-lbfd -liberty -lz"; then + LIBBFD_LIBS="-lbfd -liberty -lz" + elif test_compile_libbfd "-lbfd -liberty -lintl -lz"; then + LIBBFD_LIBS="-lbfd -liberty -lintl -lz" else + LIBBFD_LIBS= + fi + if [ -n "$LIBBFD_LIBS" ]; then log 1 "checking libbfd... found" - LIBS="$LIBS -lbfd" + LIBS="$LIBS $LIBBFD_LIBS" CFLAGS="$CFLAGS -DWITH_BFD" if [ $enable_debug -lt 1 ] && [ "$with_bfd_extra_debug" = "1" ]; then CFLAGS="$CFLAGS -g1" fi + else + log 1 "checking libbfd... no" fi - rm -f tmp.config.bfd fi fi if [ "$os" = "MINGW" ]; then + log 2 "executing $cc_host $CFLAGS $LDFLAGS -o tmp.config.dbghelp -x c++ -" "$cc_host" $CFLAGS $LDFLAGS -o tmp.config.dbghelp -x c++ - 2> /dev/null << EOL #include #include @@ -1622,43 +1650,34 @@ EOL return 0; } EOL - if [ $? -ne 0 ]; then + ret=$? + rm -f tmp.config.dbghelp + log 2 " exit code $ret" + if [ $ret -ne 0 ]; then log 1 "checking dbghelp... no" else log 1 "checking dbghelp... found" CFLAGS="$CFLAGS -DWITH_DBGHELP" if [ "$with_libbfd" = "1" ]; then - "$cc_host" $CFLAGS $LDFLAGS -o tmp.config.bfd -x c++ - -lbfd -liberty -lintl 2> /dev/null << EOL - #define PACKAGE 1 - #define PACKAGE_VERSION 1 - #include - int main() { - bfd_init(); - unsigned int size; - asymbol *syms = 0; - long symcount = bfd_read_minisymbols((bfd *) 0, false, (void**) &syms, &size); - return 0; - } -EOL + test_compile_libbfd "-lbfd -liberty -lintl -lz" if [ $? -ne 0 ]; then log 1 "checking libbfd... no" else log 1 "checking libbfd... found" - LIBS="$LIBS -lbfd -liberty -lintl" + LIBS="$LIBS -lbfd -liberty -lintl -lz" CFLAGS="$CFLAGS -DWITH_BFD" if [ $enable_debug -lt 1 ] && [ "$with_bfd_extra_debug" = "1" ]; then CFLAGS="$CFLAGS -g1" fi fi - rm -f tmp.config.bfd fi fi - rm -f tmp.config.dbghelp fi if [ "$os" != "CYGWIN" ] && [ "$os" != "HAIKU" ] && [ "$os" != "MORPHOS" ] && [ "$os" != "OSX" ] && [ "$os" != "DOS" ] && [ "$os" != "WINCE" ] && [ "$os" != "PSP" ] && [ "$os" != "OS2" ]; then + log 2 "executing $cc_host $CFLAGS $LDFLAGS -o tmp.config.demangle -x c++ - -lstdc++" "$cc_host" $CFLAGS $LDFLAGS -o tmp.config.demangle -x c++ - -lstdc++ 2> /dev/null << EOL #include int main() { @@ -1667,13 +1686,15 @@ EOL return 0; } EOL - if [ $? -ne 0 ]; then + ret=$? + rm -f tmp.config.demangle + log 2 " exit code $ret" + if [ $ret -ne 0 ]; then log 1 "checking abi::__cxa_demangle... no" else log 1 "checking abi::__cxa_demangle... found" CFLAGS="$CFLAGS -DWITH_DEMANGLE" fi - rm -f tmp.config.demangle fi if [ "$os" != "CYGWIN" ] && [ "$os" != "HAIKU" ] && [ "$os" != "MINGW" ] && [ "$os" != "DOS" ] && [ "$os" != "WINCE" ]; then