Skip to content

Commit

Permalink
Build WiX installers for Windows
Browse files Browse the repository at this point in the history
  • Loading branch information
Kev committed Feb 22, 2014
1 parent 38ba282 commit b7937bb
Show file tree
Hide file tree
Showing 5 changed files with 142 additions and 15 deletions.
3 changes: 2 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,10 @@ Eve-Xin
Eve-Xin.app
.sconsign.dblite
*.o
*.obj
ui_*.h
moc_*.cc
COPYING
tmp
go-*.sh
gh-pages/
gh-pages/
78 changes: 78 additions & 0 deletions Packaging/WiX/Eve-Xin.wxs
Original file line number Diff line number Diff line change
@@ -0,0 +1,78 @@
<?xml version='1.0' encoding='utf-8'?>

<!-- For a sensible tutorial on WiX, see http://wix.tramontana.co.hu/tutorial -->

<Wix xmlns='http://schemas.microsoft.com/wix/2006/wi'>

<?include variables.wxs ?>

<Product Name='Eve-Xin' Id='*' UpgradeCode='eee2df75-17d7-4a4c-866f-f58f91644d7b' Language='1033' Codepage='1252' Version='$(var.Version)' Manufacturer='Swift.im'>
<Package Id='*' Keywords='Installer' Description="Eve-Xin Installer" Comments="Eve-Xin is available under the GPL version 3" Manufacturer="Swift.im" InstallerVersion='300' Languages='1033' Compressed='yes' SummaryCodepage='1252' InstallScope="perMachine"/>
<Media Id='1' Cabinet='EveXin.cab' EmbedCab='yes'/>

<MajorUpgrade DowngradeErrorMessage="A newer version is already installed. Remove this version if you wish to downgrade." />

<Directory Id='TARGETDIR' Name='SourceDir'>
<!-- Disabling CRT merge module, because it's not working
<Merge Id="CRT" DiskId="1" Language="0" SourceFile="$(var.VCCRTFile)"/>
-->

<Directory Id='ProgramFilesFolder' Name='PFiles'>
<Directory Id='INSTALLDIR' Name='Eve-Xin'>
</Directory>
</Directory>

<Directory Id="ProgramMenuFolder" Name="Programs">
<Directory Id="ProgramMenuDir" Name="Eve-Xin">
<Component Id="Shortcuts" Guid="258ce377-84a8-4ca5-89a7-a5bb5f3871cf">
<RemoveFolder Id='ProgramMenuDir' On='uninstall' />
<RegistryValue Root='HKCU' Key='Software\Eve-Xin\Eve-Xin' Type='string' Value='' KeyPath='yes' />
<Shortcut Id='EveXinShortcut' Directory='ProgramMenuDir' Name='Eve-Xin' Target="[INSTALLDIR]\Eve-Xin.exe" Icon='EveXin.exe'/>
</Component>
</Directory>
</Directory>

<Directory Id="DesktopFolder" Name="Desktop" />
</Directory>

<Feature Id='Core' Level='1' Title='Eve-Xin' Description='All necessary Eve-Xin files' Display='expand' ConfigurableDirectory='INSTALLDIR' AllowAdvertise='no' Absent='disallow'>
<ComponentGroupRef Id='Files' />
<!--<ComponentRef Id='Manual' />-->
</Feature>

<Feature Id='Shortcut' Level='1' Title='Shortcut' Description='Start Menu Shortcut' Display='expand' ConfigurableDirectory='INSTALLDIR' AllowAdvertise='no'>
<ComponentRef Id='Shortcuts' />
</Feature>

<!--<UIRef Id='WixUI_Advanced'/>-->
<!--<UIRef Id="WixUI_Minimal"/>-->
<UIRef Id="WixUI_Mondo"/>
<WixVariable Id='WixUILicenseRtf' Value='COPYING.rtf'/>

