]> git.netwichtig.de Git - user/henk/code/inspircd.git/blob - win/inspircd.nsi
Dunno why this method was static, doesnt need to be...
[user/henk/code/inspircd.git] / win / inspircd.nsi
1 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;\r
2 \r
3                        ;;;; SET THE BUILD TO BE PACKAGED HERE ;;;;\r
4 \r
5 !define BUILD "release"\r
6 \r
7 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;\r
8 \r
9 ; HM NIS Edit Wizard helper defines\r
10 !define PRODUCT_NAME "InspIRCd"\r
11 !define PRODUCT_VERSION "1.1"\r
12 !define PRODUCT_PUBLISHER "InspIRCd Development Team"\r
13 !define PRODUCT_WEB_SITE "http://www.inspircd.org/"\r
14 !define PRODUCT_DIR_REGKEY "Software\Microsoft\Windows\CurrentVersion\App Paths\inspircd.exe"\r
15 !define PRODUCT_UNINST_KEY "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_NAME}"\r
16 !define PRODUCT_UNINST_ROOT_KEY "HKLM"\r
17 !define DOT_MAJOR "2"\r
18 !define DOT_MINOR "0"\r
19 \r
20 SetCompressor bzip2\r
21 \r
22 ; MUI 1.67 compatible ------\r
23 !include "MUI.nsh"\r
24 \r
25 ; MUI Settings\r
26 !define MUI_ABORTWARNING\r
27 !define MUI_ICON "inspircd.ico"\r
28 !define MUI_UNICON "inspircd.ico"\r
29 \r
30 ; Welcome page\r
31 !insertmacro MUI_PAGE_WELCOME\r
32 ; License page\r
33 !define MUI_LICENSEPAGE_CHECKBOX\r
34 !insertmacro MUI_PAGE_LICENSE "..\docs\COPYING"\r
35 ; directory page\r
36 Page directory\r
37 ; Components page\r
38 !insertmacro MUI_PAGE_COMPONENTS\r
39 ; Instfiles page\r
40 !insertmacro MUI_PAGE_INSTFILES\r
41 ; Finish page\r
42 !define MUI_FINISHPAGE_RUN "$INSTDIR\InspGUI.exe"\r
43 !insertmacro MUI_PAGE_FINISH\r
44 \r
45 ; Uninstaller pages\r
46 !insertmacro MUI_UNPAGE_INSTFILES\r
47 \r
48 ; Language files\r
49 !insertmacro MUI_LANGUAGE "English"\r
50 \r
51 ; Reserve files\r
52 !insertmacro MUI_RESERVEFILE_INSTALLOPTIONS\r
53 \r
54 ; MUI end ------\r
55 \r
56 Name "${PRODUCT_NAME} ${PRODUCT_VERSION}"\r
57 OutFile "Setup.exe"\r
58 InstallDir "$PROGRAMFILES\InspIRCd"\r
59 InstallDirRegKey HKLM "${PRODUCT_DIR_REGKEY}" ""\r
60 ShowInstDetails show\r
61 ShowUnInstDetails show\r
62 \r
63 Function IsDotNetInstalled\r
64  \r
65   StrCpy $0 "0"\r
66   StrCpy $1 "SOFTWARE\Microsoft\.NETFramework" ;registry entry to look in.\r
67   StrCpy $2 0\r
68  \r
69   StartEnum:\r
70     ;Enumerate the versions installed.\r
71     EnumRegKey $3 HKLM "$1\policy" $2\r
72     \r
73     ;If we don't find any versions installed, it's not here.\r
74     StrCmp $3 "" noDotNet notEmpty\r
75     \r
76     ;We found something.\r
77     notEmpty:\r
78       ;Find out if the RegKey starts with 'v'.  \r
79       ;If it doesn't, goto the next key.\r
80       StrCpy $4 $3 1 0\r
81       StrCmp $4 "v" +1 goNext\r
82       StrCpy $4 $3 1 1\r
83       \r
84       ;It starts with 'v'.  Now check to see how the installed major version\r
85       ;relates to our required major version.\r
86       ;If it's equal check the minor version, if it's greater, \r
87       ;we found a good RegKey.\r
88       IntCmp $4 ${DOT_MAJOR} +1 goNext yesDotNetReg\r
89       ;Check the minor version.  If it's equal or greater to our requested \r
90       ;version then we're good.\r
91       StrCpy $4 $3 1 3\r
92       IntCmp $4 ${DOT_MINOR} yesDotNetReg goNext yesDotNetReg\r
93  \r
94     goNext:\r
95       ;Go to the next RegKey.\r
96       IntOp $2 $2 + 1\r
97       goto StartEnum\r
98  \r
99   yesDotNetReg:\r
100     ;Now that we've found a good RegKey, let's make sure it's actually\r
101     ;installed by getting the install path and checking to see if the \r
102     ;mscorlib.dll exists.\r
103     EnumRegValue $2 HKLM "$1\policy\$3" 0\r
104     ;$2 should equal whatever comes after the major and minor versions \r
105     ;(ie, v1.1.4322)\r
106     StrCmp $2 "" noDotNet\r
107     ReadRegStr $4 HKLM $1 "InstallRoot"\r
108     ;Hopefully the install root isn't empty.\r
109     StrCmp $4 "" noDotNet\r
110     ;build the actuall directory path to mscorlib.dll.\r
111     StrCpy $4 "$4$3.$2\mscorlib.dll"\r
112     IfFileExists $4 yesDotNet noDotNet\r
113  \r
114   noDotNet:\r
115     MessageBox MB_OK "You do not have have v${DOT_MAJOR}.${DOT_MINOR} or greater of the .NET framework installed. This is required for the InspIRCd Monitor, however you can still launch the IRCd manually."\r
116  \r
117   yesDotNet:\r
118     ;Everything checks out.  Go on with the rest of the installation.\r
119     \r
120 FunctionEnd\r
121 \r
122 Section "Binary Executable" SEC01\r
123   Call IsDotNetInstalled\r
124   SetOutPath "$INSTDIR"\r
125   SetOverwrite ifnewer\r
126   File "..\bin\${BUILD}\InspGUI.exe"\r
127   CreateDirectory "$SMPROGRAMS\InspIRCd"\r
128   CreateShortCut "$SMPROGRAMS\InspIRCd\InspIRCd.lnk" "$INSTDIR\InspGUI.exe"\r
129   SetOutPath "$INSTDIR\bin"\r
130   SetOverwrite ifnewer\r
131   File "..\bin\${BUILD}\bin\inspircd.exe"\r
132 SectionEnd\r
133 \r
134 Section "Config Files" SEC02\r
135   SetOutPath "$INSTDIR\conf"\r
136   File "..\conf\inspircd.motd.example"\r
137   File "..\conf\inspircd.helpop-full.example"\r
138   File "..\conf\inspircd.helpop.example"\r
139   File "..\conf\inspircd.filter.example"\r
140   File "..\docs\inspircd.conf.example"\r
141   File "..\conf\inspircd.censor.example"\r
142   File "..\conf\inspircd.rules.example"\r
143   File "..\conf\inspircd.quotes.example"\r
144 SectionEnd\r
145 \r
146 Section "Command Handlers" SEC03\r
147   SetOutPath "$INSTDIR\lib"\r
148   File "..\bin\${BUILD}\lib\cmd_*.so"\r
149 SectionEnd\r
150 \r
151 Section "Modules" SEC04\r
152   SetOutPath "$INSTDIR\modules"\r
153   File "..\bin\${BUILD}\modules\*.so"\r
154 SectionEnd\r
155 \r
156 Section -AdditionalIcons\r
157   SetOutPath $INSTDIR\r
158   WriteIniStr "$INSTDIR\${PRODUCT_NAME}.url" "InternetShortcut" "URL" "${PRODUCT_WEB_SITE}"\r
159   CreateShortCut "$SMPROGRAMS\InspIRCd\InspIRCd Website.lnk" "$INSTDIR\${PRODUCT_NAME}.url"\r
160   CreateShortCut "$SMPROGRAMS\InspIRCd\Uninstall.lnk" "$INSTDIR\uninst.exe"\r
161 SectionEnd\r
162 \r
163 Section -Post\r
164   WriteUninstaller "$INSTDIR\uninst.exe"\r
165   WriteRegStr HKLM "${PRODUCT_DIR_REGKEY}" "" "$INSTDIR\bin\inspircd.exe"\r
166   WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "DisplayName" "$(^Name)"\r
167   WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "UninstallString" "$INSTDIR\uninst.exe"\r
168   WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "DisplayIcon" "$INSTDIR\bin\inspircd.exe"\r
169   WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "DisplayVersion" "${PRODUCT_VERSION}"\r
170   WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "URLInfoAbout" "${PRODUCT_WEB_SITE}"\r
171   WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "Publisher" "${PRODUCT_PUBLISHER}"\r
172   MessageBox MB_ICONINFORMATION|MB_OK "InspIRCd was successfully installed. Remember to edit your configuration file in $INSTDIR\conf!"\r
173 SectionEnd\r
174 \r
175 ; Section descriptions\r
176 !insertmacro MUI_FUNCTION_DESCRIPTION_BEGIN\r
177   !insertmacro MUI_DESCRIPTION_TEXT ${SEC01} "Actual Executable"\r
178   !insertmacro MUI_DESCRIPTION_TEXT ${SEC03} "Command Modules"\r
179   !insertmacro MUI_DESCRIPTION_TEXT ${SEC02} "Default Config Files"\r
180   !insertmacro MUI_DESCRIPTION_TEXT ${SEC04} "Optional Modules"\r
181 !insertmacro MUI_FUNCTION_DESCRIPTION_END\r
182 \r
183 \r
184 Function un.onUninstSuccess\r
185   HideWindow\r
186   MessageBox MB_ICONINFORMATION|MB_OK "$(^Name) was successfully removed from your computer."\r
187 FunctionEnd\r
188 \r
189 Function .onInit\r
190   SectionSetFlags ${SEC01} 17\r
191   SectionSetFlags ${SEC03} 17\r
192   StrCpy $INSTDIR "$PROGRAMFILES\InspIRCd"\r
193 FunctionEnd\r
194 \r
195 Function un.onInit\r
196   MessageBox MB_ICONQUESTION|MB_YESNO|MB_DEFBUTTON2 "Are you sure you want to completely remove $(^Name) and all of its components?" IDYES +2\r
197   Abort\r
198 FunctionEnd\r
199 \r
200 Section Uninstall\r
201   Delete "$INSTDIR\${PRODUCT_NAME}.url"\r
202   Delete "$INSTDIR\uninst.exe"\r
203   Delete "$INSTDIR\modules\m_*.so"\r
204   Delete "$INSTDIR\lib\cmd_*.so"\r
205   Delete "$INSTDIR\conf\inspircd.quotes.example"\r
206   Delete "$INSTDIR\conf\inspircd.rules.example"\r
207   Delete "$INSTDIR\conf\inspircd.censor.example"\r
208   Delete "$INSTDIR\conf\inspircd.conf.example"\r
209   Delete "$INSTDIR\conf\inspircd.filter.example"\r
210   Delete "$INSTDIR\conf\inspircd.helpop.example"\r
211   Delete "$INSTDIR\conf\inspircd.helpop-full.example"\r
212   Delete "$INSTDIR\conf\inspircd.motd.example"\r
213   Delete "$INSTDIR\bin\inspircd.exe"\r
214   Delete "$INSTDIR\InspGUI.exe"\r
215 \r
216   Delete "$SMPROGRAMS\InspIRCd\Uninstall.lnk"\r
217   Delete "$SMPROGRAMS\InspIRCd\InspIRCd Website.lnk"\r
218   Delete "$SMPROGRAMS\InspIRCd\InspIRCd.lnk"\r
219 \r
220   RMDir "$SMPROGRAMS\InspIRCd"\r
221   RMDir "$INSTDIR\modules"\r
222   RMDir "$INSTDIR\lib"\r
223   RMDir "$INSTDIR\conf"\r
224   RMDir "$INSTDIR\bin"\r
225   RMDir "$INSTDIR"\r
226 \r
227   DeleteRegKey ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}"\r
228   DeleteRegKey HKLM "${PRODUCT_DIR_REGKEY}"\r
229   SetAutoClose true\r
230 SectionEnd\r
231 \r
232 Page directory\r