*** empty log message ***

This commit is contained in:
Gordon Matzigkeit 1997-04-01 19:19:30 +00:00 committed by Gordon Matzigkeit
parent 985a175c64
commit f2d0d25f67
24 changed files with 437 additions and 274 deletions

View File

@ -1,3 +1,58 @@
Mon Mar 31 16:15:03 1997 Gordon Matzigkeit <gord@gnu.ai.mit.edu>
* ltmain.sh.in (link): Only fail if a convenience library doesn't
exist, and the user specified -whole-archive.
Fri Mar 28 19:09:08 1997 Gordon Matzigkeit <gord@gnu.ai.mit.edu>
* ltmain.sh.in (link): Use the hardcode_libdir_separator.
Convenience libraries are libtool objects if we're not building
libtool libs.
* ltconfig.in (hardcode_libdir_separator): Added in case the
linker only honours the last of the -rpath flags (but it can
contain multiple colon-separated directories), such as on OSF/1.
Reported by Carl D. Roth.
* ltmain.sh.in (link): Set the dlname if -export-dynamic is given.
(install, uninstall): Handle the dlname file separately.
* ltconfig.in (export_dynamic_flag): Added to allow programs to
use reflexive dlopens.
* ltmain.sh.in: Include the mode name in any help messages.
(dlname): New mode to give the name to be used with dlopen(3).
* ltconfig.in (AR): Allow AR to be set by the user, and export it
to ltmain.sh.
* ltmain.sh.in: Remove broken profiled library support.
Added `-whole-archive' and `-no-whole-archive' to manipulate
convenience libraries.
Thu Mar 27 15:55:34 1997 Gordon Matzigkeit <gord@gnu.ai.mit.edu>
* ltmain.sh.in (link): Allow the creation of static convenience
libraries made of libtool objects. Suggested by David
Mosberger-Tang.
Tue Mar 25 08:38:23 1997 Gordon Matzigkeit <gord@gnu.ai.mit.edu>
* ltconfig.in: On AIX, libtool also needs to look for `B' symbols
in nm output. These are global variable definitions.
* ltmain.sh.in: Linking with -static should link against the
linklib if old_library is empty (like it is on AIX).
* ltconfig.in: Change the order of OS detection, so that
linux-gnu* is detected before gnu*.
* Makefile.am (libtool): Use the correct CC, RANLIB, LD, when
generating libtool. From Carl D. Roth.
* configure.in: Find out the user-supplied CC, LD, RANLIB. From
Carl D. Roth.
Mon Mar 24 01:26:48 1997 Gordon Matzigkeit <gord@gnu.ai.mit.edu>
* ltmain.sh.in: Linking with -static should link against the old

View File

@ -1,8 +1,12 @@
## Process Makefile.am with automake to create Makefile.in.
## Process Makefile.am with automake to create Makefile.in. -*-Makefile-*-
## Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996
AUTOMAKE_OPTIONS = gnits
SUBDIRS = doc tests
# We need to export these variables when we run ltconfig.
CFLAGS = @CFLAGS@
CPPLAGS = @CPPFLAGS@
aclocal_macros = libtool.m4 replfunc.m4
# Distribute ltconfig and ltmain.sh so that the demo directory works.
@ -30,18 +34,23 @@ bin_SCRIPTS = libtool libtoolize
libtool: ltconfig
@echo 'WARNING: Warnings from ltconfig can be ignored. :-)'
CC="${CC}" \
CFLAGS="${CFLAGS}" \
CPPFLAGS="${CPPFLAGS}" \
LD="${LD}" \
RANLIB="${RANLIB}" \
$(srcdir)/ltconfig --srcdir=$(srcdir) $(pkgdatadir)/ltmain.sh
# These depend on configure.in for version numbers.
libtoolize: libtoolize.in configure.in
# These depend on config.status for version numbers.
libtoolize: libtoolize.in $(top_builddir)/config.status
CONFIG_FILES=libtoolize CONFIG_HEADERS= $(top_builddir)/config.status
chmod +x libtoolize
$(srcdir)/ltconfig: ltconfig.in configure.in
$(srcdir)/ltconfig: ltconfig.in $(top_builddir)/config.status
CONFIG_FILES=ltconfig CONFIG_HEADERS= $(top_builddir)/config.status
chmod +x ltconfig
$(srcdir)/ltmain.sh: ltmain.sh.in configure.in
$(srcdir)/ltmain.sh: ltmain.sh.in $(top_builddir)/config.status
CONFIG_FILES=ltmain.sh CONFIG_HEADERS= $(top_builddir)/config.status
# Distribute the demo subdirectory.

8
NEWS
View File

@ -1,3 +1,11 @@
NEWS - list of user-visible changes between releases of GNU libtool.
New in 0.9:
* Bug fixes.
* The libtool demo now uses the libm cos(3) function, to demonstrate
inter-library dependencies.
* The PLATFORMS file has been moved to doc/platforms.texi.
New in 0.8:
* Bug fixes, and more documentation.
* Basic support for other language compilers (C++, Fortran, and

6
README
View File

@ -17,7 +17,7 @@ Shared library support has been implemented for these platforms:
IRIX 5.x, 6.x (*-*-irix5*, *-*-irix6*)
Linux ELF targets (*-*-linux*, except *-*-linuxaout* and *-*-linuxoldld*)
NetBSD 1.x (*-*-netbsd*)
SCO OpenServer 5.x (*-*-sco3.2v5*) [FIXME: in progress]
SCO OpenServer 5.x (*-*-sco3.2v5*)
Solaris 1.x, a.k.a. SunOS 4.x (*-*-sunos4*)
Solaris 2.x (*-*-solaris2*)
All ELF targets that use both the GNU C compiler (gcc) and GNU ld
@ -28,6 +28,10 @@ See the file INSTALL for instructions on how to build and install libtool.
See the file README-automake for details on Automake support for libtool.
See the file PLATFORMS for a list of platforms that libtool shared
library support was tested on. This information is also in
(libtool)Tested Platforms.
If you have any suggestions or bug reports, or you wish to port libtool
to a new platform, please send electronic mail to Gord Matzigkeit
<gord@gnu.ai.mit.edu>.

View File

@ -9,6 +9,8 @@ libtool, that may not work with your own copy of Automake. Gordon is
working closely with Tom Tromey to integrate libtool patches into
Automake.
In the meantime, just ignore these references, or ask Gord for his
In the meantime, just ignore these references, or use Gord's
modified version of automake-1.1g that supports all the features
described in the libtool manual.
described in the libtool manual:
<URL:http://www.enci.ucalgary.ca/~gord/src/automake-1.1g-libtool.tar.gz>

1
THANKS
View File

@ -1,6 +1,7 @@
Libtool would not be what it is today without the invaluable help of
these people:
Akim Demaille <demaille@inf.enst.fr>
Bruno Haible <haible@ilog.fr>
Charles S. Kerr <cskerr@delenn.jccbi.gov>
Joel Cannon <cannon@alpha.centenary.edu>

6
TODO
View File

@ -1,3 +1,5 @@
* Implement new idea for Automake support: LTLIBRARIES.
For 1.1:
* Write libtool not to be dependent on the compiler used to configure
@ -6,6 +8,10 @@ it.
* Implement full multi-language support. There are beginnings of this
in the manual (Other Languages).
* Consider allowing the creation of convenience libraries made of
libtool objects. From David Mosberger-Tang. Think about how this
would be done with Automake.
Sometime in the future (maybe):
* Implement `-static' linking against installed libraries, even when

