Rework Windows launchers:

- Use SDL2 message boxes instead of Winforms.
- Use a proper project instead of compiling a single file.
- Use assembly attributes instead of modifying strings in the source code.
- Remove generic OpenRA.exe launcher.
- Replace MakeLAA.exe with a python script.
This commit is contained in:
Paul Chote
2020-11-25 22:30:04 +00:00
committed by teinarss
parent 07a10069db
commit d35768e0f9
10 changed files with 311 additions and 278 deletions

View File

@@ -3,6 +3,7 @@
command -v curl >/dev/null 2>&1 || { echo >&2 "Windows packaging requires curl."; exit 1; }
command -v makensis >/dev/null 2>&1 || { echo >&2 "Windows packaging requires makensis."; exit 1; }
command -v convert >/dev/null 2>&1 || { echo >&2 "Windows packaging requires ImageMagick."; exit 1; }
command -v python3 >/dev/null 2>&1 || { echo >&2 "Windows packaging requires python 3."; exit 1; }
if [ $# -ne "2" ]; then
echo "Usage: $(basename "$0") tag outputdir"
@@ -38,20 +39,15 @@ function makelauncher()
# Create multi-resolution icon
convert "${ARTWORK_DIR}/${MOD_ID}_16x16.png" "${ARTWORK_DIR}/${MOD_ID}_24x24.png" "${ARTWORK_DIR}/${MOD_ID}_32x32.png" "${ARTWORK_DIR}/${MOD_ID}_48x48.png" "${ARTWORK_DIR}/${MOD_ID}_256x256.png" "${BUILTDIR}/${MOD_ID}.ico"
sed "s|DISPLAY_NAME|${DISPLAY_NAME}|" WindowsLauncher.cs.in | sed "s|MOD_ID|${MOD_ID}|" | sed "s|FAQ_URL|${FAQ_URL}|" > WindowsLauncher.cs
csc WindowsLauncher.cs -warn:4 -warnaserror -platform:"${PLATFORM}" -out:"${BUILTDIR}/${LAUNCHER_NAME}" -t:winexe ${LAUNCHER_LIBS} -win32icon:"${BUILTDIR}/${MOD_ID}.ico"
rm WindowsLauncher.cs
# Create mod-specific launcher
msbuild -t:Build "${SRCDIR}/OpenRA.WindowsLauncher/OpenRA.WindowsLauncher.csproj" -restore -p:Configuration=Release -p:TargetPlatform="${PLATFORM}" -p:LauncherName="${LAUNCHER_NAME}" -p:LauncherIcon="${BUILTDIR}/${MOD_ID}.ico" -p:ModID="${MOD_ID}" -p:DisplayName="${DISPLAY_NAME}" -p:FaqUrl="${FAQ_URL}"
cp "${SRCDIR}/bin/${LAUNCHER_NAME}.exe" "${BUILTDIR}"
cp "${SRCDIR}/bin/${LAUNCHER_NAME}.exe.config" "${BUILTDIR}"
# We need to set the loadFromRemoteSources flag for the launcher, but only for the "portable" zip package.
# Windows automatically un-trusts executables that are extracted from a downloaded zip file
cp "${BUILTDIR}/OpenRA.exe.config" "${BUILTDIR}/${LAUNCHER_NAME}.config"
if [ "${PLATFORM}" = "x86" ]; then
# Enable the full 4GB address space for the 32 bit game executable
# The server and utility do not use enough memory to need this
csc MakeLAA.cs -warn:4 -warnaserror -out:"MakeLAA.exe"
mono "MakeLAA.exe" "${BUILTDIR}/${LAUNCHER_NAME}"
rm MakeLAA.exe
# Enable the full 4GB address space for the 32 bit game executable
# The server and utility do not use enough memory to need this
if [ "${PLATFORM}" = "win-x86" ]; then
python3 MakeLAA.py "${BUILTDIR}/${LAUNCHER_NAME}.exe"
fi
}
@@ -60,32 +56,29 @@ function build_platform()
PLATFORM="${1}"
echo "Building core files (${PLATFORM})"
if [ "${PLATFORM}" = "x86" ]; then
TARGETPLATFORM="TARGETPLATFORM=win-x86"
IS_WIN32="WIN32=true"
if [ "${PLATFORM}" = "win-x86" ]; then
USE_PROGRAMFILES32="-DUSE_PROGRAMFILES32=true"
else
IS_WIN32="WIN32=false"
TARGETPLATFORM="TARGETPLATFORM=win-x64"
USE_PROGRAMFILES32=""
fi
pushd "${SRCDIR}" > /dev/null || exit 1
make clean
make core "${TARGETPLATFORM}" "${IS_WIN32}"
make core TARGETPLATFORM="${PLATFORM}"
make version VERSION="${TAG}"
make install-engine "${TARGETPLATFORM}" gameinstalldir="" DESTDIR="${BUILTDIR}"
make install-engine TARGETPLATFORM="${PLATFORM}" gameinstalldir="" DESTDIR="${BUILTDIR}"
make install-common-mod-files gameinstalldir="" DESTDIR="${BUILTDIR}"
make install-default-mods gameinstalldir="" DESTDIR="${BUILTDIR}"
make install-dependencies "${TARGETPLATFORM}" gameinstalldir="" DESTDIR="${BUILTDIR}"
make install-dependencies TARGETPLATFORM="${PLATFORM}" gameinstalldir="" DESTDIR="${BUILTDIR}"
popd > /dev/null || exit 1
cp "${SRCDIR}/bin/OpenRA.exe.config" "${BUILTDIR}"
echo "Compiling Windows launchers (${PLATFORM})"
makelauncher "RedAlert.exe" "Red Alert" "ra" ${PLATFORM}
makelauncher "TiberianDawn.exe" "Tiberian Dawn" "cnc" ${PLATFORM}
makelauncher "Dune2000.exe" "Dune 2000" "d2k" ${PLATFORM}
makelauncher "RedAlert" "Red Alert" "ra" ${PLATFORM}
makelauncher "TiberianDawn" "Tiberian Dawn" "cnc" ${PLATFORM}
makelauncher "Dune2000" "Dune 2000" "d2k" ${PLATFORM}
# Remove redundant generic launcher
rm "${BUILTDIR}/OpenRA.exe"
echo "Building Windows setup.exe ($1)"
makensis -V2 -DSRCDIR="${BUILTDIR}" -DTAG="${TAG}" -DSUFFIX="${SUFFIX}" ${USE_PROGRAMFILES32} OpenRA.nsi
@@ -104,5 +97,5 @@ function build_platform()
rm -rf "${BUILTDIR}"
}
build_platform "x86"
build_platform "x64"
build_platform "win-x86"
build_platform "win-x64"