[REF] Detect if there is an installation of PostgreSQL and propose a
[odoo/odoo.git] / setup.nsi
1 #####################################################################################\r
2 #\r
3 # Copyright (c) 2004-TODAY OpenERP S.A. (http://www.openerp.com) All Rights Reserved.\r
4 #\r
5 # WARNING: This program as such is intended to be used by professional\r
6 # programmers who take the whole responsability of assessing all potential\r
7 # consequences resulting from its eventual inadequacies and bugs\r
8 # End users who are looking for a ready-to-use solution with commercial\r
9 # garantees and support are strongly adviced to contract a Free Software\r
10 # Service Company\r
11 #\r
12 # This program is Free Software; you can redistribute it and/or\r
13 # modify it under the terms of the GNU General Public License\r
14 # as published by the Free Software Foundation; either version 3\r
15 # of the License, or (at your option) any later version.\r
16 #\r
17 # This program is distributed in the hope that it will be useful,\r
18 # but WITHOUT ANY WARRANTY; without even the implied warranty of\r
19 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
20 # GNU General Public License for more details.\r
21 #\r
22 # You should have received a copy of the GNU General Public License\r
23 # along with this program; if not, write to the Free Software\r
24 # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.\r
25 #####################################################################################\r
26 \r
27 !include 'MUI2.nsh'\r
28 !include 'FileFunc.nsh'\r
29 !include 'LogicLib.nsh'\r
30 !include 'Sections.nsh'\r
31 \r
32 !define PUBLISHER 'OpenERP S.A.'\r
33 !define MAJOR_VERSION '6.0'\r
34 !define MINOR_VERSION '0.0'\r
35 !define REVISION_VERSION 'RC2-test'\r
36 !ifndef REVISION_VERSION\r
37     !define VERSION "${MAJOR_VERSION}.${MINOR_VERSION}"\r
38 !else\r
39     !define VERSION "${MAJOR_VERSION}.${MINOR_VERSION}-${REVISION_VERSION}"\r
40 !endif\r
41 !define PRODUCT_NAME "OpenERP Server"\r
42 !define DISPLAY_NAME "${PRODUCT_NAME} ${MAJOR_VERSION}"\r
43 \r
44 !define UNINSTALL_REGISTRY_ROOT HKLM\r
45 !define UNINSTALL_REGISTRY_KEY "Software\Microsoft\Windows\CurrentVersion\Uninstall\${DISPLAY_NAME}"\r
46 \r
47 !define REGISTRY_KEY "Software\${DISPLAY_NAME}"\r
48 \r
49 !define DEFAULT_POSTGRESQL_HOSTNAME 'localhost'\r
50 !define DEFAULT_POSTGRESQL_PORT 5432\r
51 !define DEFAULT_POSTGRESQL_USERNAME 'openpg'\r
52 !define DEFAULT_POSTGRESQL_PASSWORD 'openpgpwd'\r
53 \r
54 Name '${DISPLAY_NAME}'\r
55 Caption "${PRODUCT_NAME} ${VERSION} Setup"\r
56 OutFile "openerp-server-setup-${VERSION}.exe"\r
57 SetCompressor /final /solid lzma\r
58 SetCompress auto\r
59 ShowInstDetails show\r
60 \r
61 XPStyle on\r
62 \r
63 InstallDir "$PROGRAMFILES\OpenERP ${MAJOR_VERSION}\Server"\r
64 InstallDirRegKey HKCU "${REGISTRY_KEY}" ""\r
65 \r
66 BrandingText '${PRODUCT_NAME} ${VERSION}'\r
67 \r
68 RequestExecutionLevel admin\r
69 \r
70 VIAddVersionKey "ProductName" "${PRODUCT_NAME}"\r
71 VIAddVersionKey "CompanyName" "${PUBLISHER}"\r
72 VIAddVersionKey "FileDescription" "Installer of ${DISPLAY_NAME}" \r
73 VIAddVersionKey "LegalCopyright" "${PUBLISHER}"\r
74 VIAddVersionKey "LegalTrademark" "OpenERP is a trademark of ${PUBLISHER}"\r
75 VIAddVersionKey "FileVersion" "${MAJOR_VERSION}"\r
76 VIProductVersion "${VERSION}"\r
77 \r
78 !insertmacro GetParameters\r
79 !insertmacro GetOptions\r
80 \r
81 Var Option_AllInOne\r
82 Var HasPostgreSQL\r
83 Var cmdLineParams\r
84 \r
85 Var TextPostgreSQLHostname\r
86 Var TextPostgreSQLPort\r
87 Var TextPostgreSQLUsername\r
88 Var TextPostgreSQLPassword\r
89 \r
90 Var HWNDPostgreSQLHostname\r
91 Var HWNDPostgreSQLPort\r
92 Var HWNDPostgreSQLUsername\r
93 Var HWNDPostgreSQLPassword\r
94 \r
95 Var MUI_TEMP\r
96 Var STARTMENU_FOLDER\r
97 \r
98 !define MUI_ABORTWARNING\r
99 !define MUI_ICON ".\pixmaps\openerp-icon.ico"\r
100 \r
101 !define MUI_WELCOMEFINISHPAGE_BITMAP ".\pixmaps\openerp-intro.bmp"\r
102 !define MUI_UNWELCOMEFINISHPAGE_BITMAP ".\pixmaps\openerp-intro.bmp"\r
103 !define MUI_HEADERIMAGE\r
104 !define MUI_HEADERIMAGE_BITMAP ".\pixmaps\openerp-slogan.bmp"\r
105 !define MUI_HEADERIMAGE_BITMAP_NOSTRETCH\r
106 !define MUI_HEADER_TRANSPARENT_TEXT ""\r
107 \r
108 !insertmacro MUI_PAGE_WELCOME\r
109 !insertmacro MUI_PAGE_LICENSE "doc\License.rtf"\r
110 !define MUI_COMPONENTSPAGE_SMALLDESC\r
111 !insertmacro MUI_PAGE_DIRECTORY\r
112 Page Custom ShowPostgreSQL LeavePostgreSQL\r
113 \r
114 !define MUI_STARTMENUPAGE_REGISTRY_ROOT "HKLM" \r
115 !define MUI_STARTMENUPAGE_REGISTRY_KEY "${REGISTRY_KEY}"\r
116 !define MUI_STARTMENUPAGE_REGISTRY_VALUENAME "${DISPLAY_NAME}"\r
117 \r
118 !insertmacro MUI_PAGE_STARTMENU Application $STARTMENU_FOLDER\r
119 !insertmacro MUI_PAGE_INSTFILES\r
120 \r
121 !define MUI_FINISHPAGE_NOAUTOCLOSE\r
122 !define MUI_FINISHPAGE_LINK $(DESC_FinishPage_Link) \r
123 !define MUI_FINISHPAGE_LINK_LOCATION "http://www.openerp.com/contact"\r
124 !insertmacro MUI_PAGE_FINISH\r
125 \r
126 !insertmacro MUI_UNPAGE_WELCOME\r
127 !insertmacro MUI_UNPAGE_CONFIRM\r
128 !insertmacro MUI_UNPAGE_INSTFILES\r
129 !insertmacro MUI_UNPAGE_FINISH\r
130 \r
131 !insertmacro MUI_LANGUAGE "English"\r
132 !insertmacro MUI_LANGUAGE "French"\r
133 !insertmacro MUI_RESERVEFILE_LANGDLL\r
134 \r
135 !macro CreateInternetShortcut FILENAME URL\r
136         WriteINIStr "${FILENAME}.url" "InternetShortcut" "URL" "${URL}"\r
137 !macroend\r
138 \r
139 ; English\r
140 LangString DESC_FinishPage_Link ${LANG_ENGLISH} "Contact OpenERP for Partnership and/or Support"\r
141 LangString WARNING_HostNameIsEmpty ${LANG_ENGLISH} "The hostname for the connection to the PostgreSQL Server is empty"\r
142 LangString WARNING_UserNameIsEmpty ${LANG_ENGLISH} "The username for the connection to the PostgreSQL Server is empty"\r
143 LangString WARNING_PasswordIsEmpty ${LANG_ENGLISH} "The password for the connection to the PostgreSQL Server is empty"\r
144 LangString WARNING_PortIsWrong ${LANG_ENGLISH} "The port for the connexion to the PostgreSQL Server is wrong (default: 5432)"\r
145 LangString DESC_PostgreSQLPage ${LANG_ENGLISH} "Configure the information for the PostgreSQL connection"\r
146 LangString DESC_PostgreSQL_Hostname ${LANG_ENGLISH} "Hostname"\r
147 LangString DESC_PostgreSQL_Port ${LANG_ENGLISH} "Port"\r
148 LangString DESC_PostgreSQL_Username ${LANG_ENGLISH} "Username"\r
149 LangString DESC_PostgreSQL_Password ${LANG_ENGLISH} "Password"\r
150 \r
151 \r
152 ; French\r
153 LangString DESC_FinishPage_Link ${LANG_FRENCH} "Contactez OpenERP pour un Partenariat et/ou du Support"\r
154 LangString WARNING_HostNameIsEmpty ${LANG_FRENCH} "L'adresse pour la connection au serveur PostgreSQL est vide"\r
155 LangString WARNING_UserNameIsEmpty ${LANG_FRENCH} "Le nom d'utilisateur pour la connection au serveur PostgreSQL est vide"\r
156 LangString WARNING_PasswordIsEmpty ${LANG_FRENCH} "Le mot de passe pour la connection au serveur PostgreSQL est vide"\r
157 LangString WARNING_PortIsWrong ${LANG_FRENCH} "Le port pour la connection au serveur PostgreSQL est erroné (défaut: 5432)"\r
158 LangString DESC_PostgreSQLPage ${LANG_FRENCH} "Configurez les informations de connection pour le serveur PostgreSQL"\r
159 LangString DESC_PostgreSQL_Hostname ${LANG_FRENCH} "Hôte"\r
160 LangString DESC_PostgreSQL_Port ${LANG_FRENCH} "Port"\r
161 LangString DESC_PostgreSQL_Username ${LANG_FRENCH} "Utilisateur"\r
162 LangString DESC_PostgreSQL_Password ${LANG_FRENCH} "Mot de passe"\r
163 \r
164 Section -StopService\r
165     nsExec::Exec "net stop openerp-server-6.0"\r
166     sleep 2\r
167 SectionEnd\r
168 \r
169 Section OpenERP_Server SectionOpenERP_Server\r
170     SetOutPath '$INSTDIR'\r
171 \r
172     File /r "dist\*"\r
173 \r
174     SetOutPath "$INSTDIR\service"\r
175     File /r "win32\dist\*"\r
176     File "win32\start.bat"\r
177     File "win32\stop.bat"\r
178 \r
179     !insertmacro MUI_STARTMENU_WRITE_BEGIN Application\r
180         ;Create shortcuts\r
181         CreateDirectory "$SMPROGRAMS\$STARTMENU_FOLDER"\r
182         CreateShortCut "$SMPROGRAMS\$STARTMENU_FOLDER\OpenERP Server.lnk" "$INSTDIR\openerp-server.exe"\r
183         CreateShortCut "$SMPROGRAMS\$STARTMENU_FOLDER\Start service.lnk" "$INSTDIR\service\start.bat"\r
184         CreateShortCut "$SMPROGRAMS\$STARTMENU_FOLDER\Stop service.lnk" "$INSTDIR\service\stop.bat"\r
185         CreateShortCut "$SMPROGRAMS\$STARTMENU_FOLDER\Edit config.lnk" "notepad.exe" "$INSTDIR\openerp-server.conf"\r
186         CreateShortCut "$SMPROGRAMS\$STARTMENU_FOLDER\View log.lnk" "notepad.exe" "$INSTDIR\openerp-server.log"\r
187         CreateShortCut "$SMPROGRAMS\$STARTMENU_FOLDER\Uninstall.lnk" "$INSTDIR\uninstall.exe"\r
188         !insertmacro CreateInternetShortcut "$SMPROGRAMS\$STARTMENU_FOLDER\Forum" "http://www.openerp.com/forum"\r
189         !insertmacro CreateInternetShortcut "$SMPROGRAMS\$STARTMENU_FOLDER\Translation" "https://translations.launchpad.net/openobject"\r
190     !insertmacro MUI_STARTMENU_WRITE_END\r
191 \r
192 \r
193     FileOpen $9 '$INSTDIR\install.log' w\r
194     FileWrite $9 "Hostname $TextPostgreSQLHostname$\r$\n"\r
195     FileWrite $9 "Port $TextPostgreSQLPort$\r$\n"\r
196     FileWrite $9 "Username $TextPostgreSQLUsername$\r$\n"\r
197     FileWrite $9 "Password $TextPostgreSQLPassword$\r$\n"\r
198     FileClose $9\r
199 \r
200 # If there is a previous install of the OpenERP Server, keep the login/password from the config file\r
201     WriteIniStr "$INSTDIR\openerp-server.conf" "options" "db_host" $TextPostgreSQLHostname\r
202     WriteIniStr "$INSTDIR\openerp-server.conf" "options" "db_user" $TextPostgreSQLUsername\r
203     WriteIniStr "$INSTDIR\openerp-server.conf" "options" "db_password" $TextPostgreSQLPassword\r
204     WriteIniStr "$INSTDIR\openerp-server.conf" "options" "db_port" $TextPostgreSQLPort\r
205 \r
206     nsExec::Exec '"$INSTDIR\openerp-server.exe" --stop-after-init --logfile "$INSTDIR\openerp-server.log" -s'\r
207     nsExec::Exec '"$INSTDIR\service\OpenERPServerService.exe" -auto -install'\r
208 SectionEnd\r
209 \r
210 Section -RestartServer\r
211     nsExec::Exec "net start openerp-server-6.0"\r
212     sleep 2\r
213 SectionEnd\r
214 \r
215 Section -Post\r
216     WriteRegExpandStr HKLM "${UNINSTALL_REGISTRY_KEY}" "UninstallString" "$INSTDIR\Uninstall.exe"\r
217     WriteRegExpandStr HKLM "${UNINSTALL_REGISTRY_KEY}" "InstallLocation" "$INSTDIR"\r
218     WriteRegStr HKLM       "${UNINSTALL_REGISTRY_KEY}" "DisplayName" "${DISPLAY_NAME}"\r
219     WriteRegStr HKLM       "${UNINSTALL_REGISTRY_KEY}" "DisplayVersion" "${MAJOR_VERSION}"\r
220     WriteRegStr HKLM       "${UNINSTALL_REGISTRY_KEY}" "Publisher" "${PUBLISHER}"\r
221     WriteRegDWORD HKLM     "${UNINSTALL_REGISTRY_KEY}" "Version" "${VERSION}"\r
222     WriteRegDWORD HKLM     "${UNINSTALL_REGISTRY_KEY}" "VersionMajor" "${MAJOR_VERSION}"\r
223     WriteRegDWORD HKLM     "${UNINSTALL_REGISTRY_KEY}" "VersionMinor" "${MINOR_VERSION}"\r
224     WriteRegStr HKLM       "${UNINSTALL_REGISTRY_KEY}" "HelpLink" "support@openerp.com"\r
225     WriteRegStr HKLM       "${UNINSTALL_REGISTRY_KEY}" "HelpTelephone" "+32.81.81.37.00"\r
226     WriteRegStr HKLM       "${UNINSTALL_REGISTRY_KEY}" "URLInfoAbout" "http://www.openerp.com"\r
227     WriteRegStr HKLM       "${UNINSTALL_REGISTRY_KEY}" "Contact" "sales@openerp.com"\r
228     WriteRegDWORD HKLM     "${UNINSTALL_REGISTRY_KEY}" "NoModify" "1"\r
229     WriteRegDWORD HKLM     "${UNINSTALL_REGISTRY_KEY}" "NoRepair" "1"\r
230     WriteUninstaller "$INSTDIR\Uninstall.exe"\r
231 SectionEnd\r
232 \r
233 Section "Uninstall"\r
234     ; Stop the NT Service\r
235     nsExec::Exec "net stop openerp-server-6.0"\r
236     sleep 2\r
237 \r
238     ; Uninstall the OpenERP Service\r
239     nsExec::Exec '"$INSTDIR\service\OpenERPServerService.exe" -remove'\r
240     sleep 2\r
241 \r
242     Rmdir /r "$INSTDIR"\r
243 \r
244     !insertmacro MUI_STARTMENU_GETFOLDER Application $MUI_TEMP\r
245 \r
246     Delete "$SMPROGRAMS\$MUI_TEMP\Forum.url"\r
247     Delete "$SMPROGRAMS\$MUI_TEMP\Translation.url"\r
248     Delete "$SMPROGRAMS\$MUI_TEMP\Uninstall.lnk"\r
249     Delete "$SMPROGRAMS\$MUI_TEMP\OpenERP Server.lnk"\r
250     Delete "$SMPROGRAMS\$MUI_TEMP\Uninstall.lnk"\r
251     Delete "$SMPROGRAMS\$MUI_TEMP\Start service.lnk"\r
252     Delete "$SMPROGRAMS\$MUI_TEMP\Stop service.lnk"\r
253     Delete "$SMPROGRAMS\$MUI_TEMP\Edit config.lnk"\r
254     Delete "$SMPROGRAMS\$MUI_TEMP\View log.lnk"\r
255     ;\r
256     ;Delete empty start menu parent diretories\r
257     StrCpy $MUI_TEMP "$SMPROGRAMS\$MUI_TEMP"\r
258  \r
259     startMenuDeleteLoop:\r
260         ClearErrors\r
261         RMDir $MUI_TEMP\r
262         GetFullPathName $MUI_TEMP "$MUI_TEMP\.."\r
263 \r
264         IfErrors startMenuDeleteLoopDone\r
265 \r
266         StrCmp $MUI_TEMP $SMPROGRAMS startMenuDeleteLoopDone startMenuDeleteLoop\r
267 \r
268     startMenuDeleteLoopDone:\r
269 \r
270     ; Clean the Registry\r
271     DeleteRegKey HKLM "${UNINSTALL_REGISTRY_KEY}"\r
272 SectionEnd\r
273 \r
274 Function .onInit\r
275     Push $R0\r
276 \r
277     ${GetParameters} $cmdLineParams\r
278     ClearErrors\r
279 \r
280     Pop $R0\r
281 \r
282     StrCpy $Option_AllInOne 0\r
283     StrCpy $HasPostgreSQL 0\r
284 \r
285     StrCpy $TextPostgreSQLHostname ${DEFAULT_POSTGRESQL_HOSTNAME}\r
286     StrCpy $TextPostgreSQLPort ${DEFAULT_POSTGRESQL_PORT}\r
287     StrCpy $TextPostgreSQLUsername ${DEFAULT_POSTGRESQL_USERNAME}\r
288     StrCpy $TextPostgreSQLPassword ${DEFAULT_POSTGRESQL_PASSWORD}\r
289 \r
290     Push $R0\r
291     ${GetOptions} $cmdLineParams '/allinone' $R0\r
292     IfErrors +2 0\r
293     StrCpy $Option_AllInOne 1\r
294     Pop $R0\r
295 \r
296     StrCmp $Option_AllInOne 1 AllInOneMode\r
297     StrCmp $Option_AllInOne 0 NoAllInOneMode\r
298 \r
299     AllInOneMode:\r
300         MessageBox MB_OK|MB_ICONINFORMATION "All In One"\r
301 \r
302     NoAllInOneMode:\r
303     \r
304     !insertmacro MUI_LANGDLL_DISPLAY\r
305 \r
306     ClearErrors\r
307     EnumRegKey $0 HKLM "SOFTWARE\PostgreSQL" 0\r
308     IfErrors DoInstallPostgreSQL 0\r
309         StrCpy $HasPostgreSQL 1\r
310 \r
311     DoInstallPostgreSQL:\r
312 FunctionEnd\r
313 \r
314 Function PostgreSQLOnBack\r
315 FunctionEnd\r
316 \r
317 Function ShowPostgreSQL\r
318     SectionGetFlags ${SectionOpenERP_Server} $0\r
319     IntOp $0 $0 & ${SF_SELECTED}\r
320     IntCmp $0 ${SF_SELECTED} LaunchPostgreSQLConfiguration\r
321     Abort\r
322     LaunchPostgreSQLConfiguration:\r
323 \r
324     nsDialogs::Create /NOUNLOAD 1018\r
325     Pop $0\r
326 \r
327     ${If} $0 == error\r
328         Abort\r
329     ${EndIf}\r
330 \r
331     GetFunctionAddress $0 PostgreSQLOnBack\r
332     nsDialogs::OnBack $0\r
333 \r
334     ${NSD_CreateLabel} 0 0 100% 10u $(DESC_PostgreSQLPage)\r
335     Pop $0\r
336 \r
337     ${NSD_CreateLabel} 0 45 60u 12u $(DESC_PostgreSQL_Hostname)\r
338     Pop $0\r
339     ${NSD_CreateText} 100 45 150u 12u $TextPostgreSQLHostname\r
340     Pop $HWNDPostgreSQLHostname\r
341 \r
342     ${NSD_CreateLabel} 0 75 60u 12u $(DESC_PostgreSQL_Port)\r
343     Pop $0\r
344     ${NSD_CreateNumber} 100 75 150u 12u $TextPostgreSQLPort\r
345     Pop $HWNDPostgreSQLPort\r
346     ${NSD_CreateLabel} 0 105 60u 12u $(DESC_PostgreSQL_Username)\r
347     Pop $0\r
348     ${NSD_CreateText} 100 105 150u 12u $TextPostgreSQLUsername\r
349     Pop $HWNDPostgreSQLUsername\r
350     ${NSD_CreateLabel} 0 135 60u 12u $(DESC_PostgreSQL_Password)\r
351     Pop $0\r
352     ${NSD_CreateText} 100 135 150u 12u $TextPostgreSQLPassword\r
353     Pop $HWNDPostgreSQLPassword\r
354 \r
355     nsDialogs::Show\r
356 FunctionEnd\r
357 \r
358 Function LeavePostgreSQL\r
359     # Before to leave the PostgreSQL configuration screen, we check the values\r
360     # from the inputs, to be sure we have the right values\r
361 \r
362     ${NSD_GetText} $HWNDPostgreSQLHostname $TextPostgreSQLHostname\r
363     ${NSD_GetText} $HWNDPostgreSQLPort $TextPostgreSQLPort\r
364     ${NSD_GetText} $HWNDPostgreSQLUsername $TextPostgreSQLUsername\r
365     ${NSD_GetText} $HWNDPostgreSQLPassword $TextPostgreSQLPassword\r
366 \r
367     StrLen $1 $TextPostgreSQLHostname\r
368     ${If} $1 == 0\r
369         MessageBox MB_ICONEXCLAMATION|MB_OK $(WARNING_HostNameIsEmpty)\r
370         Abort\r
371     ${EndIf}\r
372 \r
373     ${If} $TextPostgreSQLPort <= 0\r
374     ${OrIf} $TextPostgreSQLPort > 65535\r
375         MessageBox MB_ICONEXCLAMATION|MB_OK $(WARNING_PortIsWrong)\r
376         Abort\r
377     ${EndIf}\r
378 \r
379     StrLen $1 $TextPostgreSQLUsername\r
380     ${If} $1 == 0\r
381         MessageBox MB_ICONEXCLAMATION|MB_OK $(WARNING_UserNameIsEmpty)\r
382         Abort\r
383     ${EndIf}\r
384 \r
385     StrLen $1 $TextPostgreSQLPassword\r
386     ${If} $1 == 0\r
387         MessageBox MB_ICONEXCLAMATION|MB_OK $(WARNING_PasswordIsEmpty)\r
388         Abort\r
389     ${EndIf}\r
390 FunctionEnd\r
391 \r