View File

@ -1,5 +1,5 @@
AC_INIT(ltmain.sh.in)
AM_INIT_AUTOMAKE(libtool, 0.9)
AM_INIT_AUTOMAKE(libtool, 0.9c)
pkgdatadir='${datadir}/libtool'
AC_SUBST(pkgdatadir)

View File

@ -48,6 +48,7 @@ hc-minusL: $(hell_OBJECTS) $(hell_DEPENDENCIES)
$(CC) $(LDFLAGS) -o $@ $(hell_OBJECTS) -L./.libs -lhello $(LIBS)
hc-libpath: $(hell_OBJECTS) $(hell_DEPENDENCIES)
@echo "You may ignore any linking errors from the following command:"
@eval `egrep -e '^shlibpath_var=' ./libtool`; \
echo "$$shlibpath_var=./.libs $(CC) $(LDFLAGS) -o $@ $(hell_OBJECTS) -lhello $(LIBS) || echo unsupported > $@"; \
eval "$$shlibpath_var=./.libs $(CC) $(LDFLAGS) -o $@ $(hell_OBJECTS) -lhello $(LIBS) || echo unsupported > $@"

View File

@ -1,8 +1,9 @@
dnl Initialize the hell package.
AC_INIT(hello.c)
AM_INIT_AUTOMAKE(hell,0.0)
AM_INIT_AUTOMAKE(hell,1.0)
AC_PROG_CC
AM_C_PROTOTYPES
AM_PROG_LIBTOOL
dnl Output the makefile

View File

@ -20,7 +20,7 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
#include "foo.h"
int
foo (void)
foo ()
{
return FOO_RET;
}

View File

@ -1,6 +1,7 @@
/* foo.h -- interface to the libfoo library
Copyright (C) 1996 Free Software Foundation, Inc.
This file is part of GNU Libtool.
Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@ -16,12 +17,47 @@ You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
/* Written by Gordon Matzigkeit <gord@gnu.ai.mit.edu> */
/* Only include this header file once. */
#ifndef _FOO_H_
#define _FOO_H_
/* __BEGIN_DECLS should be used at the beginning of your C declarations,
so that C++ compilers don't mangle their names. */
#ifndef __BEGIN_DECLS
# ifdef __cplusplus
# define __BEGIN_DECLS extern "C" {
# else
# define __BEGIN_DECLS
# endif
#endif
#ifndef __END_DECLS
# ifdef __cplusplus
# define __END_DECLS };
# else
# define __END_DECLS
# endif
#endif
/* __P is a macro used to wrap function prototypes, so that compilers that
don't understand ANSI C prototypes still work, and ANSI C compilers can
issue warnings about type mismatches. */
#ifndef __P
# if defined (__STDC__) || defined (_AIX) || (defined (__mips) && defined (_SYSTYPE_SVR4)) || defined(WIN32) || defined(__cplusplus)
# define __P(protos) protos
# else
# define __P(protos) ()
# endif
#endif
/* Silly constants that the functions return. */
#define HELLO_RET 0xe110
#define FOO_RET 0xf00
/* Function declarations. */
int foo ();
int hello ();
/* Function declarations. Note the wonderful use of the macros we defined
above (__BEGIN_DECLS, __END_DECLS, and __P). */
__BEGIN_DECLS
int foo __P((void));
int hello __P((void));
__END_DECLS
#endif /* !_FOO_H_ */

View File

