; $Id$ ; Copyright 2013 Siep Kroonenberg ; This file is licensed under the GNU General Public License version 2 ; or any later version. ; ; This nsi script is used by tl-update-install-pkg to make install-tl.exe. !include nsDialogs.nsh !include WinVer.nsh ; !include LogicLib.nsh ; already loaded by either of the above !include "FileFunc.nsh" !macro NSD_SetUserData hwnd data nsDialogs::SetUserData ${hwnd} ${data} !macroend !define NSD_SetUserData `!insertmacro NSD_SetUserData` !macro NSD_GetUserData hwnd outvar nsDialogs::GetUserData ${hwnd} Pop ${outvar} !macroend !define NSD_GetUserData `!insertmacro NSD_GetUserData` !include tlsubdir.nsh ; generated by tl-update-install-pkg Name "TeX Live Installer ${YYYYMMDD}" OutFile install-tl.exe Caption "TeX Live installer" SubCaption 2 ": Unpack directory" SubCaption 4 ": Unpacking..." XPStyle on RequestExecutionLevel user SetCompressor /SOLID bzip2 ; Controls: installation type Var Dialog Var Label Var RadioSimple Var RadioAdvanced Var RadioUnpack ; Controls: confirmation page Var Confirm Var Explain ; values for installation type Var Radio_Value Var Radio_Default Var Radio_Temp Var Admin_warning Var Completed_text CompletedText $Completed_text Var InstOrUnpack ;Var NextOrUnpack ;MiscButtonText "" $NextOrUnpack "" "" InstallButtonText $InstOrUnpack ; for local testing: Var REPO Page custom tlOptionsPage tlOptionsPageLeave Page directory dirPre "" dirLeave Page custom ConfirmPage ConfirmLeave Page instfiles Function .onInit ${If} ${AtMostWin2000} MessageBox MB_OK|MB_ICONSTOP \ "Windows XP earliest supported version; aborting..." Abort ${EndIf} InitPluginsDir StrCpy $INSTDIR $PLUGINSDIR UserInfo::GetAccountType Pop $0 ${If} $0 == "Admin" StrCpy $Admin_warning "" ${Else} ; failure or no admin permissions StrCpy $Admin_warning "Only single-user install possible.$\r$\nFor an all-users installation, abort now and re-run as administrator.$\r$\n" ${EndIf} StrCpy $Radio_Default "simple" StrCpy $Radio_Value $Radio_Default ;StrCpy $NextOrUnpack "Next" FunctionEnd Function dirPre ${If} $Radio_Value != "unpack" Abort ${EndIf} FunctionEnd Function dirLeave Push $0 ${DirState} "$INSTDIR\${INST_TL_NAME}" $0 ${If} $0 == 1 MessageBox MB_YESNO \ "OK to replace contents of $INSTDIR\${INST_TL_NAME}?" \ IDYES continue Abort continue: RMDir /r "$INSTDIR\${INST_TL_NAME}" ${EndIf} Pop $0 FunctionEnd DirText "Directory to unpack the TeX Live installer" Function tlOptionsPage nsDialogs::Create 1018 Pop $Dialog ${If} $Dialog == error Abort ${EndIf} ${NSD_CreateLabel} 0 0 100% 24u $Admin_warning Pop $Label ${NSD_CreateRadioButton} 0 35u 100% 9u "Simple install (big)" Pop $RadioSimple ${NSD_SetUserData} $RadioSimple $Radio_Default ; set to "simple" in .onInit ${NSD_CreateRadioButton} 0 50u 100% 9u "Custom install" Pop $RadioAdvanced ${NSD_SetUserData} $RadioAdvanced "advanced" ${NSD_CreateRadioButton} 0 65u 100% 9u "Unpack only" Pop $RadioUnpack ${NSD_SetUserData} $RadioUnpack "unpack" Call Value_to_States ${NSD_OnClick} $RadioSimple UpdateRadio ${NSD_OnClick} $RadioAdvanced UpdateRadio ${NSD_OnClick} $RadioUnpack UpdateRadio nsDialogs::Show FunctionEnd Function tlOptionsPageLeave Call Value_to_States ${If} $Radio_Value == "unpack" StrCpy $INSTDIR "$DESKTOP" StrCpy $Completed_text \ "Done; next run install-tl.bat or install-tl-advanced.bat." StrCpy $InstOrUnpack "Unpack" ;StrCpy $NextOrUnpack "Next" ${Else} StrCpy $Completed_text "Completed" StrCpy $InstOrUnpack "Install" ;StrCpy $NextOrUnpack "Unpack" ${EndIf} FunctionEnd Function Value_to_States ${NSD_Uncheck} $RadioSimple ${NSD_Uncheck} $RadioAdvanced ${NSD_Uncheck} $RadioUnpack ${NSD_GetUserData} $RadioSimple $Radio_Temp ${If} $Radio_Temp == $Radio_Value ${NSD_Check} $RadioSimple ${EndIf} ${NSD_GetUserData} $RadioAdvanced $Radio_Temp ${If} $Radio_Temp == $Radio_Value ${NSD_Check} $RadioAdvanced ${EndIf} ${NSD_GetUserData} $RadioUnpack $Radio_Temp ${If} $Radio_Temp == $Radio_Value ${NSD_Check} $RadioUnpack ${EndIf} FunctionEnd Function UpdateRadio Pop $1 ${NSD_GetUserData} $1 $Radio_Value FunctionEnd Function ConfirmPage ;${If} $Radio_Value == "unpack" ; Abort ;${EndIf} nsDialogs::Create 1018 Pop $Confirm ${If} $Confirm == error Abort ${EndIf} ${If} $Radio_Value == "unpack" ${NSD_CreateLabel} 0 30% 100% 80u \ "The main installer will be unpacked into $INSTDIR\${INST_TL_NAME}.$\r$\n$\r$\ninstall-tl.bat and install-tl-advanced.bat will start the main installer." ${ElseIf} $Radio_Value == "advanced" ${NSD_CreateLabel} 0 30% 100% 80u \ "Click 'Install' to start the main installer,$\r$\nwhich lets you select components and an installation directory.$\r$\n$\r$\nUnpacking the main installer may take a moment..." ${Else} ${NSD_CreateLabel} 0 30% 100% 80u \ "Click 'Install' to start the main installer,$\r$\nwhich lets you select an installation directory.$\r$\n$\r$\nUnpacking the main installer may take a moment..." ${EndIf} Pop $Explain nsDialogs::Show FunctionEnd Function ConfirmLeave FunctionEnd Section ${GetParameters} $REPO ${If} $REPO != "" StrCpy $REPO "-repository $REPO" ${EndIf} ; for local testing: ; StrCpy $REPO "-repository U:\systems\texlive\tlnet" ; StrCpy $REPO "-repository D:\tlnet" ; Detailprint $Radio_Value ; DetailPrint '-- $REPO --' ${If} $Radio_Value == "unpack" SetOutPath $INSTDIR ${Else} ; nsis uses $PLUGINSDIR for temporary files which will be ; automatically cleared afterwards SetOutPath $PLUGINSDIR ${EndIf} CreateDirectory $INSTDIR\${INST_TL_NAME} ; production code: File /r ${INST_TL_NAME} ; Quick interface testing: ; File /oname=${INST_TL_NAME}\README ${INST_TL_NAME}\README ${If} $Radio_Value == "advanced" nsExec::Exec '"$INSTDIR\${INST_TL_NAME}\install-tl.bat" -gui perltk $REPO' ${ElseIf} $Radio_Value == "simple" nsExec::Exec '"$INSTDIR\${INST_TL_NAME}\install-tl.bat" $REPO' ${EndIf} SectionEnd