| line |
stmt |
bran |
cond |
sub |
pod |
time |
code |
|
1
|
|
|
|
|
|
|
package ExtUtils::Liblist; |
|
2
|
|
|
|
|
|
|
|
|
3
|
53
|
|
|
53
|
|
38269
|
use strict; |
|
|
53
|
|
|
|
|
113
|
|
|
|
53
|
|
|
|
|
3391
|
|
|
4
|
53
|
|
|
53
|
|
281
|
use warnings; |
|
|
53
|
|
|
|
|
97
|
|
|
|
53
|
|
|
|
|
3003
|
|
|
5
|
|
|
|
|
|
|
|
|
6
|
|
|
|
|
|
|
our $VERSION = '7.70'; |
|
7
|
|
|
|
|
|
|
$VERSION =~ tr/_//d; |
|
8
|
|
|
|
|
|
|
|
|
9
|
53
|
|
|
53
|
|
319
|
use File::Spec; |
|
|
53
|
|
|
|
|
113
|
|
|
|
53
|
|
|
|
|
8451
|
|
|
10
|
|
|
|
|
|
|
require ExtUtils::Liblist::Kid; |
|
11
|
|
|
|
|
|
|
our @ISA = qw(ExtUtils::Liblist::Kid File::Spec); |
|
12
|
|
|
|
|
|
|
|
|
13
|
|
|
|
|
|
|
# Backwards compatibility with old interface. |
|
14
|
|
|
|
|
|
|
sub ext { |
|
15
|
157
|
|
|
157
|
0
|
3814
|
goto &ExtUtils::Liblist::Kid::ext; |
|
16
|
|
|
|
|
|
|
} |
|
17
|
|
|
|
|
|
|
|
|
18
|
|
|
|
|
|
|
sub lsdir { |
|
19
|
24
|
|
|
24
|
0
|
62
|
shift; |
|
20
|
24
|
|
|
|
|
604
|
my $rex = qr/$_[1]/; |
|
21
|
24
|
|
|
|
|
956
|
opendir my $dir_fh, $_[0]; |
|
22
|
24
|
|
|
|
|
4266
|
my @out = grep /$rex/, readdir $dir_fh; |
|
23
|
24
|
|
|
|
|
499
|
closedir $dir_fh; |
|
24
|
24
|
|
|
|
|
2060
|
return @out; |
|
25
|
|
|
|
|
|
|
} |
|
26
|
|
|
|
|
|
|
|
|
27
|
|
|
|
|
|
|
__END__ |
|
28
|
|
|
|
|
|
|
|
|
29
|
|
|
|
|
|
|
=head1 NAME |
|
30
|
|
|
|
|
|
|
|
|
31
|
|
|
|
|
|
|
ExtUtils::Liblist - determine libraries to use and how to use them |
|
32
|
|
|
|
|
|
|
|
|
33
|
|
|
|
|
|
|
=head1 SYNOPSIS |
|
34
|
|
|
|
|
|
|
|
|
35
|
|
|
|
|
|
|
require ExtUtils::Liblist; |
|
36
|
|
|
|
|
|
|
|
|
37
|
|
|
|
|
|
|
$MM->ext($potential_libs, $verbose, $need_names); |
|
38
|
|
|
|
|
|
|
|
|
39
|
|
|
|
|
|
|
# Usually you can get away with: |
|
40
|
|
|
|
|
|
|
ExtUtils::Liblist->ext($potential_libs, $verbose, $need_names) |
|
41
|
|
|
|
|
|
|
|
|
42
|
|
|
|
|
|
|
=head1 DESCRIPTION |
|
43
|
|
|
|
|
|
|
|
|
44
|
|
|
|
|
|
|
This utility takes a list of libraries in the form C<-llib1 -llib2 |
|
45
|
|
|
|
|
|
|
-llib3> and returns lines suitable for inclusion in an extension |
|
46
|
|
|
|
|
|
|
Makefile. Extra library paths may be included with the form |
|
47
|
|
|
|
|
|
|
C<-L/another/path> this will affect the searches for all subsequent |
|
48
|
|
|
|
|
|
|
libraries. |
|
49
|
|
|
|
|
|
|
|
|
50
|
|
|
|
|
|
|
It returns an array of four or five scalar values: EXTRALIBS, |
|
51
|
|
|
|
|
|
|
BSLOADLIBS, LDLOADLIBS, LD_RUN_PATH, and, optionally, a reference to |
|
52
|
|
|
|
|
|
|
the array of the filenames of actual libraries. Some of these don't |
|
53
|
|
|
|
|
|
|
mean anything unless on Unix. See the details about those platform |
|
54
|
|
|
|
|
|
|
specifics below. The list of the filenames is returned only if |
|
55
|
|
|
|
|
|
|
$need_names argument is true. |
|
56
|
|
|
|
|
|
|
|
|
57
|
|
|
|
|
|
|
Dependent libraries can be linked in one of three ways: |
|
58
|
|
|
|
|
|
|
|
|
59
|
|
|
|
|
|
|
=over 2 |
|
60
|
|
|
|
|
|
|
|
|
61
|
|
|
|
|
|
|
=item * For static extensions |
|
62
|
|
|
|
|
|
|
|
|
63
|
|
|
|
|
|
|
by the ld command when the perl binary is linked with the extension |
|
64
|
|
|
|
|
|
|
library. See EXTRALIBS below. |
|
65
|
|
|
|
|
|
|
|
|
66
|
|
|
|
|
|
|
=item * For dynamic extensions at build/link time |
|
67
|
|
|
|
|
|
|
|
|
68
|
|
|
|
|
|
|
by the ld command when the shared object is built/linked. See |
|
69
|
|
|
|
|
|
|
LDLOADLIBS below. |
|
70
|
|
|
|
|
|
|
|
|
71
|
|
|
|
|
|
|
=item * For dynamic extensions at load time |
|
72
|
|
|
|
|
|
|
|
|
73
|
|
|
|
|
|
|
by the DynaLoader when the shared object is loaded. See BSLOADLIBS |
|
74
|
|
|
|
|
|
|
below. |
|
75
|
|
|
|
|
|
|
|
|
76
|
|
|
|
|
|
|
=back |
|
77
|
|
|
|
|
|
|
|
|
78
|
|
|
|
|
|
|
=head2 EXTRALIBS |
|
79
|
|
|
|
|
|
|
|
|
80
|
|
|
|
|
|
|
List of libraries that need to be linked with when linking a perl |
|
81
|
|
|
|
|
|
|
binary which includes this extension. Only those libraries that |
|
82
|
|
|
|
|
|
|
actually exist are included. These are written to a file and used |
|
83
|
|
|
|
|
|
|
when linking perl. |
|
84
|
|
|
|
|
|
|
|
|
85
|
|
|
|
|
|
|
=head2 LDLOADLIBS and LD_RUN_PATH |
|
86
|
|
|
|
|
|
|
|
|
87
|
|
|
|
|
|
|
List of those libraries which can or must be linked into the shared |
|
88
|
|
|
|
|
|
|
library when created using ld. These may be static or dynamic |
|
89
|
|
|
|
|
|
|
libraries. LD_RUN_PATH is a colon separated list of the directories |
|
90
|
|
|
|
|
|
|
in LDLOADLIBS. It is passed as an environment variable to the process |
|
91
|
|
|
|
|
|
|
that links the shared library. |
|
92
|
|
|
|
|
|
|
|
|
93
|
|
|
|
|
|
|
=head2 BSLOADLIBS |
|
94
|
|
|
|
|
|
|
|
|
95
|
|
|
|
|
|
|
List of those libraries that are needed but can be linked in |
|
96
|
|
|
|
|
|
|
dynamically at run time on this platform. SunOS/Solaris does not need |
|
97
|
|
|
|
|
|
|
this because ld records the information (from LDLOADLIBS) into the |
|
98
|
|
|
|
|
|
|
object file. This list is used to create a .bs (bootstrap) file. |
|
99
|
|
|
|
|
|
|
|
|
100
|
|
|
|
|
|
|
=head1 PORTABILITY |
|
101
|
|
|
|
|
|
|
|
|
102
|
|
|
|
|
|
|
This module deals with a lot of system dependencies and has quite a |
|
103
|
|
|
|
|
|
|
few architecture specific C<if>s in the code. |
|
104
|
|
|
|
|
|
|
|
|
105
|
|
|
|
|
|
|
=head2 VMS implementation |
|
106
|
|
|
|
|
|
|
|
|
107
|
|
|
|
|
|
|
The version of ext() which is executed under VMS differs from the |
|
108
|
|
|
|
|
|
|
Unix-OS/2 version in several respects: |
|
109
|
|
|
|
|
|
|
|
|
110
|
|
|
|
|
|
|
=over 2 |
|
111
|
|
|
|
|
|
|
|
|
112
|
|
|
|
|
|
|
=item * |
|
113
|
|
|
|
|
|
|
|
|
114
|
|
|
|
|
|
|
Input library and path specifications are accepted with or without the |
|
115
|
|
|
|
|
|
|
C<-l> and C<-L> prefixes used by Unix linkers. If neither prefix is |
|
116
|
|
|
|
|
|
|
present, a token is considered a directory to search if it is in fact |
|
117
|
|
|
|
|
|
|
a directory, and a library to search for otherwise. Authors who wish |
|
118
|
|
|
|
|
|
|
their extensions to be portable to Unix or OS/2 should use the Unix |
|
119
|
|
|
|
|
|
|
prefixes, since the Unix-OS/2 version of ext() requires them. |
|
120
|
|
|
|
|
|
|
|
|
121
|
|
|
|
|
|
|
=item * |
|
122
|
|
|
|
|
|
|
|
|
123
|
|
|
|
|
|
|
Wherever possible, shareable images are preferred to object libraries, |
|
124
|
|
|
|
|
|
|
and object libraries to plain object files. In accordance with VMS |
|
125
|
|
|
|
|
|
|
naming conventions, ext() looks for files named I<lib>shr and I<lib>rtl; |
|
126
|
|
|
|
|
|
|
it also looks for I<lib>lib and libI<lib> to accommodate Unix conventions |
|
127
|
|
|
|
|
|
|
used in some ported software. |
|
128
|
|
|
|
|
|
|
|
|
129
|
|
|
|
|
|
|
=item * |
|
130
|
|
|
|
|
|
|
|
|
131
|
|
|
|
|
|
|
For each library that is found, an appropriate directive for a linker options |
|
132
|
|
|
|
|
|
|
file is generated. The return values are space-separated strings of |
|
133
|
|
|
|
|
|
|
these directives, rather than elements used on the linker command line. |
|
134
|
|
|
|
|
|
|
|
|
135
|
|
|
|
|
|
|
=item * |
|
136
|
|
|
|
|
|
|
|
|
137
|
|
|
|
|
|
|
LDLOADLIBS contains both the libraries found based on C<$potential_libs> and |
|
138
|
|
|
|
|
|
|
the CRTLs, if any, specified in Config.pm. EXTRALIBS contains just those |
|
139
|
|
|
|
|
|
|
libraries found based on C<$potential_libs>. BSLOADLIBS and LD_RUN_PATH |
|
140
|
|
|
|
|
|
|
are always empty. |
|
141
|
|
|
|
|
|
|
|
|
142
|
|
|
|
|
|
|
=back |
|
143
|
|
|
|
|
|
|
|
|
144
|
|
|
|
|
|
|
In addition, an attempt is made to recognize several common Unix library |
|
145
|
|
|
|
|
|
|
names, and filter them out or convert them to their VMS equivalents, as |
|
146
|
|
|
|
|
|
|
appropriate. |
|
147
|
|
|
|
|
|
|
|
|
148
|
|
|
|
|
|
|
In general, the VMS version of ext() should properly handle input from |
|
149
|
|
|
|
|
|
|
extensions originally designed for a Unix or VMS environment. If you |
|
150
|
|
|
|
|
|
|
encounter problems, or discover cases where the search could be improved, |
|
151
|
|
|
|
|
|
|
please let us know. |
|
152
|
|
|
|
|
|
|
|
|
153
|
|
|
|
|
|
|
=head2 Win32 implementation |
|
154
|
|
|
|
|
|
|
|
|
155
|
|
|
|
|
|
|
The version of ext() which is executed under Win32 differs from the |
|
156
|
|
|
|
|
|
|
Unix-OS/2 version in several respects: |
|
157
|
|
|
|
|
|
|
|
|
158
|
|
|
|
|
|
|
=over 2 |
|
159
|
|
|
|
|
|
|
|
|
160
|
|
|
|
|
|
|
=item * |
|
161
|
|
|
|
|
|
|
|
|
162
|
|
|
|
|
|
|
If C<$potential_libs> is empty, the return value will be empty. |
|
163
|
|
|
|
|
|
|
Otherwise, the libraries specified by C<$Config{perllibs}> (see Config.pm) |
|
164
|
|
|
|
|
|
|
will be appended to the list of C<$potential_libs>. The libraries |
|
165
|
|
|
|
|
|
|
will be searched for in the directories specified in C<$potential_libs>, |
|
166
|
|
|
|
|
|
|
C<$Config{libpth}>, and in C<$Config{installarchlib}/CORE>. |
|
167
|
|
|
|
|
|
|
For each library that is found, a space-separated list of fully qualified |
|
168
|
|
|
|
|
|
|
library pathnames is generated. |
|
169
|
|
|
|
|
|
|
|
|
170
|
|
|
|
|
|
|
=item * |
|
171
|
|
|
|
|
|
|
|
|
172
|
|
|
|
|
|
|
Input library and path specifications are accepted with or without the |
|
173
|
|
|
|
|
|
|
C<-l> and C<-L> prefixes used by Unix linkers. |
|
174
|
|
|
|
|
|
|
|
|
175
|
|
|
|
|
|
|
An entry of the form C<-La:\foo> specifies the C<a:\foo> directory to look |
|
176
|
|
|
|
|
|
|
for the libraries that follow. |
|
177
|
|
|
|
|
|
|
|
|
178
|
|
|
|
|
|
|
An entry of the form C<-lfoo> specifies the library C<foo>, which may be |
|
179
|
|
|
|
|
|
|
spelled differently depending on what kind of compiler you are using. If |
|
180
|
|
|
|
|
|
|
you are using GCC, it gets translated to C<libfoo.a>, but for other win32 |
|
181
|
|
|
|
|
|
|
compilers, it becomes C<foo.lib>. If no files are found by those translated |
|
182
|
|
|
|
|
|
|
names, one more attempt is made to find them using either C<foo.a> or |
|
183
|
|
|
|
|
|
|
C<libfoo.lib>, depending on whether GCC or some other win32 compiler is |
|
184
|
|
|
|
|
|
|
being used, respectively. |
|
185
|
|
|
|
|
|
|
|
|
186
|
|
|
|
|
|
|
If neither the C<-L> or C<-l> prefix is present in an entry, the entry is |
|
187
|
|
|
|
|
|
|
considered a directory to search if it is in fact a directory, and a |
|
188
|
|
|
|
|
|
|
library to search for otherwise. The C<$Config{lib_ext}> suffix will |
|
189
|
|
|
|
|
|
|
be appended to any entries that are not directories and don't already have |
|
190
|
|
|
|
|
|
|
the suffix. |
|
191
|
|
|
|
|
|
|
|
|
192
|
|
|
|
|
|
|
Note that the C<-L> and C<-l> prefixes are B<not required>, but authors |
|
193
|
|
|
|
|
|
|
who wish their extensions to be portable to Unix or OS/2 should use the |
|
194
|
|
|
|
|
|
|
prefixes, since the Unix-OS/2 version of ext() requires them. |
|
195
|
|
|
|
|
|
|
|
|
196
|
|
|
|
|
|
|
=item * |
|
197
|
|
|
|
|
|
|
|
|
198
|
|
|
|
|
|
|
Entries cannot be plain object files, as many Win32 compilers will |
|
199
|
|
|
|
|
|
|
not handle object files in the place of libraries. |
|
200
|
|
|
|
|
|
|
|
|
201
|
|
|
|
|
|
|
=item * |
|
202
|
|
|
|
|
|
|
|
|
203
|
|
|
|
|
|
|
Entries in C<$potential_libs> beginning with a colon and followed by |
|
204
|
|
|
|
|
|
|
alphanumeric characters are treated as flags. Unknown flags will be ignored. |
|
205
|
|
|
|
|
|
|
|
|
206
|
|
|
|
|
|
|
An entry that matches C</:nodefault/i> disables the appending of default |
|
207
|
|
|
|
|
|
|
libraries found in C<$Config{perllibs}> (this should be only needed very rarely). |
|
208
|
|
|
|
|
|
|
|
|
209
|
|
|
|
|
|
|
An entry that matches C</:nosearch/i> disables all searching for |
|
210
|
|
|
|
|
|
|
the libraries specified after it. Translation of C<-Lfoo> and |
|
211
|
|
|
|
|
|
|
C<-lfoo> still happens as appropriate (depending on compiler being used, |
|
212
|
|
|
|
|
|
|
as reflected by C<$Config{cc}>), but the entries are not verified to be |
|
213
|
|
|
|
|
|
|
valid files or directories. |
|
214
|
|
|
|
|
|
|
|
|
215
|
|
|
|
|
|
|
An entry that matches C</:search/i> reenables searching for |
|
216
|
|
|
|
|
|
|
the libraries specified after it. You can put it at the end to |
|
217
|
|
|
|
|
|
|
enable searching for default libraries specified by C<$Config{perllibs}>. |
|
218
|
|
|
|
|
|
|
|
|
219
|
|
|
|
|
|
|
=item * |
|
220
|
|
|
|
|
|
|
|
|
221
|
|
|
|
|
|
|
The libraries specified may be a mixture of static libraries and |
|
222
|
|
|
|
|
|
|
import libraries (to link with DLLs). Since both kinds are used |
|
223
|
|
|
|
|
|
|
pretty transparently on the Win32 platform, we do not attempt to |
|
224
|
|
|
|
|
|
|
distinguish between them. |
|
225
|
|
|
|
|
|
|
|
|
226
|
|
|
|
|
|
|
=item * |
|
227
|
|
|
|
|
|
|
|
|
228
|
|
|
|
|
|
|
LDLOADLIBS and EXTRALIBS are always identical under Win32, and BSLOADLIBS |
|
229
|
|
|
|
|
|
|
and LD_RUN_PATH are always empty (this may change in future). |
|
230
|
|
|
|
|
|
|
|
|
231
|
|
|
|
|
|
|
=item * |
|
232
|
|
|
|
|
|
|
|
|
233
|
|
|
|
|
|
|
You must make sure that any paths and path components are properly |
|
234
|
|
|
|
|
|
|
surrounded with double-quotes if they contain spaces. For example, |
|
235
|
|
|
|
|
|
|
C<$potential_libs> could be (literally): |
|
236
|
|
|
|
|
|
|
|
|
237
|
|
|
|
|
|
|
"-Lc:\Program Files\vc\lib" msvcrt.lib "la test\foo bar.lib" |
|
238
|
|
|
|
|
|
|
|
|
239
|
|
|
|
|
|
|
Note how the first and last entries are protected by quotes in order |
|
240
|
|
|
|
|
|
|
to protect the spaces. |
|
241
|
|
|
|
|
|
|
|
|
242
|
|
|
|
|
|
|
=item * |
|
243
|
|
|
|
|
|
|
|
|
244
|
|
|
|
|
|
|
Since this module is most often used only indirectly from extension |
|
245
|
|
|
|
|
|
|
C<Makefile.PL> files, here is an example C<Makefile.PL> entry to add |
|
246
|
|
|
|
|
|
|
a library to the build process for an extension: |
|
247
|
|
|
|
|
|
|
|
|
248
|
|
|
|
|
|
|
LIBS => ['-lgl'] |
|
249
|
|
|
|
|
|
|
|
|
250
|
|
|
|
|
|
|
When using GCC, that entry specifies that MakeMaker should first look |
|
251
|
|
|
|
|
|
|
for C<libgl.a> (followed by C<gl.a>) in all the locations specified by |
|
252
|
|
|
|
|
|
|
C<$Config{libpth}>. |
|
253
|
|
|
|
|
|
|
|
|
254
|
|
|
|
|
|
|
When using a compiler other than GCC, the above entry will search for |
|
255
|
|
|
|
|
|
|
C<gl.lib> (followed by C<libgl.lib>). |
|
256
|
|
|
|
|
|
|
|
|
257
|
|
|
|
|
|
|
If the library happens to be in a location not in C<$Config{libpth}>, |
|
258
|
|
|
|
|
|
|
you need: |
|
259
|
|
|
|
|
|
|
|
|
260
|
|
|
|
|
|
|
LIBS => ['-Lc:\gllibs -lgl'] |
|
261
|
|
|
|
|
|
|
|
|
262
|
|
|
|
|
|
|
Here is a less often used example: |
|
263
|
|
|
|
|
|
|
|
|
264
|
|
|
|
|
|
|
LIBS => ['-lgl', ':nosearch -Ld:\mesalibs -lmesa -luser32'] |
|
265
|
|
|
|
|
|
|
|
|
266
|
|
|
|
|
|
|
This specifies a search for library C<gl> as before. If that search |
|
267
|
|
|
|
|
|
|
fails to find the library, it looks at the next item in the list. The |
|
268
|
|
|
|
|
|
|
C<:nosearch> flag will prevent searching for the libraries that follow, |
|
269
|
|
|
|
|
|
|
so it simply returns the value as C<-Ld:\mesalibs -lmesa -luser32>, |
|
270
|
|
|
|
|
|
|
since GCC can use that value as is with its linker. |
|
271
|
|
|
|
|
|
|
|
|
272
|
|
|
|
|
|
|
When using the Visual C compiler, the second item is returned as |
|
273
|
|
|
|
|
|
|
C<-libpath:d:\mesalibs mesa.lib user32.lib>. |
|
274
|
|
|
|
|
|
|
|
|
275
|
|
|
|
|
|
|
When using the Borland compiler, the second item is returned as |
|
276
|
|
|
|
|
|
|
C<-Ld:\mesalibs mesa.lib user32.lib>, and MakeMaker takes care of |
|
277
|
|
|
|
|
|
|
moving the C<-Ld:\mesalibs> to the correct place in the linker |
|
278
|
|
|
|
|
|
|
command line. |
|
279
|
|
|
|
|
|
|
|
|
280
|
|
|
|
|
|
|
=back |
|
281
|
|
|
|
|
|
|
|
|
282
|
|
|
|
|
|
|
|
|
283
|
|
|
|
|
|
|
=head1 SEE ALSO |
|
284
|
|
|
|
|
|
|
|
|
285
|
|
|
|
|
|
|
L<ExtUtils::MakeMaker> |
|
286
|
|
|
|
|
|
|
|
|
287
|
|
|
|
|
|
|
=cut |
|
288
|
|
|
|
|
|
|
|