@ -21,7 +21,7 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
#include <stdio.h>
int
main ()
main (int argc, char **argv)
{
printf ("Welcome to GNU Hell!\n");

View File

@ -7,3 +7,5 @@
## Written by Gordon Matzigkeit <gord@gnu.ai.mit.edu>
AUTOMAKE_OPTIONS = gnits
info_TEXINFOS = libtool.texi
libtool.info: ../PLATFORMS

View File

@ -8,7 +8,7 @@
@synindex pg cp
@include version.texi
@set MAINT Gord Matzigkeit <gord@@gnu.ai.mit.edu>
@set BUGADDR Gord Matzigkeit <gord@@gnu.ai.mit.edu>
@ifinfo
@format
@ -154,7 +154,6 @@ Tips for Interface Design
Using Libtool with Other Languages
* C++ Libraries:: Using libtool with C++.
* Unsupported Languages:: Using libtool with arbitrary languages.
Maintainance Notes for Libtool
@ -167,7 +166,6 @@ Platform Quirks
* Compilers:: Creating object files from source files.
* Reloadable Objects:: Binding object files together.
* Shared Libraries:: Shared library implementations.
* Archivers:: Programs that create static archives.
* Strip:: Removing unnecessary linkage information.
@ -1356,6 +1354,11 @@ Display a help message and exit.
Print @file{libtoolize} version information and exit.
@end table
If @file{libtoolize} detects an explicit call to
@code{AC_CONFIG_AUX_DIR} (@pxref{Input, , The Autoconf Manual,
autoconf.info, The Autoconf Manual}) in your @file{configure.in}, it
will put the files in the specified directory.
@file{libtoolize} displays hints for adding libtool support to your
package, as well.
@ -1663,12 +1666,19 @@ compilers.
Do not be naive about writing portable code. Following the tips given
above will help you miss the most obvious problems, but there are
definitely other subtle portability issues. You may need to cope with
any of the following issues:
some of the following issues:
@itemize @bullet
@item
Pre-ANSI compilers do not always support the @code{void *} generic
pointer type, and so need to use @code{char *} in its place.
@item
The @code{const} and @code{signed} keywords are not supported by some
compilers, especially pre-ANSI compilers.
@item
The @code{long double} type is not supported by many compilers.
@end itemize
@node Other Languages, Maintaining, Library Tips, Top
@ -1685,37 +1695,169 @@ and what special considerations you need to make if you do not use C.
@menu
* C++ Libraries:: Using libtool with C++.
* Unsupported Languages:: Using libtool with arbitrary languages.
@end menu
@node C++ Libraries, Unsupported Languages, Other Languages, Other Languages
@node C++ Libraries, , Other Languages, Other Languages
@comment node-name, next, previous, up
@section Writing Libraries for C++
There are ways to use libraries with C++:
Creating libraries of C++ code is a fairly straightforward process, and
differs from C code in only two ways:
@enumerate 1
@item
Libraries written in C, which define only normal C functions, but are
linked into C++ programs. @xref{C Header Files} for additional
information.
Because of name mangling, C++ libraries are only usable by the C++
compiler that created them. This decision was made by the designers of
C++ in order to protect users from conflicting implementations of
features such as constructors, exception handling, and RTTI.
@item
Libraries written in C++, which define C++ classes and methods.
On some systems, notably SunOS 4, the dynamic linker does not call
non-constant initializers. This can lead to hard-to-pinpoint bugs in
your library.
@end enumerate
This section deals only with the second possibility.
This second issue is very complex. Basically, avoid any global or
static variable initializations that would cause an ``initializer
element is not constant'' error if you compiled themwith a standard C
compiler.
FIXME include Bruno's notes here
There are ways of working around this problem, but they are beyond the
scope of this manual.
@node Unsupported Languages, , C++ Libraries, Other Languages
@node Troubleshooting, Index, Maintaining, Top
@comment node-name, next, previous, up
@section Unsupported Languages
@chapter Troubleshooting
Even if your favourite programming language is not directly supported by
libtool, you may still be able to use it with libtool.
Libtool is under constant development, changing to keep up-to-date with
new operating systems. If libtool doesn't work the way you think it
should on your platform, you should read this chapter to help determine
what the problem is, and how to resolve it.
FIXME tell how to skip the libtool --mode=compile stage and keep going
@menu
* Libtool Test Suite:: Libtool's self-tests.
* Reporting Bugs:: How to report problems with libtool.
@end menu
@node Libtool Test Suite, Reporting Bugs, Troubleshooting, Troubleshooting
@comment node-name, next, previous, up
@section The Libtool Test Suite
Libtool comes with its own set of programs that test its capabilities,
and report obvious bugs in the libtool program. These tests, too, are
constantly evolving, based on past problems with libtool, and known
deficiencies in other operating systems.
As described in the @file{INSTALL} file, you may run @kbd{make check}
after you have built libtool (possibly before you install it) in order
to make sure that it has the functionality demanded by the test
programs.
@menu
* Test Descriptions:: The contents of the test suite.
* When Tests Fail:: What to do when a test fails.
@end menu
@node Test Descriptions, When Tests Fail, Libtool Test Suite, Libtool Test Suite
@comment node-name, next, previous, up
@subsection Description of Test Suite
Here is a list of the current programs in the test suite, and what they
test for:
@table @file
@item demo-conf.test
@itemx demo-exec.test
@itemx demo-inst.test
@itemx demo-make.test
@itemx demo-unst.test
These programs check to see that the @file{demo} subdirectory of the
libtool distribution can be configured, built, installed, and
uninstalled correctly.
The @file{demo} subdirectory contains a demonstration of a trivial
package that uses libtool.
@item hardcode.test
On all systems with shared libraries, the location of the library can be
encoded in executables that are linked against it @pxref{Linking
Executables}. This test checks the conditions under which your system
linker hardcodes the library location, and guarantees that they
correspond to libtool's own notion of how your linker behaves.
@item link.test
This test guarantees that linking directly against a non-libtool static
library works properly.
@item link-2.test
This test makes sure that files ending in @samp{.lo} are never linked
directly into a program file.
@item suffix.test
When other programming languages are used with libtool (@pxref{Other
Languages}), the source files may end in suffixes other than @samp{.c}.
This test validates that libtool can handle suffixes for all the file
types that it supports, and that it fails when the suffix is invalid.
@item test-e.test
This program checks that the @code{test -e} construct is @emph{never} in
the libtool scripts. Checking for the existence of a file can only be
done in a portable way by using @code{test -f}.
@end table
@node When Tests Fail, , Test Descriptions, Libtool Test Suite
@comment node-name, next, previous, up
@subsection When Tests Fail
Each of the above tests are designed to produce no output when they are
run via @kbd{make check}. The exit status of each program tells the
Makefile whether or not the test succeeded.
If a test fails, it means that there is either a programming error in
libtool, or in the test itself.
To investigate a particular test, you may run it directly, as you would
a normal program. When the test is invoked in this way, it produces
output which may be useful in determining what the problem is.
Another way to have the test programs produce output is to set the
@var{VERBOSE} environment variable to @samp{yes} before running them.
For example, @kbd{env VERBOSE=yes make check} runs all the tests, and
has each of them display debugging information.
@node Reporting Bugs, , Libtool Test Suite, Troubleshooting
@comment node-name, next, previous, up
@section Reporting Bugs
If you think you have discovered a bug in libtool, you should think
twice: the libtool maintainer is notorious for passing the buck (or
maybe that should be ``passing the bug'').
Libtool was invented to fix known deficiencies in shared library
implementations, so, in a way, most of the bugs in libtool are actually
bugs in other operating systems.
However, the libtool maintainer would definitely be happy to add support
for somebody else's buggy operating system. [I wish there was a good
way to do winking smiley-faces in texinfo.]
Genuine bugs in libtool include problems with shell script portability,
documentation errors, and failures in the test suite (@pxref{Libtool
Test Suite}).
First, check the documentation and help screens to make sure that the
behaviour you think is a problem is not already mentioned as a feature.
Then, you should read the Emacs guide to reporting bugs (@pxref{Bugs, , The
Emacs Manual, emacs.info, The Emacs Manual}). Some of the details
listed there are specific to Emacs, but the priciple behind them is a
general one.
Finally, send a bug report to @value{BUGADDR} with any appropriate
@emph{facts}, such as test suite output (@pxref{When Tests Fail}), all
the details needed to reproduce the bug, and a brief description of why
you think the behaviour is a bug. Be sure to include the word
``libtool'' in the subject line.
@node Maintaining, Troubleshooting, Other Languages, Top
@comment node-name, next, previous, up
@ -1795,7 +1937,6 @@ improve libtool, or write your own.
@menu
* Compilers:: Creating object files from source files.
* Reloadable Objects:: Binding object files together.
* Shared Libraries:: Shared library implementations.
* Archivers:: Programs that create static archives.
* Strip:: Removing unnecessary linkage information.
@end menu
@ -1859,7 +2000,7 @@ Use @samp{-KPIC} to generate PIC.
Use @samp{-PIC} to generate PIC.
@end table
@node Reloadable Objects, Shared Libraries, Compilers, Platform Quirks
@node Reloadable Objects, Archivers, Compilers, Platform Quirks
@comment node-name, next, previous, up
@subsection Reloadable Objects
@ -1868,23 +2009,7 @@ On all known systems, a reloadable object can be created by running
reloadable object may be treated as exactly equivalent to other
objects.
@node Shared Libraries, Archivers, Reloadable Objects, Platform Quirks
@comment node-name, next, previous, up
@subsection Shared Libraries
The basic motivation for writing libtool was the different approaches to
creating shared libraries (@pxref{Issues}). This subsection documents
some of the basic shared library paradigms, and how to build shared
libraries on each system.
FIXME we really should paraphrase a bunch of the system docs here, in
more detail than just what libtool requires right now. Organization of
this section is up for grabs, as well.
We need to cover versioning (including soname), actual linker commands,
and path information. AIX deserves its own section, as usual.
@node Archivers, Strip, Shared Libraries, Platform Quirks
@node Archivers, Strip, Reloadable Objects, Platform Quirks
@comment node-name, next, previous, up
@subsection Archivers
@ -2032,139 +2157,6 @@ of commands that are evaluated one after another. If any of the
commands return a nonzero exit status, libtool generally exits with an
error message.
@node Troubleshooting, Index, Maintaining, Top
@comment node-name, next, previous, up
@chapter Troubleshooting
Libtool is under constant development, changing to keep up-to-date with
new operating systems. If libtool doesn't work the way you think it
should on your platform, you should read this chapter to help determine
what the problem is, and how to resolve it.
@menu
* Libtool Test Suite:: Libtool's self-tests.
* Reporting Bugs:: How to report problems with libtool.
@end menu
@node Libtool Test Suite, Reporting Bugs, Troubleshooting, Troubleshooting
@comment node-name, next, previous, up
@section The Libtool Test Suite
Libtool comes with its own set of programs that test its capabilities,
and report obvious bugs in the libtool program. These tests, too, are
constantly evolving, based on past problems with libtool, and known
deficiencies in other operating systems.
As described in the @file{INSTALL} file, you may run @kbd{make check}
after you have built libtool (possibly before you install it) in order
to make sure that it has the functionality demanded by the test
programs.
@menu
* Test Descriptions:: The contents of the test suite.
* When Tests Fail:: What to do when a test fails.
@end menu
@node Test Descriptions, When Tests Fail, Libtool Test Suite, Libtool Test Suite
@comment node-name, next, previous, up
@subsection Description of Test Suite
Here is a list of the current programs in the test suite, and what they
test for:
@table @file
@item demo-conf.test
@itemx demo-exec.test
@itemx demo-inst.test
@itemx demo-make.test
@itemx demo-unst.test
These programs check to see that the @file{demo} subdirectory of the
libtool distribution can be configured, built, installed, and
uninstalled correctly.
The @file{demo} subdirectory contains a demonstration of a trivial
package that uses libtool.
@item hardcode.test
On all systems with shared libraries, the location of the library can be
encoded in executables that are linked against it @pxref{Linking
Executables}. This test checks the conditions under which your system
linker hardcodes the library location, and guarantees that they
correspond to libtool's own notion of how your linker behaves.
@item link.test
This test guarantees that linking directly against a non-libtool static
library works properly.
@item link-2.test
This test makes sure that files ending in @samp{.lo} are never linked
directly into a program file.
@item suffix.test
When other programming languages are used with libtool (@pxref{Other
Languages}), the source files may end in suffixes other than @samp{.c}.
This test validates that libtool can handle suffixes for all the file
types that it supports, and that it fails when the suffix is invalid.
@item test-e.test
This program checks that the @code{test -e} construct is @emph{never} in
the libtool scripts. Checking for the existence of a file can only be
done in a portable way by using @code{test -f}.
@end table
@node When Tests Fail, , Test Descriptions, Libtool Test Suite
@comment node-name, next, previous, up
@subsection When Tests Fail
Each of the above tests are designed to produce no output when they are
run via @kbd{make check}. The exit status of each program tells the
Makefile whether or not the test succeeded.
If a test fails, it means that there is either a programming error in
libtool, or in the test itself.
To investigate a particular test, you may run it directly, as you would
a normal program. When the test is invoked in this way, it produces
output which may be useful in determining what the problem is.
Another way to have the test programs produce output is to set the
@var{VERBOSE} environment variable to @samp{yes} before running them.
For example, @kbd{make check VERBOSE=yes} runs all the tests, and has
each of them display debugging information.
@node Reporting Bugs, , Libtool Test Suite, Troubleshooting
@comment node-name, next, previous, up
@section Reporting Bugs
If you think you have discovered a bug in libtool, you should think
twice: the libtool maintainer is notorious for passing the buck (or
maybe that should be ``passing the bug'').
Libtool was invented to fix known deficiencies in shared library
implementations, so, in a way, most of the bugs in libtool are actually
bugs in other operating systems.
However, the libtool maintainer would definitely be happy to add support
for somebody else's buggy operating system. (I wish there was a way to
do winking smiley-faces in texinfo).
Genuine bugs in libtool include problems with shell script portability,
documentation errors, and failures in the test suite (@pxref{Libtool
Test Suite}).
First, check the documentation and help screens to make sure that the
behaviour you think is a problem is not already mentioned.
Then, you should read the Emacs guide to reporting bugs (@pxref{Bugs, , The
Emacs Manual, emacs.info, The Emacs Manual}). Some of the details
listed there are specific to Emacs, but the priciple behind them is a
general one.
Finally, send a bug report to the libtool maintainer (@value{MAINT}),
with any appropriate @emph{facts}, such as test suite output
(@pxref{When Tests Fail}), all the details needed to reproduce the bug,
and a brief description of why you think the behaviour is a bug.
@node Index, , Troubleshooting, Top
@comment node-name, next, previous, up
@unnumbered Index

