Update of /cvsroot/perl-win32-gui/Win32-GUI
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv28625
Modified Files:
CHANGELOG GUI.h GUI.pm GUI.xs
Log Message:
Fix build/test on Perl 5.6.1
Index: GUI.xs
===================================================================
RCS file: /cvsroot/perl-win32-gui/Win32-GUI/GUI.xs,v
retrieving revision 1.54
retrieving revision 1.55
diff -C2 -d -r1.54 -r1.55
*** GUI.xs 13 Apr 2006 22:17:07 -0000 1.54
--- GUI.xs 14 Apr 2006 01:52:25 -0000 1.55
***************
*** 5577,5580 ****
--- 5577,5665 ----
RETVAL
+
+
###########################################################################
+ # (@)INTERNAL:GetDllVersion(DLLNAME)
+ # Replacement for Win32::GetFileVersion, which doesn't exist in perl 5.6
or
+ # cygwin perl 5.8
+ # In scalar contect returns dotted string of dll version
+ # In list context returns major version, minor version, build
+ void
+ GetDllVersion(filename)
+ LPCTSTR filename
+ PREINIT:
+ HINSTANCE hinstDll;
+ DWORD major = -1;
+ DWORD minor = -1;
+ DWORD build = -1;
+ PPCODE:
+ hinstDll = LoadLibrary(filename);
+
+ if(hinstDll) {
+ DLLGETVERSIONPROC pDllGetVersion;
+ pDllGetVersion =
(DLLGETVERSIONPROC)GetProcAddress(hinstDll,"DllGetVersion");
+
+ if(pDllGetVersion) {
+ DLLVERSIONINFO dvi;
+ HRESULT hr;
+
+ ZeroMemory(&dvi, sizeof(dvi));
+ dvi.cbSize = sizeof(dvi);
+
+ hr = (*pDllGetVersion)(&dvi);
+
+ if(SUCCEEDED(hr)) {
+ major = dvi.dwMajorVersion;
+ minor = dvi.dwMinorVersion;
+ build = dvi.dwBuildNumber;
+ }
+ }
+
+ FreeLibrary(hinstDll);
+ }
+
+ if(major == -1) {
+ DWORD size;
+ DWORD handle;
+ char *data;
+
+ size = GetFileVersionInfoSize(filename, &handle);
+ if(size) {
+ New(0, data, size, char);
+ if(data) {
+ if(GetFileVersionInfo(filename, handle, size, data)) {
+ VS_FIXEDFILEINFO *info;
+ UINT len;
+ if(VerQueryValue(data, "\\", (void**)&info, &len)) {
+ major = (info->dwFileVersionMS>>16);
+ minor = (info->dwFileVersionMS&0xffff);
+ build = (info->dwFileVersionLS>>16);
+ }
+ }
+
+ Safefree(data);
+ }
+ }
+ }
+
+ if(major == -1) {
+ XSRETURN_UNDEF;
+ }
+
+ if (GIMME_V == G_ARRAY) {
+ EXTEND(SP, 3);
+ XST_mIV(0, major);
+ XST_mIV(1, minor);
+ XST_mIV(2, build);
+ items = 3;
+ }
+ else {
+ char version[50];
+ sprintf(version, "%d.%d.%d", major, minor, build);
+ XST_mPV(0, version);
+ items = 1;
+ }
+ XSRETURN(items);
+
+
###########################################################################
# (@)PACKAGE:Win32::GUI::Menu
Index: GUI.h
===================================================================
RCS file: /cvsroot/perl-win32-gui/Win32-GUI/GUI.h,v
retrieving revision 1.27
retrieving revision 1.28
diff -C2 -d -r1.27 -r1.28
*** GUI.h 16 Mar 2006 21:11:11 -0000 1.27
--- GUI.h 14 Apr 2006 01:52:25 -0000 1.28
***************
*** 18,21 ****
--- 18,22 ----
#include <richedit.h>
#include <shellapi.h>
+ #include <shlwapi.h>
#include <shlobj.h>
Index: GUI.pm
===================================================================
RCS file: /cvsroot/perl-win32-gui/Win32-GUI/GUI.pm,v
retrieving revision 1.40
retrieving revision 1.41
diff -C2 -d -r1.40 -r1.41
*** GUI.pm 12 Apr 2006 20:00:05 -0000 1.40
--- GUI.pm 14 Apr 2006 01:52:25 -0000 1.41
***************
*** 469,472 ****
--- 469,474 ----
}
+ bootstrap Win32::GUI;
+
###############################################################################
# PUBLIC METHODS
***************
*** 2785,2793 ****
# has been loaded.
package Win32::GUI::NotifyIcon;
! use Win32();
! our $SHELLDLL_VERSION;
! BEGIN {
! $SHELLDLL_VERSION = (Win32::GetFileVersion('shell32'))[0];
! }
###########################################################################
--- 2787,2791 ----
# has been loaded.
package Win32::GUI::NotifyIcon;
! our $SHELLDLL_VERSION = (Win32::GUI::GetDllVersion('shell32'))[0];
###########################################################################
***************
*** 3559,3563 ****
package Win32::GUI;
! bootstrap Win32::GUI;
bootstrap_subpackage 'Animation';
--- 3557,3563 ----
package Win32::GUI;
! # Need to bootstrap Win32::GUI early, so that we can call
! # Win32::GUI::GetDllVersion during use/compile time
! #bootstrap Win32::GUI;
bootstrap_subpackage 'Animation';
Index: CHANGELOG
===================================================================
RCS file: /cvsroot/perl-win32-gui/Win32-GUI/CHANGELOG,v
retrieving revision 1.77
retrieving revision 1.78
diff -C2 -d -r1.77 -r1.78
*** CHANGELOG 13 Apr 2006 22:17:07 -0000 1.77
--- CHANGELOG 14 Apr 2006 01:52:25 -0000 1.78
***************
*** 6,9 ****
--- 6,21 ----
Win32-GUI ChangeLog
===================
+ + [Robert May] : 14 Apr 2006 - Fix build/test on Perl 5.6.1
+ - GUI.h GUI.xs add GetDllVersion call to replace use of
+ Win32::GetFileVersion that is not available in perl 5.6 (or
+ cygwin perl 5.8)
+ - GUI.pm Change use of Win32::GetFileVersion to
+ Win32::GUI::GetDllVersion. Change position of bootstrap for
+ Win32::GUI so that we can call Win32::GUI::GetDllVersion
+ - t/05_NotifyIcon_01_Constructor.t add test to ensure that
+ $Win32::GUI::NotifyIcon::SHELLDLL_VERSION is set
+ - samples/NotifyIcon.pl Use new Win32::GUI::GetDllVersion and
+ a couple of minor bug-fixes under perl 5.6
+
+ [Robert May] : 13 Apr 2006 - Clean build under Cygwin
- TYPEMAP corrected various entries to use INT2PTR and PTR2INT