* Ralf Wildenhues wrote on Tue, Dec 22, 2009 at 10:45:18PM CET: > * bonz...@gnu.org wrote on Tue, Dec 22, 2009 at 09:16:59AM CET: > > Here is where I was at. After that it was not immediate how to > > use a tag-dependent cache variable. Strictly speaking however > > using a cache variable is not needed to make the PIC test > > overridable. > > > > The patch is quite risky though. > > I'm kind of thinking the same. Why not let the PIC setting code just do > its work and afterwards check a cache variable for a possible override? > That wouldn't require reorganizing the code at all. > > A reorganization could be useful for other, independent reason (such as > factorizing the code for reuse by the lib-link module, for example), but > for now, I don't see that this is necessary.
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? Thanks, Ralf 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