From: Gordon Matzigkeit Date: Tue, 1 Apr 1997 19:53:01 +0000 (+0000) Subject: *** empty log message *** X-Git-Tag: release-1-0a~35 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=9276ad0be39800323030804cc2f4341ffaf6d67d;p=thirdparty%2Flibtool.git *** empty log message *** --- diff --git a/ChangeLog b/ChangeLog index 69302e55d..8b73cb8e8 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,10 @@ Tue Apr 1 10:01:20 1997 Gordon Matzigkeit + * Makefile.am (EXTRA_DIST): Distribute libtool.pkg. + + * Shameless plug: Changed source code management system from CVS + to PRCS. + * libtool.scm: Initial Guile implementation of libtool. * ltmain.sh.in: An unexpected inconsistency in my whole approach @@ -33,7 +38,8 @@ Tue Apr 1 10:01:20 1997 Gordon Matzigkeit I was hoping to get libtool 1.0 out the door by early April, but now it looks like it will take at least another year before it'll - be usable by the public at large. April fools. + be usable by the public at large. April fools. libtool.scm + doesn't exist yet, either. * ltconfig.in (verify_host): Remove redundant `Transform *-*-linux* to *-*-linux-gnu*'. From Bruno Haible. diff --git a/Makefile.am b/Makefile.am index db49b86f0..d797f46c0 100644 --- a/Makefile.am +++ b/Makefile.am @@ -11,7 +11,7 @@ aclocal_macros = libtool.m4 replfunc.m4 # Distribute ltconfig and ltmain.sh so that the demo directory works. EXTRA_DIST = $(aclocal_macros) libtoolize.in ltconfig ltconfig.in \ - ltmain.sh ltmain.sh.in README-automake + ltmain.sh ltmain.sh.in README-automake libtool.pkg CLEANFILES = libtool libtoolize MAINTAINERCLEANFILES = ltconfig ltmain.sh diff --git a/NEWS b/NEWS index 92fd92fc7..9154614f2 100644 --- a/NEWS +++ b/NEWS @@ -1,7 +1,9 @@ NEWS - list of user-visible changes between releases of GNU libtool. -New in 0.9c: +New in 0.9d: * Bug fixes. +* Support for convenience libraries made of libtool objects. +* New `-whole-archive' and `-no-whole-archive' linking flags. * New Autoconf macros, AM_REPLACE_FUNCS, AM_FUNC_ALLOCA, AM_FUNC_MEMCMP, AM_STRUCT_ST_BLOCKS that set and substitute LTLIBOBJS and LTALLOCA. * Automake support for Libtool now uses the LTLIBRARIES primary. See diff --git a/PLATFORMS b/PLATFORMS index 2ea77c540..4b449a929 100644 --- a/PLATFORMS +++ b/PLATFORMS @@ -2,29 +2,32 @@ canonical host name compiler libtool results release ---------------------------------------------------------------------- -alpha-dec-osf3.2 gcc 0.7a fail -alpha-dec-osf3.2 cc 0.7a fail -hppa1.1-hp-hpux9.05 gcc 0.7a fail -hppa1.1-hp-hpux9.05 cc 0.7a fail -hppa1.1-hp-hpux10.10 cc 0.7a fail -i386-unknown-linux gcc 0.7c ok -i386-unknown-netbsd1.2 gcc 0.7c ok -mips-sgi-irix5.3 gcc 0.7a fail -mips-sgi-irix5.3 cc 0.7a fail -mips-sgi-irix6.2 cc -32 0.7a fail -mips-sgi-irix6.2 cc -n32 0.7a fail -rs6000-ibm-aix3.2.5 gcc 0.7c ok* +alpha-dec-osf3.2 cc 0.8 ok +alpha-dec-osf3.2 gcc 0.8 ok +hppa1.1-hp-hpux9.05 cc 0.8 ok* +hppa1.1-hp-hpux9.05 gcc 0.8 ok* +hppa1.1-hp-hpux10.10 cc 0.8 ok +i386-unknown-freebsd2.1.5 gcc 0.5 ok +i386-unknown-gnu0.0 gcc 0.5 ok +i386-unknown-linux2.0.16 gcc 0.8 ok +i386-unknown-netbsd1.2 gcc 0.8 ok +mips-sgi-irix5.3 cc 0.8 ok +mips-sgi-irix5.3 gcc 0.8 ok +mips-sgi-irix6.2 cc -32 0.8 ok +mips-sgi-irix6.2 cc -n32 0.8 fail rs6000-ibm-aix3.2.5 xlc 0.7c ok -rs6000-ibm-aix4.1.4.0 gcc 0.7c ok** -rs6000-ibm-aix4.1.4.0 xlc 0.7c ok** -sparc-sun-sunos4.1.3_U1 gcc 0.7a ok +rs6000-ibm-aix3.2.5 gcc 0.7c ok** +rs6000-ibm-aix4.1.4.0 xlc 0.8 ok +rs6000-ibm-aix4.1.4.0 gcc 0.7c ok +sparc-sun-linux2.1.14 gcc 0.7c ok sparc-sun-sunos4.1.3_U1 cc 0.7a ok -sparc-sun-solaris2.4 gcc 0.7a ok +sparc-sun-sunos4.1.3_U1 gcc 0.7a ok sparc-sun-solaris2.4 cc 0.7a ok -sparc-sun-solaris2.5.1 gcc 0.7c ok +sparc-sun-solaris2.4 gcc 0.7a ok +sparc-sun-solaris2.5.1 gcc 0.8 ok ---------------------------------------------------------------------- -* GCC 2.6.1 prints warnings about multiple symbol definitions. +* `sh internal 2K buffer overflow', under investigation. In the +meantime, set the CONFIG_SHELL environment variable to /usr/bin/ksh. -** Autoconf 2.12 uses /usr/bin/installbsd, which is buggy, so that - demo-inst fails. +** GCC 2.6.1 prints warnings about multiple symbol definitions. diff --git a/README b/README index e3e27cb21..2d20bc771 100644 --- a/README +++ b/README @@ -11,7 +11,7 @@ Libtool supports building static libraries on all platforms. Shared library support has been implemented for these platforms: AIX 3.x (*-*-aix3*) AIX 4.x (*-*-aix4*) - Digital/UNIX 3.x, a.k.a. OSF/1 (*-*-osf3*) + Digital/UNIX 3.x, 4.x, a.k.a. OSF/1 (*-*-osf3*, *-*-osf4*) FreeBSD 2.x (*-*-freebsd*) HP-UX 9.x, 10.x (*-*-hpux9*, *-*-hpux10*) IRIX 5.x, 6.x (*-*-irix5*, *-*-irix6*) diff --git a/README-alpha b/README-alpha index 22e7f898c..a51123dd6 100644 --- a/README-alpha +++ b/README-alpha @@ -3,14 +3,3 @@ This is an alpha testing release of GNU libtool. Please do not send any bug reports or questions about it to public forums (such as GNU newsgroups and mailing lists), send them directly to Gordon Matzigkeit . - -There are several references to a future release of Automake in -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 use Gord's -modified version of automake-1.1i that supports all the features -described in the libtool manual: - - diff --git a/README-automake b/README-automake index 554b6b226..1640da7f7 100644 --- a/README-automake +++ b/README-automake @@ -1,6 +1,7 @@ There are several references to a future release of Automake in libtool, that may not work with your own copy of Automake. Only -releases of Automake after automake-1.1j work with libtool. +releases of Automake after automake-1.1m work with libtool as +documented in the manual. You can find the latest Automake prerelease (warning: it may have bugs) at: @@ -13,19 +14,3 @@ mirror. Thanks, --Gord - -** If you have automake-1.1k, you'll need to apply the following patch -before installing it: - -diff -u automake-1.1k/automake.in.orig automake-1.1k/automake.in ---- automake-1.1k/automake.in.orig Sun Dec 8 04:03:10 1996 -+++ automake-1.1k/automake.in Sun Dec 8 04:03:12 1996 -@@ -4294,7 +4294,7 @@ - { - # Note that we explicitly set the mode, to avoid - # lossage if the program name isn't what we expect. -- $more_xform = 's/\@LIBTOOL\@/$(LIBTOOL) --mode=install/;'; -+ $more_xform = 's/\@LIBTOOL\@/\$(LIBTOOL) --mode=install/;'; - } - else - { diff --git a/THANKS b/THANKS index 58cac54d3..3b6bc043d 100644 --- a/THANKS +++ b/THANKS @@ -3,6 +3,7 @@ these people: Akim Demaille Bruno Haible +Carl D. Roth Charles S. Kerr Joel Cannon Karl Berry diff --git a/TODO b/TODO index 9d6d74d74..94baa043c 100644 --- a/TODO +++ b/TODO @@ -1,14 +1,13 @@ -* Need to change `-rpath FOO -rpath BAR' to `-rpath FOO:BAR' with at -least OSF/1 ld. +* Document convenience libraries, -whole-archive, and +-no-whole-archive. -For 1.1: +* Document the -export-dynamic flag, and the new dlname mode. -* Complete the -export-dynamic flag, and the new dlname mode. +For 1.1: -* Complete convenience libraries made of libtool objects. Document --whole-archive and -no-whole-archive. We also need a way to use these -convenience libraries just to resolve symbols, rather than the -(simplistic) whole-archive and no-whole-archive. +* We also need a way to use convenience libraries just to resolve +symbols, rather than the (simplistic) whole-archive and +no-whole-archive. * Write libtool not to be dependent on the compiler used to configure it. diff --git a/configure.in b/configure.in index 8c70b8efa..ee12fde78 100644 --- a/configure.in +++ b/configure.in @@ -1,6 +1,6 @@ dnl Process this file with autoconf to create configure. AC_INIT(ltmain.sh.in) -AM_INIT_AUTOMAKE(libtool,0.9d) +AM_INIT_AUTOMAKE(libtool,0.9e) pkgdatadir='${datadir}/libtool' AC_SUBST(pkgdatadir) diff --git a/demo/Makefile.am b/demo/Makefile.am index f9e491b8a..8f2616685 100644 --- a/demo/Makefile.am +++ b/demo/Makefile.am @@ -1,4 +1,4 @@ -# A brief demonstration of using Automake with Libtool. +# A brief demonstration of using Automake with Libtool. -*-Makefile-*- AUTOMAKE_OPTIONS = foreign EXTRA_DIST = $(TESTS) acinclude.m4 diff --git a/demo/configure.in b/demo/configure.in index f7b803789..2bd01f558 100644 --- a/demo/configure.in +++ b/demo/configure.in @@ -5,5 +5,8 @@ AM_INIT_AUTOMAKE(hell,1.0) AC_PROG_CC AM_PROG_LIBTOOL +dnl Check for the math library. +AC_CHECK_LIB(m, cos) + dnl Output the makefile AC_OUTPUT(Makefile) diff --git a/demo/foo.c b/demo/foo.c index c1003b752..ead1f8aa6 100644 --- a/demo/foo.c +++ b/demo/foo.c @@ -1,5 +1,6 @@ /* foo.c -- trivial test function for libfoo Copyright (C) 1996 Free Software Foundation, Inc. + Gordon Matzigkeit , 1996 This file is part of GNU Libtool. This program is free software; you can redistribute it and/or modify @@ -16,11 +17,13 @@ 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 */ #include "foo.h" #include #include +/* Give a global variable definition. */ +int nothing; + int foo () { diff --git a/demo/foo.h b/demo/foo.h index 59ac8eeb6..fdcc755ba 100644 --- a/demo/foo.h +++ b/demo/foo.h @@ -1,7 +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 , 1996 + This file is part of GNU Libtool. 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 @@ -48,10 +48,11 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ #define HELLO_RET 0xe110 #define FOO_RET 0xf00 -/* Function declarations. Note the wonderful use of the above macros. */ +/* Declarations. Note the wonderful use of the above macros. */ __BEGIN_DECLS int foo __P((void)); int hello __P((void)); +extern int nothing; __END_DECLS #endif /* !_FOO_H_ */ diff --git a/demo/hello.c b/demo/hello.c index 4b1943f10..a77bf8b99 100644 --- a/demo/hello.c +++ b/demo/hello.c @@ -21,7 +21,7 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ #include int -hello (void) +hello () { printf ("** This is not GNU Hello. There is no built-in mail reader. **\n"); return HELLO_RET; diff --git a/demo/main.c b/demo/main.c index d62cc80ad..49487e955 100644 --- a/demo/main.c +++ b/demo/main.c @@ -27,6 +27,9 @@ main (argc, argv) { printf ("Welcome to GNU Hell!\n"); + /* Try assigning to the nothing variable */ + nothing = 1; + /* Just call the functions and check return values. */ if (foo () != FOO_RET) return 1; diff --git a/doc/Makefile.am b/doc/Makefile.am index cc6f4816a..4b197b575 100644 --- a/doc/Makefile.am +++ b/doc/Makefile.am @@ -1,4 +1,4 @@ -## Process Makefile.am with automake to create Makefile.in. +## Process Makefile.am with automake to create Makefile.in. -*-Makefile-*- ## ## Copyright (C) 1996 Free Software Foundation, Inc. ## This Makefile.am is free software; the Free Software Foundation diff --git a/doc/libtool.texi b/doc/libtool.texi index d130ccf47..f92b6ba78 100644 --- a/doc/libtool.texi +++ b/doc/libtool.texi @@ -6,7 +6,7 @@ @c %**end of header @include version.texi -@set BUGADDR Gord Matzigkeit +@set BUGADDR Gordon Matzigkeit @dircategory GNU programming tools @direntry @@ -77,8 +77,12 @@ except that this permission notice may be stated in a translation approved by the Free Software Foundation. @end titlepage +@c Index of Autoconf macros. +@defindex am + @c Put everything in one index (arbitrarily chosen to be the concept index). @syncodeindex vr cp +@syncodeindex fn cp @synindex pg cp @ifinfo @@ -101,9 +105,10 @@ version @value{VERSION}. * Other Languages:: Using libtool without a C compiler. * Troubleshooting:: When libtool doesn't work as advertised. * Maintaining:: Information used by the libtool maintainer. -* Index:: Index of concepts, variables, and programs. +* Index:: Full index. @detailmenu + --- The Detailed Node Listing --- Introduction @@ -146,6 +151,7 @@ Configuring Libtool Including Libtool with Your Package * Invoking libtoolize:: @file{libtoolize} command line options. +* Autoconf .o Macros:: Autoconf macros that set object file names. Library Interface Versions @@ -1051,7 +1057,7 @@ that your users can install hassle-free shared libraries. @section Writing Makefile Rules for Libtool Libtool is fully integrated with Automake (@pxref{Top, , The Automake -Manual, automake.info, The Automake Manual}), starting with Automake +Manual, automake, The Automake Manual}), starting with Automake version 1.2. If you want to use libtool in a regular @file{Makefile} (or @@ -1076,8 +1082,8 @@ was generated automatically from the @file{Makefile.am} by Automake). @node Using Automake @section Using Automake with Libtool -Libtool library support fits conveniently into Automake's understanding -of what a @samp{PROGRAM} is. +Libtool library support is implemented under the @samp{LTLIBRARIES} +primary. Here are some samples from the Automake @file{Makefile.am} in the libtool distribution's @file{demo} subdirectory. @@ -1104,15 +1110,21 @@ you want to pass to libtool while linking @samp{program} (such as Building a libtool library is almost as trivial@dots{} note the use of @samp{libhello_la_LDFLAGS} to pass the @samp{-version-info} -(@pxref{Versioning}) and @samp{-rpath} options to libtool: +(@pxref{Versioning}) option to libtool: @example # Build a libtool library, libhello.la for installation in libdir. -lib_PROGRAMS = libhello.la +lib_LTLIBRARIES = libhello.la libhello_la_SOURCES = hello.c foo.c -libhello_la_LDFLAGS = -version-info 3:12:1 -rpath $(libdir) +libhello_la_LDFLAGS = -version-info 3:12:1 @end example +The @samp{-rpath} option is passed automatically by Automake, so you +should not specify it. + +@xref{A Shared Library, Building a Shared Library, The Automake Manual, +automake, The Automake Manual}, for more information. + @node Configuring @section Configuring Libtool @@ -1189,22 +1201,25 @@ guessed by running @file{config.guess}. @file{ltconfig} also recognizes the following environment variables: -@table @var -@item CC +@defvar CC The C compiler that will be used by the generated @file{libtool}. +@end defvar -@item CFLAGS +@defvar CFLAGS Compiler flags used to generate standard object files. +@end defvar -@item CPPFLAGS +@defvar CPPFLAGS C preprocessor flags. +@end defvar -@item LD +@defvar LD The system linker to use (if the generated @file{libtool} requires one). +@end defvar -@item RANLIB +@defvar RANLIB Program to use rather than checking for @file{ranlib}. -@end table +@end defvar @node ltconfig Example @subsection Using @file{ltconfig} @@ -1253,24 +1268,28 @@ burger$ @node AM_PROG_LIBTOOL @subsection The @code{AM_PROG_LIBTOOL} macro +@amindex AM_PROG_LIBTOOL If you are using GNU Autoconf (or Automake), you should add a call to @code{AM_PROG_LIBTOOL} to your @file{configure.in} file. This macro offers seamless integration between the @file{configure} script and -@file{ltconfig}. - -@code{AM_PROG_LIBTOOL} also adds support for the @samp{--enable-shared} -and @samp{--disable-shared} @file{configure} flags. +@file{ltconfig}: + +@defmac AM_PROG_LIBTOOL +Add support for the @samp{--enable-shared} and @samp{--disable-shared} +@file{configure} flags. Invoke @file{ltconfig} with the correct +arguments to configure the package.@footnote{@code{AM_PROG_LIBTOOL} +requires that you define the Makefile variable @code{top_builddir} in +your @file{Makefile.in}. Automake does this automatically, but Autoconf +users should set it to the relative path to the top of your build +directory (@file{../..}, for example).} +@end defmac When you invoke the @file{libtoolize} program (@pxref{Invoking libtoolize}), it will tell you where to find a definition of @code{AM_PROG_LIBTOOL}. If you use Automake, the @file{aclocal} program will automatically add @code{AM_PROG_LIBTOOL} support to your -@file{configure} script.@footnote{@code{AM_PROG_LIBTOOL} requires that -you define the Makefile variable @code{top_builddir} in your -@file{Makefile.in}. Automake does this automatically, but Autoconf -users should set it to the relative path to the top of your build -directory (@file{../..}, for example).} +@file{configure} script. @node Distributing @section Including Libtool with Your Package @@ -1300,6 +1319,7 @@ use the @file{libtoolize} program. @menu * Invoking libtoolize:: @file{libtoolize} command line options. +* Autoconf .o Macros:: Autoconf macros that set object file names. @end menu @node Invoking libtoolize @@ -1350,12 +1370,49 @@ Print @file{libtoolize} version information and exit. 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 +autoconf, 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. +@node Autoconf .o Macros +@subsection Autoconf @samp{.o} Macros + +The Autoconf package comes with a few macros that run tests, then set a +variable corresponding to the name of an object file. Sometimes it is +necessary to use corresponding names for libtool objects. + +So, included with libtool are convenience macros that do this kind of +work: + +@defmac AM_REPLACE_FUNCS (@var{function}@dots{}) +Same as @code{AC_REPLACE_FUNCS} (@pxref{Generic Functions, Generic +Function Checks, The Autoconf Manual, autoconf, The Autoconf +Manual}), except it also adds @samp{@var{function}.lo} to the value of +the output variable @code{LTLIBOBJS}. +@end defmac + +@defmac AM_FUNC_ALLOCA +Same as @code{AC_FUNC_ALLOCA} (@pxref{Particular Functions, Particular +Function Checks, The Autoconf Manual, autoconf, The Autoconf +Manual}), but also sets the output variable @code{LTALLOCA} to +@samp{alloca.lo}. +@end defmac + +@defmac AM_FUNC_MEMCMP +Same as @code{AC_FUNC_MEMCMP} (@pxref{Particular Functions, Particular +Function Checks, The Autoconf Manual, autoconf, The Autoconf +Manual}), except it also adds @samp{memcmp.lo} to the value of the output +variable @code{LTLIBOBJS}. +@end defmac + +@defmac AM_STRUCT_ST_BLOCKS +Same as @code{AC_STRUCT_ST_BLOCKS} (@pxref{Structures, Structures, The +Autoconf Manual, autoconf, The Autoconf Manual}), except it also +adds @samp{fileblocks.lo} to the output variable @code{LTLIBOBJS}. +@end defmac + @node Versioning @chapter Library Interface Versions @@ -1830,7 +1887,7 @@ 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 +Emacs Manual, emacs, The Emacs Manual}). Some of the details listed there are specific to Emacs, but the priciple behind them is a general one. @@ -1893,10 +1950,6 @@ platforms where it claims to support shared libraries: @include platforms.texi @end example -Libtool versions ending in a single letter (such as @samp{0.7a}) -designate beta releases. So, @samp{0.7a} comes after public release -@samp{0.7}, but before @samp{0.8}. - @node Platform Quirks @section Platform Quirks @@ -2029,105 +2082,140 @@ The @file{libtool} script is generated by @file{ltconfig} simply sets shell variables, then sources the libtool backend, @file{ltmain.sh}. -Here is a listing of each of these variable, and how it is used within -@file{ltmain.sh}: +Here is a listing of each of these variables, and how they are used +within @file{ltmain.sh}: -@table @samp -@item LD +@defvar LD The name of the linker that libtool should use internally for reloadable linking and possibly shared libraries. +@end defvar -@item LTCONFIG_VERSION +@defvar LTCONFIG_VERSION This is set to the version number of the @file{ltconfig} script, to prevent mismatches between the configuration information in @file{libtool}, and how that information is used in @file{ltmain.sh}. +@end defvar -@item RANLIB +@defvar RANLIB Set to the name of the ranlib program, if any. +@end defvar -@item archive_cmds -@itemx old_archive_cmds +@defvar archive_cmds +@defvarx old_archive_cmds Commands used to create shared and static libraries, respectively. +@end defvar -@item build_libtool_libs +@defvar build_libtool_libs Whether libtool should build shared libraries on this system. Set to @samp{yes} or @samp{no}. +@end defvar -@item build_old_libs +@defvar build_old_libs Whether libtool should build static libraries on this system. Set to @samp{yes} or @samp{no}. +@end defvar -@item finish_cmds +@defvar finish_cmds Commands to tell the dynamic linker to find shared libraries a directory. +@end defvar + +@defvar hardcode_action +Either @samp{immediately} or @samp{relink}, depending on whether shared +library paths can be hardcoded into executables before they are installed, +or if they need to be relinked. +@end defvar -@item hardcode_shlibpath_var +@defvar hardcode_direct Set to @samp{yes} or @samp{no}, depending on whether the linker -hardcodes directories specified by setting @samp{$shlibpath_var} into -the resulting executable. +hardcodes directories if a library is directly specified on the command +line (such as @samp{@var{dir}/lib@var{name}.a}). +@end defvar -@item hardcode_minus_L +@defvar hardcode_libdir_flag_spec +Flag to hardcode a @var{libdir} variable into a binary, so that the +dynamic linker searches @var{libdir} for shared libraries at runtime. +@end defvar + +@defvar hardcode_minus_L Set to @samp{yes} or @samp{no}, depending on whether the linker hardcodes directories specified by @samp{-L} flags into the resulting executable. +@end defvar -@item host -@itemx host_alias +@defvar hardcode_shlibpath_var +Set to @samp{yes} or @samp{no}, depending on whether the linker +hardcodes directories specified by setting @samp{$shlibpath_var} into +the resulting executable. +@end defvar + +@defvar host +@defvarx host_alias For information purposes, set to the specified and canonical names of the system that libtool was configured for. +@end defvar -@item lib_names +@defvar library_names_spec A list of shared library names. The first name is the name of the file, -the rest are symbolic links to the file. - -@item link_rpath_flag -Linker flag to specify a runtime search path for the dynamic linker. +the rest are symbolic links to the file. The last name in the list is +the one that the linker finds when given @samp{-l@var{name}}. +@end defvar -@item link_static_flag +@defvar link_static_flag Linker flag (passed through the C compiler) used to prevent dynamic linking. +@end defvar -@item pic_flag +@defvar pic_flag Any additional compiler flags for building library object files. +@end defvar -@item postinstall_cmds -@item old_postinstall_cmds +@defvar postinstall_cmds +@defvarx old_postinstall_cmds Commands run after installing a shared or static librar, respectively. +@end defvar -@item reload_cmds -@itemx reload_flag +@defvar reload_cmds +@defvarx reload_flag Commands to create a reloadable object. +@end defvar -@item shlibpath_var +@defvar shlibpath_var The environment variable that tells the dynamic linker where to find shared libraries. +@end defvar -@item striplib -@itemx old_striplib +@defvar striplib +@defvarx old_striplib Programs to strip shared and static libraries, respectively.@footnote{In the current implementation, libtool does not use any programs to strip libraries. Support will be added after it is clear how to write a portable test for library stripping programs.} +@end defvar -@item soname_spec +@defvar soname_spec The name coded into shared libraries, if different from the real name of the file. +@end defvar -@item version_type +@defvar version_type The library version numbering type. One of @samp{libtool}, @samp{linux}, @samp{osf}, @samp{sunos}, or @samp{none}. +@end defvar -@item wl +@defvar wl The C compiler flag that allows libtool to pass a flag directly to the linker. Used as: @samp{$@{wl@}@var{some-flag}}. - -@end table +@end defvar Variables ending in @samp{_cmds} may contain a semicolon-separated list -of commands that are evaluated one after another. If any of the +of commands that are @code{eval}'ed one after another. If any of the commands return a nonzero exit status, libtool generally exits with an error message. +Variables ending in @samp{_spec} are @code{eval}'ed before being used by +libtool. + @node Index @unnumbered Index diff --git a/doc/platforms.texi b/doc/platforms.texi index 8353df2f0..90bd8a007 100644 --- a/doc/platforms.texi +++ b/doc/platforms.texi @@ -1,34 +1,35 @@ -------------------------------------------------------- -canonical host name compiler libtool results - release +canonical host name compiler libtool results + release -------------------------------------------------------- -alpha-dec-osf3.2 cc 0.8 ok -alpha-dec-osf3.2 gcc 0.8 ok -alpha-dec-osf4.0 cc 0.9 ok -alpha-dec-osf4.0 gcc 0.9 ok -hppa1.1-hp-hpux9.05 cc 0.8 ok -hppa1.1-hp-hpux9.05 gcc 0.8 ok -hppa1.1-hp-hpux10.10 cc 0.8 ok -i386-unknown-freebsd2.1.5 gcc 0.5 ok -i386-unknown-gnu0.0 gcc 0.5 ok -i386-unknown-netbsd1.2 gcc 0.9a ok -i586-unknown-linux1.3.20 gcc 0.9 ok -i586-unknown-linux2.0.16 gcc 0.9a ok -mips-sgi-irix5.3 cc 0.8 ok -mips-sgi-irix5.3 gcc 0.8 ok -mips-sgi-irix6.2 cc -32 0.9 ok -mips-sgi-irix6.2 cc -n32 0.9 ok -powerpc-ibm-aix4.1.4.0 xlc 0.9a ok -powerpc-ibm-aix4.1.4.0 gcc 0.9a ok -rs6000-ibm-aix3.2.5 xlc 0.9 fail -rs6000-ibm-aix3.2.5 gcc 0.9 fail -rs6000-ibm-aix4.1.4.0 xlc 0.9 ok -rs6000-ibm-aix4.1.4.0 gcc 0.9 fail -sparc-sun-linux2.1.23 gcc 0.9 ok -sparc-sun-sunos4.1.3_U1 cc 0.9 ok -sparc-sun-sunos4.1.3_U1 gcc 0.9 ok -sparc-sun-solaris2.4 cc 0.9 ok -sparc-sun-solaris2.4 gcc 0.9 ok -sparc-sun-solaris2.5 cc 0.9 ok -sparc-sun-solaris2.5 gcc 0.9a ok +alpha-dec-osf3.2 cc 0.8 ok +alpha-dec-osf3.2 gcc 0.8 ok +alpha-dec-osf4.0 cc 0.9 ok +alpha-dec-osf4.0 gcc 0.9 ok +alpha-unknown-linux gcc 0.9d ok +hppa1.1-hp-hpux9.05 cc 0.8 ok +hppa1.1-hp-hpux9.05 gcc 0.8 ok +hppa1.1-hp-hpux10.10 cc 0.8 ok +i386-unknown-freebsd2.1.5 gcc 0.5 ok +i386-unknown-gnu0.0 gcc 0.5 ok +i386-unknown-netbsd1.2 gcc 0.9d ok +i586-unknown-linux1.3.20 gcc 0.9 ok +i586-unknown-linux2.0.16 gcc 0.9d ok +mips-sgi-irix5.3 cc 0.8 ok +mips-sgi-irix5.3 gcc 0.8 ok +mips-sgi-irix6.2 cc -32 0.9 ok +mips-sgi-irix6.2 cc -n32 0.9 ok +powerpc-ibm-aix4.1.4.0 xlc 0.9d ok +powerpc-ibm-aix4.1.4.0 gcc 0.9a ok +rs6000-ibm-aix3.2.5 xlc 0.9 fail +rs6000-ibm-aix3.2.5 gcc 0.9 fail +rs6000-ibm-aix4.1.4.0 xlc 0.9 ok +rs6000-ibm-aix4.1.4.0 gcc 0.9 fail +sparc-sun-linux2.1.23 gcc 0.9 ok +sparc-sun-sunos4.1.3_U1 cc 0.9 ok +sparc-sun-sunos4.1.3_U1 gcc 0.9 ok +sparc-sun-solaris2.4 cc 0.9 ok +sparc-sun-solaris2.4 gcc 0.9 ok +sparc-sun-solaris2.5 cc 0.9 ok +sparc-sun-solaris2.5 gcc 0.9d ok -------------------------------------------------------- diff --git a/libtool.m4 b/libtool.m4 index 1406286a6..ec72a10bd 100644 --- a/libtool.m4 +++ b/libtool.m4 @@ -21,7 +21,7 @@ ## configuration script generated by Autoconf, you may include it under ## the same distribution terms that you use for the rest of that program. -# serial 2 AM_PROG_LIBTOOL +# serial 4 AM_PROG_LIBTOOL AC_DEFUN(AM_PROG_LIBTOOL, [AC_REQUIRE([AC_CANONICAL_HOST]) AC_REQUIRE([AC_PROG_CC]) @@ -41,13 +41,23 @@ libtool_flags="$libtool_shared" test "$silent" = yes && libtool_flags="$libtool_flags --silent" test "$ac_cv_prog_gcc" = yes && libtool_flags="$libtool_flags --with-gcc" -# On SCO OpenServer 5, we need -belf to get full-featured binaries. -case "$host" in -*-*-sco3.2v5*) CFLAGS="$CFLAGS -belf" ;; -esac +[case "$host" in +*-*-irix6*) + # For IRIX 6, ld needs -n32 if cc uses it. + if echo " $CC $CFLAGS " | egrep -e '[ ]-n32[ ]' > /dev/null; then + LD="${LD-ld} -n32" + fi + ;; + +*-*-sco3.2v5*) + # On SCO OpenServer 5, we need -belf to get full-featured binaries. + CFLAGS="$CFLAGS -belf" + ;; +esac] # Actually configure libtool. ac_aux_dir is where install-sh is found. CC="$CC" CFLAGS="$CFLAGS" CPPFLAGS="$CPPFLAGS" LD="$LD" RANLIB="$RANLIB" \ -$ac_aux_dir/ltconfig $libtool_flags --no-verify $ac_aux_dir/ltmain.sh $host \ +${CONFIG_SHELL-/bin/sh} $ac_aux_dir/ltconfig \ +$libtool_flags --no-verify $ac_aux_dir/ltmain.sh $host \ || AC_MSG_ERROR([libtool configure failed]) ]) diff --git a/libtoolize.in b/libtoolize.in index 20f054448..0c1ed5148 100644 --- a/libtoolize.in +++ b/libtoolize.in @@ -122,24 +122,59 @@ fi files=`cd $pkgdatadir && ls` if test -z "$files"; then - echo "$progname: cannot \`cd' to \`$pkgdatadir'" 1>&2 + echo "$progname: cannot list files in \`$pkgdatadir'" 1>&2 exit 1 fi +auxdir=. +auxdirline=`egrep '^AC_CONFIG_AUX_DIR' configure.in 2>/dev/null` +if test -n "$auxdirline"; then + # Handle explicit AC_CONFIG_AUX_DIR settings. + auxdir=`echo "$auxdirline" | sed 's/^AC_CONFIG_AUX_DIR(\([^)]*\)).*$/\1/'` + + if test "$auxdir" = "$auxdirline"; then + echo "$progname: invalid AC_CONFIG_AUX_DIR syntax: $auxdirline" 1>&2 + exit 1 + else + # Strip any quote brackets. + auxdir=`echo "$auxdir" | sed 's/^\[\(.*\)\]$/\1/g'` + case "$auxdir" in + *\$*) + echo "$progname: cannot handle variables in AC_CONFIG_AUX_DIR" 1>&2 + exit 1 + ;; + *) + ;; + esac + fi +else + # Try to discover auxdir the same way it is discovered by configure. + # Note that we default to the current directory. + for dir in . .. ../..; do + if test -f $dir/install-sh; then + auxdir=$dir + break + elif test -f $dir/install.sh; then + auxdir=$dir + break + fi + done +fi + if test -z "$automake"; then - if egrep AM_PROG_LIBTOOL configure.in >/dev/null 2>&1; then : + if egrep '^AM_PROG_LIBTOOL' configure.in >/dev/null 2>&1; then : else echo "Remember to add \`AM_PROG_LIBTOOL' to \`configure.in'." fi - if egrep AC_PROG_RANLIB configure.in >/dev/null 2>&1; then + if egrep '^AC_PROG_RANLIB' configure.in >/dev/null 2>&1; then echo "Using \`AC_PROG_RANLIB' is rendered obsolete by \`AM_PROG_LIBTOOL'" fi if grep 'generated automatically by aclocal' aclocal.m4 >/dev/null 2>&1; then - updatemsg="You should update your \`aclocal.m4' by running aclocal." + updatemsg="update your \`aclocal.m4' by running aclocal" else - updatemsg="You should add the contents of \`$libtool_m4' to \`aclocal.m4'." + updatemsg="add the contents of \`$libtool_m4' to \`aclocal.m4'" fi if egrep '^AC_DEFUN\(AM_PROG_LIBTOOL' aclocal.m4 >/dev/null 2>&1; then @@ -155,16 +190,29 @@ if test -z "$automake"; then test -z "$localserial" && localserial=0 if test "$localserial" -lt "$instserial"; then - echo "$updatemsg" + echo "You should $updatemsg." elif test "$localserial" -gt "$instserial"; then - echo "$progname: \`$libtool_m4' has serial number $instserial, less than $localserial found in \`aclocal.m4'" 1>&2 + echo "$progname: \`$libtool_m4' is serial $instserial, less than $localserial in \`aclocal.m4'" 1>&2 + if test -z "$force"; then + echo "Use \`--force' to replace newer libtool files with this version." 1>&2 + exit 1 + fi + echo "To remain compatible, you should $updatemsg." fi fi else - echo "$updatemsg" + echo "You should $updatemsg." fi fi + +# Change to the auxillary directory. +if test "$auxdir" != .; then + test -z "$automake" && echo "Putting files in AC_CONFIG_AUX_DIR, \`$auxdir'." + cd $auxdir || exit 1 +fi + + for file in $files; do if test -f "$file" && test -z "$force"; then test -z "$automake" && echo "$progname: \`$file' exists: use \`--force' to overwrite" 1>&2 diff --git a/ltconfig.in b/ltconfig.in index af5978c9d..8119a4956 100755 --- a/ltconfig.in +++ b/ltconfig.in @@ -243,12 +243,6 @@ 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 diff --git a/ltmain.sh.in b/ltmain.sh.in index 9c4d73ea5..e597de8f1 100644 --- a/ltmain.sh.in +++ b/ltmain.sh.in @@ -881,8 +881,8 @@ if test -z "$show_help"; then if test -z "$link_against_libtool_libs" || test "$build_libtool_libs" != yes; then # Replace the output file specification. - compile_command=`echo "$compile_command" | sed "s%@OUTPUT@%$output%g"` - finalize_command=`echo "$finalize_command" | sed "s%@OUTPUT@%$output%g"` + compile_command=`echo "$compile_command" | sed 's%@OUTPUT@%'"$output"'%g'` + finalize_command=`echo "$finalize_command" | sed 's%@OUTPUT@%'"$output"'%g'` # We have no uninstalled library dependencies, so finalize right now. $show "$compile_command" @@ -901,8 +901,8 @@ if test -z "$show_help"; then fi # Replace the output file specification. - compile_command=`echo "$compile_command" | sed "s%@OUTPUT@%$objdir/$output%g"` - finalize_command=`echo "$finalize_command" | sed "s%@OUTPUT@%$objdir/$output"T"%g` + compile_command=`echo "$compile_command" | sed 's%@OUTPUT@%'"$objdir/$output"'%g'` + finalize_command=`echo "$finalize_command" | sed 's%@OUTPUT@%'"$objdir/$output"'T%g'` # Create the binary in the object directory, then wrap it. if test -d $objdir; then : diff --git a/tests/ChangeLog b/tests/ChangeLog index 9908a873b..b6c5d03b0 100644 --- a/tests/ChangeLog +++ b/tests/ChangeLog @@ -1,3 +1,8 @@ +Tue Apr 1 12:48:32 1997 Gordon Matzigkeit + + * hardcode.test: AIX 3 doesn't have strings(1) so we need to do a + funny tr and pipe the output to fgrep. From Bruno Haible. + Mon Feb 3 15:17:18 1997 Gordon Matzigkeit * Makefile.am (TESTS): Do the full make sequence with diff --git a/tests/Makefile.am b/tests/Makefile.am index 4b1001e91..35ed357d9 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -1,4 +1,4 @@ -## Process this file with automake to create Makefile.in +## Process this file with automake to create Makefile.in -*-Makefile-*- AUTOMAKE_OPTIONS = gnits diff --git a/tests/defs b/tests/defs index 133375158..4a071bbdb 100644 --- a/tests/defs +++ b/tests/defs @@ -8,9 +8,12 @@ case "$srcdir" in *) srcdir=`cd $srcdir && pwd` ;; esac +progname=`echo "$0" | sed 's%^.*/%%'` + # tlibtool needs to know what srcdir is. export srcdir libtool="$srcdir/tlibtool" +make="${MAKE-make}" prefix="./=inst" if test "$need_prefix" = yes; then @@ -23,8 +26,10 @@ else fi # See how redirections should work. -if test -z "$VERBOSE"; then - exec > /dev/null 2>&1 -fi +case "$VERBOSE" in +NO | no | 0 | "") + exec > /dev/null 2>&1 + ;; +esac -echo "=== Running test $0" +echo "=== Running $progname" diff --git a/tests/demo-conf.test b/tests/demo-conf.test index 0e0f2197e..d702fd501 100755 --- a/tests/demo-conf.test +++ b/tests/demo-conf.test @@ -24,6 +24,6 @@ fi # Configure the demonstration. echo "= Configuring in ../demo (prefix=$prefix)" -$srcdir/../demo/configure --srcdir=$srcdir/../demo --prefix=$prefix || exit 1 +${CONFIG_SHELL-/bin/sh} $srcdir/../demo/configure --srcdir=$srcdir/../demo --prefix=$prefix || exit 1 exit 0 diff --git a/tests/demo-exec.test b/tests/demo-exec.test index 73cdb0692..841e149d7 100755 --- a/tests/demo-exec.test +++ b/tests/demo-exec.test @@ -19,13 +19,13 @@ fi # Check to see if the programs really run. echo "Executing uninstalled programs in ../demo" -if ../demo/hell.static | grep 'GNU Hell'; then : +if ../demo/hell.static | grep 'Welcome to GNU Hell'; then : else echo "$0: cannot execute ./hell.static" 1>&2 exit 1 fi -if ../demo/hell | grep 'GNU Hell'; then : +if ../demo/hell | grep 'Welcome to GNU Hell'; then : else echo "$0: cannot execute ./hell" 1>&2 exit 1 diff --git a/tests/demo-inst.test b/tests/demo-inst.test index 832eae3e4..c29ccc782 100755 --- a/tests/demo-inst.test +++ b/tests/demo-inst.test @@ -24,13 +24,13 @@ echo "= Running $make install in ../demo" $make install || exit 1 echo "= Executing installed programs" -if $prefix/bin/hell.static | grep 'GNU Hell'; then : +if $prefix/bin/hell.static | grep 'Welcome to GNU Hell'; then : else echo "$0: cannot execute $prefix/bin/hell.static" 1>&2 exit 1 fi -if $prefix/bin/hell | grep 'GNU Hell'; then : +if $prefix/bin/hell | grep 'Welcome to GNU Hell'; then : else echo "$0: cannot execute $prefix/bin/hell" 1>&2 diff --git a/tests/demo-make.test b/tests/demo-make.test index cdbed8f0a..ecd3446ca 100755 --- a/tests/demo-make.test +++ b/tests/demo-make.test @@ -21,5 +21,5 @@ cd ../demo || exit 1 # Do the actual build. echo "Making in ../demo" -make || exit 1 +$make || exit 1 exit 0 diff --git a/tests/demo-unst.test b/tests/demo-unst.test index d2e3c8797..65859f6aa 100755 --- a/tests/demo-unst.test +++ b/tests/demo-unst.test @@ -20,12 +20,12 @@ fi # Change to our build directory. cd ../demo || exit 1 -echo "= Running make uninstall in ../demo" -make uninstall || exit 1 +echo "= Running $make uninstall in ../demo" +$make uninstall || exit 1 # See that there were no files leftover in $prefix. # Ignore dotfiles, so that .nfsXXX files don't screw up the test. -leftovers=`find $prefix ! -type d -print | egrep -v '^\.'` +leftovers=`find $prefix ! -type d ! -name '.*' -print` if test -n "$leftovers"; then echo "= Leftover after make uninstall:" ls -l $leftovers diff --git a/tests/hardcode.test b/tests/hardcode.test index 50522af9a..a0b0029ab 100755 --- a/tests/hardcode.test +++ b/tests/hardcode.test @@ -76,8 +76,9 @@ for file in hc-*; do hardcoded=no if fgrep '.libs' $file > /dev/null; then hardcoded=yes - elif strings -a $file 2>/dev/null | fgrep '.libs' > /dev/null; then - # At least AIX fgrep doesn't work for binary files, so we need strings. + elif cat $file | tr '\200-\277' '\100-\177' | tr '\300-\377' '\100-\177' | tr '\000-\037' '\040-\077' | fgrep '.libs' > /dev/null; then + # At least AIX fgrep doesn't work for binary files, and AIX also + # doesn't have strings(1), so we need this strange conversion. hardcoded=yes elif egrep 'unsupported' $file > /dev/null; then hardcoded=unsupported diff --git a/tests/link-2.test b/tests/link-2.test index 6de9af14b..df3c00e97 100755 --- a/tests/link-2.test +++ b/tests/link-2.test @@ -13,7 +13,7 @@ fi # Try a sample link command. linkresult=`$libtool -n --mode=link gcc -o something foo.o hell.lo` -test $? = 0 || exit 1 +test $? -eq 0 || exit 1 echo "$linkresult" case "$linkresult" in diff --git a/tests/link.test b/tests/link.test index 749eab5d6..5d1000bb0 100755 --- a/tests/link.test +++ b/tests/link.test @@ -11,5 +11,15 @@ fi . $srcdir/defs || exit 1 # Try a sample link command. -$libtool -n --mode=link gcc -o gettext ../lib/libnlsut.a -exit $? +linkresult=`$libtool -n --mode=link gcc -o gettext ../lib/libnlsut.a` +test $? -eq 0 || exit 1 + +echo "$linkresult" +case "$linkresult" in +*../lib/libnlsut.a) ;; +*) + echo "$progname: ../lib/libnlsut.a was not used as expected in linking" + exit 1 + ;; +esac +exit 0 diff --git a/tests/test-e.test b/tests/test-e.test index 25a22b560..ccaef4d08 100644 --- a/tests/test-e.test +++ b/tests/test-e.test @@ -4,7 +4,8 @@ # Test script header. need_prefix=no 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 @@ -16,4 +17,3 @@ if grep -n 'test -e' $srcdir/../ltconfig $srcdir/../ltmain.sh; then fi exit 0 - diff --git a/tests/tlibtool b/tests/tlibtool index 2522d5e51..797907c8d 100644 --- a/tests/tlibtool +++ b/tests/tlibtool @@ -6,77 +6,12 @@ if test -z "$srcdir"; then exit 1 fi +# Grab all the settings from the generated libtool. +eval "`egrep '^[A-Za-z_][A-Za-z0-9_]*=' ../libtool`" + # Use @VERSION@ so that we can use ../ltmain.sh.in directly. LTCONFIG_VERSION="@VERSION@" -# Whether or not to build libtool libraries. -build_libtool_libs=yes - -# Whether or not to build old-style libraries. -build_old_libs=yes - -# The host system. -host_alias="i386-unknown-netbsd1.2" -host="i386-unknown-netbsd1.2" - -# The linker used to build libraries. -LD='ld' - -# How to create reloadable object files. -reload_flag=' -r' -reload_cmds='$LD$reload_flag -o $output$reload_objs' - -# How to pass a linker flag through the compiler. -wl='-Wl,' - -# Additional compiler flags for building library objects. -pic_flag=' -fPIC' - -# Compiler flag to prevent dynamic linking. -link_static_flag='-static' - -# Pattern to match compiler flags for creating libNAME_p libraries: -profile_flag_pattern='-pg?' - -# Library versioning type. -version_type=sunos - -# List of archive names. First name is the real one, the rest are links. -lib_names='$libname.so.$versuffix' - -# The coded name of the library, if different from the real name. -soname_spec='' - -# Commands used to build and install an old-style archive. -RANLIB='ranlib' -old_archive_cmds='ar cru $oldlib$oldobjs;$RANLIB $oldlib' -old_postinstall_cmds='chmod 644 $oldlib;$RANLIB $oldlib' - -# Commands used to build and install a shared archive. -archive_cmds='$LD -Bshareable -o $lib$libobjs$deplibs' -postinstall_cmds='' - -# Commands used to finish a libtool library installation in a directory. -finish_cmds='ldconfig -m $libdir' - -# The flag that specifies a runtime search path when linking. -link_rpath_flag='-R$libdir' - -# How to strip a library file. -striplib='strip -x' -old_striplib='' - -# This is the shared library path variable. -shlibpath_var=LD_LIBRARY_PATH - -# Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into the -# the resulting binary. -hardcode_shlibpath_var=no - -# Set to yes if using the -LDIR flag during linking hardcodes DIR into the -# resulting binary. -hardcode_minus_L=no - # Execute the libtool backend. . $srcdir/../ltmain.sh.in exit 1