<?xml version='1.0' encoding='windows-1252'?>

<!--
  Version information must be supplied as definitions to the preprocessor.
  The two items needed are:
    Version     - in the format x.x.x.x
    VersionName - like "Beta 42"
-->

<!-- General properties -->
<?define Manufacturer='FoundationDB' ?>
<?define Title='FoundationDB' ?>
<?define Description="FoundationDB" ?>

<!-- File names -->
<?define ClusterFileName='fdb.cluster' ?>
<?define ConfFileName='foundationdb.conf' ?>
<?define LogFilePath='logs' ?>
<?define DataFilePath='data' ?>

<!-- Version -->
<?define Version='@VERSION@' ?>
<?define VersionName='@VERSION_NAME@' ?>

<!-- Paths -->
<?define fdbserver='@fdbserver@' ?>
<?define fdbcli='@fdbcli@' ?>
<?define fdbbackup='@fdbbackup@' ?>
<?define fdbmonitor='@fdbmonitor@' ?>
<?define fdbc='@fdbc@' ?>
<?define fdbclib='@fdbc_lib@' ?>
<?define SolutionRoot='@SOURCE_ROOT@' ?>
<?define BuildRoot='@BUILD_ROOT@' ?>
<?define ProjectRoot='@CURRENT_SOURCE_DIR@' ?>


<!-- Python versions that we "know" how to install -->
<?define PyPath='$(var.BuildRoot)bindings\python\fdb\'?>
<?define PyVersions='2.6;2.7;3.0;3.1;3.2;3.3;3.4;CUSTOM' ?>
<?define PyGUID2.6='{0A609E07-E0C9-4843-9DCE-DB3702B89504}' ?>
<?define PyGUID2.7='{1E993E0B-3DFD-4023-AD2A-813F32E358A8}' ?>
<!-- Note that the following 4 GUIDs are in fact not the same. They differ in their final digits. -->
<?define PyGUID3.0='{8AFAAF11-871E-43F4-BDF8-279E0E2AFC80}' ?>
<?define PyGUID3.1='{8AFAAF11-871E-43F4-BDF8-279E0E2AFC81}' ?>
<?define PyGUID3.2='{8AFAAF11-871E-43F4-BDF8-279E0E2AFC82}' ?>
<?define PyGUID3.3='{8AFAAF11-871E-43F4-BDF8-279E0E2AFC83}' ?>
<?define PyGUID3.4='{AC696FA5-05B4-4E00-BA6D-8F7F79DE4671}' ?>

