3 # vim: tabstop=4 noexpandtab
6 Windows Installer XML Tool (WiX)
8 .wxs --- candle ---> .wxobj --- light ---> .msi
10 bld(features='wix', some.wxs, gen='some.msi', candleflags=[..], lightflags=[..])
12 bld(features='wix', source=['bundle.wxs','WixBalExtension'], gen='setup.exe', candleflags=[..])
16 from waflib
import TaskGen
17 from waflib
import Task
18 from waflib
.Utils
import winreg
20 class candle(Task
.Task
):
21 run_str
= '${CANDLE} -nologo ${CANDLEFLAGS} -out ${TGT} ${SRC[0].abspath()}',
23 class light(Task
.Task
):
24 run_str
= "${LIGHT} -nologo -b ${SRC[0].parent.abspath()} ${LIGHTFLAGS} -out ${TGT} ${SRC[0].abspath()}"
26 @TaskGen.feature('wix')
27 @TaskGen.before_method('process_source')
29 #X.wxs -> ${SRC} for CANDLE
30 #X.wxobj -> ${SRC} for LIGHT
31 #X.dll -> -ext X in ${LIGHTFLAGS}
32 #X.wxl -> wixui.wixlib -loc X.wxl in ${LIGHTFLAGS}
39 if x
.endswith('.wxobj'):
41 elif x
.endswith('.wxs'):
42 wxobj
.append(self
.path
.find_or_declare(x
[:-4]+'.wxobj'))
44 elif x
.endswith('.dll'):
48 elif x
.endswith('.wxl'):
52 self
.source
= self
.to_nodes(rest
) #.wxs
54 cndl
= self
.create_task('candle', self
.to_nodes(wxs
), self
.to_nodes(wxobj
))
55 lght
= self
.create_task('light', self
.to_nodes(wxobj
), self
.path
.find_or_declare(self
.gen
))
57 cndl
.env
.CANDLEFLAGS
= copy
.copy(getattr(self
,'candleflags',[]))
58 lght
.env
.LIGHTFLAGS
= copy
.copy(getattr(self
,'lightflags',[]))
61 lght
.env
.append_value('LIGHTFLAGS','wixui.wixlib')
62 lght
.env
.append_value('LIGHTFLAGS','-loc')
63 lght
.env
.append_value('LIGHTFLAGS',x
)
65 cndl
.env
.append_value('CANDLEFLAGS','-ext')
66 cndl
.env
.append_value('CANDLEFLAGS',x
)
67 lght
.env
.append_value('LIGHTFLAGS','-ext')
68 lght
.env
.append_value('LIGHTFLAGS',x
)
72 basekey
= r
"SOFTWARE\Microsoft\.NETFramework\AssemblyFolders"
73 query
= winreg
.OpenKey(winreg
.HKEY_LOCAL_MACHINE
, basekey
)
74 cnt
=winreg
.QueryInfoKey(query
)[0]
75 thiskey
= r
'C:\Program Files (x86)\WiX Toolset v3.10\SDK'
76 for i
in range(cnt
-1,-1,-1):
77 thiskey
= winreg
.EnumKey(query
,i
)
80 winreg
.CloseKey(query
)
81 return os
.path
.normpath(winreg
.QueryValue(winreg
.HKEY_LOCAL_MACHINE
, basekey
+r
'\\'+thiskey
)+'..\\bin')
84 path_list
=[wix_bin_path()]
85 ctx
.find_program('candle', var
='CANDLE', mandatory
=True, path_list
= path_list
)
86 ctx
.find_program('light', var
='LIGHT', mandatory
=True, path_list
= path_list
)