2
libtool.m4 vendored
View File

@ -22,7 +22,7 @@ test "$silent" = yes && libtool_flags="$libtool_flags --silent"
test "$ac_cv_prog_gcc" = yes && libtool_flags="$libtool_flags --with-gcc"
# Actually configure libtool. ac_aux_dir is where install-sh is found.
CC="$CC" CFLAGS="$CFLAGS" LDFLAGS="$LDFLAGS" LD="$LD" RANLIB="$RANLIB" \
CC="$CC" CFLAGS="$CFLAGS" CPPFLAGS="$CPPFLAGS" LD="$LD" RANLIB="$RANLIB" \
$ac_aux_dir/ltconfig $libtool_flags --no-verify $ac_aux_dir/ltmain.sh $host \
|| AC_MSG_ERROR([libtool configure failed])
])

View File

@ -39,6 +39,7 @@ aclocaldir=@aclocaldir@
libtool_m4="$aclocaldir/libtool.m4"
dry_run=no
help="Try \`$progname --help' for more information."
rm="rm -f"
ln_s="ln -s"
@ -61,6 +62,7 @@ Prepare a package to use libtool.
--automake work silently, and assume that Automake is in use
-c, --copy copy files rather than symlinking them
-n, --dry-run print commands rather than running them
-f, --force replace existing files
--help display this message and exit
--version print version information and exit
@ -84,6 +86,15 @@ EOF
ln_s=
;;
-n | --dry-run)
if test "$dry_run" != yes; then
dry_run=yes
rm="echo $rm"
test -n "$ln_s" && ln_s="echo $ln_s"
cp="echo $cp"
fi
;;
-f | --force)
force=yes
;;

