Ping! I would at least like a comment upon this, why it would be too dangerous, and all that. <http://thread.gmane.org/gmane.comp.sysutils.automake.general/11229/focus=9626>
(No, this patch is unrelated to the -flto patches I just pinged.) Thank you, Ralf * Ralf Wildenhues wrote on Sat, Jan 09, 2010 at 08:18:53PM CET: > Proposed patch. Still needs documentation in libtool.texi (where? we > don't have a section about Libtool-used configure cache variables). > > The semantics are that you also need to store -DPIC in the variable. > I'm not sure whether that is the right thing to do. Comments? > Use config.cache variable for PIC flag, to allow override. > > * libltdl/m4/libtool.m4 (_LT_COMPILER_PIC) <lt_prog_compiler_pic>: > Save result, and allow override, through cache variable > lt_cv_prog_compiler_pic{,_CXX,_F77,_FC}. The cache variable > needs to contain an eventual -DPIC. > * doc/libtool.texi (): Document it. > * tests/pic_flag.at (override pic_flag at configure time): > New file, new test. > * Makefile.am (TESTSUITE_AT): Update. > * NEWS, THANKS: Update. > Suggestion by Joakim Tjernlund and Paolo Bonzini. > > diff --git a/Makefile.am b/Makefile.am > index 195da0a..31b4275 100644 > --- a/Makefile.am > +++ b/Makefile.am > @@ -502,6 +502,7 @@ TESTSUITE_AT = tests/testsuite.at \ > tests/configure-iface.at \ > tests/stresstest.at \ > tests/cmdline_wrap.at \ > + tests/pic_flag.at \ > tests/darwin.at > > EXTRA_DIST += $(srcdir)/$(TESTSUITE) $(TESTSUITE_AT) > $(srcdir)/tests/package.m4 > diff --git a/libltdl/m4/libtool.m4 b/libltdl/m4/libtool.m4 > index 2e48b47..9f20218 100644 > --- a/libltdl/m4/libtool.m4 > +++ b/libltdl/m4/libtool.m4 > @@ -3567,7 +3567,6 @@ _LT_TAGVAR(lt_prog_compiler_wl, $1)= > _LT_TAGVAR(lt_prog_compiler_pic, $1)= > _LT_TAGVAR(lt_prog_compiler_static, $1)= > > -AC_MSG_CHECKING([for $compiler option to produce PIC]) > m4_if([$1], [CXX], [ > # C++ specific cases for pic, static, wl, etc. > if test "$GXX" = yes; then > @@ -4165,9 +4164,11 @@ case $host_os in > _LT_TAGVAR(lt_prog_compiler_pic, $1)="$_LT_TAGVAR(lt_prog_compiler_pic, > $1)@&t...@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])" > ;; > esac > -AC_MSG_RESULT([$_LT_TAGVAR(lt_prog_compiler_pic, $1)]) > -_LT_TAGDECL([wl], [lt_prog_compiler_wl], [1], > - [How to pass a linker flag through the compiler]) > + > +AC_CACHE_CHECK([for $compiler option to produce PIC], > + [_LT_TAGVAR(lt_cv_prog_compiler_pic, $1)], > + [_LT_TAGVAR(lt_cv_prog_compiler_pic, $1)=$_LT_TAGVAR(lt_prog_compiler_pic, > $1)]) > +_LT_TAGVAR(lt_prog_compiler_pic, $1)=$_LT_TAGVAR(lt_cv_prog_compiler_pic, $1) > > # > # Check to make sure the PIC flag actually works. > @@ -4186,6 +4187,8 @@ fi > _LT_TAGDECL([pic_flag], [lt_prog_compiler_pic], [1], > [Additional compiler flags for building library objects]) > > +_LT_TAGDECL([wl], [lt_prog_compiler_wl], [1], > + [How to pass a linker flag through the compiler]) > # > # Check to make sure the static flag actually works. > # > diff --git a/tests/pic_flag.at b/tests/pic_flag.at > new file mode 100644 > index 0000000..5282632 > --- /dev/null > +++ b/tests/pic_flag.at > @@ -0,0 +1,51 @@ > +# pic_flag.at -- override the pic_flag at configure time -*- Autotest -*- > + > +# Copyright (C) 2010 Free Software Foundation, Inc. > +# > +# This file is part of GNU Libtool. > +# > +# GNU Libtool 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 2 of > +# the License, or (at your option) any later version. > +# > +# GNU Libtool 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. > +# > +# You should have received a copy of the GNU General Public License > +# along with GNU Libtool; see the file COPYING. If not, a copy > +# can be downloaded from http://www.gnu.org/licenses/gpl.html, > +# or obtained by writing to the Free Software Foundation, Inc., > +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. > +#### > + > +AT_SETUP([override pic_flag at configure time]) > + > +# Just try to configure the Libtool package with -fpic if we can compile > +# with it, for C and C++. > + > +AT_DATA([foo.c], > +[[int data = 42; > +int func(void) { return data; } > +]]) > + > +cp foo.c foo.cpp > +C_pic_flag='-fpic -DPIC' > +AT_CHECK([$CC $CPPFLAGS $CFLAGS $C_pic_flag -c foo.c || exit 77], > + [], [ignore], [ignore]) > + > +CXX_pic_flag='-fpic -DPIC' > +if $CXX $CPPFLAGS $CXXFLAGS $CXX_pic_flag -c foo.cpp; then :; else > + CXX_pic_flag= > +fi > + > +AT_CHECK(["$abs_top_srcdir"/configure lt_cv_prog_compiler_pic=$C_pic_flag > ]dnl > + [lt_cv_prog_compiler_pic_CXX=$CXX_pic_flag], [], [ignore], [ignore]) > +: ${MAKE=make} > +AT_CHECK([$MAKE], [], [stdout], [ignore]) > +AT_CHECK([if ./libtool --features | grep 'enable shared libraries'; then ]dnl > + [ grep -e -fpic stdout; else exit 77; fi], [], [ignore], [ignore]) > + > +AT_CLEANUP >