For next public release: ************************ * Create a new library version_type, `irix'. Janos Farkas writes: I just realized I also have mortal access to an SGI system, and found this in the dso.5 page, this looks more informative :) Versioning of Shared Objects. QUICK OVERVIEW For a shared object to be versioned the following needs to be done: * Version strings consist of 3 parts and a dot: The string "sgi", a decimal number (the major number), a dot, and a decimal number (the minor number). * Add the command -set_version sgi1.0 to the command to build the shared object (cc -shared, ld -shared, etc.). * Whenever you make a COMPATIBLE change update the minor version number (the one after the dot), and add the latest version string to colon-separated list of version strings, e.g., -set_version sgi1.0:sgi1.1:sgi1.3 * Whenever you make an INCOMPATIBLE change, update the major version number. Pass this as the version list, e.g., -set_version sgi2.0. Change the filename of the OLD shared object by adding a dot followed by the previous major number to the filename of the shared object. DO NOT CHANGE the soname of the object. No change to the file contents are necessary or desirable. Simply rename the file. * Inter-library dependencies should be fully tracked by libtool. Reminded by Alexandre Oliva. This requires looking up installed libtool libraries for transparent support. * Alexandre Oliva suggests that we hardcode paths into libraries, as well as binaries: `... -Wl,-soname -Wl,/tmp/libtest.so.0 ...'. Tim Mooney wants the same thing. * Tom Lane adds that HP-UX's linker, at least (I've also found this on AIX 4), distinguishes between global function and global variable references. This means that we cannot declare every symbol as `extern char'. Find a workaround. In the future: ************** * If not cross-compiling, have the static flag test run the resulting binary to make sure everything works. * Implement full multi-language support. Currently, this is only for C++, but there are beginnings of this in the manual (Other Languages). This includes writing libtool not to be so dependent on the compiler used to configure it. We especially need this for C++ linking, for which libtool currently does not handle static constructors properly, even on operating systems that support them. ``Don't use static constructors'' is no longer a satisfactory answer. People who need it: Jean Daniel Fekete Thomas Hiller * Another form of convenience library, suggested by Alexandre Oliva, is to have undocumented utility libraries, where only the shared version is installed. * We could use libtool object convenience libraries that resolve symbols to be included in a libtool archive. This would require some sort of -whole-archive option, as well. * Somehow we need to make sure that static libraries never appear in $deplibs. This, will probably require that libtool discover exactly which files would be linked from which directories when somebody says `-lsomething'. This adds a lot of complexity, but I see no other way around it. * Need to finalize the documentation, and give a specification of `.la' files so that people can depend on their format. This also needs to be done so that DLD uses a public interface to libtool archives. This would be a good thing to put before the maintainance notes. Things to think about: ********************** * For OSes with symbol export lists, we should add some flags to allow packages to specify explicit lists, or to bypass them entirely. Automatic-generation using nm must be the default, since that is simplest. * Talk with RMS about his so-called `automatic package generation tool.' This is probably what Thomas has been murmuring about for the Hurd. We'll need to integrate package-supplied programs such as libtool into that scheme, since it manages some of the preinstall and postinstall commands, but isn't installed itself. Probably, things like libtool should be distributed as part of such a binary package. * Maybe implement full support for other orthogonal library types (libhello_g, libhello_p, 64 vs 32-bit ABI's, etc). Make these types configurable.