<Wix xmlns='http://schemas.microsoft.com/wix/2006/wi'>
  <Product Name='$(var.Title)'
           Id='{A4228020-2D9B-43FA-B3AE-4EE6297105F5}'
           UpgradeCode='{A95EA002-686E-4164-8356-C715B7F8B1C8}'
           Version='$(var.Version)'
           Manufacturer='$(var.Manufacturer)'
           Language='1033'
           Codepage='1252' >
    <Package Id='*'
             Description='$(var.Description)'
             Manufacturer='$(var.Manufacturer)'
             InstallerVersion='200'
             Languages='1033'
             Compressed='yes'
             SummaryCodepage='1252'
             Platform='x64' />

    <Condition Message='This application is only supported on 64-bit Windows XP or higher.'>
        <![CDATA[Installed OR (VersionNT64 >= 500)]]>
    </Condition>
    <Media Id='1' Cabinet='internal.cab' EmbedCab='yes'/>

    <MajorUpgrade DowngradeErrorMessage='A later version of FoundationDB is already installed. Setup will now exit.' />

    <!-- This icon will be used in the add/remove programs menu, not on the MSI installer itself -->
    <Icon Id="fdb.ico" SourceFile="$(var.SolutionRoot)packaging\foundationdb.ico"/>
    <Property Id="ARPPRODUCTICON" Value="fdb.ico" />

    <!-- SOMEDAY: The path [CommonAppDataFolder]foundationdb\ should be the same as [CONFIGFOLDER] but
          that path did not seem to be evaluated in time for this property. If the storage folder is ever
          something that the user can set we're hosed - but for now we can construct the path from primitives.  -->
    <Property Id='CONFIGFILEEXISTS'>
      <DirectorySearch Id='CheckConfigFileDir' Path='[CommonAppDataFolder]foundationdb\'>
        <FileSearch Id='CheckConfigFile' Name='$(var.ConfFileName)' />
      </DirectorySearch>
    </Property>
    <Property Id='CLUSTERFILEEXISTS'>
      <DirectorySearch Id='CheckClusterFileDir' Path='[CommonAppDataFolder]foundationdb\'>
        <FileSearch Id='CheckClusterFile' Name='$(var.ClusterFileName)' />
      </DirectorySearch>
    </Property>

    <!-- Debug tests for file presence -->
    <!--<Condition Message='Cluster file does not exist. d[CLUSTERFILEEXISTS]b is the name'>CLUSTERFILEEXISTS</Condition>
    <Condition Message='Cluster file does exist. d[CLUSTERFILEEXISTS]b is the name'>NOT CLUSTERFILEEXISTS</Condition>
    <Condition Message='Config file does not exist. d[CONFIGFILEEXISTS]b is the name'>CONFIGFILEEXISTS</Condition>
    <Condition Message='Config file does exist. d[CONFIGFILEEXISTS]b is the name'>NOT CONFIGFILEEXISTS</Condition>-->

    <?foreach PyVer in $(var.PyVersions)?>
      <?if $(var.PyVer) != CUSTOM?>
        <Property Id='PYTARGETDIR$(var.PyVer)'>
          <RegistrySearch Id='PythonMachine$(var.PyVer)' Root='HKLM' Key='SOFTWARE\Python\PythonCore\$(var.PyVer)\InstallPath'
                          Type='directory' Win64='yes' />
        </Property>
      <?endif?>
    <?endforeach?>

    <!-- Debug tests for python presence -->
    <!--<Condition Message='Py2.7 does not exist. '[PYTARGETDIR2.7]' is the name'>PYTARGETDIR2.7</Condition>
    <Condition Message='Py2.7 does exist. '[PYTARGETDIR2.7]' is the name'>NOT PYTARGETDIR2.7</Condition>-->

    <Directory Id='TARGETDIR' Name='SourceDir'>
      <Component Id='InvisibleDummyComponent' Guid='{4835E5C0-70B6-4341-9A4F-82859DF92A2F}'/>
      <Directory Id='ProgramFiles64Folder' Name='PFiles'>
        <Directory Id='INSTALLDIR' Name='foundationdb'>
          <Component Id='InstallPathEnvVar' Guid='{D6DDFEEC-154E-4684-BCBE-D079BB121B1B}' Win64='yes'>
            <CreateFolder />
                  <Environment Action='set' Name='FOUNDATIONDB_INSTALL_PATH' Value='[INSTALLDIR]' Part='all' Id='InstallPathSetEnvVar' System='yes' Permanent='no' />
          </Component>
          <Directory Id='IncludeDir' Name='include'>
            <Directory Id='IncludeFDBDir' Name='foundationdb'>
              <Component Id='FDBCLibraryHeader' Guid='{32D846FA-3BA8-4CF6-8777-51DFA1011198}' Win64='yes'>
                <File Id='FDBCH' Name='fdb_c.h' DiskId='1' Source='$(var.SolutionRoot)bindings\c\foundationdb\fdb_c.h' KeyPath='yes'/>
                <File Id='FDBCOPTIONSH' Name='fdb_c_options.g.h' DiskId='1' Source='$(var.BuildRoot)bindings\c\foundationdb\fdb_c_options.g.h'/>
                <File Id='FDBOPTIONSFILE' Name='fdb.options' DiskId='1' Source='$(var.SolutionRoot)fdbclient\vexillographer\fdb.options'/>
              </Component>
            </Directory>
          </Directory>
          <Directory Id='LibDir' Name='lib'>
            <Directory Id='LibFDBDir' Name='foundationdb'>
              <Component Id='FDBCLibraryLib' Guid='{45503C5E-0A84-461D-9803-ABBDB004F1A4}' Win64='yes'>
                <File Id='FDBLIB' Name='fdb_c.lib' DiskId='1' Source='$(var.fdbclib)' KeyPath='yes'/>
              </Component>
            </Directory>
          </Directory>
          <Directory Id='BinDir' Name='bin'>
            <Component Id='PathAddition' Guid='{3BC6E7A3-D83F-40CF-9209-3BA249DD2C15}' Win64='yes'>
              <CreateFolder />
              <Environment Action='set' Name='PATH' Value='[INSTALLDIR]bin' Part='last' Id='PathSetAddition' System='yes' Permanent='no'/>
            </Component>

            <Component Id='FDBServerExecutable' Guid='{C92DFCC9-BB95-4B13-8284-6DDDB3290D70}' Win64='yes'>
              <File Id='FDBServerEXE' Name='fdbserver.exe' DiskId='1' Source='$(var.fdbserver)' KeyPath='yes'/>
            </Component>

            <Component Id='FDBBackupAgentExecutable' Guid='{C92DFCC9-BB95-4B13-8284-6DDDB3290D71}' Win64='yes'>
              <File Id='FDBBackupAgentEXE' Name='backup_agent.exe' DiskId='1' Source='$(var.fdbbackup)' KeyPath='yes'/>
            </Component>

            <Component Id='FDBCLIExecutable' Guid='{F5E0A796-EC21-406F-88E1-3195165E3077}' Win64='yes'>
              <File Id='FDBCLIEXE' Name='fdbcli.exe' DiskId='1' Source='$(var.fdbcli)' KeyPath='yes'/>
            </Component>

            <Component Id='FDBCRegistryValue' Guid='{6ED940F3-75C8-4385-97D9-D7D0F211B17D}' Win64='yes'>
              <RegistryKey Root='HKLM' Key='SOFTWARE\$(var.Manufacturer)\KeyValue\Client' Action='createAndRemoveOnUninstall'>
                <RegistryValue Name='Version' Type='string' Value='$(var.Version)' KeyPath='yes' />
              </RegistryKey>
            </Component>

            <Component Id='FDBSRegistryValue' Guid='{361A9B4A-A06F-4BFB-AFEA-B5F733C8BFDF}' Win64='yes'>
              <RegistryKey Root='HKLM' Key='SOFTWARE\$(var.Manufacturer)\KeyValue\Server' Action='createAndRemoveOnUninstall'>
                <RegistryValue Name='Version' Type='string' Value='$(var.Version)' KeyPath='yes' />
              </RegistryKey>
            </Component>

            <Component Id='FDBBackupClientExecutable' Guid='{F5E0A796-EC21-406F-88E1-3195165E3078}' Win64='yes'>
              <File Id='FDBBACKUPEXE' Name='fdbbackup.exe' DiskId='1' Source='$(var.fdbbackup)' KeyPath='yes'/>
              <File Id='FDBRESTOREEXE' Name='fdbrestore.exe' DiskId='1' Source='$(var.fdbbackup)' KeyPath='no'/>
              <File Id='FDBDREXE' Name='fdbdr.exe' DiskId='1' Source='$(var.fdbbackup)' KeyPath='no'/>
            </Component>

            <Component Id='FDBCLibraryPFiles' Guid='{6184C0C5-D29F-48DD-BE62-4776EB79C34A}' Win64='yes'>
              <File Id='FDBCDLL' Name='fdb_c.dll' DiskId='1' Source='$(var.fdbc)' KeyPath='yes'/>
            </Component>

            <Component Id='fdbmonitorExecutable' Guid='{D62DAD0B-A0AF-44EA-B2E0-28AD7ADBC29B}' Win64='yes'>
              <ServiceControl Id='fdbmonitorStop' Stop='both' Name='fdbmonitor' Remove='both' Wait='yes'/>
              <File Id='fdbmonitorEXE' Name='fdbmonitor.exe' DiskId='1' Source='$(var.fdbmonitor)' KeyPath='yes'/>
              <ServiceInstall Id='fdbmonitorInstall' Name='fdbmonitor' DisplayName='FoundationDB Server Monitor (fdbmonitor)'
                              Description='Starts and monitors instances of the FoundationDB server' Start='auto'
                              Vital='yes' ErrorControl='normal' Interactive='no' Type='ownProcess'/>
              <ServiceControl Id='fdbmonitorStart' Start='install' Name='fdbmonitor' Wait='yes'/>
            </Component>

          </Directory>
        </Directory>
      </Directory>
      <Directory Id='CommonAppDataFolder' Name='AppData'>
        <Directory Id='CONFIGFOLDER' Name='foundationdb'>
          <Component Id='CreateClusterFileDir' Guid='{165AA4E7-6D5B-4974-A2C8-6AF6E4C9295C}' Permanent='yes'>
            <CreateFolder/>
          </Component>

          <!-- Copy default config file to seed conf file. Executed only if there is no config file present -->
          <Component Id='fdbmonitorConfigFile' Guid='{40D6746D-1433-4BD9-A4F6-E15335D7BBB4}' Permanent='yes'>
            <CreateFolder />
            <File Id='fdbmonitorConfigFileCreate' Name='$(var.ConfFileName)' DiskId='1' Source='$(var.ProjectRoot)\skeleton.conf' KeyPath='yes'/>
          </Component>

          <!-- Edit config file to point to binary (and add data, etc to default file). Executed always on install -->
          <Component Id='fdbmonitorConfigReplaceBinary' Guid='{97A2CD69-3D8A-442F-83CD-D5BAF0C50D37}' Permanent='yes'>
            <CreateFolder />
            <IniFile Id='WriteIntoIniFileCluster' Action='createLine' Key='cluster_file' Directory='CONFIGFOLDER'
                     Name='$(var.ConfFileName)' Section='general' Value='[CONFIGFOLDER]$(var.ClusterFileName)' />
            <!-- Remove "binary" line from old installations -->
            <IniFile Id='ClearFromIniFileBinary' Action='removeLine' Key='binary' Directory='CONFIGFOLDER'
                     Name='$(var.ConfFileName)' Section='fdbserver'/>
            <!-- Update "command" line even if changed from original -->
            <IniFile Id='WriteIntoIniFileBinary' Action='addLine' Key='command' Directory='CONFIGFOLDER'
                     Name='$(var.ConfFileName)' Section='fdbserver' Value='[INSTALLDIR]bin\fdbserver.exe' />
            <IniFile Id='WriteIntoIniFileData' Action='createLine' Key='datadir' Directory='CONFIGFOLDER'
                     Name='$(var.ConfFileName)' Section='fdbserver' Value='[CONFIGFOLDER]$(var.DataFilePath)\$ID' />
            <IniFile Id='WriteIntoIniFileLogs' Action='createLine' Key='logdir' Directory='CONFIGFOLDER'
                     Name='$(var.ConfFileName)' Section='fdbserver' Value='[CONFIGFOLDER]$(var.LogFilePath)' />
            <!-- parentpid is in the skeleton, but we add it here for old installations -->
            <IniFile Id='WriteIntoIniFileParentPid' Action='createLine' Key='parentpid' Directory='CONFIGFOLDER'
                     Name='$(var.ConfFileName)' Section='fdbserver' Value='$PID' />
            <!-- Update backup-agent "command" line even if changed from original -->
            <IniFile Id='WriteIntoIniFileBackupAgent' Action='addLine' Key='command' Directory='CONFIGFOLDER'
                     Name='$(var.ConfFileName)' Section='backup-agent' Value='[INSTALLDIR]bin\backup_agent.exe' />
            <IniFile Id='WriteIntoBackupIniFileLogs' Action='createLine' Key='logdir' Directory='CONFIGFOLDER'
                     Name='$(var.ConfFileName)' Section='backup-agent' Value='[CONFIGFOLDER]$(var.LogFilePath)' />
          </Component>

          <Directory Id='DATADIR' Name='$(var.DataFilePath)'>
            <Component Id='CreateDataDir' Guid='{242DD218-BC97-4217-98A9-A9E9A2B780D0}' Permanent='yes'>
              <CreateFolder />
            </Component>
          </Directory>

          <Directory Id='LOGDIR' Name='$(var.LogFilePath)'>
            <Component Id='CreateLogDir' Guid='{C2743E29-1B7B-46E9-9B02-DD80842D7B27}' Permanent='yes'>
              <CreateFolder />
            </Component>
          </Directory>

        </Directory>
      </Directory>

      <Directory Id="WINDOWSVOLUME" Name="CCOLON">
      <?foreach PyVer in $(var.PyVersions)?>
        <?if $(var.PyVer) = CUSTOM?>
          <?define PyTopDir='Python' ?>
        <?else?>
          <?define PyTopDir='Python$(var.PyVer)' ?>
        <?endif?>

        <Directory Id='PYTARGETDIR$(var.PyVer)' Name='$(var.PyTopDir)'>
          <Directory Id='PyTarget$(var.PyVer)Lib' Name='Lib'>
            <Directory Id='PyTarget$(var.PyVer)Site' Name='site-packages'>
              <Directory Id='PyTarget$(var.PyVer)PackageDir' Name='fdb'>
                <Directory Id='PyTarget$(var.PyVer)CacheDir' Name='__pycache__'></Directory>

                <?if $(var.PyVer) = 2.6?>
                  <?define PyGUID='$(var.PyGUID2.6)' ?>
                <?endif?>
                <?if $(var.PyVer) = 2.7?>
                  <?define PyGUID='$(var.PyGUID2.7)' ?>
                <?endif?>
                <?if $(var.PyVer) = 3.0?>
                <?define PyGUID='$(var.PyGUID3.0)' ?>
                <?endif?>
                <?if $(var.PyVer) = 3.1?>
                <?define PyGUID='$(var.PyGUID3.1)' ?>
                <?endif?>
                <?if $(var.PyVer) = 3.2?>
                <?define PyGUID='$(var.PyGUID3.2)' ?>
                <?endif?>
                <?if $(var.PyVer) = 3.3?>
                <?define PyGUID='$(var.PyGUID3.3)' ?>
                <?endif?>
                <?if $(var.PyVer) = 3.4?>
                <?define PyGUID='$(var.PyGUID3.4)' ?>
                <?endif?>
                <?if $(var.PyVer) = CUSTOM?>
                  <!-- Since there is no GUID for the Custom install-->
                  <?define PyGUID='' ?>
                <?endif?>

                <Component Id='PyTarget$(var.PyVer)Install' Guid='$(var.PyGUID)'>
                  <CreateFolder />
                  <File Id='FDBPY$(var.PyVer)IMPL' Name='impl.py' DiskId='1' Source='$(var.PyPath)impl.py' KeyPath='yes'/>
                  <File Id='FDBPY$(var.PyVer)INIT' Name='__init__.py' DiskId='1' Source='$(var.PyPath)__init__.py' KeyPath='no'/>
                  <File Id='FDBPY$(var.PyVer)OPTS' Name='fdboptions.py' DiskId='1' Source='$(var.PyPath)fdboptions.py' KeyPath='no'/>
                  <File Id='FDBPY$(var.PyVer)LOCA' Name='locality.py' DiskId='1' Source='$(var.PyPath)locality.py' KeyPath='no'/>
                  <File Id='FDBPY$(var.PyVer)TUPLE' Name='tuple.py' DiskId='1' Source='$(var.PyPath)tuple.py' KeyPath='no'/>
                  <File Id='FDBPY$(var.PyVer)DIR' Name='directory_impl.py' DiskId='1' Source='$(var.PyPath)directory_impl.py' KeyPath='no'/>
                  <File Id='FDBPY$(var.PyVer)SUBS' Name='subspace_impl.py' DiskId='1' Source='$(var.PyPath)subspace_impl.py' KeyPath='no'/>
                  <File Id='FDBPY$(var.PyVer)SIX' Name='six.py' DiskId='1' Source='$(var.PyPath)six.py' KeyPath='no'/>
                  <RemoveFile Id="Purge$(var.PyVer)PYC" Name="*.pyc" On="uninstall" />
                  <RemoveFile Id="Purge$(var.PyVer)PYO" Name="*.pyo" On="uninstall" />
                  <RemoveFile Id="Purge$(var.PyVer)Cache" Directory="PyTarget$(var.PyVer)CacheDir" Name="*.*" On="uninstall" />
                  <RemoveFolder Id="Purge$(var.PyVer)CacheDir" Directory="PyTarget$(var.PyVer)CacheDir" On="uninstall" />
                </Component>
                <?undef PyGUID?>
              </Directory>
            </Directory>
          </Directory>
        </Directory>
        <?undef PyTopDir?>
      <?endforeach?>
      </Directory>
    </Directory>

    <Feature Id='FeatureRoot' Title='FoundationDB $(var.VersionName)'
             Description='Installs the server and client libraries for FoundationDB $(var.VersionName)' Level='1'
             Absent='disallow' AllowAdvertise='no' Display='expand' TypicalDefault='install'
             ConfigurableDirectory='INSTALLDIR'>

      <ComponentRef Id='InvisibleDummyComponent'/> <!-- Having any component here suppresses network install option in menu. -->

      <Feature Id='FeatureClient' Title='FoundationDB Clients'
               Description='Installs the FoundationDB command line interface, client library (required by all bindings) and C header files.'
               Level='1' Absent='disallow' AllowAdvertise='no' TypicalDefault='install'>
        <!-- This is the equivalent of the 'clients' package on linux -->
        <ComponentRef Id='CreateClusterFileDir'/>  <!-- In a client only install, we don't make any files here, but want it to be easy to drop fdb.cluster here -->
        <ComponentRef Id='PathAddition'/>
        <ComponentRef Id='InstallPathEnvVar'/>
        <ComponentRef Id='FDBCLibraryPFiles' />
        <ComponentRef Id='FDBCLibraryHeader'/>
        <ComponentRef Id='FDBCLibraryLib' />
        <ComponentRef Id='FDBCLIExecutable' />
        <ComponentRef Id='FDBBackupClientExecutable' />
        <ComponentRef Id='FDBCRegistryValue' />
      </Feature>

      <Feature Id='FeatureServer' Title='FoundationDB Server'
               Description='Installs the FoundationDB server (fdbserver) and fdbmonitor service. A standalone development server will be started automatically.'
               Level='1' Absent='allow' AllowAdvertise='no' Display='collapse' TypicalDefault='install'>

        <ComponentRef Id='FDBServerExecutable' />
        <ComponentRef Id='FDBBackupAgentExecutable' />

        <Feature Id='FeatureService' Title='Windows Service'
                 Description='Background service to run and manage FoundationDB server instances' Level='1'
                 Absent='disallow' AllowAdvertise='no' Display='hidden' InstallDefault='followParent'>
          <Feature Id='FeatureServiceFileNew' Title='Config File Creation' Display='hidden' Level='1' >
            <ComponentRef Id='fdbmonitorConfigFile' />
            <!-- Set this to 0 (i.e. disabled) if the config file already exists -->
            <Condition Level='0'>CONFIGFILEEXISTS</Condition>
          </Feature>
          <ComponentRef Id='fdbmonitorConfigReplaceBinary' />
          <ComponentRef Id='CreateLogDir' />
          <ComponentRef Id='CreateDataDir' />
          <ComponentRef Id='fdbmonitorExecutable' />
          <ComponentRef Id='FDBSRegistryValue' />
        </Feature>
      </Feature>

      <Feature Id='FeaturePython' Title='Python Language Bindings'
                Description='Install FoundationDB bindings into the default packages for specific installed copies of Python'
                Level='1' Absent='allow' TypicalDefault='install' AllowAdvertise='no' >

        <ComponentRef Id='InvisibleDummyComponent'/>  <!-- Having any component here suppresses network install option in menu. -->

        <?foreach PyVer in $(var.PyVersions)?>
          <?if $(var.PyVer) != CUSTOM?>
            <Feature Id='FeaturePython$(var.PyVer)' Title='Python $(var.PyVer)'
                      Description='Install FoundationDB bindings into Python $(var.PyVer) (from registry)'
                      Level='0' Absent='allow' TypicalDefault='install' AllowAdvertise='no' >
              <ComponentRef Id='PyTarget$(var.PyVer)Install' />
              <Condition Level='1'>PYTARGETDIR$(var.PyVer)</Condition>
            </Feature>
          <?endif?>
        <?endforeach?>
        <Feature Id='FeaturePythonCUSTOM' Title='Custom Python Installation'
                  Description='Install FoundationDB bindings into a non default Python installation'
                  Level='999' Absent='allow' TypicalDefault='install' AllowAdvertise='no'
                  ConfigurableDirectory='PYTARGETDIRCUSTOM' >
          <ComponentRef Id='PyTargetCUSTOMInstall' />
        </Feature>
      </Feature>
    </Feature>

    <?foreach PyVer in $(var.PyVersions)?>
      <CustomAction Id='CompilePythonFiles$(var.PyVer)' Directory='PYTARGETDIR$(var.PyVer)'
                    ExeCommand='"[PYTARGETDIR$(var.PyVer)]python.exe" -m compileall "[PyTarget$(var.PyVer)Site]fdb"'
                    Execute='deferred'
                    Impersonate='no'
                    Return='ignore' />
    <?endforeach?>

    <Property Id='CMDEXE'>cmd.exe</Property>
    <CustomAction Id='CreateRandomClusterFile' Property='CMDEXE'
                  ExeCommand='/V:ON /C "echo %RANDOM%%RANDOM%%RANDOM%%RANDOM%%RANDOM%%RANDOM%:%RANDOM%%RANDOM%%RANDOM%%RANDOM%%RANDOM%%RANDOM%@127.0.0.1:4500 > "[CONFIGFOLDER]$(var.ClusterFileName)""'
                  Execute='deferred'
                  Return='check' />

    <CustomAction Id='ConfigureNewDatabase' Property='CMDEXE'
                  ExeCommand='/V:ON /C ""[INSTALLDIR]bin\fdbcli.exe" -C "[CONFIGFOLDER]$(var.ClusterFileName)" --exec "configure new single memory; status" --timeout 30"'
                  Execute='deferred'
                  Return='check' />

    <InstallExecuteSequence>
      <!-- Compile .pyc files for any python versions we are installing to -->
      <?foreach PyVer in $(var.PyVersions)?>
      <Custom Action='CompilePythonFiles$(var.PyVer)' Before='StartServices'>&amp;FeaturePython$(var.PyVer)=3</Custom>
      <?endforeach?>

      <!-- Configure the new cluster when ServiceFeature is being installed and not on an upgrade -->
      <!-- See the totally unexplained list of conditions at http://msdn.microsoft.com/en-us/library/aa368561%28VS.85%29.aspx -->
      <Custom Action='CreateRandomClusterFile' Before='StartServices'>(&amp;FeatureService=3) AND NOT(!FeatureService=3) AND (NOT CLUSTERFILEEXISTS)</Custom>
      <Custom Action='ConfigureNewDatabase' After='StartServices'>(&amp;FeatureService=3) AND NOT(!FeatureService=3) AND (NOT CLUSTERFILEEXISTS)</Custom>
    </InstallExecuteSequence>

    <Property Id="WIXUI_EXITDIALOGOPTIONALTEXT"
              Value="Thank you for installing FoundationDB. For documentation, please visit https://apple.github.io/foundationdb/index.html#documentation.

To allow path variables to update, please restart your IDE and any open terminal sessions." />

    <UIRef Id='WixUI_FeatureTree' />
    <UI>
      <Publish Dialog="WelcomeDlg"
            Control="Next"
            Event="NewDialog"
            Value="FeaturesDlg"
            Order="2">1</Publish>
      <Publish Dialog="FeaturesDlg"
            Control="Back"
            Event="NewDialog"
            Value="WelcomeDlg"
            Order="2">1</Publish>
    </UI>
    <UIRef Id='WixUI_ErrorProgressText' />

    <WixVariable Id="WixUIDialogBmp" Value="$(var.ProjectRoot)\art\dialog.jpg" />
    <WixVariable Id="WixUIBannerBmp" Value="$(var.ProjectRoot)\art\banner.jpg" />
  </Product>
</Wix>
