[cmake-developers] [CMake 0011780]: CMake cannot building by VC6 with PSDK

Mantis Bug Tracker mantis at public.kitware.com
Tue Feb 1 03:07:42 EST 2011


The following issue has been SUBMITTED. 
====================================================================== 
http://public.kitware.com/Bug/view.php?id=11780 
====================================================================== 
Reported By:                Dongsheng Song
Assigned To:                
====================================================================== 
Project:                    CMake
Issue ID:                   11780
Category:                   CMake
Reproducibility:            always
Severity:                   minor
Priority:                   normal
Status:                     new
====================================================================== 
Date Submitted:             2011-02-01 03:07 EST
Last Modified:              2011-02-01 03:07 EST
====================================================================== 
Summary:                    CMake cannot building by VC6 with PSDK
Description: 
Tested with PSDK February 2003 edition.

C:\>set inc
INCLUDE=C:\Program Files\Microsoft SDK\include;C:\opt\vs1998\vc98\include

C:\>set lib
LIB=C:\Program Files\Microsoft SDK\lib;C:\opt\vs1998\vc98\lib

In Utilities\cmlibarchive\libarchive\archive_windows.c, the following code is
not correct:

#if defined(_MSC_VER) && _MSC_VER < 1300
/* VS 6 does not provide SetFilePointerEx, so define it here.  */
static BOOL SetFilePointerEx(HANDLE hFile,
                             LARGE_INTEGER liDistanceToMove,
                             PLARGE_INTEGER lpNewFilePointer,
                             DWORD dwMoveMethod)
{
  LARGE_INTEGER li;
  li.QuadPart = liDistanceToMove.QuadPart;
  li.LowPart = SetFilePointer(hFile, li.LowPart, &li.HighPart, dwMoveMethod);
  if(lpNewFilePointer) { lpNewFilePointer->QuadPart = li.QuadPart; }
  return li.LowPart != -1 || GetLastError() == NO_ERROR;
}
#endif

Because VC6 with PSDK have SetFilePointerEx, we should use VER_PRODUCTBUILD
which defined in <ntverp.h>:

#include <ntverp.h>

/* Windows 2000/XP or later have SetFilePointerEx defined */
#if (_MSC_VER < 1300) && (VER_PRODUCTBUILD < 2600)
static BOOL SetFilePointerEx(HANDLE hFile,
                             LARGE_INTEGER liDistanceToMove,
                             PLARGE_INTEGER lpNewFilePointer,
                             DWORD dwMoveMethod)
{
  LARGE_INTEGER li;
  li.QuadPart = liDistanceToMove.QuadPart;
  li.LowPart = SetFilePointer(hFile, li.LowPart, &li.HighPart, dwMoveMethod);
  if(lpNewFilePointer) { lpNewFilePointer->QuadPart = li.QuadPart; }
  return li.LowPart != -1 || GetLastError() == NO_ERROR;
}
#endif


Steps to Reproduce: 
O:\vcs\git\cmake\Utilities\cmlibarchive\libarchive\archive_windows.c(74) : error
C2373: 'SetFilePointerEx' : redefinition; different type modifiers
        C:\Program Files\Microsoft SDK\include\winbase.h(3393) : see declaration
of 'SetFilePointerEx'
NMAKE : fatal error U1077: 'C:\opt\vs1998\VC98\Bin\CL.EXE' : return code '0x2'
Stop.
NMAKE : fatal error U1077: 'C:\opt\vs1998\vc98\bin\NMAKE.EXE' : return code
'0x2'
Stop.
NMAKE : fatal error U1077: 'C:\opt\vs1998\vc98\bin\NMAKE.EXE' : return code
'0x2'
Stop.
====================================================================== 

Issue History 
Date Modified    Username       Field                    Change               
====================================================================== 
2011-02-01 03:07 Dongsheng Song New Issue                                    
======================================================================




More information about the cmake-developers mailing list