libtool/PORTING

67 lines
3.1 KiB
Plaintext

In order to port libtool to a new platform, start by reading the node
`New ports' in the info document (i.e., the libtool manual). Some
additional information, that has not been converted to the .texi
format yet, is available in this file.
If you find that any porting documentation is missing, please
complain! :-) Complaints with patches and improvements to the
documentation, or to libtool itself, are more than welcome. :-) :-)
Inter-library Dependencies
--------------------------
libtool 1.2c has re-introduced the ability to do inter-library
dependency on some platforms, thanks to a patch by Toshio Kuratomi
<badger@prtr-13.ucsc.edu>. Here's a shortened version of the message
that contained his patch:
The basic architecture is this: in ltconfig.in, the person who writes
libtool makes sure $deplibs is included in $archive_cmds somewhere and
also sets the $check_shared_deplibs_method.
check_shared_deplibs_method can be any of five things:
test_compile
file_regex
file_magic [regex]
pass_all
none
I think that file_magic works the best: It looks in the library link
path for libraries that have the right libname. Then it runs file on
the library and checks for a match against [regex] using expr. I
currently have linux-elf looking for the string: "ELF 32-bit LSB
shared object" which seems to work well. (I don't know whether the
"32-bit" would have to change on linux-alpha though.... change to
'ELF [0-9]+-bit LSB shared object' might work. I don't know.)
file_regex will look for a filename in the link path. It doesn't take
an argument because I use the libname_spec and library_names_spec
variables to create the string to look for. I don't like it because
symlinks and random files can make it give false positives.
test_compile handles -L correctly, I hope. It also takes the names of
it's libraries from libname_spec instead of a hardcoded lib`expr
$a_deplib : '-l/(.*/)'`.so line.
pass_all will pass everything without any checking. I put it in
because osf3&4 appear to be treated that way right now... It might be
wise to perform checks here to see if the libraries exist on the
system, but I don't know how osf3&4 handle that, so I thought it would
be better just to do it the way the current code does.
none is the default for all systems unless overridden in ltconfig.in
(Currently, linux-elf is the only system that overrides.) It causes
deplibs to be reassigned deplibs="". That way archive_cmds can
contain deplibs on all platforms, but not have deplibs used unless
needed.
Okay:: Then in ltmain.in we have the real workhorse: a litle
initialization and postprocessing (to setup/release variables for use
with eval echo libname_spec etc.) and a case statement that decides
which method is being used. This is the real code... I wish I could
condense it a little more, but I don't think I can without function
calls. I've mostly optimized it (moved things out of loops, etc) but
there is probably some fat left. I thought I should stop while I was
ahead, work on whatever bugs you discover, etc before thinking about
more than obvious optimizations.