<Icon Id="EveXin.exe" SourceFile="Eve-Xin.exe" />
<Property Id="ARPPRODUCTICON" Value="Eve-Xin.exe"/> <!-- The icon in the "Programs" dialog -->

<!--
VC Redistributable
-->
<!-- Disabling CRT merge module, because it's not working
<Feature Id='CRT' Title='Visual C++ Runtime' AllowAdvertise='no' Display='hidden' Level='1'>
<MergeRef Id="CRT"/>
</Feature>
-->
<Binary Id="CRT.exe" SourceFile="$(var.VCCRTFile)"/>
<CustomAction Id="InstallCRT" Impersonate="yes" Return="ignore" Execute="immediate" BinaryKey="CRT.exe" ExeCommand="/qb"/>
<Property Id="CRT_INSTALLED" Secure="yes">
<RegistrySearch Id="VC2008SP1REDIST_X86Value" Root="HKLM" Key="SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{9A25302D-30C0-39D9-BD6F-21E6EC160475}" Name="Publisher" Type="raw" Win64="no" />
</Property>
<!-- The following snippet should work for VC 2010
<Upgrade Id='{1F4F1D2A-D9DA-32CF-9909-48485DA06DD5}'>
<UpgradeVersion OnlyDetect='yes' Property='CRT_INSTALLED' Minimum='10.0.40219' IncludeMinimum='yes'/>
</Upgrade>
-->
<InstallUISequence>
<Custom Action="InstallCRT" After="ProgressDlg">Not Installed And Not CRT_INSTALLED</Custom>
</InstallUISequence>

</Product>
</Wix>
14 changes: 14 additions & 0 deletions Packaging/WiX/include.xslt
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
<?xml version="1.0"?>

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:wix="http://schemas.microsoft.com/wix/2006/wi">

<xsl:template match='wix:Directory[@Id="Swift"]/@Id'>
<xsl:attribute name='Id'>INSTALLDIR</xsl:attribute>
</xsl:template>

<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
60 changes: 47 additions & 13 deletions SConscript
Original file line number Diff line number Diff line change
Expand Up @@ -8,10 +8,6 @@ if env["SCONS_STAGE"] == "build":
myenv = env.Clone()


#FIXME: work out dynamics later
myenv["EVEXIN_VERSION"] = "0.0.1"


# Disable warnings that affect Qt
myenv["CXXFLAGS"] = filter(lambda x : x != "-Wfloat-equal", myenv["CXXFLAGS"])
if "clang" in env["CC"] :
Expand Down Expand Up @@ -107,13 +103,14 @@ if env["SCONS_STAGE"] == "build":

# myenv.Uic4("QtUI/QtMainWindow.ui")

# # Determine the version
# myenv["SWIFT_VERSION"] = Version.getBuildVersion(env.Dir("#").abspath, "swift")
# if env["PLATFORM"] == "win32" :
# swift_windows_version = Version.convertToWindowsVersion(myenv["SWIFT_VERSION"])
# myenv["SWIFT_VERSION_MAJOR"] = swift_windows_version[0]
# myenv["SWIFT_VERSION_MINOR"] = swift_windows_version[1]
# myenv["SWIFT_VERSION_PATCH"] = swift_windows_version[2]
# Determine the version
evexindir = env.Dir("#/..").abspath
myenv["EVEXIN_VERSION"] = Version.getBuildVersion(evexindir, "evexin")
if env["PLATFORM"] == "win32" :
evexin_windows_version = Version.convertToWindowsVersion(myenv["EVEXIN_VERSION"])
myenv["EVEXIN_VERSION_MAJOR"] = evexin_windows_version[0]
myenv["EVEXIN_VERSION_MINOR"] = evexin_windows_version[1]
myenv["EVEXIN_VERSION_PATCH"] = evexin_windows_version[2]


