tazusb diff tazusb.nsi @ rev 60

Add tazusb.nsi source (tazusb for windows)
author Christophe Lincoln <pankso@slitaz.org>
date Fri Feb 19 21:35:22 2010 +0100 (2010-02-19)
parents
children 671df117fb6f
line diff
     1.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     1.2 +++ b/tazusb.nsi	Fri Feb 19 21:35:22 2010 +0100
     1.3 @@ -0,0 +1,347 @@
     1.4 +; Tazusb
     1.5 +; Windows installer for Slitaz
     1.6 +; (c) 2009 Cedric Tissieres (slitaz@objectif-securite.ch)
     1.7 +; You'll need to put 7z.exe and 7z.dll from http://www.7-zip.org/ and syslinux.exe from http://syslinux.zytor.com/ 
     1.8 +; in the NSIS plugins directory before compiling the script. Adapt the FROM_DIR constant too. 
     1.9 +; To add a translation, add the corresponding "!insertmacro MUI_LANGUAGE" and translates all the LangString you'll find below.  
    1.10 +
    1.11 +!define NAME "TazUSB - SliTaz LiveUSB utility "
    1.12 +!define FILENAME "tazusb"
    1.13 +!define VERSION "v0.2"
    1.14 +!define FROM_DIR "C:\ophcrack\livecd"
    1.15 +
    1.16 +SetCompressor LZMA
    1.17 +CRCCheck On
    1.18 +XPStyle on
    1.19 +
    1.20 +!include "MUI2.nsh"
    1.21 +!include "FileFunc.nsh"
    1.22 +
    1.23 +
    1.24 +# MUI Settings #####################################
    1.25 +;**************
    1.26 +
    1.27 +; Interface settings
    1.28 +!define MUI_FINISHPAGE_NOAUTOCLOSE
    1.29 +!define MUI_HEADERIMAGE
    1.30 +!define MUI_HEADERIMAGE_BITMAP "${FROM_DIR}\slitaz-logo-nsis.bmp" 
    1.31 +!define MUI_HEADERIMAGE_BITMAP_NOSTRETCH
    1.32 +
    1.33 +; Welcome page
    1.34 +!define MUI_WELCOMEPAGE_TITLE $(Welcome_Title)
    1.35 +!define MUI_WELCOMEPAGE_TEXT $(Welcome_Text)
    1.36 +!insertmacro MUI_PAGE_WELCOME
    1.37 +; ISO page
    1.38 +Var IsoFileHw
    1.39 +Var IsoFile
    1.40 +Var Label
    1.41 +Var Label2
    1.42 +Page custom isoFilePage
    1.43 +; Drive page
    1.44 +Var DestDriveHW
    1.45 +Var DestDrive
    1.46 +Page custom drivePage
    1.47 +; Warning page
    1.48 +Page custom warningPage
    1.49 +; Instfiles page
    1.50 +!insertmacro MUI_PAGE_INSTFILES
    1.51 +; Finish page
    1.52 +!define MUI_FINISHPAGE_TITLE $(Finish_Title)
    1.53 +!define MUI_FINISHPAGE_TEXT $(Finish_Text)
    1.54 +!define MUI_FINISHPAGE_LINK $(Finish_Link)
    1.55 +!define MUI_FINISHPAGE_LINK_LOCATION "http://slitaz.org"
    1.56 +!insertmacro MUI_PAGE_FINISH
    1.57 +
    1.58 +; Language files
    1.59 +!insertmacro MUI_LANGUAGE "English" ;first language is the default language
    1.60 +!insertmacro MUI_LANGUAGE "French"
    1.61 +!insertmacro MUI_LANGUAGE "Portuguese"
    1.62 +
    1.63 +
    1.64 +; Reserve files
    1.65 +
    1.66 +; MUI end ------
    1.67 +
    1.68 +; General Parameters
    1.69 +Name "${NAME} ${VERSION}"
    1.70 +OutFile "${FROM_DIR}\${FILENAME}.exe"
    1.71 +
    1.72 +# Languages ######################################
    1.73 +
    1.74 +; English
    1.75 +LangString Welcome_Title ${LANG_ENGLISH} "${NAME}"
    1.76 +LangString Welcome_Text ${LANG_ENGLISH} "Welcome to TazUSB. This tool will help you installing Slitaz on a USB drive."
    1.77 +LangString Finish_Title ${LANG_ENGLISH} "TazUSB has completed Slitaz installation."
    1.78 +LangString Finish_Text ${LANG_ENGLISH} "Slitaz is now installed on your USB drive and the drive is bootable."
    1.79 +LangString Finish_Link ${LANG_ENGLISH} "Slitaz website"
    1.80 +LangString IsoPage_Title ${LANG_ENGLISH} "Select ISO file"
    1.81 +LangString IsoPage_Title2 ${LANG_ENGLISH} "Choose the ISO image which will be installed on your USB drive."
    1.82 +LangString IsoPage_Text ${LANG_ENGLISH} "Select Slitaz ISO file to be installed on your USB drive. You can download it on http://www.slitaz.org if needed."
    1.83 +LangString IsoPage_Input ${LANG_ENGLISH} "Slitaz ISO File"
    1.84 +LangString IsoFile ${LANG_ENGLISH} "ISO file|*.iso"
    1.85 +LangString DrivePage_Title ${LANG_ENGLISH} "Choose USB drive location"
    1.86 +LangString DrivePage_Title2 ${LANG_ENGLISH} "Choose the USB drive in which to install Slitaz."
    1.87 +LangString DrivePage_Text ${LANG_ENGLISH} "TazUSB will install Slitaz in the following drive. Make sure that this drive can be safely deleted! Click Next to continue."
    1.88 +LangString DrivePage_Input ${LANG_ENGLISH} "Destination USB Drive"
    1.89 +LangString WarningPage_Title ${LANG_ENGLISH} "Warning!"
    1.90 +LangString WarningPage_Title2 ${LANG_ENGLISH} "TazUSB is ready to install Slitaz on the selected drive."
    1.91 +LangString WarningPage_Text ${LANG_ENGLISH} "TazUSB is now ready to install Slitaz from:$\r$\n$\r$\n$IsoFile $\r$\n$\r$\non your selected destination USB drive:$\r$\n$\r$\n$DestDrive. $\r$\n$\r$\nThe contents of this drive will be deleted! If you are sure, click Next to continue."
    1.92 +LangString Iso2USB_Extract ${LANG_ENGLISH} "Extract files from $IsoFile"
    1.93 +LangString Iso2USB_CreateSyslinux ${LANG_ENGLISH} "Create syslinux configuration files on $DestDrive"
    1.94 +LangString Iso2USB_ExecuteSyslinux ${LANG_ENGLISH} "Execute syslinux on $R0"
    1.95 +LangString Iso2USB_WarningSyslinux ${LANG_ENGLISH} "An error ($R8) happened when executing syslinux.$\r$\nYour USB drive won't be bootable..."
    1.96 +
    1.97 +; French
    1.98 +LangString Welcome_Title ${LANG_FRENCH} "${NAME}"
    1.99 +LangString Welcome_Text ${LANG_FRENCH} "Bienvenue dans TazUSB. Cet outil va vous aider à installer Slitaz sur une clé USB."
   1.100 +LangString Finish_Title ${LANG_FRENCH} "L'installation a été terminée par TazUSB."
   1.101 +LangString Finish_Text ${LANG_FRENCH} "Slitaz est maintenant installé sur votre clé USB et celle-ci est démarrable."
   1.102 +LangString Finish_Link ${LANG_FRENCH} "Site web de Slitaz"
   1.103 +LangString IsoPage_Title ${LANG_FRENCH} "Sélectionner un fichier ISO"
   1.104 +LangString IsoPage_Title2 ${LANG_FRENCH} "Choisissez l'image ISO qui sera installée sur votre clé USB."
   1.105 +LangString IsoPage_Text ${LANG_FRENCH} "Sélectionnez l'image ISO de Slitaz qui sera installée sur votre clé USB. Vous pouvez en télécharger une sur http://www.slitaz.org au besoin."
   1.106 +LangString IsoPage_Input ${LANG_FRENCH} "Image ISO Slitaz"
   1.107 +LangString IsoFile ${LANG_FRENCH} "Image ISO|*.iso"
   1.108 +LangString DrivePage_Title ${LANG_FRENCH} "Sélectionner un lecteur USB"
   1.109 +LangString DrivePage_Title2 ${LANG_FRENCH} "Choisissez le lecteur USB sur lequel sera installé Slitaz"
   1.110 +LangString DrivePage_Text ${LANG_FRENCH} "TazUSB va maintenant installer Slitaz sur le lecteur sélectionné ci-dessous. Assurez-vous que les données contenues sur cette clé peuvent être effacées! Cliquer sur Suivant pour continuer."
   1.111 +LangString DrivePage_Input ${LANG_FRENCH} "Lecteur USB de destination"
   1.112 +LangString WarningPage_Title ${LANG_FRENCH} "Attention!"
   1.113 +LangString WarningPage_Title2 ${LANG_FRENCH} "TazUSB est prêt à installer Slitaz sur le lecteur sélectionné."
   1.114 +LangString WarningPage_Text ${LANG_FRENCH} "TazUSB est maintenant prêt à installer Slitaz depuis:$\r$\n$\r$\n$IsoFile $\r$\n$\r$\nsur le lecteur USB sélectionné:$\r$\n$\r$\n$DestDrive. $\r$\n$\r$\nLe contenu de ce lecteur peut être effacé! Si vous êtes sûr, cliquer sur Suivant pour continuer."
   1.115 +LangString Iso2USB_Extract ${LANG_FRENCH} "Extraction des fichiers de $IsoFile"
   1.116 +LangString Iso2USB_CreateSyslinux ${LANG_FRENCH} "Création de la configuration syslinux sur $DestDrive"
   1.117 +LangString Iso2USB_ExecuteSyslinux ${LANG_FRENCH} "Exécution de syslinux sur $R0"
   1.118 +LangString Iso2USB_WarningSyslinux ${LANG_FRENCH} "Une erreur ($R8) est survenue pendant l'exécution de syslinux.$\r$\n Votre clé USB ne sera pas démarrable..."
   1.119 +
   1.120 +; Portuguese
   1.121 +LangString Welcome_Title ${LANG_PORTUGUESE} "${NAME}"
   1.122 +LangString Welcome_Text ${LANG_PORTUGUESE} "Bem-vindo ao TazUSB. Este aplicativo o ajudará a instalar o SliTaz em um drive USB."
   1.123 +LangString Finish_Title ${LANG_PORTUGUESE} "O TazUSB finalizou a instalação do SliTaz."
   1.124 +LangString Finish_Text ${LANG_PORTUGUESE} "O SliTaz está instalado em seu drive USB e o processo de boot agora pode ser feito."
   1.125 +LangString Finish_Link ${LANG_PORTUGUESE} "Site do Slitaz"
   1.126 +LangString IsoPage_Title ${LANG_PORTUGUESE} "Selecionar arquivo ISO"
   1.127 +LangString IsoPage_Title2 ${LANG_PORTUGUESE} "Escolher imagem ISO a ser instalada no drive USB."
   1.128 +LangString IsoPage_Text ${LANG_PORTUGUESE} "Selecionar imagem ISO do SliTaz a ser instalada no drive USB. Você pode obtê-la, se necessário, em http://www.slitaz.org."
   1.129 +LangString IsoPage_Input ${LANG_PORTUGUESE} "Arquivo ISO do SliTaz"
   1.130 +LangString IsoFile ${LANG_PORTUGUESE} "Arquivo ISO|*.iso"
   1.131 +LangString DrivePage_Title ${LANG_PORTUGUESE} "Escolha a localização do drive USB"
   1.132 +LangString DrivePage_Title2 ${LANG_PORTUGUESE} "Escolha o drive USB no qual o SliTaz será instalado."
   1.133 +LangString DrivePage_Text ${LANG_PORTUGUESE} "O TazUSB instalará o SliTaz no seguinte drive. Certifique-se de que o conteúdo deste drive possa ser seguramente apagado! Clique Next para continuar."
   1.134 +LangString DrivePage_Input ${LANG_PORTUGUESE} "Drive USB de destino"
   1.135 +LangString WarningPage_Title ${LANG_PORTUGUESE} "Aviso!"
   1.136 +LangString WarningPage_Title2 ${LANG_PORTUGUESE} "O TazUSB está pronto para instalar o SliTaz no drive selecionado."
   1.137 +LangString WarningPage_Text ${LANG_PORTUGUESE} "O TazUSB está pronto para instalar o SliTaz de:$\r$\n$\r$\n$IsoFile $\r$\n$\r$\nem seu drive de destino selecionado:$\r$\n$\r$\n$DestDrive. $\r$\n$\r$\nO conteúdo deste drive será apagado! Para prosseguir com a operação, clique Next para continuar."
   1.138 +LangString Iso2USB_Extract ${LANG_PORTUGUESE} "Extrair arquivos de $IsoFile"
   1.139 +LangString Iso2USB_CreateSyslinux ${LANG_PORTUGUESE} "Criar arquivos de configuração do syslinux em  $DestDrive"
   1.140 +LangString Iso2USB_ExecuteSyslinux ${LANG_PORTUGUESE} "Executar syslinux em $R0"
   1.141 +LangString Iso2USB_WarningSyslinux ${LANG_PORTUGUESE} "Um erro ($R8) ocorreu durante a execução do syslinux.$\r$\nSeu drive USB não será inicializável..."
   1.142 +
   1.143 +# Functions #######################################
   1.144 +
   1.145 +Function isoFilePage
   1.146 +
   1.147 +  !insertmacro MUI_HEADER_TEXT $(IsoPage_Title) $(IsoPage_Title2) 
   1.148 + 
   1.149 +  nsDialogs::Create 1018
   1.150 +  
   1.151 +  ${If} $IsoFile == ""
   1.152 +    GetDlgItem $6 $HWNDPARENT 1 ; Get "Next" control handle
   1.153 +    EnableWindow $6 0 ; disable "Next" control
   1.154 +  ${EndIf}
   1.155 + 
   1.156 +  ${NSD_CreateLabel} 0 0 100% 30 $(IsoPage_Text)
   1.157 +  Pop $Label
   1.158 +
   1.159 +  ${NSD_CreateLabel} 15 102 100% 15 $(IsoPage_Input)
   1.160 +  Pop $Label2
   1.161 +  
   1.162 +  nsDialogs::CreateControl EDIT ${DEFAULT_STYLES}|${WS_TABSTOP}|${ES_AUTOHSCROLL}|${ES_READONLY} ${WS_EX_WINDOWEDGE}|${WS_EX_CLIENTEDGE} 10 120 85% 20 $IsoFile
   1.163 +  Pop $IsoFileHw
   1.164 +        
   1.165 +  ${NSD_CreateBrowseButton} 89% 120 7% 20 ...
   1.166 +  Var /GLOBAL IsoFile_BrowseButton
   1.167 +  Pop $IsoFile_BrowseButton 
   1.168 +  GetFunctionAddress $0 OnClick_IsoFile_BrowseButton
   1.169 +  nsDialogs::OnClick $IsoFile_BrowseButton $0
   1.170 +  
   1.171 +  nsDialogs::Show
   1.172 +FunctionEnd
   1.173 +
   1.174 +Function OnClick_IsoFile_BrowseButton
   1.175 +
   1.176 +
   1.177 +nsDialogs::SelectFileDialog /NOUNLOAD open "" $(IsoFile)
   1.178 +Pop $0
   1.179 +
   1.180 +${If} $0 != ""
   1.181 +   ${NSD_SetText} $IsoFileHw $0
   1.182 +   StrCpy $IsoFile "$0"
   1.183 +   GetDlgItem $6 $HWNDPARENT 1 ; Get "Next" control handle
   1.184 +   EnableWindow $6 1 ; enable "Next" control
   1.185 +${EndIf}
   1.186 +
   1.187 +FunctionEnd
   1.188 +
   1.189 +Function drivePage
   1.190 +
   1.191 +  !insertmacro MUI_HEADER_TEXT $(DrivePage_Title) $(DrivePage_Title2)
   1.192 + 
   1.193 +  nsDialogs::Create 1018
   1.194 +  
   1.195 +  ${If} $DestDrive == ""
   1.196 +    GetDlgItem $6 $HWNDPARENT 1 ; Get "Next" control handle
   1.197 +    EnableWindow $6 0 ; disable "Next" control
   1.198 +  ${EndIf}
   1.199 + 
   1.200 +  ${NSD_CreateLabel} 0 0 100% 30 $(DrivePage_Text)
   1.201 +  Pop $Label
   1.202 +  
   1.203 +  ${NSD_CreateLabel} 15 102 100% 15 $(DrivePage_Input)
   1.204 +  Pop $Label2
   1.205 +  
   1.206 +  ${NSD_CreateDroplist} 10 120 85% 20 ""
   1.207 +	Pop $DestDriveHw
   1.208 +		${NSD_OnChange} $DestDriveHw db_select.onchange
   1.209 +		${GetDrives} "FDD+HDD" driveListFiller
   1.210 +  ${If} $DestDrive != ""
   1.211 +	${NSD_CB_SelectString} $DestDriveHw $DestDrive
   1.212 +  ${EndIf}
   1.213 +  
   1.214 +  nsDialogs::Show
   1.215 +FunctionEnd
   1.216 +
   1.217 +Function db_select.onchange
   1.218 +  Pop $DestDriveHw
   1.219 +  ${NSD_GetText} $DestDriveHw $0
   1.220 +  StrCpy $DestDrive "$0"
   1.221 +  GetDlgItem $6 $HWNDPARENT 1 ; Get "Next" control handle
   1.222 +  EnableWindow $6 1 ; enable "Next" control
   1.223 +FunctionEnd
   1.224 +
   1.225 +Function driveListFiller
   1.226 +	SendMessage $DestDriveHw ${CB_ADDSTRING} 0 "STR:$9"
   1.227 +	Push 1 ; must push something - see GetDrives documentation
   1.228 +FunctionEnd
   1.229 +
   1.230 +Function warningPage
   1.231 +
   1.232 +  !insertmacro MUI_HEADER_TEXT $(WarningPage_Title) $(WarningPage_Title2)
   1.233 + 
   1.234 +  nsDialogs::Create 1018
   1.235 + 
   1.236 +  ${NSD_CreateLabel} 0 0 100% 80% $(WarningPage_Text)
   1.237 +  Pop $Label
   1.238 +  
   1.239 +  nsDialogs::Show
   1.240 +FunctionEnd
   1.241 +
   1.242 +Function ExtractIt
   1.243 +  ; Code taken from 7zarchive.nsh  (c) 2008 qwertymodo
   1.244 +  
   1.245 +  InitPluginsDir
   1.246 +  File /oname=$PLUGINSDIR\7z.exe "${NSISDIR}\plugins\7z.exe"
   1.247 +  File /oname=$PLUGINSDIR\7z.dll "${NSISDIR}\plugins\7z.dll"
   1.248 +
   1.249 +  ClearErrors
   1.250 +
   1.251 +  Exch $0      ; ADDITIONAL_PARAMETERS (added to the end of the program call)
   1.252 +  Exch 1
   1.253 +  Exch $1      ; EXTRACT_PATHS (either "fullpaths" or "nopaths"; defaults to nopaths)
   1.254 +  Exch 2
   1.255 +  Exch $2      ; DESTINATION_FOLDER
   1.256 +  Exch 3
   1.257 +  Exch $3      ; FILE_FILTER (if blank, extracts all files; allows for wildcards, e.g. "*.doc")
   1.258 +  Exch 4
   1.259 +  Exch $4      ; SOURCE_ARCHIVE
   1.260 +  Push $5
   1.261 +
   1.262 +  ;Extract all files if no filter specified
   1.263 +  StrCmp $3 "" +2 0
   1.264 +  StrCpy $3 "$\"$3$\""
   1.265 +
   1.266 +  ;Default folder if not specified
   1.267 +  StrCmp $2 "" 0 GotFolder
   1.268 +  !insertmacro GetParent
   1.269 +  ${GetParent} "$4" $2
   1.270 +  !insertmacro GetBaseName
   1.271 +  ${GetBaseName} "$4" $5
   1.272 +  StrCpy $2 "$2\$5"
   1.273 +
   1.274 +  GotFolder:
   1.275 +  CreateDirectory $2
   1.276 +  StrCmp $1 "fullpaths" 0 +2
   1.277 +  StrCpy $5 "x"
   1.278 +  StrCmp $1 "nopaths" +2 0
   1.279 +  StrCmp $1 "" 0 +2
   1.280 +  StrCpy $5 "e"
   1.281 +
   1.282 +  nsExec::ExecToLog '"$PLUGINSDIR\7z.exe" x $\"$4$\" $\"-o$2$\" $3 $0'
   1.283 +
   1.284 +  Pop $0 ;nsExec return value
   1.285 +
   1.286 +  Pop $5
   1.287 +  Pop $4
   1.288 +  Pop $0
   1.289 +  Pop $1
   1.290 +  Pop $2
   1.291 +  Pop $3
   1.292 +
   1.293 +FunctionEnd
   1.294 +
   1.295 +!macro _ExtractFromArchive SOURCE_ARCHIVE FILE_FILTER DESTINATION_FOLDER EXTRACT_PATHS ADDITIONAL_PARAMETERS
   1.296 +  Push "${SOURCE_ARCHIVE}"
   1.297 +  Push "${FILE_FILTER}"
   1.298 +  Push "${DESTINATION_FOLDER}"
   1.299 +  Push "${EXTRACT_PATHS}"
   1.300 +  Push "${ADDITIONAL_PARAMETERS}"
   1.301 +  Call ExtractIt
   1.302 +!macroend
   1.303 +
   1.304 +!define ExtractFromArchive '!insertmacro "_ExtractFromArchive"'
   1.305 +
   1.306 +
   1.307 +Function .onInit
   1.308 +
   1.309 +  !insertmacro MUI_LANGDLL_DISPLAY
   1.310 +
   1.311 +FunctionEnd
   1.312 +
   1.313 +# Section #######################################
   1.314 +
   1.315 +
   1.316 +Section "iso2usb" main
   1.317 +  InitPluginsDir
   1.318 +  File /oname=$PLUGINSDIR\syslinux.exe "${NSISDIR}\plugins\syslinux.exe"
   1.319 +  
   1.320 +  SetShellVarContext all
   1.321 +  
   1.322 +  ; Extract files from archive
   1.323 +  DetailPrint $(Iso2USB_Extract)
   1.324 +  ${ExtractFromArchive} "$IsoFile" "" "$DestDrive" "" "-y -x![BOOT]*"
   1.325 +
   1.326 +  ; Create syslinux directory and files
   1.327 +  Var /GLOBAL BootDir
   1.328 +  StrCpy $BootDir $DestDrive -1 
   1.329 +  StrCpy $BootDir "$BootDir\boot"
   1.330 +  IfFileExists "$BootDir\syslinux\syslinux.cfg" SkipCreateSyslinux CreateSyslinux
   1.331 +  CreateSyslinux:
   1.332 +  DetailPrint $(Iso2USB_CreateSyslinux) 
   1.333 +  CreateDirectory "$BootDir\syslinux"
   1.334 +  CopyFiles "$BootDir\isolinux\*.*" "$BootDir\syslinux"
   1.335 +  Rename "$BootDir\syslinux\isolinux.cfg" "$BootDir\syslinux\syslinux.cfg"
   1.336 +
   1.337 +  SkipCreateSyslinux:
   1.338 +  ; Execute syslinux on the drive
   1.339 +  StrCpy $R0 $DestDrive -1 ; remove \ for syslinux
   1.340 +  ClearErrors
   1.341 +  DetailPrint $(Iso2USB_ExecuteSyslinux)
   1.342 +   	  ExecWait '$PLUGINSDIR\syslinux.exe -maf -d boot\syslinux $R0' $R8
   1.343 +  	  DetailPrint "Return $R8"
   1.344 +
   1.345 +      Banner::destroy
   1.346 +	  ${If} $R8 != 0
   1.347 +            MessageBox MB_ICONEXCLAMATION|MB_OK $(Iso2USB_WarningSyslinux)
   1.348 +	  ${EndIf}
   1.349 +  
   1.350 +SectionEnd