Merge branch 'windows-fixes' of git://git.hohndel.org/subsurface

* 'windows-fixes' of git://git.hohndel.org/subsurface:
  Add more typecasts for Windows`
  Fix the Windows preferences support
  Update the Windows installer creation script
This commit is contained in:
Linus Torvalds 2011-11-25 21:51:34 -08:00
commit 19356de246
3 changed files with 75 additions and 52 deletions

12
packaging/windows/mingw-make.sh Executable file
View file

@ -0,0 +1,12 @@
#!/bin/bash
#
# just a small shell script that is used to invoke make with the right
# parameters to cross compile a binary for Windows
#
# the paths work for the default mingw32 install on OpenSUSE - adjust as
# necessary
make CC=i686-w64-mingw32-gcc \
PKGCONFIG=i686-w64-mingw32-pkg-config \
PKG_CONFIG_PATH=/usr/i686-w64-mingw32/sys-root/i686-w64-mingw32/lib/pkgconfig/ \
XML2CONFIG=/usr/i686-w64-mingw32/sys-root/mingw/bin/xml2-config NAME=subsurface.exe

View file

@ -1,18 +1,30 @@
# this installer creator needs to be run with
# makensis subsurface.nsi
#
# it assumes that packaging/windows/dll is a symlink to
# the directory in which the required Windows DLLs are installed
# (in my case that's /usr/i686-w64-mingw32/sys-root/mingw/bin)
#
# define the name of the installer # define the name of the installer
outfile "subsurface-installer.exe" outfile "subsurface-installer.exe"
Name subsurface Name subsurface
VIProductVersion "1.1.0.0" # some data for the package to identify itself
VIProductVersion "1.1.9.0"
VIAddVersionKey ProductName subsurface VIAddVersionKey ProductName subsurface
VIAddVersionKey FileDescription "subsurface diving log program"
VIAddVersionKey LegalCopyright "GPL v.2"
VIAddVersionKey ProductVersion "1.1" VIAddVersionKey ProductVersion "1.1"
VIAddVersionKey FileVersion "1.1" VIAddVersionKey FileVersion "1.1"
Icon ..\share\subsurface.ico # icon to use for the installer
Icon .\subsurface.ico
# the installer needs to be run with admin privileges
RequestExecutionLevel admin RequestExecutionLevel admin
# pop up a little dialog that tells the user that we're about to
# install subsurface
Function .onInit Function .onInit
MessageBox MB_YESNO "This will install subsurface. Do you wish to continue?" IDYES gogogo MessageBox MB_YESNO "This will install subsurface. Do you wish to continue?" IDYES gogogo
Abort Abort
@ -42,39 +54,36 @@ writeUninstaller "$INSTDIR\subsurface-uninstall.exe"
createShortCut "$SMPROGRAMS\subsurface\uninstall-subsurface.lnk" "$INSTDIR\subsurface-uninstall.exe" createShortCut "$SMPROGRAMS\subsurface\uninstall-subsurface.lnk" "$INSTDIR\subsurface-uninstall.exe"
# define what to install and place it in the output path # define what to install and place it in the output path
file subsurface.exe file /oname=subsurface.exe ../../subsurface.exe
file libatk-1.0-0.dll file /oname=subsurface.ico subsurface.ico
file libcairo-2.dll file /oname=subsurface.svg ../../subsurface.svg
file libdivecomputer-0.dll file /oname=libatk-1.0-0.dll dll/libatk-1.0-0.dll
file libffi-5.dll file /oname=libcairo-2.dll dll/libcairo-2.dll
file libfontconfig-1.dll file /oname=libdivecomputer-0.dll dll\libdivecomputer-0.dll
file libfreetype-6.dll file /oname=libffi-5.dll dll\libffi-5.dll
file libgdk_pixbuf-2.0-0.dll file /oname=libfontconfig-1.dll dll\libfontconfig-1.dll
file libgdk-win32-2.0-0.dll file /oname=libfreetype-6.dll dll\libfreetype-6.dll
file libgio-2.0-0.dll file /oname=libgdk_pixbuf-2.0-0.dll dll\libgdk_pixbuf-2.0-0.dll
file libglib-2.0-0.dll file /oname=libgdk-win32-2.0-0.dll dll\libgdk-win32-2.0-0.dll
file libgmodule-2.0-0.dll file /oname=libgio-2.0-0.dll dll\libgio-2.0-0.dll
file libgobject-2.0-0.dll file /oname=libglib-2.0-0.dll dll\libglib-2.0-0.dll
file libgthread-2.0-0.dll file /oname=libgmodule-2.0-0.dll dll\libgmodule-2.0-0.dll
file libgtk-win32-2.0-0.dll file /oname=libgobject-2.0-0.dll dll\libgobject-2.0-0.dll
file libintl-8.dll file /oname=libgthread-2.0-0.dll dll\libgthread-2.0-0.dll
file libjasper-1.dll file /oname=libgtk-win32-2.0-0.dll dll\libgtk-win32-2.0-0.dll
file libjpeg-8.dll file /oname=libintl-8.dll dll\libintl-8.dll
file libpango-1.0-0.dll file /oname=libjasper-1.dll dll\libjasper-1.dll
file libpangocairo-1.0-0.dll file /oname=libjpeg-8.dll dll\libjpeg-8.dll
file libpangoft2-1.0-0.dll file /oname=libpango-1.0-0.dll dll\libpango-1.0-0.dll
file libpangowin32-1.0-0.dll file /oname=libpangocairo-1.0-0.dll dll\libpangocairo-1.0-0.dll
file libpixman-1-0.dll file /oname=libpangoft2-1.0-0.dll dll\libpangoft2-1.0-0.dll
file libpng15-15.dll file /oname=libpangowin32-1.0-0.dll dll\libpangowin32-1.0-0.dll
file libtiff-3.dll file /oname=libpixman-1-0.dll dll\libpixman-1-0.dll
file libxml2-2.dll file /oname=libpng15-15.dll dll\libpng15-15.dll
file pthreadGC2.dll file /oname=libtiff-3.dll dll\libtiff-3.dll
file zlib1.dll file /oname=libxml2-2.dll dll\libxml2-2.dll
file /oname=subsurface.ico ..\\share\\subsurface.ico file /oname=pthreadGC2.dll dll\pthreadGC2.dll
file /oname=subsurface.bmp ..\\share\\subsurface.bmp file /oname=zlib1.dll dll\zlib1.dll
file /oname=subsurface.svg ..\\share\\subsurface.svg
sectionEnd sectionEnd
section "uninstall" section "uninstall"
@ -86,7 +95,7 @@ section "uninstall"
delete "$SMPROGRAMS\subsurface\subsurface.lnk" delete "$SMPROGRAMS\subsurface\subsurface.lnk"
RMDir "$SMPROGRAMS\subsurface" RMDir "$SMPROGRAMS\subsurface"
MessageBox MB_YESNO "Do you wish to store subsurface's settings?" IDYES end MessageBox MB_YESNO "Do you wish to keep subsurface's registry settings?" IDYES end
DeleteRegKey HKCU "SOFTWARE\subsurface" DeleteRegKey HKCU "SOFTWARE\subsurface"
end: end:
sectionEnd sectionEnd

View file

@ -11,8 +11,8 @@ static int get_from_registry(HKEY hkey, const char *key)
DWORD len = 4; DWORD len = 4;
LONG success; LONG success;
success = RegQueryValueEx(hkey, TEXT(key), NULL, NULL, success = RegQueryValueEx(hkey, (LPCTSTR)TEXT(key), NULL, NULL,
(LPBYTE) &value, &len ); (LPBYTE) &value, (LPDWORD)&len );
if (success != ERROR_SUCCESS) if (success != ERROR_SUCCESS)
return FALSE; /* that's what happens the first time we start */ return FALSE; /* that's what happens the first time we start */
return value; return value;
@ -22,26 +22,28 @@ void subsurface_open_conf(void)
{ {
LONG success; LONG success;
success = RegOpenKeyEx(HKEY_CURRENT_USER, TEXT("Software\\subsurface"), 0, success = RegCreateKeyEx(HKEY_CURRENT_USER, (LPCTSTR)TEXT("Software\\subsurface"),
KEY_QUERY_VALUE, &hkey); 0L, NULL, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS,
if (success != ERROR_SUCCESS) { NULL, &hkey, NULL);
success = RegCreateKeyEx(HKEY_CURRENT_USER, TEXT("Software\\subsurface"), if (success != ERROR_SUCCESS)
0L, NULL, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, printf("CreateKey Software\\subsurface failed %ld\n", success);
NULL, &hkey, NULL);
if (success != ERROR_SUCCESS)
printf("CreateKey Software\\subsurface failed %ld\n", success);
}
} }
void subsurface_set_conf(char *name, pref_type_t type, const void *value) void subsurface_set_conf(char *name, pref_type_t type, const void *value)
{ {
/* since we are using the pointer 'value' as both an actual
* pointer to the string setting and as a way to pass the
* numbers 0 and 1 to this function for booleans, one of the
* calls to RegSetValueEx needs to pass &value (when we want
* to pass the boolean value), the other one passes value (the
* address of the string. */
switch (type) { switch (type) {
case PREF_BOOL: case PREF_BOOL:
/* we simply store the value as DWORD */ /* we simply store the value as DWORD */
RegSetValueEx(hkey, TEXT(name), 0, REG_DWORD, value, 4); RegSetValueEx(hkey, (LPCTSTR)TEXT(name), 0, REG_DWORD, (const BYTE *)&value, 4);
break; break;
case PREF_STRING: case PREF_STRING:
RegSetValueEx(hkey, TEXT(name), 0, REG_SZ, value, strlen(value)); RegSetValueEx(hkey, (LPCTSTR)TEXT(name), 0, REG_SZ, (const BYTE *)value, strlen(value));
} }
} }
@ -57,7 +59,7 @@ const void *subsurface_get_conf(char *name, pref_type_t type)
case PREF_STRING: case PREF_STRING:
string = malloc(80); string = malloc(80);
len = 80; len = 80;
success = RegQueryValueEx(hkey, TEXT(name), NULL, NULL, success = RegQueryValueEx(hkey, (LPCTSTR)TEXT(name), NULL, NULL,
(LPBYTE) string, (LPDWORD)&len ); (LPBYTE) string, (LPDWORD)&len );
if (success != ERROR_SUCCESS) { if (success != ERROR_SUCCESS) {
/* that's what happens the first time we start - just return NULL */ /* that's what happens the first time we start - just return NULL */