enano-bundle.nsi
author Neal Gompa <neal@enanocms.org>
Fri, 18 Dec 2009 20:36:15 -0600
changeset 9 100ba25b6dba
parent 8 af10a4dbafb4
child 11 b62383876fdb
permissions -rwxr-xr-x
Adding uninstall commands for shortcuts, we don't want unnecessary stuff floating around after the uninstallation...

; Script generated by the HM NIS Edit Script Wizard.

; HM NIS Edit Wizard helper defines
!define PRODUCT_NAME "Enano CMS"
!ifndef PRODUCT_VERSION
!define PRODUCT_VERSION "1.1.6"
!endif
!ifndef PRODUCT_VERSION_APPEND
!define PRODUCT_VERSION_APPEND ""
!endif
!define PRODUCT_PUBLISHER "Enano CMS Project"
!define PRODUCT_WEB_SITE "http://enanocms.org"
!define PRODUCT_UNINST_KEY "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_NAME}"
!define PRODUCT_UNINST_ROOT_KEY "HKLM"
!define PRODUCT_SHORTNAME "enanocms"
; !define UNINSTALL_DEBUG

!ifndef ENANO_ROOT
!define ENANO_ROOT "Q:\enano-1.1\repo"
!endif

SetCompressor /FINAL /SOLID lzma
CRCCheck force

!include "WinMessages.nsh"

; ExperienceUI 1.3.1 compatible
!ifndef XPUI_SYSDIR
  !define XPUI_SYSDIR "P:\exui\Contrib\ExperienceUI"
!endif
!include "${XPUI_SYSDIR}\XPUI.nsh"

; ExperienceUI GUI parameters
!define XPUI_BGIMAGE
!define XPUI_BGIMAGE_BMP "gfx\enano-bg.bmp"
!define XPUI_TEXT_COLOR "F2F2F2"
!define XPUI_TEXT_BGCOLOR "202020" ; irrelevant but still
!define XPUI_TEXT_LIGHTCOLOR "B4C3EA"
!define XPUI_ABORTWARNING
!define XPUI_BRANDINGTEXT "NSIS Installer ${NSIS_VERSION}"
!define XPUI_BRANDINGTEXT_COLOR_FG "b6d9ff"
!define XPUI_BRANDINGTEXT_COLOR_BG "4c5b6b"
!define XPUI_FASTERSKINNING
!define XPUI_UNINSTALLER

Var wampstack_installed
Var wappstack_installed
Var stack_type
Var stack_instdir
Var stack_portbit
Var db_dbmsname
Var db_rootuser
Var db_rootpass
Var db_needroot
Var db_driver
Var db_port
Var db_user
Var db_password
Var db_name
Var enano_user
Var enano_password
Var admin_email
Var site_name
Var site_desc
Var site_copyright
Var url_scheme
Var start_with
Var skip_install

!include "inst-resources\bitnamiutils.nsh"
!include "inst-resources\dbal.nsh"
!include "inst-resources\mysql.nsh"
!include "inst-resources\postgresql.nsh"
!include "inst-resources\str_replace.nsh"
!include "inst-resources\kickstart.nsh"
!include "inst-resources\apacheconfig.nsh"
!include "inst-resources\applist.nsh"

;
; INSTALL PAGES
;

; Welcome page
${Page} Welcome2

; License page
${LicensePage} "licenses\GPL.txt"

; Stack selection - automatic unless both stacks are installed
!include "pages\StackSelect.nsi"

; Database credentials entry
!include "pages\DatabaseConfig.nsi"

; Site config page
!include "pages\SiteConfig.nsi"

; User credentials page
!include "pages\Login.nsi"

; Components page
${Page} Components

; Instfiles page
${Page} InstFiles

; Finish page
!define XPUI_FINISHPAGE_RUN
!define XPUI_FINISHPAGE_CHECKBOX_RUN "Go to my new $(^Name) website now"
!define XPUI_FINISHPAGE_RUN_FUNCTION OpenBitnamiWebsite
Function OpenBitnamiWebsite
  ExecShell open "http://localhost$stack_portbit/${PRODUCT_SHORTNAME}/"
