; Ruby Installer ; ; Douglas Thrift ; ; $Id$ !ifndef RUBY_VERSION | GEMS_VERSION | RUBY_LICENSE | BASE !error "RUBY_VERSION, GEMS_VERSION, RUBY_LICENSE, and BASE must be defined" !endif InstallDir "C:\ruby" Name "Ruby" OutFile "ruby-${RUBY_VERSION}-rubygems-${GEMS_VERSION}.exe" SetCompressor /SOLID lzma ShowInstDetails show ShowUninstDetails show XPStyle on !define RUBY "Ruby ${RUBY_VERSION}" !define UNINST_REG "Software\Microsoft\Windows\CurrentVersion\Uninstall\$(^Name)" !define UNINST_EXE "ruby-rubygems-uninst.exe" !include "EnvVarUpdate.nsh" !include "MUI2.nsh" !define MUI_FINISHPAGE_NOAUTOCLOSE !define MUI_UNFINISHPAGE_NOAUTOCLOSE !insertmacro MUI_PAGE_WELCOME !insertmacro MUI_PAGE_LICENSE "${RUBY_LICENSE}" !insertmacro MUI_PAGE_DIRECTORY !insertmacro MUI_PAGE_INSTFILES !insertmacro MUI_PAGE_FINISH !insertmacro MUI_UNPAGE_WELCOME !insertmacro MUI_UNPAGE_CONFIRM !insertmacro MUI_UNPAGE_INSTFILES !insertmacro MUI_UNPAGE_FINISH !insertmacro MUI_LANGUAGE "English" !include "WordFunc.nsh" !insertmacro WordReplace Section "-Uninstall Previous" SetShellVarContext all SetOutPath "$TEMP" ReadRegStr $0 HKLM "${UNINST_REG}" "UninstallString" ReadRegStr $1 HKLM "${UNINST_REG}" "InstallLocation" IfErrors 0 +2 Return ${WordReplace} "$0" '"' '' '{}' $0 CopyFiles /SILENT $0 "$TEMP\${UNINST_EXE}" ExecWait '"$TEMP\${UNINST_EXE}" /S _?=$1' Delete "$TEMP\${UNINST_EXE}" SectionEnd Var base Section "$(^Name)" SetOutPath "$INSTDIR" WriteUninstaller "$INSTDIR\${UNINST_EXE}" WriteRegStr HKLM "${UNINST_REG}" "DisplayName" "${RUBY} RubyGems ${GEMS_VERSION}" WriteRegStr HKLM "${UNINST_REG}" "DisplayVersion" "${RUBY_VERSION} ${GEMS_VERSION}" WriteRegStr HKLM "${UNINST_REG}" "InstallLocation" "$INSTDIR" WriteRegStr HKLM "${UNINST_REG}" "Publisher" "Douglas Thrift" WriteRegStr HKLM "${UNINST_REG}" "URLInfoAbout" "http://code.douglasthrift.net/trac/repos/browser/RubyInstaller" WriteRegStr HKLM "${UNINST_REG}" "UninstallString" "$INSTDIR\${UNINST_EXE}" WriteRegDWORD HKLM "${UNINST_REG}" "NoModify" 1 WriteRegDWORD HKLM "${UNINST_REG}" "NoRepair" 1 File "*.ico" File /r "ruby\*" ${WordReplace} "$INSTDIR" "\" "/" "+" $base Push "$INSTDIR\bin\gem" Call Replace Push "$INSTDIR\bin\gem.bat" Call Replace WriteRegStr HKCR ".rb" "" "Ruby.File" WriteRegStr HKCR ".rbw" "" "Ruby.NoConFile" WriteRegStr HKCR "Ruby.File" "" "Ruby File" WriteRegStr HKCR "Ruby.File\DefaultIcon" "" "$INSTDIR\rubyw.ico,0" WriteRegStr HKCR "Ruby.File\Shell" "" "open" WriteRegStr HKCR "Ruby.File\Shell\open\command" "" '"$INSTDIR\bin\ruby.exe" "%1" %*' WriteRegStr HKCR "Ruby.NoConFile" "" "Ruby File (no console)" WriteRegStr HKCR "Ruby.NoConFile\DefaultIcon" "" "$INSTDIR\rubyw.ico,0" WriteRegStr HKCR "Ruby.NoConFile\Shell" "" "open" WriteRegStr HKCR "Ruby.NoConFile\Shell\open\command" "" '"$INSTDIR\bin\rubyw.exe" "%1" %*' ${EnvVarUpdate} $0 "PATH" "A" "HKLM" "$INSTDIR\bin" ${EnvVarUpdate} $0 "PATHEXT" "A" "HKLM" ".rb" ${EnvVarUpdate} $0 "PATHEXT" "A" "HKLM" ".rbw" ${EnvVarUpdate} $0 "RUBYOPT" "A" "HKLM" "-rubygems" SectionEnd SectionGroup /e "Shortcuts" Section "Start Menu" SetOutPath "$SMPROGRAMS\${RUBY}" CreateShortCut "Ruby Interactive Shell.lnk" "$INSTDIR\bin\irb.bat" "" "$INSTDIR\Ruby.ico" 0 WriteINIStr "$SMPROGRAMS\${RUBY}\Why's (Poignant) Guide to Ruby.url" "InternetShortCut" "URL" "http://poignantguide.net/ruby/" DetailPrint "Create shortcut: Why's (Poignant) Guide to Ruby.url" SectionEnd SectionGroupEnd Section "un.^(Name)" SetShellVarContext all RMDir /r /REBOOTOK "$SMPROGRAMS\${RUBY}" RMDir /r /REBOOTOK "$INSTDIR\bin" RMDir /r /REBOOTOK "$INSTDIR\doc" RMDir /r /REBOOTOK "$INSTDIR\lib" RMDir /r /REBOOTOK "$INSTDIR\man" RMDir /r /REBOOTOK "$INSTDIR\share" Delete /REBOOTOK "$INSTDIR\MANIFEST" Delete /REBOOTOK "$INSTDIR\README.1st" Delete /REBOOTOK "$INSTDIR\ruby.ico" Delete /REBOOTOK "$INSTDIR\rubyw.ico" Delete /REBOOTOK "$INSTDIR\${UNINST_EXE}" RMDir /REBOOTOK "$INSTDIR" DeleteRegKey HKLM "${UNINST_REG}" DeleteRegKey HKCR ".rb" DeleteRegKey HKCR ".rbw" DeleteRegKey HKCR "Ruby.File" DeleteRegKey HKCR "Ruby.NoConFile" ${un.EnvVarUpdate} $0 "PATH" "R" "HKLM" "$INSTDIR\bin" ${un.EnvVarUpdate} $0 "PATHEXT" "R" "HKLM" ".rb" ${un.EnvVarUpdate} $0 "PATHEXT" "R" "HKLM" ".rbw" ${un.EnvVarUpdate} $0 "RUBYOPT" "R" "HKLM" "-rubygems" SectionEnd Function Replace Pop $0 DetailPrint "Replace: ${BASE}->$base in $0" ClearErrors FileOpen $1 $0 r IfErrors fail FileOpen $2 "$0.new" w IfErrors fail loop fail: Abort loop: FileRead $1 $3 IfErrors done ${WordReplace} "$3" "${BASE}" "$base" "+" $3 FileWrite $2 $3 Goto loop done: FileClose $1 FileClose $2 Delete $0 Rename "$0.new" $0 FunctionEnd