This addresses PR libobjc/78698, fixing the build with --disable-shared and .la files available. As mentioned in the bug report I'm not aware of a configure check to write a check using LIBTOOL_LINK and LIBTOOL_COMPILE, because these commands (using libtool) are only created by running the configure file, therefore checking for the presence of a .la file.
Tested with a libgc installation in /opt/gcc/include, /opt/gcc/lib32, /opt/gcc/lib64 and configured with --prefix=/opt/gcc7 --enable-languages=c,c++,objc --disable-shared --enable-objc-gc=yes --with-multilib-list=m32,m64 --enable-checking=release --disable-bootstrap --with-target-bdw-gc-include=/opt/gcc/include --with-target-bdw-gc-lib=/opt/gcc/lib64,32=/opt/gcc/lib32 Ok for the trunk? Matthias libobjc/ 2016-12-24 Matthias Klose <d...@ubuntu.com> PR libobjc/78698 * configure.ac: Use the libgc.la file when available. * configure: Regenerate. gcc/ 2016-12-31 Matthias Klose <d...@ubuntu.com> * doc/install.texi: Allow default for --with-target-bdw-gc-include.
libobjc/ 2016-12-24 Matthias Klose <d...@ubuntu.com> PR libobjc/78698 * configure.ac: Use the libgc.la file when available. * configure: Regenerate. gcc/ 2016-12-31 Matthias Klose <d...@ubuntu.com> * doc/install.texi: Allow default for --with-target-bdw-gc-include. Index: gcc/doc/install.texi =================================================================== --- gcc/doc/install.texi (revision 243987) +++ gcc/doc/install.texi (working copy) @@ -2203,8 +2203,12 @@ The options @option{--with-target-bdw-gc-include} and @option{--with-target-bdw-gc-lib} must always be specified together for each multilib variant and they take precedence over -@option{--with-target-bdw-gc}. If none of these options are -specified, the library is assumed in default locations. +@option{--with-target-bdw-gc}. If @option{--with-target-bdw-gc-include} +is missing values for a multilib, then the value for the default +multilib is used. (e.g. @samp{--with-target-bdw-gc-include=/opt/bdw-gc/include} +@samp{--with-target-bdw-gc-lib=/opt/bdw-gc/lib64,32=/opt-bdw-gc/lib32}). +If none of these options are specified, the library is assumed in +default locations. @end table @html Index: libobjc/configure.ac =================================================================== --- libobjc/configure.ac (revision 243987) +++ libobjc/configure.ac (working copy) @@ -290,45 +293,55 @@ AC_MSG_ERROR([no multilib path ($mldir) found in --with-target-bdw-gc-lib]) fi BDW_GC_CFLAGS="-I$bdw_inc_dir" - BDW_GC_LIBS="-L$bdw_lib_dir -lgc" + if test -f $bdw_lib_dir/libgc.la; then + BDW_GC_LIBS="$bdw_lib_dir/libgc.la" + else + BDW_GC_LIBS="-L$bdw_lib_dir -lgc" + fi AC_MSG_RESULT([found]) fi - AC_MSG_CHECKING([for system boehm-gc]) - save_CFLAGS=$CFLAGS - save_LIBS=$LIBS - CFLAGS="$CFLAGS $BDW_GC_CFLAGS" - LIBS="$LIBS $BDW_GC_LIBS" - dnl the link test is not good enough for ARM32 multilib detection, - dnl first check to link, then to run - AC_LINK_IFELSE( - [AC_LANG_PROGRAM([#include <gc/gc.h>],[GC_init()])], - [ - AC_RUN_IFELSE([AC_LANG_SOURCE([[ - #include <gc/gc.h> - int main() { - GC_init(); - return 0; - } - ]])], - [system_bdw_gc_found=yes], - [system_bdw_gc_found=no], - dnl assume no system boehm-gc for cross builds ... - [system_bdw_gc_found=no] - ) - ], - [system_bdw_gc_found=no]) - CFLAGS=$save_CFLAGS - LIBS=$save_LIBS - if test x$enable_objc_gc = xauto && test x$system_bdw_gc_found = xno; then - AC_MSG_WARN([system bdw-gc not found, not building libobjc_gc]) - use_bdw_gc=no - elif test x$enable_objc_gc = xyes && test x$system_bdw_gc_found = xno; then - AC_MSG_ERROR([system bdw-gc required but not found]) - else + case "$BDW_GC_LIBS" in + *libgc.la) use_bdw_gc=yes - AC_MSG_RESULT([found]) - fi + ;; + *) + AC_MSG_CHECKING([for system boehm-gc]) + save_CFLAGS=$CFLAGS + save_LIBS=$LIBS + CFLAGS="$CFLAGS $BDW_GC_CFLAGS" + LIBS="$LIBS $BDW_GC_LIBS" + dnl the link test is not good enough for ARM32 multilib detection, + dnl first check to link, then to run + AC_LINK_IFELSE( + [AC_LANG_PROGRAM([#include <gc/gc.h>],[GC_init()])], + [ + AC_RUN_IFELSE([AC_LANG_SOURCE([[ + #include <gc/gc.h> + int main() { + GC_init(); + return 0; + } + ]])], + [system_bdw_gc_found=yes], + [system_bdw_gc_found=no], + dnl assume no system boehm-gc for cross builds ... + [system_bdw_gc_found=no] + ) + ], + [system_bdw_gc_found=no]) + CFLAGS=$save_CFLAGS + LIBS=$save_LIBS + if test x$enable_objc_gc = xauto && test x$system_bdw_gc_found = xno; then + AC_MSG_WARN([system bdw-gc not found, not building libobjc_gc]) + use_bdw_gc=no + elif test x$enable_objc_gc = xyes && test x$system_bdw_gc_found = xno; then + AC_MSG_ERROR([system bdw-gc required but not found]) + else + use_bdw_gc=yes + AC_MSG_RESULT([found]) + fi + esac esac if test "$use_bdw_gc" = no; then