View File

@ -240,6 +240,12 @@ if test "$verify_host" = yes; then
host=`$ac_config_sub $host_alias`
echo "$ac_t""$host" 1>&6
# Transform *-*-linux* to *-*-linux-gnu*, to support old configure scripts.
case "$host" in
*-*-linux-gnu*) ;;
*-*-linux*) host=`echo $host | sed 's/^\(.*-.*-linux\)\(.*\)$/\1-gnu\2/'`
esac
elif test "$host" = NONE; then
echo "$progname: you must specify a host type if you use \`--no-verify'" 1>&2
echo "$help" 1>&2
@ -248,6 +254,12 @@ else
host_alias=$host
fi
# Transform *-*-linux* to *-*-linux-gnu*, to support old configure scripts.
case "$host" in
*-*-linux-gnu*) ;;
*-*-linux*) host=`echo $host | sed 's/^\(.*-.*-linux\)\(.*\)$/\1-gnu\2/'`
esac
host_cpu=`echo $host | sed 's/^\(.*\)-\(.*\)-\(.*\)$/\1/'`
host_vendor=`echo $host | sed 's/^\(.*\)-\(.*\)-\(.*\)$/\2/'`
host_os=`echo $host | sed 's/^\(.*\)-\(.*\)-\(.*\)$/\3/'`
@ -407,7 +419,7 @@ else
pic_flag=
;;
*-*-osf3*)
*-*-osf3* | *-*-osf4*)
# FIXME - pic_flag is probably required for hppa*-osf* and i860-osf*
wl='-Wl,'
link_static_flag='-non_shared'
@ -474,7 +486,7 @@ with_gnu_ld=no
set dummy $LD
linker="$2"
echo $ac_n "checking if $LD is GNU ld... $ac_c" 1>&6
if $LD --version 2>&1 | egrep 'with BFD' > /dev/null; then
if $LD --version 2>&1 | egrep '(GNU ld|with BFD)' > /dev/null; then
with_gnu_ld=yes
linker="GNU ld"
fi
@ -484,7 +496,7 @@ echo $ac_t "$with_gnu_ld" 1>&6
echo $ac_n "checking if $linker supports shared libraries... $ac_c" 1>&6
archive_cmds=
hardcode_libdir_flag=
hardcode_libdir_flag_spec=
hardcode_direct=no
hardcode_minus_L=no
hardcode_shlibpath_var=unsupported
@ -511,20 +523,20 @@ if test "$with_gnu_ld" = yes; then
if test "$ld_shlibs" = yes; then
archive_cmds='$cc -shared ${wl}-soname $wl$soname -o $lib$libobjs$deplibs'
hardcode_libdir_flag='${wl}-rpath $wl$libdir'
hardcode_libdir_flag_spec='${wl}-rpath $wl$libdir'
fi
else
# PORTME fill in a description of your system's linker (not GNU ld)
case "$host" in
*-*-aix3*)
archive_cmds='/usr/ucb/nm$libobjs | egrep \" D \" | sed \"s/^.* //\" > $lib.exp;$LD -o $objdir/$soname$libobjs -bE:$lib.exp -T512 -H512 -bM:SRE -lc$deplibs;ar cru $lib $objdir/$soname'
test "$with_gcc" != yes && hardcode_direct=yes
# Note: this linker hardcodes the directories in LIBPATH if there
# are no directories specified by -L.
hardcode_minus_L=yes
;;
*-*-aix4*)
archive_cmds='/bin/nm -B$libobjs | egrep \" D \" | sed \"s/^.* //\" > $lib.exp;$cc -o $objdir/$soname$libobjs ${wl}-bE:$lib.exp ${wl}-bM:SRE ${wl}-bnoentry$deplibs;ar cru $lib $objdir/$soname'
test "$with_gcc" != yes && hardcode_direct=yes
hardcode_minus_L=yes
;;
@ -537,34 +549,34 @@ else
*-*-hpux9*)
archive_cmds='$rm $objdir/$soname;$LD -b +s +b $install_libdir -o $objdir/$soname$libobjs$deplibs;mv $objdir/$soname $lib'
hardcode_libdir_flag='${wl}+b ${wl}$libdir'
hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
hardcode_direct=yes
hardcode_minus_L=yes
;;
*-*-hpux10*)
archive_cmds='$LD -b +h $soname +s +b $install_libdir -o $lib$libobjs$deplibs'
hardcode_libdir_flag='${wl}+b ${wl}$libdir'
hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
hardcode_direct=yes
hardcode_minus_L=yes
;;
*-*-irix5* | *-*-irix6*)
archive_cmds='$LD -shared -o $lib -soname $soname -set_version $verstring$libobjs -lc$deplibs'
hardcode_libdir_flag='${wl}-rpath ${wl}$libdir'
hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
;;
*-*-netbsd*)
# Tested with NetBSD 1.2 ld
archive_cmds='$LD -Bshareable -o $lib$libobjs$deplibs'
hardcode_libdir_flag='-R$libdir'
hardcode_libdir_flag_spec='-R$libdir'
hardcode_direct=yes
hardcode_shlibpath_var=no
;;
*-*-osf3*)
*-*-osf3* | *-*-osf4*)
archive_cmds='$LD -shared -o $lib -soname $soname -set_version $verstring$libobjs -lc$deplibs'
hardcode_libdir_flag='${wl}-rpath ${wl}$libdir'
hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
;;
*-*-sco3.2v5*)
@ -574,13 +586,13 @@ else
*-*-solaris2*)
archive_cmds='$LD -G -z text -h $soname -o $lib$libobjs$deplibs'
hardcode_libdir_flag='-R$libdir'
hardcode_libdir_flag_spec='-R$libdir'
hardcode_shlibpath_var=no
;;
*-*-sunos4*)
archive_cmds='$LD -assert pure-text -Bstatic -o $lib$libobjs'
hardcode_libdir_flag='-L$libdir'
hardcode_libdir_flag_spec='-L$libdir'
hardcode_direct=yes
hardcode_minus_L=yes
hardcode_shlibpath_var=no
@ -597,7 +609,7 @@ echo $ac_t "$ld_shlibs" 1>&6
# Check hardcoding attributes.
echo $ac_n "checking how to hardcode library paths into programs... $ac_c" 1>&6
hardcode_action=
if test -n "$hardcode_libdir_flag"; then
if test -n "$hardcode_libdir_flag_spec"; then
# We can hardcode non-existant directories.
if test "$hardcode_direct" != no &&
test "$hardcode_minus_L" != no &&
@ -606,14 +618,14 @@ if test -n "$hardcode_libdir_flag"; then
# Can't link without hardcoding.
hardcode_action=relink
else
hardcode_action=rpath
hardcode_action=immediate
fi
elif test "$hardcode_direct" = yes ||
test "$hardcode_minus_L" = yes ||
test "$hardcode_shlibpath_var" = yes; then
# We can't hardcode non-existant directories, but we can existing ones.
hardcode_action=relink
hardcode_action=immediate
else
# We can't hardcode anything.
hardcode_action=unsupported
@ -631,7 +643,7 @@ echo $ac_t "$reload_flag"
test -n "$reload_flag" && reload_flag=" $reload_flag"
# PORTME Fill in your ld.so characteristics
lib_names=
library_names_spec=
soname_spec=
postinstall_cmds=
finish_cmds=
@ -642,11 +654,8 @@ dynamic_linker="$host_os ld.so"
echo $ac_n "checking dynamic linker characteristics... $ac_c" 1>&6
case "$host" in
*-*-aix3* | *-*-aix4*)
# Shared libraries and static libraries currently use the same namespace.
test "$enable_shared" = no || enable_static=no
version_type=linux
lib_names='$libname.so.$versuffix $libname.a'
library_names_spec='$libname.so.$versuffix $libname.a'
shlibpath_var=LIBPATH
# AIX has no versioning support, so we append a major version to the name.
@ -655,14 +664,14 @@ case "$host" in
*-*-freebsd*)
version_type=sunos
lib_names='$libname.so.$versuffix $libname.so'
library_names_spec='$libname.so.$versuffix $libname.so'
finish_cmds='ldconfig -m $libdir'
shlibpath_var=LD_LIBRARY_PATH
;;
*-*-gnu*)
version_type=sunos
lib_names='$libname.so.$versuffix'
library_names_spec='$libname.so.$versuffix'
shlibpath_var=LD_LIBRARY_PATH
;;
@ -672,7 +681,7 @@ case "$host" in
dynamic_linker="$host_os dld.sl"
version_type=sunos
shlibpath_var=SHLIB_PATH
lib_names='$libname.sl.$versuffix $libname.sl.$major $libname.sl'
library_names_spec='$libname.sl.$versuffix $libname.sl.$major $libname.sl'
soname_spec='$libname.sl.$major'
# HP-UX runs *really* slowly unless shared libraries are mode 555.
postinstall_cmds='chmod 555 $lib'
@ -681,19 +690,20 @@ case "$host" in
*-*-irix5* | *-*-irix6*)
version_type=osf
soname_spec='$libname.so'
lib_names='$libname.so.$versuffix $libname.so'
library_names_spec='$libname.so.$versuffix $libname.so'
shlibpath_var=LD_LIBRARY_PATH
;;
# No shared lib support for linuxoldld or linuxaout.
*-*-linuxoldld* | *-*-linuxaout*)
# No shared lib support for Linux oldld, aout, or coff.
*-*-linux-gnuoldld* | *-*-linux-gnuaout* | *-*-linux-gnucoff*)
dynamic_linker=no
can_build_shared=no
;;
*-*-linux*)
# This must be Linux ELF.
*-*-linux-gnu*)
version_type=linux
lib_names='$libname.so.$versuffix $libname.so.$major $libname.so'
library_names_spec='$libname.so.$versuffix $libname.so.$major $libname.so'
soname_spec='$libname.so.$major'
finish_cmds='ldconfig -n $libdir'
shlibpath_var=LD_LIBRARY_PATH
@ -701,35 +711,35 @@ case "$host" in
*-*-netbsd*)
version_type=sunos
lib_names='$libname.so.$versuffix'
library_names_spec='$libname.so.$versuffix'
finish_cmds='ldconfig -m $libdir'
shlibpath_var=LD_LIBRARY_PATH
;;
*-*-osf3*)
*-*-osf3* | *-*-osf4*)
version_type=osf
soname_spec='$libname.so'
lib_names='$libname.so.$versuffix $libname.so'
library_names_spec='$libname.so.$versuffix $libname.so'
shlibpath_var=LD_LIBRARY_PATH
;;
*-*-sco3.2v5*)
version_type=osf
soname_spec='$libname.so.$major'
lib_names='$libname.so.$versuffix $libname.so.$major $libname.so'
library_names_spec='$libname.so.$versuffix $libname.so.$major $libname.so'
shlibpath_var=LD_LIBRARY_PATH
;;
*-*-solaris2*)
version_type=linux
lib_names='$libname.so.$versuffix $libname.so.$major $libname.so'
library_names_spec='$libname.so.$versuffix $libname.so.$major $libname.so'
soname_spec='$libname.so.$major'
shlibpath_var=LD_LIBRARY_PATH
;;
*-*-sunos4*)
version_type=sunos
lib_names='$libname.so.$versuffix'
library_names_spec='$libname.so.$versuffix'
finish_cmds='ldconfig $libdir'
shlibpath_var=LD_LIBRARY_PATH
;;
@ -771,21 +781,21 @@ echo "checking if libtool supports shared libraries... $can_build_shared" 1>&6
echo $ac_n "checking whether to build shared libraries... $ac_c" 1>&6
test "$can_build_shared" = "no" && enable_shared=no
if test "$enable_shared" = yes; then
# On AIX, we do not build both static and shared libraries.
case "$host_os" in
aix*)
test "$enable_static" = yes && enable_static=no
if test -n "$RANLIB"; then
archive_cmds="$archive_cmds;\$RANLIB \$lib"
postinstall_cmds='$RANLIB $lib'
fi
;;
esac
fi
# On AIX, shared libraries and static libraries use the same namespace.
case "$host_os" in
aix*)
test "$enable_shared" = yes && enable_static=no
if test -n "$RANLIB"; then
archive_cmds="$archive_cmds;\$RANLIB \$lib"
postinstall_cmds='$RANLIB $lib'
fi
;;
esac
echo "$ac_t""$enable_shared" 1>&6
# Make sure either enable_shared or enable_static is yes.
test "$enable_shared" = yes || enable_static=yes
ofile=libtool
trap "$rm $ofile; exit 1" 1 2 15
@ -843,7 +853,7 @@ version_type=$version_type
# List of archive names. First name is the real one, the rest are links.
# The last name is the one that the linker finds with -lNAME.
lib_names='$lib_names'
library_names_spec='$library_names_spec'
# The coded name of the library, if different from the real name.
soname_spec='$soname_spec'
@ -872,7 +882,7 @@ hardcode_action=$hardcode_action
# Flag to hardcode \$libdir into a binary during linking.
# This must work even if \$libdir does not exist.
hardcode_libdir_flag='$hardcode_libdir_flag'
hardcode_libdir_flag_spec='$hardcode_libdir_flag_spec'
# Set to yes if using DIR/libNAME.so during linking hardcodes DIR into the
# resulting binary.