# if env["PLATFORM"] == "win32" :
Expand Down Expand Up @@ -215,7 +212,7 @@ if env["SCONS_STAGE"] == "build":
qtlibs.append("phonon")
qtlibs = [lib + '4' for lib in qtlibs]
else :
qtlibs += ['QtQuick', 'QtQml', 'QtV8', 'QtMultimedia', 'QtSql', 'QtSensors', 'QtWidgets', 'QtWebKitWidgets', 'QtMultimediaWidgets', 'QtOpenGL', 'QtPrintSupport']
qtlibs += ['QtQuick', 'QtQml', 'QtPositioning', 'QtMultimedia', 'QtSql', 'QtSensors', 'QtWidgets', 'QtWebKitWidgets', 'QtMultimediaWidgets', 'QtOpenGL', 'QtPrintSupport']
qtlibs = [lib.replace('Qt', 'Qt5') for lib in qtlibs]
qtlibs += ['icuin51', 'icuuc51', 'icudt51', 'libGLESv2', 'libEGL']
qtplugins["platforms"] = ['windows']
Expand All @@ -225,7 +222,44 @@ if env["SCONS_STAGE"] == "build":
qtplugins = qtplugins,
qtlibs = qtlibs,
qtversion = qt_version)

if env["DIST"] :
if env["SCONS_STAGE"] == "build" and env.get("wix_bindir", None):
def convertToRTF(env, target, source) :
infile = open(source[0].abspath, 'r')
outfile = open(target[0].abspath, 'w')
outfile.write('{\\rtf1\\ansi{\\fonttbl\\f0\\fswiss Helvetica;}\\fs16\\f0\\pard\n')
for line in infile:
for char in line.decode("utf-8") :
if ord(char) > 127 :
# FIXME: This is incorrect, because it only works for latin1.
# The correct way is \u<decimal utf16 point>? , but this is more
# work
outfile.write("\\'%X" % ord(char))
else :
outfile.write(char)
outfile.write('\\par ')
outfile.write('}')
outfile.close()
infile.close()
copying = env.Command(["Eve-Xin/COPYING.rtf"], ["COPYING"], convertToRTF)

wixvariables = {
'VCCRTFile': env["vcredist"],
'Version': str(myenv["EVEXIN_VERSION_MAJOR"]) + "." + str(myenv["EVEXIN_VERSION_MINOR"]) + "." + str(myenv["EVEXIN_VERSION_PATCH"])
}
wixincludecontent = "<Include>"
for key in wixvariables:
wixincludecontent += "<?define %s = \"%s\" ?>" % (key, wixvariables[key])
wixincludecontent += "</Include>"
myenv["WIX_SOURCE_OBJECT_DIR"] = "..\\Eve-Xin"
myenv.WriteVal("..\\Eve-Xin\\Packaging\\Wix\\variables.wxs", env.Value(wixincludecontent))
myenv.WiX_Heat('..\\Eve-Xin\\Packaging\\WiX\\gen_files.wxs', windowsBundleFiles + copying)
myenv.WiX_Candle('..\\Eve-Xin\\Packaging\\WiX\\Eve-Xin.wixobj', '..\\Eve-Xin\\Packaging\\WiX\\Eve-Xin.wxs')
myenv.WiX_Candle('..\\Eve-Xin\\Packaging\\WiX\\gen_files.wixobj', '..\\Eve-Xin\\Packaging\\WiX\\gen_files.wxs')
myenv.WiX_Light('#/Packages/Eve-Xin/Eve-Xin-' + myenv["EVEXIN_VERSION"] + '.msi', ['..\\Eve-Xin\\Packaging\\WiX\\gen_files.wixobj','..\\Eve-Xin\\Packaging\\WiX\\Eve-Xin.wixobj'])

if myenv["debug"] :
myenv.InstallAs('#/Packages/Eve-Xin/Eve-Xin-' + myenv["EVEXIN_VERSION"] + '.pdb', "Eve-Xin.pdb")



Expand Down
2 changes: 1 addition & 1 deletion swift
Submodule swift updated from 04189f to aec326

0 comments on commit b7937bb

Please sign in to comment.