FunctionEnd
${Page} Finish
${Page} Abort

;
; UNINSTALL PAGES
;

${UnPage} Welcome2
${UnPage} InstFiles
${UnPage} Finish

; Reserve files
!insertmacro MUI_RESERVEFILE_INSTALLOPTIONS

; Language files
${Language} "English"

; MUI end ------

Name "${PRODUCT_NAME}"
Caption "${PRODUCT_NAME} ${PRODUCT_VERSION}${PRODUCT_VERSION_APPEND} Bitnami installer"
OutFile "enano-${PRODUCT_VERSION}${PRODUCT_VERSION_APPEND}-bitnami-setup.exe"
InstallDir "$PROGRAMFILES\Enano CMS"
ShowInstDetails show
ShowUnInstDetails show

; File lists
!include "inst-resources\core-files.nsh"
; End file lists

Section "-pre"
  StrCpy $INSTDIR "$stack_instdir"
  StrCpy $skip_install 0
  
  StrCmp $db_needroot 0 0 SkipManualCheck
    ; If we were given our own DB credentials and there's already a config, the installation needs to be skipped
    IfFileExists "$INSTDIR\apps\${PRODUCT_SHORTNAME}\htdocs\config.php" 0 SkipManualCheck
      StrCpy $skip_install 1
      Return
      
  SkipManualCheck:
  
  IfFileExists "$INSTDIR\apps\${PRODUCT_SHORTNAME}\htdocs\config.php" 0 +2
    Delete "$INSTDIR\apps\${PRODUCT_SHORTNAME}\htdocs\config.php"
SectionEnd

Section "-DatabaseSetup"
  StrCmp $db_needroot 1 +2
    Return
    
  ; Create database
  ${db_create} $R0 "$db_rootuser" "$db_rootpass" "$db_name" "$db_user" "$db_password"
  IntCmp $R0 0 DatabaseCreateSuccess
    !insertmacro XPUI_HEADER_TEXT "Installation failed" "Could not create the database."
    DetailPrint "Database creation failed."
    MessageBox MB_OK|MB_ICONEXCLAMATION "Setup failed to create the database for $(^Name).$\r$\n\
                                         $\r$\n\
                                         It's possible that your authentication details were rejected or that there \
                                         is a bug in the installer. Try removing any special characters (especially \
                                         quote symbols and backslashes) from your password. Make sure to use only \
                                         letters, numbers, and underscores in the database name and username."
    Abort
  DatabaseCreateSuccess:
SectionEnd

Section "Enano Core" SEC01
  SectionIn RO
  CreateDirectory "$INSTDIR\apps\${PRODUCT_SHORTNAME}"
  WriteUninstaller "$INSTDIR\apps\${PRODUCT_SHORTNAME}\uninstall.exe"
  !insertmacro Core_Install
SectionEnd

Section "Enable GMP in PHP" SecGMP
  ClearErrors
  IfFileExists "$stack_instdir\php\ext\php_gmp.dll" +3
  
    ; No GMP
    MessageBox MB_OK|MB_ICONEXCLAMATION "The stack you selected does not contain the GMP extension, so it cannot be enabled. Logins will be several seconds slower. Please consider upgrading your stack."
    Return
  
  WriteINIStr "$stack_instdir\php\php.ini" "GMP" "extension" "php_gmp.dll"
  IfErrors 0 +2
    MessageBox MB_OK|MB_ICONEXCLAMATION "GMP was not automatically enabled in PHP. Logins will be several seconds slower."
SectionEnd

/*  Plugins components commented out, we don't plan on enabling this until at least 1.2.0 RC1
Section "YubiKey auth plugin" SEC02
SectionEnd

Section "AjIM2" SEC03
SectionEnd

Section "Admin Alerts" SEC04
SectionEnd

Section "RSS Feeds" SEC06
SectionEnd

Section "News Portal" SEC08
SectionEnd

Section "Code syntax highlighting" SEC11
SectionEnd

Section "Wiki functionality extensions" SEC12
SectionEnd

*/