View File

@ -46,6 +46,13 @@ if test "$LTCONFIG_VERSION" != "$VERSION"; then
exit 1
fi
#
if test "$build_libtool_libs" != yes && test "$build_old_libs" != yes; then
echo "$progname: not configured to build any kind of library" 1>&2
echo "Fatal configuration error. See the $PACKAGE docs for more information." 1>&2
exit 1
fi
# Global variables.
mode=$default_mode
nonopt=
@ -294,7 +301,7 @@ if test -z "$show_help"; then
# We need to know -static, to get the right output filenames.
case " $@ " in
*" -static "*) build_libtool_libs=no ;;
*" -static "*) build_libtool_libs=no build_old_libs=yes ;;
esac
for arg
@ -400,12 +407,17 @@ if test -z "$show_help"; then
exit 1
fi
# Get the name of the link library.
# Get the name of the library we link against.
linklib=
for linklib in $library_names; do
:
for l in $old_library $library_names; do
linklib="$l"
done
if test -z "$linklib"; then
echo "$progname: cannot find name of link library for \`$arg'" 1>&2
exit 1
fi
# Find the relevant object directory and library name.
name=`echo "$arg" | sed 's%^.*/%%; s/\.la$//; s/^lib//'`
dir=`echo "$arg" | sed 's%/[^/]*$%%'`
@ -426,19 +438,14 @@ if test -z "$show_help"; then
esac
fi
if test -z "$linklib"; then
echo "$progname: cannot find name of link library for \`$arg'" 1>&2
exit 1
fi
if test -n "$hardcode_libdir_flag"; then
tmp=`eval echo \"$hardcode_libdir_flag\"`
compile_command="$compile_command $tmp"
finalize_command="$finalize_command $tmp"
if test -n "$hardcode_libdir_flag_spec"; then
hardcode_libdir_flag=`eval echo \"$hardcode_libdir_flag_spec\"`
compile_command="$compile_command $hardcode_libdir_flag"
finalize_command="$finalize_command $hardcode_libdir_flag"
fi
case "$hardcode_action" in
rpath)
immediate)
if test "$hardcode_direct" = no; then
compile_command="$compile_command $dir/$linklib"
elif test "$hardcode_minus_L" = no; then
@ -472,20 +479,27 @@ if test -z "$show_help"; then
compile_command="$compile_command -l$name"
fi
;;
*)
echo "$progname: \`$hardcode_action' is an unknown hardcode action" 1>&2
exit 1
;;
esac
# Finalize command for both is simple: just hardcode it.
if test "$hardcode_direct" = yes; then
finalize_command="$finalize_command $libdir/$linklib"
elif test "$hardcode_minus_L" = no; then
elif test "$hardcode_minus_L" = yes; then
finalize_command="$finalize_command -L$libdir -l$name"
elif test "$hardcode_shlibpath_var" = no; then
elif test "$hardcode_shlibpath_var" = yes; then
finalize_shlibpath="$finalize_shlibpath$libdir:"
finalize_command="$finalize_command -l$name"
else
# We can't seem to hardcode it, guess we'll fake it.
finalize_command="$finalize_command -L$libdir -l$name"
fi
else
# Transform directly to old archives if we don't build new libraries.
test -z "$old_library" && old_library="$linklib"
compile_command="$compile_command $dir/$old_library"
finalize_command="$finalize_command $dir/$old_library"
fi
@ -661,7 +675,7 @@ if test -z "$show_help"; then
if test "$build_libtool_libs" = yes; then
# Get the real and link names of the library.
library_names=`eval echo \"$lib_names\"`
library_names=`eval echo \"$library_names_spec\"`
set dummy $library_names
realname="$2"
shift; shift
@ -787,6 +801,13 @@ if test -z "$show_help"; then
compile_command=`echo "$compile_command " | sed 's/\.lo /.o /g; s/ $//'`
fi
# Create the binary in the object directory, then wrap it.
if test -d $objdir; then :
else
$show "$mkdir $objdir"
$run $mkdir $objdir || exit $?
fi
if test -z "$link_against_libtool_libs" || test "$build_libtool_libs" != yes; then
# We have no uninstalled library dependencies, so finalize right now.
$show "$compile_command"
@ -804,13 +825,6 @@ if test -z "$show_help"; then
exit $status
fi
# Create the binary in the object directory, then wrap it.
if test -d $objdir; then :
else
$show "$mkdir $objdir"
$run $mkdir $objdir || exit $?
fi
if test -n "$shlibpath_var"; then
# We should set the shlibpath_var
rpath=

