mirror of
git://git.savannah.gnu.org/libtool.git
synced 2024-11-27 06:09:57 +08:00
67 lines
3.1 KiB
Plaintext
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.
|