Unicode true ; Shave and a Haircut ; (c) 2019 Epic Games ; US Patent 6720962 ;----------------- Macros !include LogicLib.nsh !include "MUI2.nsh" !if 0 !include "install\win\EnvVarUpdate.nsh" !endif ; Macro to create a function which initializes our install paths. ; By using a macro we can instantiate both installer and uninstaller ; versions of the function. ; !macro InitInstallPaths UN Function ${UN}InitInstallPaths SetRegView 64 ReadRegStr $EpicGamesBasePath HKLM "Software/Epic Games/shaveHaircut" "InstallPath" ReadRegStr $OldAlterBasePath HKLM "Software/JoeAlter/shaveHaircut" "InstallPath" ${If} $EpicGamesBasePath == "" ; We may be upgrading from an old Joe Alter version of Shave. If the ; old key is present and points to a non-default location we want to ; preserve that since the user has explicitly asked for the package to ; be installed there. We'll only use our new default location if there ; is no old key or it points an old default location. ; ; Note that the list of Maya versions in the check below does not need ; to be extended beyond Maya 2017 as they only included to work ; around a bug in the old Joe Alter installer which was fixed after ; Maya 2017. ; ${If} $OldAlterBasePath == "" ${OrIf} $OldAlterBasePath == "${OldAlterBaseDefault}" ${OrIf} $OldAlterBasePath == "${OldAlterBaseDefault}\maya2013" ${OrIf} $OldAlterBasePath == "${OldAlterBaseDefault}\maya2014" ${OrIf} $OldAlterBasePath == "${OldAlterBaseDefault}\maya2015" ${OrIf} $OldAlterBasePath == "${OldAlterBaseDefault}\maya2015" ${OrIf} $OldAlterBasePath == "${OldAlterBaseDefault}\maya2016" ${OrIf} $OldAlterBasePath == "${OldAlterBaseDefault}\maya2016.5" ${OrIf} $OldAlterBasePath == "${OldAlterBaseDefault}\maya2017" StrCpy $EpicGamesBasePath "${EpicGamesBaseDefault}" StrCpy $OldAlterBasePath "${OldAlterBaseDefault}" ${Else} StrCpy $EpicGamesBasePath "${OldAlterBaseDefault}" ${EndIf} ${EndIf} StrCpy $EpicGamesInstallPath $EpicGamesBasePath\maya${MayaVersion} ; We may need this to uninstall the old version. ; StrCpy $OldAlterInstallPath $OldAlterBasePath\maya${MayaVersion} ReadRegStr $MayaInstallPath HKLM Software/Autodesk/Maya/${MayaVersion}/Setup/InstallPath "MAYA_INSTALL_LOCATION" ${If} $MayaInstallPath == "" StrCpy $MayaInstallPath "$PROGRAMFILES64\Autodesk\Maya${MayaVersion}\" ${EndIf} StrCpy $ArnoldInstallPath "$%SYSTEMDRIVE%\solidangle\mtoadeploy\${MayaVersion}" FunctionEnd !macroend ;----------------- Configuration !define EpicGamesBaseDefault "$PROGRAMFILES64\Epic Games\shaveHaircut" !define OldAlterBaseDefault "$PROGRAMFILES64\JoeAlter\shaveHaircut" !define MayaCompactVersion ${MayaVersionMajor}${MayaVersionMinor} !define Product "Shave and a Haircut ${ShaveVersion} For Maya ${MayaVersion}" Name "${Product}" OutFile "Installers\shave-${ShaveVersion}-${ReleaseType}-Maya${MayaVersion}.exe" VIAddVersionKey "ProductName" "Shave and a Haircut for Maya ${MayaVersion}" VIAddVersionKey "CompanyName" "Unreal Engine" VIAddVersionKey "FileVersion" "${ShaveStdVersion}" VIAddVersionKey "FileDescription" "Shave and a Haircut installer" VIAddVersionKey "LegalCopyright" "(c) 2019 Epic Games" VIProductVersion ${ShaveStdVersion} Var EpicGamesBasePath Var EpicGamesInstallPath Var OldAlterBasePath Var OldAlterInstallPath Var ArnoldInstallPath Var MayaInstallPath !define MUI_ABORTWARNING !define MUI_HEADERIMAGE !define MUI_HEADERIMAGE_BITMAP "artwork\installer_shave_logo.bmp" !define MUI_HEADERIMAGE_BITMAP_STRETCH "AspectFitHeight" !define MUI_WELCOMEFINISHPAGE_BITMAP "artwork\installer_welcome.bmp" !define MUI_WELCOMEFINISHPAGE_BITMAP_STRETCH "AspectFitHeight" ;Show all languages, despite user's codepage !define MUI_LANGDLL_ALLLANGUAGES ;Remember the installer language !define MUI_LANGDLL_REGISTRY_ROOT "HKCU" !define MUI_LANGDLL_REGISTRY_KEY "Software\Epic Games" !define MUI_LANGDLL_REGISTRY_VALUENAME "Installer Language" ;----------------- Installer Pages !insertmacro MUI_PAGE_WELCOME PageEx directory PageCallbacks InitInstallPaths "" "" Caption " " DirText "" "" "" "" DirVar $EpicGamesInstallPath PageExEnd PageEx directory Caption " " DirText "Select the folder in which Maya ${MayaVersion} is installed. Click Next to continue." DirVar $MayaInstallPath PageExEnd PageEx instfiles Caption " " PageExEnd !insertmacro MUI_PAGE_FINISH ;----------------- Uninstaller Pages !insertmacro MUI_UNPAGE_WELCOME !insertmacro MUI_UNPAGE_CONFIRM !insertmacro MUI_UNPAGE_INSTFILES !insertmacro MUI_UNPAGE_FINISH ;----------------- Languages !insertmacro MUI_LANGUAGE "English" ;first language is the default language !insertmacro MUI_LANGUAGE "French" !insertmacro MUI_LANGUAGE "German" !insertmacro MUI_LANGUAGE "Spanish" !insertmacro MUI_LANGUAGE "SpanishInternational" !insertmacro MUI_LANGUAGE "SimpChinese" !insertmacro MUI_LANGUAGE "TradChinese" !insertmacro MUI_LANGUAGE "Japanese" !insertmacro MUI_LANGUAGE "Korean" !insertmacro MUI_LANGUAGE "Italian" !insertmacro MUI_LANGUAGE "Dutch" !insertmacro MUI_LANGUAGE "Danish" !insertmacro MUI_LANGUAGE "Swedish" !insertmacro MUI_LANGUAGE "Norwegian" !insertmacro MUI_LANGUAGE "NorwegianNynorsk" !insertmacro MUI_LANGUAGE "Finnish" !insertmacro MUI_LANGUAGE "Greek" !insertmacro MUI_LANGUAGE "Russian" !insertmacro MUI_LANGUAGE "Portuguese" !insertmacro MUI_LANGUAGE "PortugueseBR" !insertmacro MUI_LANGUAGE "Polish" !insertmacro MUI_LANGUAGE "Ukrainian" !insertmacro MUI_LANGUAGE "Czech" !insertmacro MUI_LANGUAGE "Slovak" !insertmacro MUI_LANGUAGE "Croatian" !insertmacro MUI_LANGUAGE "Bulgarian" !insertmacro MUI_LANGUAGE "Hungarian" !insertmacro MUI_LANGUAGE "Thai" !insertmacro MUI_LANGUAGE "Romanian" !insertmacro MUI_LANGUAGE "Latvian" !insertmacro MUI_LANGUAGE "Macedonian" !insertmacro MUI_LANGUAGE "Estonian" !insertmacro MUI_LANGUAGE "Turkish" !insertmacro MUI_LANGUAGE "Lithuanian" !insertmacro MUI_LANGUAGE "Slovenian" !insertmacro MUI_LANGUAGE "Serbian" !insertmacro MUI_LANGUAGE "SerbianLatin" !insertmacro MUI_LANGUAGE "Arabic" !insertmacro MUI_LANGUAGE "Farsi" !insertmacro MUI_LANGUAGE "Hebrew" !insertmacro MUI_LANGUAGE "Indonesian" !insertmacro MUI_LANGUAGE "Mongolian" !insertmacro MUI_LANGUAGE "Luxembourgish" !insertmacro MUI_LANGUAGE "Albanian" !insertmacro MUI_LANGUAGE "Breton" !insertmacro MUI_LANGUAGE "Belarusian" !insertmacro MUI_LANGUAGE "Icelandic" !insertmacro MUI_LANGUAGE "Malay" !insertmacro MUI_LANGUAGE "Bosnian" !insertmacro MUI_LANGUAGE "Kurdish" !insertmacro MUI_LANGUAGE "Irish" !insertmacro MUI_LANGUAGE "Uzbek" !insertmacro MUI_LANGUAGE "Galician" !insertmacro MUI_LANGUAGE "Afrikaans" !insertmacro MUI_LANGUAGE "Catalan" !insertmacro MUI_LANGUAGE "Esperanto" !insertmacro MUI_LANGUAGE "Asturian" !insertmacro MUI_LANGUAGE "Basque" !insertmacro MUI_LANGUAGE "Pashto" ;!insertmacro MUI_LANGUAGE "ScotsGaelic" !insertmacro MUI_LANGUAGE "Georgian" !insertmacro MUI_LANGUAGE "Vietnamese" !insertmacro MUI_LANGUAGE "Welsh" !insertmacro MUI_LANGUAGE "Armenian" !insertmacro MUI_LANGUAGE "Corsican" ;----------------- Reserve Files ; ;If you are using solid compression, files that are required before ;the actual installation should be stored first in the data block, ;because this will make your installer start faster. !insertmacro MUI_RESERVEFILE_LANGDLL ;----------------- Installer Sections Section SetRegView 64 ; Uninstall the old version. IfFileExists $EpicGamesInstallPath\Uninstall.exe 0 +2 ExecWait '"$EpicGamesInstallPath\Uninstall" /S _?=$EpicGamesInstallPath' ; If the old Joe Alter version is still around, remove it. IfFileExists $OldAlterInstallPath\Uninstall.exe 0 +3 ExecWait '"$OldAlterInstallPath\Uninstall" /S _?=$OldAlterInstallPath' RMDir /r /REBOOTOK $OldAlterInstallPath SetOutPath "$EpicGamesInstallPath" File arnold\supportedMtoAVersions.txt File install\docs\Install.html File prman\supportedRManVersions.txt File vrayPlug\supportedVrayVersions.txt SetOutPath "$EpicGamesInstallPath\bin" File raw64\${ReleaseType}\${MayaCompactVersion}\libShave.dll File raw64\${ReleaseType}\${MayaCompactVersion}\libShaveAPI.dll File raw64\${ReleaseType}\libShaveEngine.dll SetOutPath "$EpicGamesInstallPath\icons" File libexe\icons\maya\selection\*.xpm File libexe\icons\maya\selectUtils\*.xpm File libexe\icons\maya\tools\*.xpm File libexe\icons\maya\transforms\*.xpm File libexe\icons\maya\utils\*.xpm File mayaPlug\icons\*.xpm File libexe\icons\maya\selection\*.png File libexe\icons\maya\selectUtils\*.png File libexe\icons\maya\tools\*.png File libexe\icons\maya\transforms\*.png File libexe\icons\maya\utils\*.png File mayaPlug\icons\*.png SetOutPath "$EpicGamesInstallPath\plug-ins" File raw64\${ReleaseType}\${MayaCompactVersion}\shaveNode.mll SetOutPath "$EpicGamesInstallPath\plug-ins\prman" CreateDirectory "$EpicGamesInstallPath\plug-ins\prman\shaders\src" File /oname=shaders\Shave.slo libexe\Shave.slo File /oname=shaders\src\Shave.sl libexe\Shave.sl !if "${MayaVersion}" == "2016" CreateDirectory "$EpicGamesInstallPath\plug-ins\prman\RMS19" File /oname=RMS19\ShaveHairBxdf.dll prman\plugins\shaveHairBxdf\shaveHairBxdf-vs11\x64\RelM${mayaVersion}R19\ShaveHairBxdf.dll !endif !if "${MayaVersionMajor}" <= "2017" CreateDirectory "$EpicGamesInstallPath\plug-ins\prman\RMS20" File /oname=RMS20\ShaveHairBxdf.dll prman\plugins\shaveHairBxdf\shaveHairBxdf-vs11\x64\RelM${mayaVersion}R20\ShaveHairBxdf.dll !endif CreateDirectory "$EpicGamesInstallPath\plug-ins\prman\RMS21" !if "${MayaVersionMajor}" <= "2017" File /oname=RMS21\ShaveHairBxdf.dll prman\plugins\shaveHairBxdf\shaveHairBxdf-vs11\x64\RelM${mayaVersion}R21\ShaveHairBxdf.dll !endif !if "${MayaVersionMajor}" >= "2018" File /oname=RMS21\ShaveHairBxdf.dll prman\plugins\shaveHairBxdf\shaveHairBxdf-vs14\x64\RelM${mayaVersion}R21\ShaveHairBxdf.dll !endif SetOutPath "$EpicGamesInstallPath\plug-ins\vray" File raw64\${releaseType}\${MayaCompactVersion}\vrayExporter\ShaveVray*Exporter.dll SetOutPath "$EpicGamesInstallPath\plug-ins\vray\vray3" File vrayPlug\bin\win64\ShaveSh3*.dll File vrayPlug\bin\win64\vray_Shave3*.dll !if "${MayaCompactVersion}" >= "20165" SetOutPath "$EpicGamesInstallPath\plug-ins\vray\vray4" File vrayPlug\bin\win64\ShaveSh4*.dll File vrayPlug\bin\win64\vray_Shave4*.dll !endif SetOutPath "$EpicGamesInstallPath\presets\attrPresets\shaveHair" File presets\*.mel File presets\*.xpm SetOutPath "$EpicGamesInstallPath\scripts" File scripts\AE*.mel File scripts\shave*.mel SetOutPath "$MayaInstallPath\bin\Cg" File CgFx\shaveHair.cgfx SetOutPath "$MayaInstallPath\modules" ; If there's an old module file, move it to one side. Rename shaveHaircut.mod shaveHaircut.sav FileOpen $0 "shaveHaircut.mod" "w" ${If} $0 == "" ; Restore the old module file. Rename shaveHaircut.sav shaveHaircut.mod MessageBox MB_YESNO|MB_ICONEXCLAMATION \ "Could not create module file $MayaInstallPath\modules\shaveHaircut.mod.$\r$\n$\r$\nDo you wish to continue with the installation?" \ /SD IDYES IDYES ignoreNoModFile Abort ${Else} FileWrite $0 "+ shaveHaircut 1.1 $EpicGamesInstallPath$\n" FileWrite $0 "PATH+:=bin$\n" FileWrite $0 "VRAY_PLUGINS+:=plug-ins\vray\vray4$\n" FileWrite $0 "VRAY_PLUGINS_x64+:=plug-ins\vray\vray3$\n" FileWrite $0 "VRAY_FOR_MAYA${MayaVersion}_PLUGINS+:=plug-ins\vray\vray4$\n" FileWrite $0 "VRAY_FOR_MAYA${MayaVersion}_PLUGINS_x64+:=plug-ins\vray\vray3$\n" FileClose $0 Delete shaveHaircut.sav ${Endif} ignoreNoModFile: ClearErrors SetOutPath "$ArnoldInstallPath\extensions" File tempFiles\mtoa\*.dll File tempFiles\mtoa\*.py SetOutPath "$ArnoldInstallPath\shaders" File tempFiles\arnold\*.dll ; Shave API and examples SetOutPath "$EpicGamesInstallPath\api" File /oname=README mayaPlug\README-samples.win File libexe\shaveEngine.h File libexe\shaveSDKTYPES.h File mayaPlug\shaveAPI.h File mayaPlug\shaveItHair.h File mayaPlug\shaveAPITestCmd.cpp File mayaPlug\shaveAPITestApp.cpp File raw64\${ReleaseType}\libShaveEngine.lib File raw64\${ReleaseType}\${MayaCompactVersion}\libShaveAPI.lib ;Store installation folder WriteRegStr HKLM "Software\Epic Games\shaveHaircut" "InstallPath" $EpicGamesBasePath ;Create uninstaller WriteUninstaller "$EpicGamesInstallPath\Uninstall.exe" SectionEnd ;----------------- Installer Functions Function .onInit !insertmacro MUI_LANGDLL_DISPLAY FunctionEnd !insertmacro InitInstallPaths "" ;----------------- Uninstaller Sections Section "Uninstall" SetRegView 64 Call un.InitInstallPaths SetOutPath "$MayaInstallPath\bin\Cg" Delete /REBOOTOK shaveHair.cgfx SetOutPath "$MayaInstallPath\modules" Delete /REBOOTOK shaveHaircut.mod SetOutPath "$ArnoldInstallPath\extensions" Delete /REBOOTOK shave*.dll Delete /REBOOTOK shave*.py Delete /REBOOTOK shave*.pyc SetOutPath "$ArnoldInstallPath\shaders" Delete /REBOOTOK shave_shaders*.dll Delete "$EpicGamesInstallPath\Uninstall.exe" RMDir /r "$EpicGamesInstallPath" SectionEnd ;----------------- Uninstaller Functions Function un.onInit !insertmacro MUI_UNGETLANGUAGE FunctionEnd !insertmacro InitInstallPaths "un."