[ moving to the libtool-patches list; see
http://thread.gmane.org/gmane.comp.gnu.libtool.general/7097 ]
Hi Gary,
>>>* Gary Kumfert wrote on Thu, Jan 12, 2006 at 09:07:52PM CET:
>>>>
>>>> I'm learning that libtool 1.5.22 "fixed" the -static flag so that
>>>> static libraries are linked in the build directory, but
>>>> shared libraries in the install directory. But I don't
>>>> understand why this is considered "better" behavior.
Here are preliminary patches that add `-static-libtool-libs' to
branch-1-5 and HEAD, with the semantics of pre-1.5.22 `-static'.
Tests to make sure this works as desired are still necessary, before
this can be applied (and a NEWS entry). It would help me to write the
tests if you could point me to where in your packages this would make a
difference. And, of course it would help if you could test this patch.
;-)
Cheers,
Ralf
* libltdl/config/ltmain.m4sh (func_mode_link)
< -static-libtool-libs >: New option.
* doc/libtool.texi (Link mode, Distributing libltdl):
Document it.
Suggested by Gary Kumfert <[EMAIL PROTECTED]>.
* libltdl/config/ltmain.m4sh (func_mode_link)
< -static-libtool-libs >: New option.
* doc/libtool.texi (Link mode, Distributing libltdl):
Document it.
Suggested by Gary Kumfert <[EMAIL PROTECTED]>.
Index: doc/libtool.texi
===================================================================
RCS file: /cvsroot/libtool/libtool/doc/libtool.texi,v
retrieving revision 1.208
diff -u -r1.208 libtool.texi
--- doc/libtool.texi 4 Dec 2005 17:57:46 -0000 1.208
+++ doc/libtool.texi 23 Jan 2006 17:36:15 -0000
@@ -1332,9 +1332,10 @@
@item -dlopen @var{file}
Same as @option{-dlpreopen @var{file}}, if native dlopening is not
supported on the host platform (@pxref{Dlopened modules}) or if
-the program is linked with @option{-static} or @option{-all-static}.
-Otherwise, no effect. If @var{file} is @code{self} Libtool will make
-sure that the program can @code{dlopen} itself, either by enabling
+the program is linked with @option{-static},
[EMAIL PROTECTED], or @option{-all-static}. Otherwise, no
+effect. If @var{file} is @code{self} Libtool will make sure that the
+program can @code{dlopen} itself, either by enabling
@option{-export-dynamic} or by falling back to @option{-dlpreopen self}.
@item -dlpreopen @var{file}
@@ -1440,6 +1441,11 @@
uninstalled shared libtool libraries. If @var{output-file} is a
library, then only create a static library.
[EMAIL PROTECTED] -static-libtool-libs
+If @var{output-file} is a program, then do not link it against any
+shared libtool libraries. If @var{output-file} is a library, then only
+create a static library.
+
@item -version-info @var{current}[:@var{revision}[:@var{age}]]
If @var{output-file} is a libtool library, use interface version
information @var{current}, @var{revision}, and @var{age} to build it
@@ -4419,7 +4425,8 @@
You should probably also use the @samp{dlopen} option to @code{LT_INIT}
in your @file{configure.ac}, otherwise libtool will assume no dlopening
mechanism is supported, and revert to dlpreopening, which is probably not
-what you want. Avoid using the @option{-static} or @option{-all-static}
+what you want. Avoid using the @option{-static},
[EMAIL PROTECTED], or @option{-all-static}
switches when linking programs with libltdl. This will not work on
all platforms, because the dlopening functions may not be available
for static linking.
Index: libltdl/config/ltmain.m4sh
===================================================================
RCS file: /cvsroot/libtool/libtool/libltdl/config/ltmain.m4sh,v
retrieving revision 1.30
diff -u -r1.30 ltmain.m4sh
--- libltdl/config/ltmain.m4sh 21 Jan 2006 16:44:41 -0000 1.30
+++ libltdl/config/ltmain.m4sh 23 Jan 2006 17:36:15 -0000
@@ -331,9 +331,9 @@
-dlpreopen FILE link in FILE and add its symbols to lt_preloaded_symbols
-export-dynamic allow symbols from OUTPUT-FILE to be resolved with dlsym(3)
-export-symbols SYMFILE
- try to export only the symbols listed in SYMFILE
+ try to export only the symbols listed in SYMFILE
-export-symbols-regex REGEX
- try to export only the symbols matching REGEX
+ try to export only the symbols matching REGEX
-LLIBDIR search LIBDIR for required installed libraries
-lNAME OUTPUT-FILE requires the installed library libNAME
-module build a library that can dlopened
@@ -349,9 +349,11 @@
-R[[ ]]LIBDIR add LIBDIR to the runtime path of programs and libraries
-shared only do dynamic linking of libtool libraries
-shrext SUFFIX override the standard shared library file extension
- -static do not do any dynamic linking of libtool libraries
+ -static do not do any dynamic linking of uninstalled libtool
libraries
+ -static-libtool-libs
+ do not do any dynamic linking of libtool libraries
-version-info CURRENT[[:REVISION[:AGE]]]
- specify library version info [[each variable defaults to 0]]
+ specify library version info [[each variable defaults to
0]]
-weak LIBNAME declare that the target provides the LIBNAME interface
All other options (arguments beginning with \`-') are ignored.
@@ -2230,8 +2232,9 @@
build_old_libs=no
break
;;
- -all-static | -static)
- if test "X$arg" = "X-all-static"; then
+ -all-static | -static | -static-libtool-libs)
+ case $arg in
+ -all-static)
if test "$build_libtool_libs" = yes && test -z "$link_static_flag";
then
func_warning "complete static linking is impossible in this
configuration"
fi
@@ -2242,12 +2245,20 @@
finalize_command="$finalize_command $link_static_flag"
fi
prefer_static_libs=yes
- else
+ ;;
+ -static)
if test -z "$pic_flag" && test -n "$link_static_flag"; then
dlopen_self=$dlopen_self_static
fi
prefer_static_libs=built
- fi
+ ;;
+ -static-libtool-libs)
+ if test -z "$pic_flag" && test -n "$link_static_flag"; then
+ dlopen_self=$dlopen_self_static
+ fi
+ prefer_static_libs=yes
+ ;;
+ esac
build_libtool_libs=no
build_old_libs=yes
break
@@ -2768,7 +2779,7 @@
continue
;;
- -static)
+ -static | -static-libtool-libs)
# The effects of -static are defined in a previous loop.
# We used to do the same as -all-static on platforms that
# didn't have a PIC flag, but the assumption that the effects
* ltmain.in (link mode) < -static-libtool-libs >: New option.
* doc/libtool.texi (Link mode, Distributing libltdl):
Document it.
Suggested by Gary Kumfert <[EMAIL PROTECTED]>.
Index: ltmain.in
===================================================================
RCS file: /cvsroot/libtool/libtool/Attic/ltmain.in,v
retrieving revision 1.334.2.118
diff -u -r1.334.2.118 ltmain.in
--- ltmain.in 21 Jan 2006 16:46:08 -0000 1.334.2.118
+++ ltmain.in 23 Jan 2006 16:08:07 -0000
@@ -1145,8 +1145,9 @@
for arg
do
case $arg in
- -all-static | -static)
- if test "X$arg" = "X-all-static"; then
+ -all-static | -static | -static-libtool-libs)
+ case $arg in
+ -all-static)
if test "$build_libtool_libs" = yes && test -z "$link_static_flag";
then
$echo "$modename: warning: complete static linking is impossible in
this configuration" 1>&2
fi
@@ -1154,12 +1155,20 @@
dlopen_self=$dlopen_self_static
fi
prefer_static_libs=yes
- else
+ ;;
+ -static)
if test -z "$pic_flag" && test -n "$link_static_flag"; then
dlopen_self=$dlopen_self_static
fi
prefer_static_libs=built
- fi
+ ;;
+ -static-libtool-libs)
+ if test -z "$pic_flag" && test -n "$link_static_flag"; then
+ dlopen_self=$dlopen_self_static
+ fi
+ prefer_static_libs=yes
+ ;;
+ esac
build_libtool_libs=no
build_old_libs=yes
break
@@ -1719,7 +1728,7 @@
continue
;;
- -static)
+ -static | -static-libtool-libs)
# The effects of -static are defined in a previous loop.
# We used to do the same as -all-static on platforms that
# didn't have a PIC flag, but the assumption that the effects
@@ -6782,9 +6791,9 @@
-dlpreopen FILE link in FILE and add its symbols to lt_preloaded_symbols
-export-dynamic allow symbols from OUTPUT-FILE to be resolved with dlsym(3)
-export-symbols SYMFILE
- try to export only the symbols listed in SYMFILE
+ try to export only the symbols listed in SYMFILE
-export-symbols-regex REGEX
- try to export only the symbols matching REGEX
+ try to export only the symbols matching REGEX
-LLIBDIR search LIBDIR for required installed libraries
-lNAME OUTPUT-FILE requires the installed library libNAME
-module build a library that can dlopened
@@ -6798,9 +6807,11 @@
-release RELEASE specify package release information
-rpath LIBDIR the created library will eventually be installed in LIBDIR
-R[ ]LIBDIR add LIBDIR to the runtime path of programs and libraries
- -static do not do any dynamic linking of libtool libraries
+ -static do not do any dynamic linking of uninstalled libtool
libraries
+ -static-libtool-libs
+ do not do any dynamic linking of libtool libraries
-version-info CURRENT[:REVISION[:AGE]]
- specify library version info [each variable defaults to 0]
+ specify library version info [each variable defaults to 0]
All other options (arguments beginning with \`-') are ignored.
Index: doc/libtool.texi
===================================================================
RCS file: /cvsroot/libtool/libtool/doc/libtool.texi,v
retrieving revision 1.134.2.14
diff -u -r1.134.2.14 libtool.texi
--- doc/libtool.texi 16 Dec 2005 18:11:47 -0000 1.134.2.14
+++ doc/libtool.texi 23 Jan 2006 16:08:08 -0000
@@ -1217,10 +1217,11 @@
@item -dlopen @var{file}
Same as @samp{-dlpreopen @var{file}}, if native dlopening is not
supported on the host platform (@pxref{Dlopened modules}) or if
-the program is linked with @samp{-static} or @samp{-all-static}.
-Otherwise, no effect. If @var{file} is @code{self} libtool will make
-sure that the program can @code{dlopen} itself, either by enabling
[EMAIL PROTECTED] or by falling back to @samp{-dlpreopen self}.
+the program is linked with @samp{-static}, @samp{-static-libtool-libs},
+or @samp{-all-static}. Otherwise, no effect. If @var{file} is
[EMAIL PROTECTED] libtool will make sure that the program can @code{dlopen}
+itself, either by enabling @code{-export-dynamic} or by falling back to
[EMAIL PROTECTED] self}.
@item -dlpreopen @var{file}
Link @var{file} into the output program, and add its symbols to
@@ -1318,6 +1319,11 @@
uninstalled shared libtool libraries. If @var{output-file} is a
library, then only create a static library.
[EMAIL PROTECTED] -static-libtool-libs
+If @var{output-file} is a program, then do not link it against any
+shared libtool libraries (@samp{.la} files). If @var{output-file} is a
+library, then only create a static library.
+
@item -version-info @var{current}[:@var{revision}[:@var{age}]]
If @var{output-file} is a libtool library, use interface version
information @var{current}, @var{revision}, and @var{age} to build it
@@ -3592,9 +3598,10 @@
libtool will assume no dlopening mechanism is supported, and revert to
dlpreopening, which is probably not what you want.
-Avoid using the @code{-static} or @code{-all-static} switches when
-linking programs with libltdl. This will not work on all platforms,
-because the dlopening functions may not be available for static linking.
+Avoid using the @code{-static}, @code{-static-libtool-libs} or
[EMAIL PROTECTED] switches when linking programs with libltdl. This
+will not work on all platforms, because the dlopening functions may not
+be available for static linking.
The following example shows you how to embed the convenience libltdl in
your package. In order to use the installable variant just replace