2006-01-16 21:02:54 +00:00
; Copyright (c) 2005, Fredrik Mellbin, Krunal Desai
; All rights reserved.
;
; Redistribution and use in source and binary forms, with or without
; modification, are permitted provided that the following conditions are met:
;
; * Redistributions of source code must retain the above copyright notice,
; this list of conditions and the following disclaimer.
; * Redistributions in binary form must reproduce the above copyright notice,
; this list of conditions and the following disclaimer in the documentation
; and/or other materials provided with the distribution.
; * Neither the name of the Aegisub Group nor the names of its contributors
; may be used to endorse or promote products derived from this software
; without specific prior written permission.
;
; THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
; AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
; IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
; ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
; LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
; CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
; SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
; INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
; CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
; ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
; POSSIBILITY OF SUCH DAMAGE.
;
; -----------------------------------------------------------------------------
;
; AEGISUB
;
; Website: http://aegisub.cellosoft.com
; Contact: mailto:zeratul@cellosoft.com
;
;************************************************************************************
crccheck force
;************************************************************************************
;Macros
;--------------------------------
2006-08-07 20:52:35 +00:00
!define AEGISUB_VERSION " 1.10 "
2006-01-16 21:02:54 +00:00
!define NAME " Aegisub ${AEGISUB_VERSION} "
!define FNAME " Aegisub-${AEGISUB_VERSION} "
!define DISPLAYNAME " Aegisub ${AEGISUB_VERSION} "
!define VERSIONDATE " ${__DATE__} "
!define AVISYNTH_INSTALLER " Avisynth_256.exe "
!define AVISYNTH_INSTALLER_SERVER " http://d.movax.org "
!define AVISYNTH_SOURCE " Avisynth_256_source.rar "
!define AVISYNTH_SOURCE_SERVER " http://files.cellosoft.com/zeratul "
;--------------------------------
;Version Information
2006-08-07 20:52:35 +00:00
VIProductVersion " 1.1.0.0 "
2006-01-16 21:02:54 +00:00
VIAddVersionKey " ProductName " " Aegisub "
VIAddVersionKey " Comments " " Saving the world from bad typesetting. "
VIAddVersionKey " CompanyName " " #aegisub "
VIAddVersionKey " FileDescription " " ${NAME} "
VIAddVersionKey " FileVersion " " ${AEGISUB_VERSION} "
VIAddVersionKey " LegalCopyright " " The Aegisub Group "
;--------------------------------
;Includes
!include " MUI.nsh "
!include " Sections.nsh "
!include " WinMessages.nsh "
!include " logiclib.nsh "
;************************************************************************************
;General Settings
Name " ${NAME} "
SetCompressor /SOLID /FINAL LZMA
Outfile " ${FNAME}.exe "
InstallDirRegKey HKLM " Software\Aegisub\info " " InstallDir "
InstallDir " $PROGRAMFILES \Aegisub "
var startmenudir
var prevname
var prevdir
var prevver
var vsfilter_installed
var aegisub_source_installed
var help_installed
;************************************************************************************
;Modern UI Configuration
!define MUI_COMPONENTSPAGE_CHECKBITMAP " C:\Program Files\NSIS\Contrib\Graphics\Checks\modern.bmp "
!define MUI_COMPONENTSPAGE_SMALLDESC
!define MUI_FINISHPAGE_NOAUTOCLOSE
!define MUI_UNFINISHPAGE_NOAUTOCLOSE
!define MUI_ABORTWARNING
!define MUI_UNABORTWARNING
!define MUI_HEADERIMAGE
!define MUI_HEADERIMAGE_RIGHT
!define MUI_HEADERIMAGE_BITMAP " aegisub.bmp "
!define MUI_WELCOMEFINISHPAGE_BITMAP " welcome.bmp "
!define MUI_STARTMENUPAGE_DEFAULTFOLDER " Aegisub "
XPstyle on
;************************************************************************************
;Pages
!insertmacro MUI_PAGE_WELCOME
!define MUI_LICENSEPAGE_CHECKBOX
!define MUI_LICENSEPAGE_CHECKBOX_TEXT " I agree. "
!insertmacro MUI_PAGE_LICENSE license.txt
!insertmacro MUI_PAGE_COMPONENTS
!insertmacro MUI_PAGE_DIRECTORY
!insertmacro MUI_PAGE_STARTMENU 1 $startmenu dir
!insertmacro MUI_PAGE_INSTFILES
!insertmacro MUI_UNPAGE_WELCOME
!insertmacro MUI_UNPAGE_CONFIRM
!insertmacro MUI_UNPAGE_INSTFILES
;************************************************************************************
;Languages
!insertmacro MUI_LANGUAGE " English "
;************************************************************************************
;Language Strings
LangString DESC_AEGISUB_GROUP ${LANG_ENGLISH} \
" Aegisub ${AEGISUB_VERSION} Program files. "
LangString DESC_AVISYNTH_GROUP ${LANG_ENGLISH} \
" Download the avisynth installer or source. "
LangString DESC_AEGISUB_SECTION ${LANG_ENGLISH} \
" ${NAME} main program files. "
LangString DESC_AEGISUB_SOURCE_SECTION ${LANG_ENGLISH} \
" ${NAME} source files. "
LangString DESC_AEGISUB_HELP_SECTION ${LANG_ENGLISH} \
" Aegisub help files. "
LangString DESC_VSFILTER_SECTION ${LANG_ENGLISH} \
" Places a copy of VSFilter 2.37 in the Aegisub directory. "
LangString DESC_AVISYNTH_INSTALLER_SECTION ${LANG_ENGLISH} \
" Downloads the Avisynth 2.5.6a installer and executes it. "
LangString DESC_AVISYNTH_SOURCE_SECTION ${LANG_ENGLISH} \
" Downloads the Avisynth 2.5.6a source and places it on the desktop. "
;************************************************************************************
reservefile " ${NSISDIR} \Plugins\Userinfo.dll "
reservefile " ${NSISDIR} \Plugins\Nsisdl.dll "
!macro checkrightspoweruser
UserInfo :: GetAccountType
pop $R0
${if} $R0 != " Admin "
${andif} $R0 != " Power "
MessageBox MB_OK | MB_ICONSTOP " This program can only be run by power users or higher. " IDOK
abort
${endif}
!macroend
!macro checkrightsnormaluser
UserInfo :: GetAccountType
pop $R0
${if} $R0 != " Admin "
${andif} $R0 != " Power "
${andif} $R0 != " Normal "
MessageBox MB_OK | MB_ICONSTOP " This program can only be run by normal users or higher. " IDOK
abort
${endif}
!macroend
;************************************************************************************
;Design / Text
XPStyle on
BrandingText " ${NAME} | ${VERSIONDATE} "
ShowInstDetails hide
;************************************************************************************
;Functions
;************************************************************************************
Function .onInit
Call GetWindowsVersion
Pop $R0
${if} $R0 != " 2000 "
${andif} $R0 != " XP "
${andif} $R0 != " 2003 "
MessageBox MB_OK | MB_ICONSTOP " Only windows 2000/XP/2003 is supported by this installer. "
quit
${endif}
!insertmacro checkrightspoweruser
System :: Call 'kernel32::CreateMutexA(i 0, i 0, t "aegisinstaller") i .r1 ?e'
Pop $R0
${unless} $R0 = 0
MessageBox MB_OK | MB_ICONEXCLAMATION " Installer already running. "
Abort
${endunless}
ClearErrors
ReadRegStr $prevver HKLM " Software\Aegisub\info " " InstVer "
IfErrors lbl_new_installation
ReadRegStr $prevdir HKLM " Software\Aegisub\info " " InstallDir "
ReadRegStr $prevname HKLM " Software\Aegisub\info " " InstName "
${if} $prevdir != " "
StrCpy $INSTDIR $prevdir
${endif}
MessageBox MB_YESNOCANCEL | MB_ICONEXCLAMATION " Previous Aegisub install detected (Version $prevver). Uninstall? (No will overwrite existing files, Cancel will exit.) " IDYES lbl_uninstall_previous IDNO lbl_new_installation
quit
lbl_uninstall_previous :
CopyFiles " $prevdir \uninstall.exe " $TEMP
ExecWait '"$TEMP\uninstall.exe" _?=$prevdir'
Delete " $TEMP \uninstall.exe "
lbl_new_installation :
FunctionEnd
Function un.onInit
!insertmacro checkrightspoweruser
FunctionEnd
;************************************************************************************
;Installer Sections
;************************************************************************************
SectionGroup /e " !Aegisub Program Files " AEGISUB_GROUP
Section " Aegisub " AEGISUB_SECTION
SectionIn RO
SetOutPath $INSTDIR
File " Aegisub.exe "
File " Aegisub Site.url "
File " changelog.txt "
File /r " locale "
File " msvcp71.dll "
File " msvcr71.dll "
WriteUninstaller " $INSTDIR \Uninstall.exe "
File /r " automation "
!insertmacro MUI_STARTMENU_WRITE_BEGIN 1
SetOutPath $smprograms \ $startmenu dir
CreateShortCut " $smprograms \$startmenudir\Aegisub.lnk " " $INSTDIR \aegisub.exe "
CreateShortCut " $smprograms \$startmenudir\Aegisub Site.lnk " " $INSTDIR \Aegisub Site.url "
CreateShortCut " $smprograms \$startmenudir\Changelog.lnk " " $INSTDIR \changelog.txt "
CreateShortCut " $smprograms \$startmenudir\Uninstall.lnk " " $INSTDIR \Uninstall.exe "
!insertmacro MUI_STARTMENU_WRITE_END
WriteRegDWORD HKLM " Software\Aegisub " " aegisub " " 1 "
WriteRegStr HKLM " Software\Aegisub\info " " InstName " " ${NAME} "
WriteRegStr HKLM " Software\Aegisub\info " " InstVer " " ${AEGISUB_VERSION} "
WriteRegStr HKLM " Software\Aegisub\info " " InstallDir " " $INSTDIR "
WriteRegStr HKLM " Software\Aegisub\info " " StartMenuDir " " $startmenu dir "
WriteRegStr HKLM " Software\Microsoft\Windows\CurrentVersion\Uninstall\${NAME} " " DisplayName " " ${DISPLAYNAME} (Remove Only) "
WriteRegStr HKLM " Software\Microsoft\Windows\CurrentVersion\Uninstall\${NAME} " " DisplayIcon " " $INSTDIR \aegisub.exe,0 "
WriteRegStr HKLM " Software\Microsoft\Windows\CurrentVersion\Uninstall\${NAME} " " InstallLocation " " $INSTDIR "
WriteRegStr HKLM " Software\Microsoft\Windows\CurrentVersion\Uninstall\${NAME} " " UninstallString " " $INSTDIR \Uninstall.exe "
WriteRegDWORD HKLM " Software\Microsoft\Windows\CurrentVersion\Uninstall\${NAME} " " NoModify " " 1 "
WriteRegDWORD HKLM " Software\Microsoft\Windows\CurrentVersion\Uninstall\${NAME} " " NoRepair " " 1 "
SectionEnd
Section " Aegisub Help " AEGISUB_HELP_SECTION
SetOutPath $INSTDIR
File " Aegisub.chm "
WriteRegDWORD HKLM " Software\Aegisub " " aegisub_help " " 1 "
!insertmacro MUI_STARTMENU_WRITE_BEGIN 1
SetOutPath $smprograms \ $startmenu dir
CreateShortCut " $smprograms \$startmenudir\Aegisub Help.lnk " " $INSTDIR \aegisub.chm "
!insertmacro MUI_STARTMENU_WRITE_END
SectionEnd
Section " VSFilter 2.37 " VSFILTER_SECTION
SetoutPath $INSTDIR
File " vsfilter.dll "
WriteRegDWORD HKLM " Software\Aegisub " " aegisub_vsfilter " " 1 "
SectionEnd
2006-08-07 20:54:44 +00:00
;Section /o "Aegisub Source" AEGISUB_SOURCE_SECTION
;SetoutPath $INSTDIR
; File /r "source"
; WriteRegDWORD HKLM "Software\Aegisub" "aegisub_source" "1"
;SectionEnd
2006-01-16 21:02:54 +00:00
SectionGroupEnd
SectionGroup /e " Avisynth " AVISYNTH_GROUP
Section /o " Avisynth 2.5.6a " AVISYNTH_INSTALLER_SECTION
SetOutPath $INSTDIR
IfFileExists " $DESKTOP \${AVISYNTH_INSTALLER} " lbl_avisynth_end
ReadRegStr $R2 HKLM " Software\Avisynth " " "
${if} $R2 != " "
2006-01-25 10:53:16 +00:00
MessageBox MB_ICONQUESTION | MB_YESNO " Avisynth is already installed. Would you like to install over the current version? (required if your version is older than 2.5.3) " IDNO lbl_avisynth_end
2006-01-16 21:02:54 +00:00
${endif}
GetTempFilename $R1 $TEMP
lbl_avisynth_dl :
Delete $R1
NSISdl :: download /TRANSLATE " Downloading ${AVISYNTH_INSTALLER} " " Connecting... " " second " " minute " " hour " " s " " %dkB (%d%%) of %dkB @ %d.%01dkB/s " " (%d %s%s remaining) " " ${AVISYNTH_INSTALLER_SERVER}/${AVISYNTH_INSTALLER} " " $R1 "
Pop $R0 ;Get the return value
StrCmp $R0 " success " lbl_avisynth_success lbl_avisynth_fail
lbl_avisynth_fail :
MessageBox MB_ABORTRETRYIGNORE " Download failed: $R0 " IDIGNORE lbl_avisynth_ignore IDRETRY lbl_avisynth_dl
goto lbl_avisynth_abort
lbl_avisynth_success :
Rename $R1 " $DESKTOP \${AVISYNTH_INSTALLER} "
lbl_avisynth_install :
ExecWait " $DESKTOP \${AVISYNTH_INSTALLER} "
ReadRegStr $R2 HKLM " Software\Avisynth " " "
${if} $R2 == " "
MessageBox MB_ABORTRETRYIGNORE " Avisynth install either failed or was cancelled. " IDRETRY lbl_avisynth_install IDIGNORE lbl_avisynth_end
goto lbl_avisynth_abort
${endif}
goto lbl_avisynth_end
lbl_avisynth_ignore :
Delete $R1
goto lbl_avisynth_end
lbl_avisynth_abort :
Delete $R1
quit
lbl_avisynth_end :
SectionEnd
2006-08-07 20:52:35 +00:00
;Section /o "Avisynth 2.5.6a Source" AVISYNTH_SOURCE_SECTION
;SetOutPath $INSTDIR
;
; IfFileExists "$DESKTOP\${AVISYNTH_SOURCE}" lbl_avisynth_source_end
;
; GetTempFilename $R1 $TEMP
;
; lbl_avisynth_source_dl:
; Delete $R1
; NSISdl::download /TRANSLATE "Downloading ${AVISYNTH_SOURCE}" "Connecting..." "second" "minute" "hour" "s" "%dkB (%d%%) of %dkB @ %d.%01dkB/s" "(%d %s%s remaining)" "${AVISYNTH_SOURCE_SERVER}/avisynth_src.rar" "$R1"
; Pop $R0 ;Get the return value
; StrCmp $R0 "success" lbl_avisynth_source_success lbl_avisynth_source_fail
; lbl_avisynth_source_fail:
; MessageBox MB_ABORTRETRYIGNORE "Download failed: $R0" IDIGNORE lbl_avisynth_source_ignore IDRETRY lbl_avisynth_source_dl
; goto lbl_avisynth_source_abort
; lbl_avisynth_source_success:
; Rename $R1 "$DESKTOP\${AVISYNTH_SOURCE}"
; goto lbl_avisynth_source_end
;
; lbl_avisynth_source_ignore:
; Delete $R1
; goto lbl_avisynth_source_end
;
; lbl_avisynth_source_abort:
; Delete $R1
; quit
;
; lbl_avisynth_source_end:
;SectionEnd
2006-01-16 21:02:54 +00:00
SectionGroupEnd
;************************************************************************************
Section " Uninstall "
System :: Call 'kernel32::CreateMutexA(i 0, i 0, t "aegisun") i .r1 ?e'
Pop $R0
${unless} $R0 = 0
MessageBox MB_OK | MB_ICONEXCLAMATION " Uninstaller already running. "
Abort
${endunless}
!insertmacro checkrightspoweruser
SetOutPath $INSTDIR
Delete " $INSTDIR \Aegisub.exe "
Delete " $INSTDIR \Aegisub Site.url "
Delete " $INSTDIR \changelog.txt "
Delete " $INSTDIR \uninstall.exe "
Delete " $INSTDIR \msvcp71.dll "
Delete " $INSTDIR \msvcr71.dll "
RMDir /r " $INSTDIR \locale "
RMDir " $INSTDIR \autosave "
RMDir " $INSTDIR \autoback "
;automation
Delete " $INSTDIR \automation\automation-lua.txt "
;include
2006-08-07 20:52:35 +00:00
;Delete "$INSTDIR\automation\include\readme.txt"
;Delete "$INSTDIR\automation\include\utils.lua"
;Delete "$INSTDIR\automation\include\karaskel.lua"
;Delete "$INSTDIR\automation\include\karaskel-adv.lua"
RMDir /r " $INSTDIR \automation\include "
2006-01-16 21:02:54 +00:00
;factorybrew
RMDir /r " $INSTDIR \automation\factorybrew "
;demos
RMDir /r " $INSTDIR \automation\demos "
RMDir " $INSTDIR \automation "
;automation end
IfFileExists " $INSTDIR \catalog\* " " " lbl_empty_catalog
MessageBox MB_YESNO | MB_ICONQUESTION " Would you like to keep your styles catalog? " IDYES lbl_empty_catalog
Delete " $INSTDIR \catalog\* "
lbl_empty_catalog :
RMDir " $INSTDIR \catalog "
ReadRegDWORD $vsfilter_installed HKLM " Software\Aegisub " " aegisub_vsfilter "
ReadRegDWORD $aegisub_source_installed HKLM " Software\Aegisub " " aegisub_source "
ReadRegDWORD $help_installed HKLM " Software\Aegisub " " aegisub_help "
ReadRegStr $startmenu dir HKLM " Software\Aegisub\info " " StartMenuDir "
${if} $aegisub_source_installed = 1
MessageBox MB_YESNO | MB_ICONQUESTION " Would you like to keep the source directory? " IDYES lbl_keep_aegisub_source
RMDir /r " $INSTDIR \source "
lbl_keep_aegisub_source :
${endif}
${if} $vsfilter_installed = 1
Delete " $INSTDIR \vsfilter.dll "
${endif}
${if} $help_installed = 1
Delete " $INSTDIR \aegisub.chm "
Delete " $SMPROGRAMS \$startmenudir\Aegisub Help.lnk "
${endif}
DeleteRegKey HKLM " Software\Microsoft\Windows\CurrentVersion\Uninstall\${NAME} "
DeleteRegKey HKLM " Software\Aegisub "
;backup config
IfFileExists " $INSTDIR \config.dat " " " lbl_no_config_end
MessageBox MB_YESNO " Would you like to save your Aegisub configuration? " IDYES lbl_no_config_end
Delete " $INSTDIR \config.dat "
lbl_no_config_end :
${unless} $startmenu dir == " "
Delete " $SMPROGRAMS \$startmenudir\Aegisub.lnk "
Delete " $SMPROGRAMS \$startmenudir\Uninstall.lnk "
Delete " $SMPROGRAMS \$startmenudir\Aegisub Site.lnk "
Delete " $SMPROGRAMS \$startmenudir\Changelog.lnk "
RMDir " $SMPROGRAMS \$startmenudir "
${endunless}
SetOutPath $TEMP
RMDir " $INSTDIR "
SectionEnd
;************************************************************************************
Function GetWindowsVersion
Push $R0
Push $R1
ClearErrors
ReadRegStr $R0 HKLM \
" SOFTWARE\Microsoft\Windows NT\CurrentVersion " CurrentVersion
IfErrors 0 lbl_winnt
; we are not NT
ReadRegStr $R0 HKLM \
" SOFTWARE\Microsoft\Windows\CurrentVersion " VersionNumber
StrCpy $R1 $R0 1
StrCmp $R1 '4' 0 lbl_error
StrCpy $R1 $R0 3
StrCmp $R1 '4.0' lbl_win32_95
StrCmp $R1 '4.9' lbl_win32_ME lbl_win32_98
lbl_win32_95 :
StrCpy $R0 '95'
Goto lbl_done
lbl_win32_98 :
StrCpy $R0 '98'
Goto lbl_done
lbl_win32_ME :
StrCpy $R0 'ME'
Goto lbl_done
lbl_winnt :
StrCpy $R1 $R0 1
StrCmp $R1 '3' lbl_winnt_x
StrCmp $R1 '4' lbl_winnt_x
StrCpy $R1 $R0 3
StrCmp $R1 '5.0' lbl_winnt_2000
StrCmp $R1 '5.1' lbl_winnt_XP
StrCmp $R1 '5.2' lbl_winnt_2003 lbl_error
lbl_winnt_x :
StrCpy $R0 " NT $R0 " 6
Goto lbl_done
lbl_winnt_2000 :
Strcpy $R0 '2000'
Goto lbl_done
lbl_winnt_XP :
Strcpy $R0 'XP'
Goto lbl_done
lbl_winnt_2003 :
Strcpy $R0 '2003'
Goto lbl_done
lbl_error :
Strcpy $R0 ''
lbl_done :
Pop $R1
Exch $R0
FunctionEnd
;************************************************************************************
;Descriptions
!insertmacro MUI_FUNCTION_DESCRIPTION_BEGIN
!insertmacro MUI_DESCRIPTION_TEXT ${AEGISUB_GROUP} $ ( DESC_AEGISUB_GROUP)
!insertmacro MUI_DESCRIPTION_TEXT ${AVISYNTH_GROUP} $ ( DESC_AVISYNTH_GROUP)
!insertmacro MUI_DESCRIPTION_TEXT ${AEGISUB_SECTION} $ ( DESC_AEGISUB_SECTION)
!insertmacro MUI_DESCRIPTION_TEXT ${AEGISUB_SOURCE_SECTION} $ ( DESC_AEGISUB_SOURCE_SECTION)
!insertmacro MUI_DESCRIPTION_TEXT ${AEGISUB_HELP_SECTION} $ ( DESC_AEGISUB_HELP_SECTION)
!insertmacro MUI_DESCRIPTION_TEXT ${VSFILTER_SECTION} $ ( DESC_VSFILTER_SECTION)
!insertmacro MUI_DESCRIPTION_TEXT ${AVISYNTH_INSTALLER_SECTION} $ ( DESC_AVISYNTH_INSTALLER_SECTION)
!insertmacro MUI_DESCRIPTION_TEXT ${AVISYNTH_SOURCE_SECTION} $ ( DESC_AVISYNTH_SOURCE_SECTION)
!insertmacro MUI_FUNCTION_DESCRIPTION_END
;*****************EOF*********EOF***********EOF**************EOF*********EOF**********