libtool-patches
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: overridable pic_flag (was: [PATCH 0/2] Re: ifdef expessions in Makef


From: Ralf Wildenhues
Subject: Re: overridable pic_flag (was: [PATCH 0/2] Re: ifdef expessions in Makefile.am)
Date: Sat, 9 Jan 2010 20:18:53 +0100
User-agent: Mutt/1.5.20 (2009-10-28)

* Ralf Wildenhues wrote on Tue, Dec 22, 2009 at 10:45:18PM CET:
> * address@hidden 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)@&address@hidden([$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




reply via email to

[Prev in Thread] Current Thread [Next in Thread]