Section -ConfigureApache
  DetailPrint "Configuring Apache web server"
  Call write_apache_config
  DetailPrint "Restarting Apache"
  nsExec::Exec '"$SYSDIR\net.exe" stop "$stack_typestackApache"'
  nsExec::Exec '"$SYSDIR\net.exe" start "$stack_typestackApache"'
  StrCmp $skip_install 1 0 +2
    Return
  
  Call enano_write_kickstart_script
  Call enano_run_kickstart_script
  
  SetOutPath "$INSTDIR\apps\${PRODUCT_SHORTNAME}\scripts"
  File "inst-resources\selfdestruct.php"
SectionEnd

Section -InsertApplistEntry
  ; Skip if this is WAPPStack, it doesn't have an applications.html. (!)
  StrCmp $stack_type "WAPP" 0 +2
    Return
  
  Call enano_add_to_applist
SectionEnd

Section -AdditionalIcons
  WriteIniStr "$INSTDIR\${PRODUCT_NAME}.url" "InternetShortcut" "URL" "${PRODUCT_WEB_SITE}"
  CreateDirectory "$SMPROGRAMS\Enano CMS"
  CreateShortCut "$SMPROGRAMS\Enano CMS\Website.lnk" "$INSTDIR\${PRODUCT_NAME}.url"
  CreateShortCut "$SMPROGRAMS\Enano CMS\Uninstall.lnk" "$INSTDIR\apps\${PRODUCT_SHORTNAME}\uninstall.exe"
SectionEnd

Section -Post
  WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "DisplayName" "$(^Name)"
  WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "UninstallString" "$INSTDIR\apps\${PRODUCT_SHORTNAME}\uninstall.exe"
  WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "DisplayVersion" "${PRODUCT_VERSION}${PRODUCT_VERSION_APPEND}"
  WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "URLInfoAbout" "${PRODUCT_WEB_SITE}"
  WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "Publisher" "${PRODUCT_PUBLISHER}"
SectionEnd

; Section descriptions
!insertmacro MUI_FUNCTION_DESCRIPTION_BEGIN
  !insertmacro MUI_DESCRIPTION_TEXT ${SEC01} "Core components of Enano CMS, necessary to run Enano"
  
  /* Components disabled
  !insertmacro MUI_DESCRIPTION_TEXT ${SEC02} "Adds support for Yubikey authentication"
  !insertmacro MUI_DESCRIPTION_TEXT ${SEC03} "An AJAX chatbox sidebar gadget for Enano"
  !insertmacro MUI_DESCRIPTION_TEXT ${SEC04} "Provides a sidebar block that alerts you about unapproved comments, inactive users, and pages with requested deletion."
  !insertmacro MUI_DESCRIPTION_TEXT ${SEC06} "Provides the ability to generate RSS feeds based on the latest page edits and comments. It also has a plugin API so plugins can add their own feeds."
  !insertmacro MUI_DESCRIPTION_TEXT ${SEC08} "Provides a portal with news and static content combined onto one page."
  !insertmacro MUI_DESCRIPTION_TEXT ${SEC11} "Parser extension that adds syntax highlighting support using the GeSHi highlighting engine."
  !insertmacro MUI_DESCRIPTION_TEXT ${SEC12} "Adds several parser extensions that provide MediaWiki-like behavior, including references (footnotes) and Table of Contents support."
  */
  
  !insertmacro MUI_DESCRIPTION_TEXT ${SecGMP} "Enables PHP's GMP extension, which speeds up cryptographic operations."
!insertmacro MUI_FUNCTION_DESCRIPTION_END

