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
outfile "subsurface-installer.exe"
Name subsurface
VIProductVersion "1.1.0.0"
# some data for the package to identify itself
VIProductVersion "1.1.9.0"
VIAddVersionKey ProductName subsurface
VIAddVersionKey FileDescription "subsurface diving log program"
VIAddVersionKey LegalCopyright "GPL v.2"
VIAddVersionKey ProductVersion "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
# pop up a little dialog that tells the user that we're about to
# install subsurface
Function .onInit
MessageBox MB_YESNO "This will install subsurface. Do you wish to continue?" IDYES gogogo
Abort
@ -42,39 +54,36 @@ writeUninstaller "$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
file subsurface.exe
file libatk-1.0-0.dll
file libcairo-2.dll
file libdivecomputer-0.dll
file libffi-5.dll
file libfontconfig-1.dll
file libfreetype-6.dll
file libgdk_pixbuf-2.0-0.dll
file libgdk-win32-2.0-0.dll
file libgio-2.0-0.dll
file libglib-2.0-0.dll
file libgmodule-2.0-0.dll
file libgobject-2.0-0.dll
file libgthread-2.0-0.dll
file libgtk-win32-2.0-0.dll
file libintl-8.dll
file libjasper-1.dll
file libjpeg-8.dll
file libpango-1.0-0.dll
file libpangocairo-1.0-0.dll
file libpangoft2-1.0-0.dll
file libpangowin32-1.0-0.dll
file libpixman-1-0.dll
file libpng15-15.dll
file libtiff-3.dll
file libxml2-2.dll
file pthreadGC2.dll
file zlib1.dll
file /oname=subsurface.ico ..\\share\\subsurface.ico
file /oname=subsurface.bmp ..\\share\\subsurface.bmp
file /oname=subsurface.svg ..\\share\\subsurface.svg
file /oname=subsurface.exe ../../subsurface.exe
file /oname=subsurface.ico subsurface.ico
file /oname=subsurface.svg ../../subsurface.svg
file /oname=libatk-1.0-0.dll dll/libatk-1.0-0.dll
file /oname=libcairo-2.dll dll/libcairo-2.dll
file /oname=libdivecomputer-0.dll dll\libdivecomputer-0.dll
file /oname=libffi-5.dll dll\libffi-5.dll
file /oname=libfontconfig-1.dll dll\libfontconfig-1.dll
file /oname=libfreetype-6.dll dll\libfreetype-6.dll
file /oname=libgdk_pixbuf-2.0-0.dll dll\libgdk_pixbuf-2.0-0.dll
file /oname=libgdk-win32-2.0-0.dll dll\libgdk-win32-2.0-0.dll
file /oname=libgio-2.0-0.dll dll\libgio-2.0-0.dll
file /oname=libglib-2.0-0.dll dll\libglib-2.0-0.dll
file /oname=libgmodule-2.0-0.dll dll\libgmodule-2.0-0.dll
file /oname=libgobject-2.0-0.dll dll\libgobject-2.0-0.dll
file /oname=libgthread-2.0-0.dll dll\libgthread-2.0-0.dll
file /oname=libgtk-win32-2.0-0.dll dll\libgtk-win32-2.0-0.dll
file /oname=libintl-8.dll dll\libintl-8.dll
file /oname=libjasper-1.dll dll\libjasper-1.dll
file /oname=libjpeg-8.dll dll\libjpeg-8.dll
file /oname=libpango-1.0-0.dll dll\libpango-1.0-0.dll
file /oname=libpangocairo-1.0-0.dll dll\libpangocairo-1.0-0.dll
file /oname=libpangoft2-1.0-0.dll dll\libpangoft2-1.0-0.dll
file /oname=libpangowin32-1.0-0.dll dll\libpangowin32-1.0-0.dll
file /oname=libpixman-1-0.dll dll\libpixman-1-0.dll
file /oname=libpng15-15.dll dll\libpng15-15.dll
file /oname=libtiff-3.dll dll\libtiff-3.dll
file /oname=libxml2-2.dll dll\libxml2-2.dll
file /oname=pthreadGC2.dll dll\pthreadGC2.dll
file /oname=zlib1.dll dll\zlib1.dll
sectionEnd
section "uninstall"
@ -86,7 +95,7 @@ section "uninstall"
delete "$SMPROGRAMS\subsurface\subsurface.lnk"
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"
end:
sectionEnd

View file

@ -11,8 +11,8 @@ static int get_from_registry(HKEY hkey, const char *key)
DWORD len = 4;
LONG success;
success = RegQueryValueEx(hkey, TEXT(key), NULL, NULL,
(LPBYTE) &value, &len );
success = RegQueryValueEx(hkey, (LPCTSTR)TEXT(key), NULL, NULL,
(LPBYTE) &value, (LPDWORD)&len );
if (success != ERROR_SUCCESS)
return FALSE; /* that's what happens the first time we start */
return value;
@ -22,26 +22,28 @@ void subsurface_open_conf(void)
{
LONG success;
success = RegOpenKeyEx(HKEY_CURRENT_USER, TEXT("Software\\subsurface"), 0,
KEY_QUERY_VALUE, &hkey);
if (success != ERROR_SUCCESS) {
success = RegCreateKeyEx(HKEY_CURRENT_USER, TEXT("Software\\subsurface"),
0L, NULL, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS,
NULL, &hkey, NULL);
if (success != ERROR_SUCCESS)
printf("CreateKey Software\\subsurface failed %ld\n", success);
}
success = RegCreateKeyEx(HKEY_CURRENT_USER, (LPCTSTR)TEXT("Software\\subsurface"),
0L, NULL, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS,
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)
{
/* 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) {
case PREF_BOOL:
/* 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;
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:
string = malloc(80);
len = 80;
success = RegQueryValueEx(hkey, TEXT(name), NULL, NULL,
success = RegQueryValueEx(hkey, (LPCTSTR)TEXT(name), NULL, NULL,
(LPBYTE) string, (LPDWORD)&len );
if (success != ERROR_SUCCESS) {
/* that's what happens the first time we start - just return NULL */