2010-11-01 16:42 UTC+0200 Viktor Szakats (harbour.01 syenar.hu)
* include/hbapi.h
* src/common/hbver.c
+ Added hb_verPlatformMacro(), which returns string as it appears
in __PLATFORM__* macro.
This function will have to be extended for each new platform
Harbour is getting ported to.
* src/pp/ppcore.c
! Changed to use hb_verPlatformMacro() value to form __PLATFORM__*
macro, instead of using hb_verPlatform(), which offers no
guarantee for the value on *nix systems and it's was hack
on other platforms too (f.e. it got messed up when Windows
version string was changed to show "wine" at the beginning
of the human readable platform string).
% Made forming of __PLATFORM__* macros simpler, using hb_snprintf().
! Now WINCE builds of pp will also defined __PLATFORM__WINDOWS.
; Please review/test.
This commit is contained in:
@@ -16,6 +16,26 @@
|
||||
The license applies to all entries newer than 2009-04-28.
|
||||
*/
|
||||
|
||||
2010-11-01 16:42 UTC+0200 Viktor Szakats (harbour.01 syenar.hu)
|
||||
* include/hbapi.h
|
||||
* src/common/hbver.c
|
||||
+ Added hb_verPlatformMacro(), which returns string as it appears
|
||||
in __PLATFORM__* macro.
|
||||
This function will have to be extended for each new platform
|
||||
Harbour is getting ported to.
|
||||
|
||||
* src/pp/ppcore.c
|
||||
! Changed to use hb_verPlatformMacro() value to form __PLATFORM__*
|
||||
macro, instead of using hb_verPlatform(), which offers no
|
||||
guarantee for the value on *nix systems and it's was hack
|
||||
on other platforms too (f.e. it got messed up when Windows
|
||||
version string was changed to show "wine" at the beginning
|
||||
of the human readable platform string).
|
||||
% Made forming of __PLATFORM__* macros simpler, using hb_snprintf().
|
||||
! Now WINCE builds of pp will also defined __PLATFORM__WINDOWS.
|
||||
|
||||
; Please review/test.
|
||||
|
||||
2010-11-01 13:53 UTC+0200 Viktor Szakats (harbour.01 syenar.hu)
|
||||
* src/vm/Makefile
|
||||
* src/vm/mainwin.c
|
||||
|
||||
@@ -1139,6 +1139,7 @@ extern HB_EXPORT void hb_dynCall( int iFuncFlags, void * pFunction, int
|
||||
|
||||
/* misc */
|
||||
extern HB_EXPORT const char * hb_verCPU( void ); /* retrieves a constant string with CPU architecture */
|
||||
extern HB_EXPORT const char * hb_verPlatformMacro( void ); /* retrieves a constant string with OS platform (as it appears in __PLATFORM__* macro) */
|
||||
extern HB_EXPORT char * hb_verPlatform( void ); /* retrieves a newly allocated buffer containing platform version */
|
||||
extern HB_EXPORT char * hb_verCompiler( void ); /* retrieves a newly allocated buffer containing compiler version */
|
||||
extern HB_EXPORT char * hb_verHarbour( void ); /* retrieves a newly allocated buffer containing harbour version */
|
||||
|
||||
@@ -161,6 +161,42 @@ const char * hb_verHostCPU( void )
|
||||
will in fact be formed from the string returned
|
||||
by this function. [vszakats] */
|
||||
|
||||
/* NOTE: As it appears in __PLATFORM__* macro */
|
||||
const char * hb_verPlatformMacro( void )
|
||||
{
|
||||
#if defined( HB_OS_WIN_CE ) /* Must precede HB_OS_WIN */
|
||||
return "WINCE"; /* TODO: Change this to WCE for consistency? */
|
||||
#elif defined( HB_OS_WIN )
|
||||
return "WINDOWS"; /* TODO: Change this to WIN for consistency? */
|
||||
#elif defined( HB_OS_DOS )
|
||||
return "DOS";
|
||||
#elif defined( HB_OS_OS2 )
|
||||
return "OS2";
|
||||
#elif defined( HB_OS_LINUX )
|
||||
return "LINUX";
|
||||
#elif defined( HB_OS_DARWIN )
|
||||
return "DARWIN";
|
||||
#elif defined( HB_OS_BSD )
|
||||
return "BSD";
|
||||
#elif defined( HB_OS_SUNOS )
|
||||
return "SUNOS";
|
||||
#elif defined( HB_OS_HPUX )
|
||||
return "HPUX";
|
||||
#elif defined( HB_OS_BEOS )
|
||||
return "BEOS";
|
||||
#elif defined( HB_OS_QNX )
|
||||
return "QNX";
|
||||
#elif defined( HB_OS_VXWORKS )
|
||||
return "VXWORKS";
|
||||
#elif defined( HB_OS_SYMBIAN )
|
||||
return "SYMBIAN";
|
||||
#elif defined( HB_OS_CYGWIN )
|
||||
return "CYGWIN";
|
||||
#else
|
||||
return NULL;
|
||||
#endif
|
||||
}
|
||||
|
||||
/* NOTE: Must be larger than 128, which is the maximum size of
|
||||
osVer.szCSDVersion (Windows). [vszakats] */
|
||||
#define PLATFORM_BUF_SIZE 255
|
||||
|
||||
@@ -5533,40 +5533,24 @@ void hb_pp_initDynDefines( PHB_PP_STATE pState, HB_BOOL fArchDefs )
|
||||
{
|
||||
char szDefine[ 65 ];
|
||||
char szResult[ 65 ];
|
||||
char * pSrc, * pDst, * szPlatform;
|
||||
int iYear, iMonth, iDay, i;
|
||||
long lDate, lTime;
|
||||
|
||||
if( fArchDefs )
|
||||
{
|
||||
/* __PLATFORM__* */
|
||||
pSrc = szPlatform = hb_verPlatform();
|
||||
pDst = hb_strncpy( szDefine, "__PLATFORM__", sizeof( szDefine ) - 1 );
|
||||
i = 12;
|
||||
while( pSrc[ 0 ] > ' ' && i < ( int ) sizeof( szDefine ) - 1 )
|
||||
static const char * szPlatform = "__PLATFORM__%s";
|
||||
|
||||
if( hb_verPlatformMacro() )
|
||||
{
|
||||
if( HB_PP_ISNEXTIDCHAR( pSrc[ 0 ] ) )
|
||||
pDst[ i++ ] = HB_PP_UPPER( pSrc[ 0 ] );
|
||||
pSrc++;
|
||||
hb_snprintf( szDefine, sizeof( szDefine ), szPlatform, hb_verPlatformMacro() );
|
||||
hb_pp_addDefine( pState, szDefine, szResult );
|
||||
}
|
||||
pDst[ i ] = '\0';
|
||||
|
||||
i = 0;
|
||||
pDst = szResult;
|
||||
pDst[ i++ ] = '"';
|
||||
if( pSrc[ 0 ] == ' ' )
|
||||
{
|
||||
while( *( ++pSrc ) && i < ( int ) sizeof( szResult ) - 2 )
|
||||
pDst[ i++ ] = pSrc[ 0 ];
|
||||
}
|
||||
pDst[ i++ ] = '"';
|
||||
pDst[ i ] = '\0';
|
||||
|
||||
hb_xfree( szPlatform );
|
||||
|
||||
hb_pp_addDefine( pState, szDefine, szResult );
|
||||
#if defined( HB_OS_UNIX )
|
||||
hb_strncpy( szDefine + 12, "UNIX", sizeof( szDefine ) - 13 );
|
||||
hb_snprintf( szDefine, sizeof( szDefine ), szPlatform, "UNIX" );
|
||||
hb_pp_addDefine( pState, szDefine, szResult );
|
||||
#endif
|
||||
#if defined( HB_OS_WIN_CE )
|
||||
hb_snprintf( szDefine, sizeof( szDefine ), szPlatform, "WINDOWS" );
|
||||
hb_pp_addDefine( pState, szDefine, szResult );
|
||||
#endif
|
||||
|
||||
|
||||
Reference in New Issue
Block a user