On Wed, 2020-01-22 at 15:39 +0000, Andrew Burgess wrote: > The motivation behind this change is to make it easier for a user to > link against static libraries on a target where dynamic libraries are > the default library type (for example GNU/Linux). > > Further, my motivation is really for linking libraries into GDB, > however, the binutils-gdb/config/ directory is a copy of gcc/config/ > so changes for GDB need to be approved by the GCC project first. > > After making this change in the gcc/config/ directory I've run > autoreconf on all of the configure scripts in the GCC tree and a > couple have been updated, so I'll use one of these to describe what my > change does. > > Consider libcpp, this library links against libiconv. Currently if > the user builds on a system with both static and dynamic libiconv > installed then autotools will pick up the dynamic libiconv by > default. This is almost certainly the right thing to do. > > However, if the user wants to link against static libiconv then things > are a little harder, they could remove the dynamic libiconv from their > system, but this is probably a bad idea (other things might depend on > that library), or the user can build their own version of libiconv, > install it into a unique prefix, and then configure gcc using the > --with-libiconv-prefix=DIR flag. This works fine, but is somewhat > annoying, the static library available, I just can't get autotools to > use it. > > My change then adds a new flag --with-libiconv-type=TYPE, where type > is either auto, static, or shared. The default auto, ensures we keep > the existing behaviour unchanged. > > If the user configures with --with-libiconv-type=static then the > configure script will ignore any dynamic libiconv it finds, and will > only look for a static libiconv, if no static libiconv is found then > the configure will continue as though there is no libiconv at all > available. > > Similarly a user can specify --with-libiconv-type=shared and force the > use of shared libiconv, any static libiconv will be ignored. > > As I've implemented this change within the AC_LIB_LINKFLAGS_BODY macro > then only libraries configured using the AC_LIB_LINKFLAGS or > AC_LIB_HAVE_LINKFLAGS macros will gain the new configure flag. > > If this is accepted into GCC then there will be follow on patches for > binutils and GDB to regenerate some configure scripts in those > projects. > > For GCC only two configure scripts needed updated after this commit, > libcpp and libstdc++-v3, both of which link against libiconv. > > config/ChangeLog: > > * lib-link.m4 (AC_LIB_LINKFLAGS_BODY): Add new > --with-libXXX-type=... option. Use this to guide the selection of > either a shared library or a static library. > > libcpp/ChangeLog: > > * configure: Regnerate. > > libstdc++-v3/ChangeLog: > > * configure: Regnerate. s/Regnerate/Regenerate/
This isn't strictly a regression bugfix. But given the nature of these files I think we probably need to be a bit more lax and allow safe changes so that downstream uses can move forward independent of the gcc development and release schedule. So, OK. jeff >