View File

@ -1,3 +1,15 @@
Sat Jan 18 10:33:21 1997 Gordon Matzigkeit <gord@gnu.ai.mit.edu>
* demo-conf.test: Use the CONFIG_SHELL environment variable when
running configure in the demo directory. From Bruno Haible.
* Makefile.am (clean-local): Make distclean in the demo directory,
so that ``make clean; env CC=cc make check'' works as one would
expect.
* demo-make.test: Fix typo (use $make instead of make). Reported
by Akim Demaille.
Thu Jan 16 21:43:18 1997 Gordon Matzigkeit <gord@gnu.ai.mit.edu>
* tlibtool: Rewrote to grab all the settings from the generated
@ -8,8 +20,8 @@ Thu Jan 16 21:43:18 1997 Gordon Matzigkeit <gord@gnu.ai.mit.edu>
Tue Jan 14 09:17:27 1997 Gordon Matzigkeit <gord@gnu.ai.mit.edu>
* demo-conf.test, demo-inst.test, demo-make.test, demo-unst.test,
hardcode.test: Use $make instead of make.
* demo-conf.test, demo-inst.test, demo-unst.test, hardcode.test:
Use $make instead of make.
* defs (make): Add definition of $make that uses the $MAKE
environment variable, if set. Suggested by Bruno Haible.

