From: Linus Torvalds Date: Sat, 26 Nov 2011 05:51:34 +0000 (-0800) Subject: Merge branch 'windows-fixes' of git://git.hohndel.org/subsurface X-Git-Url: http://git.tdb.fi/?a=commitdiff_plain;h=19356de24620c75c26152c5f19947c8a1e5215cb;hp=0d879f8fbedde8a9e401e7a75c3db4b628b3fe23;p=ext%2Fsubsurface.git 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 --- diff --git a/packaging/windows/mingw-make.sh b/packaging/windows/mingw-make.sh new file mode 100755 index 0000000..79e7ad5 --- /dev/null +++ b/packaging/windows/mingw-make.sh @@ -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 diff --git a/packaging/windows/subsurface.nsi b/packaging/windows/subsurface.nsi index 17b734f..b78c981 100644 --- a/packaging/windows/subsurface.nsi +++ b/packaging/windows/subsurface.nsi @@ -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 diff --git a/windows.c b/windows.c index 91323eb..e4c8119 100644 --- a/windows.c +++ b/windows.c @@ -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 */