1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24 __revision__ = "src/engine/SCons/Scanner/Prog.py 5110 2010/07/25 16:14:38 bdeegan"
25
26 import string
27
28 import SCons.Node
29 import SCons.Node.FS
30 import SCons.Scanner
31 import SCons.Util
32
33
34 print_find_libs = None
35
37 """Return a prototype Scanner instance for scanning executable
38 files for static-lib dependencies"""
39 kw['path_function'] = SCons.Scanner.FindPathDirs('LIBPATH')
40 ps = apply(SCons.Scanner.Base, [scan, "ProgramScanner"], kw)
41 return ps
42
43 -def scan(node, env, libpath = ()):
44 """
45 This scanner scans program files for static-library
46 dependencies. It will search the LIBPATH environment variable
47 for libraries specified in the LIBS variable, returning any
48 files it finds as dependencies.
49 """
50 try:
51 libs = env['LIBS']
52 except KeyError:
53
54 return []
55 if SCons.Util.is_String(libs):
56 libs = string.split(libs)
57 else:
58 libs = SCons.Util.flatten(libs)
59
60 try:
61 prefix = env['LIBPREFIXES']
62 if not SCons.Util.is_List(prefix):
63 prefix = [ prefix ]
64 except KeyError:
65 prefix = [ '' ]
66
67 try:
68 suffix = env['LIBSUFFIXES']
69 if not SCons.Util.is_List(suffix):
70 suffix = [ suffix ]
71 except KeyError:
72 suffix = [ '' ]
73
74 pairs = []
75 for suf in map(env.subst, suffix):
76 for pref in map(env.subst, prefix):
77 pairs.append((pref, suf))
78
79 result = []
80
81 if callable(libpath):
82 libpath = libpath()
83
84 find_file = SCons.Node.FS.find_file
85 adjustixes = SCons.Util.adjustixes
86 for lib in libs:
87 if SCons.Util.is_String(lib):
88 lib = env.subst(lib)
89 for pref, suf in pairs:
90 l = adjustixes(lib, pref, suf)
91 l = find_file(l, libpath, verbose=print_find_libs)
92 if l:
93 result.append(l)
94 else:
95 result.append(lib)
96
97 return result
98
99
100
101
102
103
104