This is motivated by GCC.  We compile Fortran shared libraries which
must execute on systems with no libgfortrans.so.  The usual approach,
passing --with-pic to configure is undesirable because it reduces the
performance of other static libraries.  Instead, I have modified
--with-pic to accept a list of packages (as --enable-shared does).

This allows us to configure GCC with --with-pic=libgfortran to compile
only libgfortran.a with position-independent code.

All tests pass with and without this change.  I have not added a new
test.  AFAICT, the demo-[no]pic-* tests don't actually check that
-fPIC is used during compilation, and there doesn't appear to be a
comparable test for --enable-shared.  If you would prefer a test for
this feature, please provide suggestions for how to approach this (I
am not familiar with the libtool testing framework).

Thanks,
Ollie


2010-10-21  Ollie Wild  <a...@google.com>

        Modify --with-pic to support per-package configurations.
        * libltdl/m4/libtool.m4:  Modify --with-pic to accept a list of
        package names.  Modelled off --enable-shared.
2010-10-21  Ollie Wild  <a...@google.com>

        Modify --with-pic to support per-package configurations.
        * libltdl/m4/libtool.m4:  Modify --with-pic to accept a list of
        package names.  Modelled off --enable-shared.

diff --git a/libltdl/m4/ltoptions.m4 b/libltdl/m4/ltoptions.m4
index 17cfd51..93931ec 100644
--- a/libltdl/m4/ltoptions.m4
+++ b/libltdl/m4/ltoptions.m4
@@ -326,9 +326,24 @@ dnl AC_DEFUN([AM_DISABLE_FAST_INSTALL], [])
 # MODE is either `yes' or `no'.  If omitted, it defaults to `both'.
 m4_define([_LT_WITH_PIC],
 [AC_ARG_WITH([pic],
-    [AS_HELP_STRING([--with-pic],
+    [AS_HELP_STRING([--with-pic@<:@=PKGS@:>@],
        [try to use only PIC/non-PIC objects @<:@default=use both@:>@])],
-    [pic_mode="$withval"],
+    [p=${PACKAGE-default}
+    case "$withval" in
+    yes|no) pic_mode="$withval" ;;
+    *)
+      pic_mode=default
+      # Look at the argument we got.  We use all the common list separators.
+      lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+      for pkg in "$withval"; do
+       IFS="$lt_save_ifs"
+       if test "X$pkg" = "X$p"; then
+         pic_mode=yes
+       fi
+      done
+      IFS="$lt_save_ifs"
+      ;;
+    esac],
     [pic_mode=default])
 
 test -z "$pic_mode" && pic_mode=m4_default([$1], [default])

Reply via email to