Function .onInit
  !ifdef UNINSTALL_DEBUG
    WriteUninstaller "$EXEDIR\uninstall.exe"
    MessageBox MB_OKCANCEL "Uninstaller written. OK to run installer, Cancel to quit" IDOK +2
      Abort
  !endif
  Call BNSetWAMPInstalledFlag
  Call BNSetWAPPInstalledFlag
  
  ; If neither WAMP nor WAPP is installed, die
  StrCmp $wampstack_installed 0 "" FoundStack
  StrCmp $wampstack_installed 0 "" FoundStack

    MessageBox MB_OK|MB_ICONEXCLAMATION "Setup could not find any BitNami stacks on your server.$\r$\n\
                                         $\r$\n\
                                         Please install a BitNami stack and re-run setup. You can download a BitNami stack for free from http://www.bitnami.org."
    Abort

  FoundStack:
FunctionEnd

Function un.onInit
  
  StrCpy $stack_instdir "$INSTDIR\..\.."
  ; this is probably a bad way to determine the stack type
  ClearErrors
  StrCpy $stack_type "wamp"
  ReadINIStr $0 "$stack_instdir\properties.ini" "MySQL" "mysql_port"
  IfErrors 0 +2
    StrCpy $stack_type "wapp"
    
FunctionEnd

Section Uninstall
  
  ; Confirm uninstall
  MessageBox MB_ICONQUESTION|MB_YESNO|MB_DEFBUTTON2 "Are you really sure you want to uninstall ${PRODUCT_NAME}?$\r$\n\
                                                 $\r$\n\
                                                 Removing ${PRODUCT_NAME} will delete everything that it installed, including your database. If you do not want to \
                                                 lose data, cancel this uninstaller and back up your database before uninstalling.$\r$\n\
                                                 $\r$\n\
                                                 The ${PRODUCT_NAME} uninstaller also deletes any uploaded files, plugins and themes that you may have installed." IDYES +2
    Abort
  
  Delete "$INSTDIR\apps\${PRODUCT_SHORTNAME}\${PRODUCT_NAME}.url"

  ; Remove from Apache config
  DetailPrint "Removing ${PRODUCT_NAME} from Apache configuration"
  Call un.disable_in_apache_config
  
  ; Remove from applications.html
  ; SON OF A BITCH. BitNami, please, PLEASE make applications.html a PHP script that includes all files in a directory.
  DetailPrint "Removing ${PRODUCT_NAME} from applications.html"
  Call un.disable_in_applications_html
  
  ; Restart Apache
  DetailPrint "Restarting Apache"
  nsExec::Exec '"$SYSDIR\net.exe" stop "$stack_typestackApache"'
  nsExec::Exec '"$SYSDIR\net.exe" start "$stack_typestackApache"'
  
  DetailPrint "Uninstalling database"
  nsExec::ExecToLog '"$stack_instdir\php\php.exe" "$INSTDIR\scripts\selfdestruct.php"'
  
  DetailPrint "Deleting files..."
  SetDetailsPrint listonly
  
; Remove shortcut stored in $INSTDIR
  Delete "$INSTDIR\${PRODUCT_NAME}.url"
  
  !insertmacro Core_Uninstall
  SetDetailsPrint both

  ; Remove shortcuts in Start Menu
  Delete "$SMPROGRAMS\Enano CMS\Website.lnk" 
  Delete "$SMPROGRAMS\Enano CMS\Uninstall.lnk"
  RMDir "$SMPROGRAMS\Enano CMS"

  DeleteRegKey ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}"
  SetAutoClose true
SectionEnd

; Version Information

VIProductVersion "${PRODUCT_VERSION}.0"
VIAddVersionKey /LANG=1033 "ProductName" "Enano CMS"
VIAddVersionKey /LANG=1033 "Setup Information" "Enano CMS installer module for Windows Apache stacks"
VIAddVersionKey /LANG=1033 "Comments" "This installer contains a beta build of Enano CMS, use with caution!"
VIAddVersionKey /LANG=1033 "Publisher Name" "Neal Gompa (King InuYasha), Enano CMS Project"
VIAddVersionKey /LANG=1033 "LegalCopyright" "©2009 Enano CMS Project"
VIAddVersionKey /LANG=1033 "FileDescription" "Enano - The CMS that focuses on what matters most: content."
VIAddVersionKey /LANG=1033 "FileVersion" "${PRODUCT_VERSION}${PRODUCT_VERSION_APPEND}"