View File

@ -9,9 +9,6 @@ TESTS = demo-conf.test demo-make.test demo-exec.test demo-inst.test \
EXTRA_DIST = defs tlibtool $(TESTS)
# We need to remove any files that the above tests created.
distclean-local:
clean-local:
-test -f ../demo/Makefile && cd ../demo && $(MAKE) distclean
rm -rf =inst
clean-local:
-test -f ../demo/Makefile && cd ../demo && $(MAKE) clean

View File

@ -4,7 +4,8 @@
# Test script header.
need_prefix=yes
if test -z "$srcdir"; then
srcdir=.
srcdir=`echo "$0" | sed 's%/[^/]*$%%'`
test "$srcdir" = "$0" && srcdir=.
test "${VERBOSE+set}" != "set" && VERBOSE=yes
fi
. $srcdir/defs || exit 1

View File

@ -4,7 +4,8 @@
# Test script header.
need_prefix=yes
if test -z "$srcdir"; then
srcdir=.
srcdir=`echo "$0" | sed 's%/[^/]*$%%'`
test "$srcdir" = "$0" && srcdir=.
test "${VERBOSE+set}" != "set" && VERBOSE=yes
fi
. $srcdir/defs || exit 1

View File

@ -69,18 +69,18 @@ for file in hc-*; do
status=1
fi
elif egrep 'unsupported' $file > /dev/null; then
if test $expected = yes; then
if test $expected = unsupported; then
echo "\`$file' was not linked properly, as libtool expected"
else
echo "\`$file' was not linked properly, which fooled libtool" 1>&2
status=1
fi
else
if test $expected = yes; then
if test $expected = no; then
echo ".libs was not hardcoded in \`$file', as libtool expected"
else
echo ".libs was not hardcoded in \`$file', which fooled libtool" 1>&2
status=1
else
echo ".libs was not hardcoded in \`$file', as libtool expected"
fi
fi
done