From d795e55fc4898c78bf7cb390d181bce3baca2542 Mon Sep 17 00:00:00 2001 From: Michael Martin Date: Sun, 7 Jun 2020 20:49:46 -0700 Subject: [PATCH] Automatically generate the DLL dependencies of the MSYS2 UQM build for installation and uninstallation --- sc2/build/win32_install/packages.nsh | 2 +- sc2/build/win32_install/procpkgs.sh | 37 ++++++++++++++++++++++- sc2/build/win32_install/uqm-installer.nsi | 16 +++------- 3 files changed, 41 insertions(+), 14 deletions(-) diff --git a/sc2/build/win32_install/packages.nsh b/sc2/build/win32_install/packages.nsh index 609c0bafb..53f774038 100644 --- a/sc2/build/win32_install/packages.nsh +++ b/sc2/build/win32_install/packages.nsh @@ -1,4 +1,4 @@ -# Autogenerated by proppkgs.sh +# Autogenerated by procpkgs.sh # !define PKG_CONTENT_FILE "uqm-0.8.0-content.uqm" !define PKG_CONTENT_MD5SUM "6cbc9d51fa63e07c0f4d1d061136d816" diff --git a/sc2/build/win32_install/procpkgs.sh b/sc2/build/win32_install/procpkgs.sh index 7e3df63cd..59315e745 100755 --- a/sc2/build/win32_install/procpkgs.sh +++ b/sc2/build/win32_install/procpkgs.sh @@ -9,8 +9,14 @@ # # The awk, md5sum, and wc utilities must be installed, but MSYS2 # should generally already have those in your path. +# +# The ntldd utility must also be installed and generally will NOT be +# installed by default. "pacboy sync ntldd" in a MinGW environment should +# install the correct version. NSH_FILE="packages.nsh" +INST_FILE="dlls.nsi" +UNINST_FILE="un$INST_FILE" PKG_VERSION="0.8.0" CONTENT_PKG="uqm-$PKG_VERSION-content.uqm" @@ -20,6 +26,8 @@ REMIX1_PKG="uqm-remix-disc1.uqm" REMIX2_PKG="uqm-remix-disc2.uqm" REMIX3_PKG="uqm-remix-disc3.uqm" REMIX4_PKG="uqm-remix-disc4.uqm" +UQM_EXE="uqm.exe" +KEYJAM_EXE="keyjam.exe" check_pkg() { if [ ! -f "$1" ]; then @@ -47,8 +55,9 @@ check_pkg $REMIX1_PKG check_pkg $REMIX2_PKG check_pkg $REMIX3_PKG check_pkg $REMIX4_PKG +check_pkg $UQM_EXE -echo "# Autogenerated by proppkgs.sh" > $NSH_FILE +echo "# Autogenerated by procpkgs.sh" > $NSH_FILE echo "#" >> $NSH_FILE process_pkg $CONTENT_PKG PKG_CONTENT process_pkg $MUSIC_PKG PKG_3DOMUSIC @@ -59,3 +68,29 @@ process_pkg $REMIX3_PKG PKG_REMIX3 process_pkg $REMIX4_PKG PKG_REMIX4 echo All packages processed. ${NSH_FILE} generated. + +echo "# Autogenerated by procpkgs.sh" > $INST_FILE +echo "#" >> $INST_FILE +echo "# Autogenerated by procpkgs.sh" > $UNINST_FILE +echo "#" >> $UNINST_FILE +echo " File \"$UQM_EXE\"" >> $INST_FILE +echo " File \"$KEYJAM_EXE\"" >> $INST_FILE +echo " Delete \"\$INSTDIR\\$UQM_EXE\"" >> $UNINST_FILE +echo " Delete \"\$INSTDIR\\$KEYJAM_EXE\"" >> $UNINST_FILE + +echo "Processing $UQM_EXE..." +DLLS=$(ntldd -R "$UQM_EXE" | awk '/\\bin\\/{print $3;}') +echo "Processing $KEYJAM_EXE..." +DLLS2=$(ntldd -R "$KEYJAM_EXE" | awk '/\\bin\\/{print $3;}') +DLLS="$DLLS $DLLS2" +rm -f "$INST_FILE.tmp" "$UNINST_FILE.tmp" +touch "$INST_FILE.tmp" "$UNINST_FILE.tmp" +for dll in $DLLS; do + echo " File \"$dll\"" >> $INST_FILE.tmp + echo " Delete \"\$INSTDIR\\$(basename $dll)\"" >> $UNINST_FILE.tmp +done +sort -u < "$INST_FILE.tmp" >> $INST_FILE +sort -u < "$UNINST_FILE.tmp" >> $UNINST_FILE +rm -f "$INST_FILE.tmp" "$UNINST_FILE.tmp" + +echo "Executable processed. $INST_FILE and $UNINST_FILE generated." diff --git a/sc2/build/win32_install/uqm-installer.nsi b/sc2/build/win32_install/uqm-installer.nsi index 21f861deb..264e9b3be 100644 --- a/sc2/build/win32_install/uqm-installer.nsi +++ b/sc2/build/win32_install/uqm-installer.nsi @@ -238,22 +238,12 @@ SectionGroup "!UQM" SECGRP01 SetOverwrite try File "AUTHORS.txt" File "COPYING.txt" - File "libpng12-0.dll" File "Manual.txt" - File "ogg.dll" - File "OpenAL32.dll" - File "wrap_oal.dll" File "README.txt" File "README-SDL.txt" - File "SDL.dll" - File "SDL_image.dll" - File "SDL_gfx.dll" - File "uqm.exe" - File "keyjam.exe" - File "vorbis.dll" - File "vorbisfile.dll" File "WhatsNew.txt" - File "zlib1.dll" +!include "dlls.nsi" + SetOutPath $UQMUSERDATA SetOverwrite try File "uqm-pc.cfg" @@ -522,6 +512,8 @@ Section Uninstall Delete "$INSTDIR\AUTHORS.txt" Delete "$INSTDIR\stderr.txt" +!include "undlls.nsi" + Delete "$SMPROGRAMS\$ICONS_GROUP\Uninstall.lnk" Delete "$SMPROGRAMS\$ICONS_GROUP\Options Configuration.lnk" Delete "$SMPROGRAMS\$ICONS_GROUP\Key Configuration.lnk"