OLD | NEW |
| (Empty) |
1 """SCons.Tool.wix | |
2 | |
3 Tool-specific initialization for wix, the Windows Installer XML Tool. | |
4 | |
5 There normally shouldn't be any need to import this module directly. | |
6 It will usually be imported through the generic SCons.Tool.Tool() | |
7 selection method. | |
8 """ | |
9 | |
10 # | |
11 # Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 The SCons F
oundation | |
12 # | |
13 # Permission is hereby granted, free of charge, to any person obtaining | |
14 # a copy of this software and associated documentation files (the | |
15 # "Software"), to deal in the Software without restriction, including | |
16 # without limitation the rights to use, copy, modify, merge, publish, | |
17 # distribute, sublicense, and/or sell copies of the Software, and to | |
18 # permit persons to whom the Software is furnished to do so, subject to | |
19 # the following conditions: | |
20 # | |
21 # The above copyright notice and this permission notice shall be included | |
22 # in all copies or substantial portions of the Software. | |
23 # | |
24 # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY | |
25 # KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE | |
26 # WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND | |
27 # NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE | |
28 # LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION | |
29 # OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION | |
30 # WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | |
31 # | |
32 | |
33 __revision__ = "src/engine/SCons/Tool/wix.py 3897 2009/01/13 06:45:54 scons" | |
34 | |
35 import SCons.Builder | |
36 import SCons.Action | |
37 import os | |
38 import string | |
39 | |
40 def generate(env): | |
41 """Add Builders and construction variables for WiX to an Environment.""" | |
42 if not exists(env): | |
43 return | |
44 | |
45 env['WIXCANDLEFLAGS'] = ['-nologo'] | |
46 env['WIXCANDLEINCLUDE'] = [] | |
47 env['WIXCANDLECOM'] = '$WIXCANDLE $WIXCANDLEFLAGS -I $WIXCANDLEINCLUDE -o ${
TARGET} ${SOURCE}' | |
48 | |
49 env['WIXLIGHTFLAGS'].append( '-nologo' ) | |
50 env['WIXLIGHTCOM'] = "$WIXLIGHT $WIXLIGHTFLAGS -out ${TARGET} ${SOURCES}" | |
51 | |
52 #BEGIN_OMAHA_ADDITION | |
53 # Necessary to build multiple MSIs from a single .wxs without explicitly | |
54 # building the .wixobj. | |
55 # Follows the convention of obj file prefixes in other tools, such as | |
56 # OBJPREFIX in msvc.py. | |
57 env['WIXOBJPREFIX'] = '' | |
58 #END_OMAHA_ADDITION | |
59 | |
60 object_builder = SCons.Builder.Builder( | |
61 action = '$WIXCANDLECOM', | |
62 #BEGIN_OMAHA_ADDITION | |
63 prefix = '$WIXOBJPREFIX', | |
64 #END_OMAHA_ADDITION | |
65 #BEGIN_OMAHA_CHANGE | |
66 # The correct/default suffix is .wixobj, not .wxiobj. | |
67 # suffix = '.wxiobj', | |
68 suffix = '.wixobj', | |
69 #END_OMAHA_CHANGE | |
70 src_suffix = '.wxs') | |
71 | |
72 linker_builder = SCons.Builder.Builder( | |
73 action = '$WIXLIGHTCOM', | |
74 #BEGIN_OMAHA_CHANGE | |
75 # The correct/default suffix is .wixobj, not .wxiobj. | |
76 # src_suffix = '.wxiobj', | |
77 src_suffix = '.wixobj', | |
78 #END_OMAHA_CHANGE | |
79 src_builder = object_builder) | |
80 | |
81 env['BUILDERS']['WiX'] = linker_builder | |
82 | |
83 def exists(env): | |
84 env['WIXCANDLE'] = 'candle.exe' | |
85 env['WIXLIGHT'] = 'light.exe' | |
86 | |
87 #BEGIN_OMAHA_CHANGE | |
88 # # try to find the candle.exe and light.exe tools and | |
89 # try to find the candle.exe and light.exe tools and | |
90 #END_OMAHA_CHANGE | |
91 # add the install directory to light libpath. | |
92 #BEGIN_OMAHA_CHANGE | |
93 | |
94 # For backwards compatibility, search PATH environment variable for tools. | |
95 # #for path in os.environ['PATH'].split(os.pathsep): | |
96 # for path in string.split(os.environ['PATH'], os.pathsep): | |
97 for path in os.environ['PATH'].split(os.pathsep): | |
98 #END_OMAHA_CHANGE | |
99 if not path: | |
100 continue | |
101 | |
102 # workaround for some weird python win32 bug. | |
103 if path[0] == '"' and path[-1:]=='"': | |
104 path = path[1:-1] | |
105 | |
106 # normalize the path | |
107 path = os.path.normpath(path) | |
108 | |
109 # search for the tools in the PATH environment variable | |
110 try: | |
111 #BEGIN_OMAHA_CHANGE | |
112 # if env['WIXCANDLE'] in os.listdir(path) and\ | |
113 # env['WIXLIGHT'] in os.listdir(path): | |
114 files = os.listdir(path) | |
115 if (env['WIXCANDLE'] in files and | |
116 env['WIXLIGHT'] in files): | |
117 # env.PrependENVPath('PATH', path) | |
118 env.PrependENVPath('PATH', path) | |
119 # env['WIXLIGHTFLAGS'] = [ os.path.join( path, 'wixui.wixlib' )
, | |
120 # '-loc', | |
121 # os.path.join( path, 'WixUI_en-us.wxl
' ) ] | |
122 # return 1 | |
123 break | |
124 #END_OMAHA_CHANGE | |
125 except OSError: | |
126 pass # ignore this, could be a stale PATH entry. | |
127 | |
128 #BEGIN_OMAHA_ADDITION | |
129 # Search for the tools in the SCons paths. | |
130 for path in env['ENV'].get('PATH', '').split(os.pathsep): | |
131 try: | |
132 files = os.listdir(path) | |
133 if (env['WIXCANDLE'] in files and | |
134 env['WIXLIGHT'] in files): | |
135 # The following is for compatibility with versions prior to 3. | |
136 # Version 3 no longer has these files. | |
137 extra_files = [os.path.join(i) for i in ['wixui.wixlib', | |
138 'WixUI_en-us.wxl']] | |
139 if (os.path.exists(extra_files[0]) and | |
140 os.path.exists(extra_files[1])): | |
141 env.Append(WIXLIGHTFLAGS=[ | |
142 extra_files[0], | |
143 '-loc', extra_files[1]]) | |
144 else: | |
145 # Create empty variable so the append in generate() works. | |
146 env.Append(WIXLIGHTFLAGS=[]) | |
147 | |
148 # WiX was found. | |
149 return 1 | |
150 except OSError: | |
151 pass # ignore this, could be a stale PATH entry. | |
152 #END_OMAHA_ADDITION | |
153 | |
154 return None | |
OLD | NEW |