Skip to content

Commit 015b28c

Browse files
Clean up build-msi.sh script and make XML generation more readable
1 parent b7c8d63 commit 015b28c

1 file changed

Lines changed: 88 additions & 35 deletions

File tree

scripts/build-msi.sh

Lines changed: 88 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,10 @@ EXTENSION="orp"
5252
SAVE_FILE="${PRODUCTNAME}.${EXTENSION}"
5353
count=1
5454

55+
#############################################################
56+
# Build file list for files in the working path #
57+
#############################################################
58+
5559
for file in "$WORKING_PATH"/*;
5660
do
5761
filename=$(basename "$file")
@@ -60,55 +64,104 @@ do
6064
EXE_ID=${PRODUCTNAME}00
6165
EXE_FILE=${filename}
6266
#Add special entry to files list
63-
FILES="$FILES\t\t\t\t\t<File Id='${EXE_ID}' Source='${WORKING_PATH}${filename}'/>\n"
67+
FILES="$FILES <File Id='${EXE_ID}' Source='${WORKING_PATH}${filename}'/>\n"
6468
elif [ -d "$file" ] ; then
6569
#If this is a directory then we need to add another component
66-
COMPONENTS="${COMPONENTS}\t\t\t<ComponentRef Id='${filename}Files'/>\n"
67-
TEMP="\t\t\t\t<Directory Id='${filename}' Name='${filename}'>\n\t\t\t\t\t<Component Id='${filename}Files' Guid='"$(uuidgen -t | awk '{ print toupper($0) }')"'>\n"
70+
COMPONENTS="${COMPONENTS} <ComponentRef Id='${filename}Files'/>\n"
71+
TEMP=" <Directory Id='${filename}' Name='${filename}'>\n <Component Id='${filename}Files' Guid='"$(uuidgen -t | awk '{ print toupper($0) }')"'>\n"
6872
for file2 in "$file"/*;
6973
do
7074
filename2=$(basename "$file2")
71-
TEMP="$TEMP\t\t\t\t\t\t<File Id='${PRODUCTNAME}${count}' Source='${WORKING_PATH}${filename}/${filename2}'/>\n"
75+
TEMP="$TEMP <File Id='${PRODUCTNAME}${count}' Source='${WORKING_PATH}${filename}/${filename2}'/>\n"
7276
count=$((count+1))
7377
done
74-
DIRECTORIES="$DIRECTORIES$TEMP\t\t\t\t\t</Component>\n\t\t\t\t</Directory>\n"
78+
DIRECTORIES="$DIRECTORIES$TEMP </Component>\n </Directory>\n"
7579
else
7680
#Any other file to files list
77-
FILES="$FILES\t\t\t\t\t<File Id='${PRODUCTNAME}${count}' Source='${WORKING_PATH}${filename}'/>\n"
81+
FILES="$FILES <File Id='${PRODUCTNAME}${count}' Source='${WORKING_PATH}${filename}'/>\n"
7882
count=$((count+1))
7983
fi
8084
done
8185

82-
echo -e "Building XML:\t" $XMLOUTFILE
83-
84-
XML_PACKAGE="\t<Package Keywords='Installer' Description='${PRODUCTNAME} Installer'\n\t\tComments=\"${PRODUCTCOMMENT}\" Manufacturer='OpenRGB'\n\t\tInstallerVersion='200' Languages='1033' Compressed='yes' SummaryCodepage='1252' Platform='x64'/>\n"
85-
XML_MEDIA="\t<Media Id='1' Cabinet='${PRODUCTNAME,,}.cab' EmbedCab='yes'/>\n"
86-
XML_CONDITIONS="\t<Condition Message='This package supports Windows 64bit Only'>VersionNT64</Condition>\n"
87-
XML_ACTION_RUNAS_ADMIN="\t<CustomAction Id='LaunchOpenRGBAdmin' FileKey='${EXE_ID}' ExeCommand='${EXE_FILE} --loglevel 1 --nodetect' Execute='deferred' Return='asyncNoWait' Impersonate='no'/>\n"
88-
XML_ACTION_FIRSTRUN="\t<CustomAction Id='LaunchOpenRGB' FileKey='${EXE_ID}' ExeCommand='--gui --loglevel 6' Execute='immediate' Return='asyncNoWait' Impersonate='yes'/>\n"
89-
XML_ICON="\t<Icon Id='OpenRGBIcon' SourceFile='${ICONFILE}'/>\n"
90-
XML_PROPERTY="\t<Property Id='ARPPRODUCTICON' Value='OpenRGBIcon'/>\n\t<Property Id='ARPURLINFOABOUT' Value='https://www.openrgb.org'/>\n"
91-
XML_ACTIONS_EXECUTE="\t<InstallExecuteSequence>\n\t\t<Custom Action='LaunchOpenRGBAdmin' After='InstallFiles'>NOT Installed</Custom>\n\t\t<Custom Action='LaunchOpenRGB' After='InstallFinalize'>NOT Installed</Custom>\n\t</InstallExecuteSequence>\n"
92-
XML_WIX_UI="\t<Property Id='WIXUI_INSTALLDIR' Value='INSTALLDIR' />\n\t<UIRef Id='WixUI_InstallDir'/>\n\t<UIRef Id='WixUI_ErrorProgressText'/>\n\t<WixVariable Id='WixUILicenseRtf' Value='${LICENSEFILE}'/>\n\t<WixVariable Id='WixUIBannerBmp' Value='${BANNERIMAGE}'/>\n\t<WixVariable Id='WixUIDialogBmp' Value='${DIALOGBACKGROUND}'/>\n"
93-
XML_MAJOR_UPGRADE="\t<MajorUpgrade Schedule='afterInstallInitialize' AllowDowngrades='yes'/>\n"
94-
XML_METADATA="$XML_PACKAGE $XML_MEDIA $XML_CONDITIONS $XML_MAJOR_UPGRADE $XML_ACTION_RUNAS_ADMIN $XML_ACTION_FIRSTRUN $XML_ICON $XML_PROPERTY $XML_ACTIONS_EXECUTE $XML_WIX_UI"
95-
96-
XML_STARTMENU="\t\t<Directory Id='ProgramMenuFolder' Name='Programs'>\n\t\t\t<Component Id='ProgramMenuShortcut' Guid='"$(uuidgen -t | awk '{ print toupper($0) }')"'>\n\t\t\t\t<Shortcut Id='startmenu${PRODUCTNAME}' Directory='ProgramMenuFolder' Name='${PRODUCTNAME}' Target='[#${EXE_ID}]' WorkingDirectory='INSTALLDIR' Advertise='no'/>\n\t\t\t\t<RemoveFolder Id='ProgramMenuShortcut' On='uninstall'/>\n\t\t\t\t<RegistryValue Root='HKCU' Key='Software\[Manufacturer]\[ProductName]' Type='string' Value='' KeyPath='yes'/>\n\t\t\t</Component>\n\t\t</Directory>\n"
97-
XML_ASSOCIATE_FILE="\t\t\t\t\t<ProgId Id='${SAVE_FILE}' Description='${PRODUCTNAME} Profile'>\n\t\t\t\t\t\t<Extension Id='${EXTENSION}' ContentType='application/${EXTENSION}'>\n\t\t\t\t\t\t<Verb Id='open' Command='Open' TargetFile='${EXE_ID}' Argument='-p \"%1\"' />\n\t\t\t\t\t\t</Extension>\n\t\t\t\t\t</ProgId>\n"
98-
XML_DIRECTORIES="\t<Directory Id='TARGETDIR' Name='SourceDir'>\n\t\t<Directory Id='ProgramFiles64Folder'>\n\t\t\t<Directory Id='INSTALLDIR' Name='${PRODUCTNAME}'>\n\t\t\t\t<Component Id='${PRODUCTNAME}Files' Guid='"$(uuidgen -t | awk '{ print toupper($0) }')"'>\n$FILES\n$XML_SHORTCUT\n$XML_ASSOCIATE_FILE\t\t\t\t</Component>\n$DIRECTORIES\t\t\t</Directory>\n\t\t</Directory>\n$XML_STARTMENU\t</Directory>\n"
99-
100-
XML_COMPONENTS="\t<Feature Id='Complete' Title='${PRODUCTNAME}' Description='Install all ${PRODUCTNAME} files.' Display='expand' Level='1' ConfigurableDirectory='INSTALLDIR'>\n\t\t<Feature Id='${PRODUCTNAME}Complete' Title='${PRODUCTNAME}' Description='The complete package.' Level='1' AllowAdvertise='no' InstallDefault='local'>\n\t\t\t<ComponentRef Id='${PRODUCTNAME}Files'/>\n$COMPONENTS\t\t\t<ComponentRef Id='ProgramMenuShortcut'/>\n\t\t</Feature>\n\t</Feature>\n"
101-
XML_DATA="$XML_DIRECTORIES $XML_COMPONENTS"
102-
103-
#Wipe out any previous XMLOUTFILE and add the header
104-
XML_HEADER="<?xml version='1.0' encoding='windows-1252'?>\n<Wix xmlns='http://schemas.microsoft.com/wix/2006/wi'>\n"
105-
XML_PRODUCT="\t<Product Name='${PRODUCTNAME}' Manufacturer='${VENDOR}'\n\t\tId='*'\n\t\tUpgradeCode='"${UPGRADECODE}"'\n\t\tLanguage='1033' Codepage='1252' Version='${VERSION}'>\n$XML_METADATA\n$XML_DATA\n\t</Product>\n</Wix>"
106-
107-
echo -e $XML_HEADER $XML_PRODUCT > $XMLOUTFILE
108-
echo -e "\t...Done!\n\n"
109-
86+
#############################################################
87+
# Create the Wix XML file #
88+
# Set IFS to the empty string to allow arbitrary spacing #
89+
# within the XML_FILE variable, then set it back to a #
90+
# space character after we print the XML file #
91+
#############################################################
92+
IFS=""
93+
XML_FILE=""
94+
95+
XML_FILE+="<?xml version='1.0' encoding='windows-1252'?>\r\n"
96+
XML_FILE+="<Wix xmlns='http://schemas.microsoft.com/wix/2006/wi'>\r\n"
97+
XML_FILE+=" <Product Name='${PRODUCTNAME}' Manufacturer='${VENDOR}'\r\n"
98+
XML_FILE+=" Id='*'\r\n"
99+
XML_FILE+=" UpgradeCode='"${UPGRADECODE}"'\r\n"
100+
XML_FILE+=" Language='1033' Codepage='1252' Version='${VERSION}'>\r\n"
101+
XML_FILE+=" <Package Keywords='Installer' Description='${PRODUCTNAME} Installer'\r\n"
102+
XML_FILE+=" Comments=\"${PRODUCTCOMMENT}\" Manufacturer='OpenRGB'\r\n"
103+
XML_FILE+=" InstallerVersion='200' Languages='1033' Compressed='yes' SummaryCodepage='1252' Platform='x64'/>\r\n"
104+
XML_FILE+=" <Media Id='1' Cabinet='${PRODUCTNAME,,}.cab' EmbedCab='yes'/>\r\n"
105+
XML_FILE+=" <Condition Message='This package supports Windows 64bit Only'>VersionNT64</Condition>\r\n"
106+
XML_FILE+=" <MajorUpgrade Schedule='afterInstallInitialize' AllowDowngrades='yes'/>\r\n"
107+
XML_FILE+=" <CustomAction Id='LaunchOpenRGBAdmin' FileKey='${EXE_ID}' ExeCommand='${EXE_FILE} --loglevel 1 --nodetect' Execute='deferred' Return='asyncNoWait' Impersonate='no'/>\r\n"
108+
XML_FILE+=" <CustomAction Id='LaunchOpenRGB' FileKey='${EXE_ID}' ExeCommand='--gui --loglevel 6' Execute='immediate' Return='asyncNoWait' Impersonate='yes'/>\r\n"
109+
XML_FILE+=" <Icon Id='OpenRGBIcon' SourceFile='${ICONFILE}'/>\r\n"
110+
XML_FILE+=" <Property Id='ARPPRODUCTICON' Value='OpenRGBIcon'/>\r\n"
111+
XML_FILE+=" <Property Id='ARPURLINFOABOUT' Value='https://www.openrgb.org'/>\r\n"
112+
XML_FILE+=" <InstallExecuteSequence>\r\n"
113+
XML_FILE+=" <Custom Action='LaunchOpenRGBAdmin' After='InstallFiles'>NOT Installed</Custom>\r\n"
114+
XML_FILE+=" <Custom Action='LaunchOpenRGB' After='InstallFinalize'>NOT Installed</Custom>\r\n"
115+
XML_FILE+=" </InstallExecuteSequence>\r\n"
116+
XML_FILE+=" <Property Id='WIXUI_INSTALLDIR' Value='INSTALLDIR'/>\r\n"
117+
XML_FILE+=" <UIRef Id='WixUI_InstallDir'/>\r\n"
118+
XML_FILE+=" <UIRef Id='WixUI_ErrorProgressText'/>\r\n"
119+
XML_FILE+=" <WixVariable Id='WixUILicenseRtf' Value='${LICENSEFILE}'/>\r\n"
120+
XML_FILE+=" <WixVariable Id='WixUIBannerBmp' Value='${BANNERIMAGE}'/>\r\n"
121+
XML_FILE+=" <WixVariable Id='WixUIDialogBmp' Value='${DIALOGBACKGROUND}'/>\r\n"
122+
XML_FILE+="\r\n"
123+
XML_FILE+=" <Directory Id='TARGETDIR' Name='SourceDir'>\r\n"
124+
XML_FILE+=" <Directory Id='ProgramFiles64Folder'>\r\n"
125+
XML_FILE+=" <Directory Id='INSTALLDIR' Name='${PRODUCTNAME}'>\r\n"
126+
XML_FILE+=" <Component Id='${PRODUCTNAME}Files' Guid='"$(uuidgen -t | awk '{ print toupper($0) }')"'>\r\n"
127+
XML_FILE+="${FILES}\r\n"
128+
XML_FILE+=" <ProgId Id='${SAVE_FILE}' Description='${PRODUCTNAME} Profile'>\r\n"
129+
XML_FILE+=" <Extension Id='${EXTENSION}' ContentType='application/${EXTENSION}'>\r\n"
130+
XML_FILE+=" <Verb Id='open' Command='Open' TargetFile='${EXE_ID}' Argument='-p \"%1\"' />\r\n"
131+
XML_FILE+=" </Extension>\r\n"
132+
XML_FILE+=" </ProgId>\r\n"
133+
XML_FILE+=" </Component>\r\n"
134+
XML_FILE+="${DIRECTORIES}\r\n"
135+
XML_FILE+=" </Directory>\r\n"
136+
XML_FILE+=" </Directory>\r\n"
137+
XML_FILE+=" <Directory Id='ProgramMenuFolder' Name='Programs'>\r\n"
138+
XML_FILE+=" <Component Id='ProgramMenuShortcut' Guid='"$(uuidgen -t | awk '{ print toupper($0) }')"'>\r\n"
139+
XML_FILE+=" <Shortcut Id='startmenu${PRODUCTNAME}' Directory='ProgramMenuFolder' Name='${PRODUCTNAME}' Target='[#${EXE_ID}]' WorkingDirectory='INSTALLDIR' Advertise='no'/>\r\n"
140+
XML_FILE+=" <RemoveFolder Id='ProgramMenuShortcut' On='uninstall'/>\r\n"
141+
XML_FILE+=" <RegistryValue Root='HKCU' Key='Software\[Manufacturer]\[ProductName]' Type='string' Value='' KeyPath='yes'/>\r\n"
142+
XML_FILE+=" </Component>\r\n"
143+
XML_FILE+=" </Directory>\r\n"
144+
XML_FILE+=" </Directory>\r\n"
145+
XML_FILE+=" <Feature Id='Complete' Title='${PRODUCTNAME}' Description='Install all ${PRODUCTNAME} files.' Display='expand' Level='1' ConfigurableDirectory='INSTALLDIR'>\r\n"
146+
XML_FILE+=" <Feature Id='${PRODUCTNAME}Complete' Title='${PRODUCTNAME}' Description='The complete package.' Level='1' AllowAdvertise='no' InstallDefault='local'>\r\n"
147+
XML_FILE+=" <ComponentRef Id='${PRODUCTNAME}Files'/>\r\n"
148+
XML_FILE+="${COMPONENTS}\r\n"
149+
XML_FILE+=" <ComponentRef Id='ProgramMenuShortcut'/>\r\n"
150+
XML_FILE+=" </Feature>\r\n"
151+
XML_FILE+=" </Feature>\r\n"
152+
XML_FILE+=" </Product>\r\n"
153+
XML_FILE+="</Wix>"
154+
155+
echo -e $XML_FILE > $XMLOUTFILE
156+
IFS=" "
157+
158+
#############################################################
159+
# Print the XML for debugging #
160+
#############################################################
110161
cat $XMLOUTFILE
111162

112-
#Once the XML file manifest is created create the package
163+
#############################################################
164+
# Once the XML file manifest is created, create the package #
165+
#############################################################
113166
candle -arch x64 ${PRODUCTNAME,,}.wxs
114167
light -sval -ext WixUIExtension ${PRODUCTNAME,,}.wixobj -out ${PRODUCTNAME}_Windows_64.msi

0 commit comments

Comments
 (0)