; $Id$ ; Script generated by the HM NIS Edit Script Wizard. ; HM NIS Edit Wizard helper defines !define PRODUCT_NAME "mt-daapd" !define PRODUCT_SERVICE "Multi-Threaded DAAP Daemon" !define /date DATEVER "%Y%m%d" !define PRODUCT_VERSION "cvs-${DATEVER}" !define PRODUCT_PUBLISHER "Ron Pedde" !define PRODUCT_WEB_SITE "http://www.mt-daapd.org" !define PRODUCT_DIR_REGKEY "Software\Microsoft\Windows\CurrentVersion\App Paths\mt-daapd.exe" !define PRODUCT_UNINST_KEY "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_NAME}" !define PRODUCT_UNINST_ROOT_KEY "HKLM" ; MUI 1.67 compatible ------ !include "MUI.nsh" ; MUI Settings !define MUI_ABORTWARNING !define MUI_ICON "${NSISDIR}\Contrib\Graphics\Icons\modern-install.ico" !define MUI_UNICON "${NSISDIR}\Contrib\Graphics\Icons\modern-uninstall.ico" ; Welcome page !insertmacro MUI_PAGE_WELCOME ; License page !define MUI_PAGE_CUSTOMFUNCTION_LEAVE LicensePost !insertmacro MUI_PAGE_LICENSE "..\..\admin-root\gpl-license.txt" ; Directory page !define MUI_PAGE_CUSTOMFUNCTION_PRE DirectoryPre !define MUI_PAGE_CUSTOMFUNCTION_SHOW DirectoryShow !define MUI_PAGE_CUSTOMFUNCTION_LEAVE DirectoryLeave !insertmacro MUI_PAGE_DIRECTORY ; Music Directory Page !define MUI_PAGE_CUSTOMFUNCTION_PRE DirectoryPre !define MUI_PAGE_CUSTOMFUNCTION_SHOW DirectoryShow !define MUI_PAGE_CUSTOMFUNCTION_LEAVE DirectoryLeave !insertmacro MUI_PAGE_DIRECTORY ; Instfiles page !insertmacro MUI_PAGE_INSTFILES ; Finish page !insertmacro MUI_PAGE_FINISH ; Uninstaller pages !insertmacro MUI_UNPAGE_INSTFILES ; Language files !insertmacro MUI_LANGUAGE "English" ; MUI end ------ Name "${PRODUCT_NAME} ${PRODUCT_VERSION}" OutFile "${PRODUCT_NAME}-${PRODUCT_VERSION}.exe" InstallDir "$PROGRAMFILES\mt-daapd" InstallDirRegKey HKLM "${PRODUCT_DIR_REGKEY}" "" ShowInstDetails show ShowUnInstDetails show !define PROJROOT "..\..\.." !define MTD_SOURCE "${PROJROOT}\mt-daapd\win32\Release" !define DLL_SOURCE "${PROJROOT}\win32\dll" !define ADMIN_ROOT "${PROJROOT}\mt-daapd\admin-root" Section -Pre nsSCM::QueryStatus "Bonjour Service" Pop $0 Pop $1 StrCmp $0 "success" lbl_got_bonjour MessageBox MB_OK "Bonjour for Windows service not found. Please install Apple's Bonjour for Windows." Quit lbl_got_bonjour: SectionEnd Section "MainSection" SEC01 SetOutPath "$2" SetOverwrite ifnewer File "${MTD_SOURCE}\mt-daapd.exe" File "${DLL_SOURCE}\gnu_regex.dll" File "${DLL_SOURCE}\pthreadVC2.dll" File "${DLL_SOURCE}\sqlite.dll" File "${DLL_SOURCE}\sqlite3.dll" File "${DLL_SOURCE}\zlib1.dll" SetOutPath "$2\admin-root" File "${ADMIN_ROOT}\thanks.html" File "${ADMIN_ROOT}\status.html" File "${ADMIN_ROOT}\smartpopup.html" File "${ADMIN_ROOT}\smart.js" File "${ADMIN_ROOT}\smart.html" File "${ADMIN_ROOT}\required.gif" File "${ADMIN_ROOT}\playlist.js" File "${ADMIN_ROOT}\playlist.html" File "${ADMIN_ROOT}\mt-daapd.png" File "${ADMIN_ROOT}\mt-daapd.js" File "${ADMIN_ROOT}\mt-daapd.css" File "${ADMIN_ROOT}\linkTransparent.gif" File "${ADMIN_ROOT}\linkOpaque.gif" File "${ADMIN_ROOT}\index.html" File "${ADMIN_ROOT}\hdr.html" File "${ADMIN_ROOT}\gpl-license.txt" File "${ADMIN_ROOT}\gpl-license.html" File "${ADMIN_ROOT}\ftr.html" File "${ADMIN_ROOT}\feedback.html" File "${ADMIN_ROOT}\favicon.ico" File "${ADMIN_ROOT}\DAAPApplet-0.1.jar" File "${ADMIN_ROOT}\CREDITS" File "${ADMIN_ROOT}\config-update.html" File "${ADMIN_ROOT}\config.html" File "${ADMIN_ROOT}\config.js" File "${ADMIN_ROOT}\aspl-license.txt" File "${ADMIN_ROOT}\aspl-license.html" File "${ADMIN_ROOT}\applet.html" File "${ADMIN_ROOT}\smart.js" SetOutPath "$2\admin-root\lib-js" File "${ADMIN_ROOT}\lib-js\prototype.js" File "${ADMIN_ROOT}\lib-js\rico.js" SetOutPath "$2\admin-root\lib-js\script.aculo.us" File "${ADMIN_ROOT}\lib-js\script.aculo.us\builder.js" File "${ADMIN_ROOT}\lib-js\script.aculo.us\controls.js" File "${ADMIN_ROOT}\lib-js\script.aculo.us\dragdrop.js" File "${ADMIN_ROOT}\lib-js\script.aculo.us\effects.js" File "${ADMIN_ROOT}\lib-js\script.aculo.us\scriptaculous.js" File "${ADMIN_ROOT}\lib-js\script.aculo.us\slider.js" File "${ADMIN_ROOT}\lib-js\script.aculo.us\unittest.js" SetOutPath "$2" File "mt-daapd-example.conf" IfFileExists "$2\mt-daapd.conf" HasConf SetOverwrite off CopyFiles "$2\mt-daapd-example.conf" "$2\mt-daapd.conf" WriteINIStr "$2\mt-daapd.conf" "general" "mp3_dir" $3 HasConf: SetAutoClose False SectionEnd Section -AdditionalIcons WriteIniStr "$2\${PRODUCT_NAME}.url" "InternetShortcut" "URL" "${PRODUCT_WEB_SITE}" CreateDirectory "$SMPROGRAMS\mt-daapd" CreateShortCut "$SMPROGRAMS\mt-daapd\Website.lnk" "$2\${PRODUCT_NAME}.url" CreateShortCut "$SMPROGRAMS\mt-daapd\Uninstall.lnk" "$2\uninst.exe" CreateShortCut "$SMPROGRAMS\mt-daapd\Debug Mode.lnk" "$2\mt-daapd.exe" "-d9 -f" CreateShortCut "$SMPROGRAMS\mt-daapd\Config File.lnk" "notepad.exe" "$2\mt-daapd.conf" SectionEnd Section -Post WriteUninstaller "$2\uninst.exe" WriteRegStr HKLM "${PRODUCT_DIR_REGKEY}" "" "$2\mt-daapd.exe" WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "DisplayName" "$(^Name)" WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "UninstallString" "$2\uninst.exe" WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "DisplayIcon" "$2\mt-daapd.exe" WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "DisplayVersion" "${PRODUCT_VERSION}" WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "URLInfoAbout" "${PRODUCT_WEB_SITE}" WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "Publisher" "${PRODUCT_PUBLISHER}" ; ExecWait "$2\mt-daapd.exe -i" nsSCM::Install "${PRODUCT_NAME}" "${PRODUCT_SERVICE}" 16 2 "$2\mt-daapd.exe" "" "Bonjour Service" "" "" Pop $0 Pop $1 StrCmp $0 "success" lbl_install_success IntCmp $1 1073 lbl_install_success ; service already exists MessageBox MB_OK "Error installing service: $1" lbl_install_success: nsSCM::Start "${PRODUCT_NAME}" SectionEnd Function un.onUninstSuccess HideWindow MessageBox MB_ICONINFORMATION|MB_OK "$(^Name) was successfully removed from your computer." FunctionEnd Function un.onInit MessageBox MB_ICONQUESTION|MB_YESNO|MB_DEFBUTTON2 "Are you sure you want to completely remove $(^Name) and all of its components?" IDYES +2 Abort FunctionEnd Function .onInit ; Must set $INSTDIR here to avoid adding ${PRODUCT_NAME} to the end of the ; path when user selects a new directory using the 'Browse' button. StrCpy $INSTDIR "$PROGRAMFILES\${PRODUCT_NAME}" FunctionEnd Function LicensePost StrCpy $9 "0" FunctionEnd Function DirectoryPre StrCmp $9 "0" OK ;Skip 2nd (Music) Directory Page if conf file Exists IfFileExists "$2\mt-daapd.conf" "" OK Abort OK: FunctionEnd Function DirectoryShow StrCmp $9 "0" AppDirectoryPage StrCmp $9 "1" MusicDirectoryPage AppDirectoryPage: StrCpy $9 "1" !insertmacro MUI_INNERDIALOG_TEXT 1041 "Destination Folder" !insertmacro MUI_INNERDIALOG_TEXT 1019 "$PROGRAMFILES\${PRODUCT_NAME}\" !insertmacro MUI_INNERDIALOG_TEXT 1006 "Setup will install ${PRODUCT_NAME} in the following folder.$\r$\n$\r$\nTo install in a different folder, click Browse and select another folder. Click Next to continue." Goto EndDirectoryShow MusicDirectoryPage: StrCpy $9 "2" !insertmacro MUI_HEADER_TEXT "Choose Music Location" "Choose the folder containing music to share." !insertmacro MUI_INNERDIALOG_TEXT 1041 "Music Folder" !insertmacro MUI_INNERDIALOG_TEXT 1019 "$DOCUMENTS\My Music" !insertmacro MUI_INNERDIALOG_TEXT 1006 "Setup will share the music in the following folder.$\r$\n$\r$\nTo share a different folder, click Browse and select another folder. Click Install to start the installation." EndDirectoryShow: FunctionEnd Function DirectoryLeave StrCmp $9 "1" SaveInstallDir StrCmp $9 "2" SaveMusicDir Goto EndDirectoryLeave SaveInstallDir: StrCpy $2 $INSTDIR Goto EndDirectoryLeave SaveMusicDir: Push $INSTDIR Call GetParent Pop $3 EndDirectoryLeave: FunctionEnd Function .onVerifyInstDir StrCmp $9 "2" DataPath All DataPath: ;all valid if UNC StrCpy $R2 $INSTDIR 2 StrCmp $R2 "\\" PathOK All: ; Invalid path if root Push $INSTDIR call GetRoot Pop $R1 StrCmp $R1 $INSTDIR "" PathOK Abort PathOK: FunctionEnd ;-------------------------------- ;Helper Functions ; GetParent ; input, top of stack (e.g. C:\Program Files\Poop) ; output, top of stack (replaces, with e.g. C:\Program Files) ; modifies no other variables. ; ; Usage: ; Push "C:\Program Files\Directory\Whatever" ; Call GetParent ; Pop $R0 ; ; at this point $R0 will equal "C:\Program Files\Directory" Function GetParent Exch $R0 Push $R1 Push $R2 Push $R3 StrCpy $R1 0 StrLen $R2 $R0 loop: IntOp $R1 $R1 + 1 IntCmp $R1 $R2 get 0 get StrCpy $R3 $R0 1 -$R1 StrCmp $R3 "\" get Goto loop get: StrCpy $R0 $R0 -$R1 Pop $R3 Pop $R2 Pop $R1 Exch $R0 FunctionEnd Function GetRoot Exch $0 Push $1 Push $2 Push $3 Push $4 StrCpy $1 $0 2 StrCmp $1 "\\" UNC StrCpy $0 $1 Goto done UNC: StrCpy $2 3 StrLen $3 $0 loop: IntCmp $2 $3 "" "" loopend StrCpy $1 $0 1 $2 IntOp $2 $2 + 1 StrCmp $1 "\" loopend loop loopend: StrCmp $4 "1" +3 StrCpy $4 1 Goto loop IntOp $2 $2 - 1 StrCpy $0 $0 $2 done: Pop $4 Pop $3 Pop $2 Pop $1 Exch $0 FunctionEnd Section Uninstall nsSCM::Stop "${PRODUCT_NAME}" nsSCM::Remove "${PRODUCT_NAME}" Pop $0 StrCmp $0 "success" lbl_continue_uninstall MessageBox MB_OK "Error Uninstalling service: $1" lbl_continue_uninstall: Delete "$INSTDIR\${PRODUCT_NAME}.url" Delete "$INSTDIR\uninst.exe" Delete "$INSTDIR\gnu_regex.dll" Delete "$INSTDIR\pthreadVC2.dll" Delete "$INSTDIR\sqlite.dll" Delete "$INSTDIR\sqlite3.dll" Delete "$INSTDIR\mt-daapd.conf" Delete "$INSTDIR\zlib1.dll" Delete "$INSTDIR\mt-daapd-example.conf" Delete "$INSTDIR\admin-root\applet.html" Delete "$INSTDIR\admin-root\aspl-license.html" Delete "$INSTDIR\admin-root\aspl-license.txt" Delete "$INSTDIR\admin-root\config.html" Delete "$INSTDIR\admin-root\config-update.html" Delete "$INSTDIR\admin-root\CREDITS" Delete "$INSTDIR\admin-root\DAAPApplet-0.1.jar" Delete "$INSTDIR\admin-root\favicon.ico" Delete "$INSTDIR\admin-root\feedback.html" Delete "$INSTDIR\admin-root\ftr.html" Delete "$INSTDIR\admin-root\gpl-license.html" Delete "$INSTDIR\admin-root\gpl-license.txt" Delete "$INSTDIR\admin-root\hdr.html" Delete "$INSTDIR\admin-root\index.html" Delete "$INSTDIR\admin-root\linkOpaque.gif" Delete "$INSTDIR\admin-root\linkTransparent.gif" Delete "$INSTDIR\admin-root\mt-daapd.css" Delete "$INSTDIR\admin-root\mt-daapd.js" Delete "$INSTDIR\admin-root\mt-daapd.png" Delete "$INSTDIR\admin-root\playlist.html" Delete "$INSTDIR\admin-root\playlist.js" Delete "$INSTDIR\admin-root\required.gif" Delete "$INSTDIR\admin-root\smart.html" Delete "$INSTDIR\admin-root\smart.js" Delete "$INSTDIR\admin-root\smartpopup.html" Delete "$INSTDIR\admin-root\status.html" Delete "$INSTDIR\admin-root\thanks.html" Delete "$INSTDIR\admin-root\config.js" Delete "$INSTDIR\admin-root\lib-js\prototype.js" Delete "$INSTDIR\admin-root\lib-js\rico.js" Delete "$INSTDIR\admin-root\lib-js\script.aculo.us\builder.js" Delete "$INSTDIR\admin-root\lib-js\script.aculo.us\controls.js" Delete "$INSTDIR\admin-root\lib-js\script.aculo.us\dragdrop.js" Delete "$INSTDIR\admin-root\lib-js\script.aculo.us\effects.js" Delete "$INSTDIR\admin-root\lib-js\script.aculo.us\scriptaculous.js" Delete "$INSTDIR\admin-root\lib-js\script.aculo.us\slider.js" Delete "$INSTDIR\admin-root\lib-js\script.aculo.us\unittest.js" RMDir "$INSTDIR\admin-root\lib-js\script.aculo.us" RMDir "$INSTDIR\admin-root\lib-js" RMDir "$INSTDIR\admin-root" Delete "$INSTDIR\mt-daapd.exe" Delete "$SMPROGRAMS\mt-daapd\Uninstall.lnk" Delete "$SMPROGRAMS\mt-daapd\Website.lnk" Delete "$SMPROGRAMS\mt-daapd\Config File.lnk" Delete "$SMPROGRAMS\mt-daapd\Debug Mode.lnk" RMDir "$SMPROGRAMS\mt-daapd" RMDir "$INSTDIR" DeleteRegKey ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" DeleteRegKey HKLM "${PRODUCT_DIR_REGKEY}" SetAutoClose false SectionEnd