Example #1
0
void hb_compChkSetDefines( HB_COMP_DECL )
{
   PHB_PPDEFINE pDefine = HB_COMP_PARAM->ppdefines;

   while( pDefine )
   {
      if( pDefine->szValue == s_szUndefineMarker )
         hb_pp_delDefine( HB_COMP_PARAM->pLex->pPP, pDefine->szName );
      else
         hb_pp_addDefine( HB_COMP_PARAM->pLex->pPP, pDefine->szName, pDefine->szValue );
      pDefine = pDefine->pNext;
   }
}
Example #2
0
static void hb_compChkDefineSwitch( HB_COMP_DECL, const char * pszSwitch )
{
   if( pszSwitch && HB_ISOPTSEP( pszSwitch[ 0 ] ) )
   {
      if( pszSwitch[ 1 ] == 'd' || pszSwitch[ 1 ] == 'D' )
      {
         if( pszSwitch[ 2 ] )
         {
            char * szDefText = hb_strdup( pszSwitch + 2 ), * szAssign;

            szAssign = strchr( szDefText, '=' );
            if( szAssign )
               *szAssign++ = '\0';
            hb_pp_addDefine( HB_COMP_PARAM->pLex->pPP, szDefText, szAssign );
            hb_xfree( szDefText );
         }
      }
      else if( ( pszSwitch[ 1 ] == 'U' || pszSwitch[ 1 ] == 'u' ) &&
               ( pszSwitch[ 2 ] == 'N' || pszSwitch[ 2 ] == 'n' ) &&
               ( pszSwitch[ 3 ] == 'D' || pszSwitch[ 3 ] == 'd' ) &&
               ( pszSwitch[ 4 ] == 'E' || pszSwitch[ 4 ] == 'e' ) &&
               ( pszSwitch[ 5 ] == 'F' || pszSwitch[ 5 ] == 'f' ) &&
               pszSwitch[ 6 ] == ':' )
      {
         char *szDefText = hb_strdup( pszSwitch + 7 );
         unsigned int i = 0;

         while( szDefText[ i ] && ! HB_ISOPTSEP( szDefText[ i ] ) )
         {
            i++;
         }
         szDefText[ i ] = '\0';

         if( szDefText[ 0 ] )
         {
            if( hb_stricmp( szDefText, ".ARCH." ) == 0 )
               hb_pp_delDefine( HB_COMP_PARAM->pLex->pPP, szDefText );
         }
         hb_xfree( szDefText );
      }
   }
}
Example #3
0
static int hb_pp_parseChangelog( PHB_PP_STATE pState, const char * pszFileName,
                                 BOOL fQuiet, char * piSVNID, char * piSVNDateID,
                                 char ** pszChangeLogID, char ** pszLastEntry )
{
   int            iResult = 0;
   const char *   pszFile;
   FILE *         file_in;

   pszFile = pszFileName ? pszFileName : "../../../../ChangeLog";

   do
   {
      if( hb_fsFileExists( pszFile ) )
         break;
      pszFile += 3;
   }
   while( ! pszFileName && ( *pszFile == '.' || *pszFile == 'C' ) );

   file_in = hb_fopen( pszFile, "r" );
   if( ! file_in )
   {
      if( ! fQuiet )
      {
#if ! defined( __MINGW32CE__ ) && ! defined( HB_OS_WIN_CE )
         perror( pszFile );
#else
         fprintf( stderr, "Cannot open the %s file.\n", pszFile );
#endif
      }
      iResult = 1;
   }
   else
   {
      char     szLine[ 256 ];
      char     szLine1[ 256 ];
      char     szId[ 128 ];
      char     szLog[ 128 ];
      char *   szFrom, * szTo;
      int      iLen;

      *szId = *szLog = *szLine1 = '\0';

      do
      {
         if( ! fgets( szLine, sizeof( szLine ), file_in ) )
            break;

         if( ! *szId )
         {
            szFrom = strstr( szLine, "$Id: " );
            if( szFrom )
            {
               szFrom   += 5;
               szTo     = strstr( szFrom, " $" );

               if( szTo )
               {
                  *szTo = 0;
               }

               hb_strncpy( szId, szFrom, sizeof( szId ) - 1 );
               hb_strncpy( szLine1, szLine + 1, sizeof( szLine1 ) - 1 );
            }
         }
         else if( ! *szLog )
         {
            if( szLine[ 4 ] == '-' && szLine[ 7 ] == '-' &&
                szLine[ 10 ] == ' ' && szLine[ 13 ] == ':' )
            {
               int iLen;
               hb_strncpy( szLog, szLine, sizeof( szLog ) - 1 );
               iLen = strlen( szLog );
               while( iLen-- && HB_ISSPACE( szLog[ iLen ] ) )
                  szLog[ iLen ] = '\0';
            }
         }
      }
      while( ! *szLog );

      fclose( file_in );

      if( ! *szLog )
      {
         if( ! fQuiet )
            fprintf( stderr, "Cannot find valid $Id end log entry in the %s file.\n", pszFile );
         iResult = 1;
      }
      else
      {
         char  _szId[ 6 ];
         int   u = 0;

         hb_xmemset( _szId, 0, 6 );
         *szLine           = '"';
         hb_strncpy( szLine + 1, szLog, sizeof( szLine ) - 3 );
         iLen              = strlen( szLine );
         szLine[ iLen ]    = '"';
         szLine[ ++iLen ]  = '\0';
         hb_pp_addDefine( pState, "HB_VER_LENTRY", szLine );
         *pszLastEntry     = hb_strdup( szLog );

         hb_strncpy( szLine + 1, szId, sizeof( szLine ) - 3 );
         iLen              = strlen( szLine );
         szLine[ iLen ]    = '"';
         szLine[ ++iLen ]  = '\0';
         hb_pp_addDefine( pState, "HB_VER_CHLCVS", szLine );
         *pszChangeLogID   = hb_strdup( szId );

         szFrom            = strchr( szLine, ' ' );

         if( szFrom )
         {
            while( *szFrom == ' ' )
               ++szFrom;
            iLen = 0;
            while( ! HB_ISSPACE( szFrom[ iLen ] ) )
            {
               _szId[ u++ ] = szFrom[ iLen ];
               ++iLen;
            }
            /*
               Latest CVS version before migration to SVN:
               ChangeLog,v 1.6768 2011/01/25 18:50:35 guerra000
             */
            if( iLen )
            {
#if 0
               int iCurrentVersion = atoi( _szId ) + 6768;
               sprintf( _szId, "%i", iCurrentVersion );
               hb_strncpy( piSVNID, _szId, strlen( _szId ) );
#else
               hb_strncpy( piSVNID, _szId, u );
#endif
            }
            else
               _szId[ 0 ] = 0;
         }

         if( _szId[ 0 ] )
         {
            char szSVNDateID[ 10 ];
            int iLen     = 0, u = 0, wLen = ( int ) strlen( szLine1 );
            char *szDate = NULL;

            *szSVNDateID ='\0';

            do
            {
               if ( szLine1[ u ] == ' ' )
                  iLen ++;

               if ( iLen == 4 )
               {
                  iLen = u;
                  szDate = szLine1 + iLen + 1;
                  break;
               }

               ++u;
            } while ( u < wLen );

            iLen = 0;
            u    = 0;

            do
            {
               if (! ( szDate[ iLen ] == '-' ) )
                  szSVNDateID[ u++ ] = szDate[ iLen ];

               if ( szDate[ iLen ] == ' ' )
                  break;

               ++iLen;
            } while( szDate [ iLen ] );

            szSVNDateID[ u ] = 0;
            hb_strncpy( piSVNDateID, szSVNDateID, u );

            hb_pp_addDefine( pState, "HB_VER_BUILDDATE", szSVNDateID );
            hb_pp_addDefine( pState, "HB_VER_CVSID", _szId );
         }
         else
         {
            if( ! fQuiet )
               fprintf( stderr, "Unrecognized Id entry in the %s file.\n", pszFile );
            iResult = 1;
         }
      }
   }

   return iResult;
}
Example #4
0
int main( int argc, char * argv[] )
{
   char * szFile = NULL, * szRuleFile = NULL, * szVerFile = NULL;
   char * szStdCh = NULL, * szLogFile = NULL, * szInclude;
   HB_BOOL fWrite = HB_FALSE, fChgLog = HB_FALSE;
   char * szChangeLogID = NULL, * szLastEntry = NULL;
   int iRevID = 0, iResult = 0, iQuiet = 0, i;
   char * szPPRuleFuncName = NULL;
   PHB_PP_STATE pState;

   pState = hb_pp_new();

   if( argc >= 2 )
   {
      szFile = argv[ 1 ];
      for( i = 2; szFile && i < argc; i++ )
      {
         if( ! HB_ISOPTSEP( argv[ i ][ 0 ] ) )
            szFile = NULL;
         else
         {
            switch( argv[ i ][ 1 ] )
            {
               case 'q':
               case 'Q':
                  if( ! argv[ i ][ 2 ] )
                     iQuiet = 1;
                  else if( argv[ i ][ 2 ] == '-' && ! argv[ i ][ 3 ] )
                     iQuiet = 0;
                  else if( argv[ i ][ 2 ] >= '0' && argv[ i ][ 2 ] <= '2' && ! argv[ i ][ 3 ] )
                     iQuiet = argv[ i ][ 2 ] - '0';
                  else
                     szFile = NULL;
                  break;

               case 'd':
               case 'D':
                  if( ! argv[ i ][ 2 ] )
                     szFile = NULL;
                  else
                  {
                     char * szDefText = hb_strdup( argv[ i ] + 2 ), * szAssign;

                     szAssign = strchr( szDefText, '=' );
                     if( szAssign )
                        *szAssign++ = '\0';
                     hb_pp_addDefine( pState, szDefText, szAssign );
                     hb_xfree( szDefText );
                  }
                  break;

               case 'e':
               case 'E':
                  if( argv[ i ][ 2 ] )
                     szPPRuleFuncName = argv[ i ] + 2;
                  else
                     szPPRuleFuncName = NULL;
                  break;

               case 'w':
               case 'W':
                  if( argv[ i ][ 2 ] )
                     szFile = NULL;
                  else
                     fWrite = HB_TRUE;
                  break;

               case 'c':
               case 'C':
                  fChgLog = HB_TRUE;
                  if( argv[ i ][ 2 ] )
                     szLogFile = argv[ i ] + 2;
                  break;

               case 'i':
               case 'I':
                  if( argv[ i ][ 2 ] )
                     hb_pp_addSearchPath( pState, argv[ i ] + 2, HB_FALSE );
                  else
                     szFile = NULL;
                  break;

               case 'o':
               case 'O':
                  if( argv[ i ][ 2 ] )
                     szRuleFile = argv[ i ] + 2;
                  else
                     szFile = NULL;
                  break;

               case 'v':
               case 'V':
                  if( argv[ i ][ 2 ] )
                     szVerFile = argv[ i ] + 2;
                  else
                     szFile = NULL;
                  break;

               case 'u':
               case 'U':
                  if( argv[ i ][ 2 ] )
                     szStdCh = argv[ i ] + 2;
                  else
                     szStdCh = NULL;
                  break;

               default:
                  szFile = NULL;
                  break;
            }
         }
      }
   }

   if( iQuiet < 2 )
   {
      printf( "Harbour Preprocessor %d.%d.%d%s\n",
              HB_VER_MAJOR, HB_VER_MINOR, HB_VER_RELEASE, HB_VER_STATUS );
      printf( "Copyright (c) 1999-2014, http://harbour-project.org/\n" );
   }

   if( szFile )
   {
      if( ! szRuleFile && ! szVerFile )
         fWrite = HB_TRUE;

      hb_pp_init( pState, iQuiet != 0, 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL );

      szInclude = hb_getenv( "INCLUDE" );
      if( szInclude )
      {
         if( szInclude[ 0 ] )
            hb_pp_addSearchPath( pState, szInclude, HB_FALSE );
         hb_xfree( szInclude );
      }

      if( szStdCh )
         hb_pp_readRules( pState, szStdCh );

      if( hb_pp_inFile( pState, szFile, HB_TRUE, NULL, HB_TRUE ) )
      {
         if( fWrite )
         {
            char szFileName[ HB_PATH_MAX ];
            PHB_FNAME pFileName;

            pFileName = hb_fsFNameSplit( szFile );
            pFileName->szExtension = ".ppo";
            hb_fsFNameMerge( szFileName, pFileName );
            hb_xfree( pFileName );

            hb_pp_outFile( pState, szFileName, NULL );
         }

         if( fChgLog )
            iResult = hb_pp_parseChangelog( pState, szLogFile, iQuiet,
                                            &iRevID, &szChangeLogID, &szLastEntry );

         if( iResult == 0 )
            iResult = hb_pp_preprocesfile( pState, szRuleFile, szPPRuleFuncName );

         if( iResult == 0 && szVerFile )
            iResult = hb_pp_generateVerInfo( szVerFile, iRevID,
                                             szChangeLogID, szLastEntry );
         if( iResult == 0 && hb_pp_errorCount( pState ) > 0 )
            iResult = 1;
      }
      else
         iResult = 1;
   }
   else
   {
      hb_pp_usage( argv[ 0 ] );
      iResult = 1;
   }

   if( szChangeLogID )
      hb_xfree( szChangeLogID );
   if( szLastEntry )
      hb_xfree( szLastEntry );

   hb_pp_free( pState );

   return iResult;
}
Example #5
0
static int hb_pp_parseChangelog( PHB_PP_STATE pState, const char * pszFileName,
                                 int iQuiet, int * piRevID,
                                 char ** pszChangeLogID, char ** pszLastEntry )
{
   char * pszFree = NULL;
   int iResult = 0;
   FILE * file_in;

   char szToCheck[ HB_PATH_MAX ];
   PHB_FNAME pFileName = hb_fsFNameSplit( pszFileName );

   if( ! pFileName->szName )
   {
      static const char * s_szNames[] = {
         "ChangeLog.txt",
         "CHANGES.txt",
#if defined( HB_OS_DOS )
         "ChangeLo.txt",
         "Change~1.txt",
         "Change~?.txt",
         "Chang~??.txt",
#endif
         NULL
      };
      int i = 0;

      if( ! pFileName->szPath )
         pFileName->szPath = "../../../../..";

      pszFileName = s_szNames[ i++ ];
      while( pszFileName )
      {
         pFileName->szName = pszFileName;
         hb_fsFNameMerge( szToCheck, pFileName );

         if( hb_fsFileExists( szToCheck ) )
         {
            pszFileName = szToCheck;
            break;
         }

         if( strchr( szToCheck, '?' ) != NULL )
         {
            pszFree = hb_fsFileFind( szToCheck );
            if( pszFree )
            {
               pszFileName = pszFree;
               break;
            }
         }

         pszFileName = s_szNames[ i++ ];
      }

      if( ! pszFileName )
         pszFileName = s_szNames[ 0 ];
   }

   hb_xfree( pFileName );

   file_in = hb_fopen( pszFileName, "r" );
   if( ! file_in )
   {
      if( iQuiet < 2 )
      {
#if ! defined( HB_OS_WIN_CE )
         perror( pszFileName );
#else
         fprintf( stderr, "Cannot open the %s file.\n", pszFileName );
#endif
      }
      iResult = 1;
   }
   else
   {
      char szLine[ 256 ];
      char szId[ 128 ];
      char szLog[ 128 ];
      char * szFrom, * szTo;
      int iLen;

      if( iQuiet == 0 )
         fprintf( stdout, "Reading ChangeLog file: %s\n", pszFileName );

      *szId = *szLog = '\0';

      do
      {
         if( ! fgets( szLine, sizeof( szLine ), file_in ) )
            break;

         if( ! *szId )
         {
            szFrom = strstr( szLine, "$" "Id" );
            if( szFrom )
            {
               szFrom += 3;
               szTo = strchr( szFrom, '$' );
               if( szTo )
               {
                  /* Is it tarball source package? */
                  if( szTo == szFrom )
                  {
                     /* we do not have revision number :-( */
                     hb_strncpy( szId, "unknown -1 (source tarball without keyword expanding)", sizeof( szId ) - 1 );
                  }
                  else if( szTo - szFrom > 3 && szTo[ -1 ] == ' ' &&
                           szFrom[ 0 ] == ':' && szFrom[ 1 ] == ' ' )
                  {
                     szTo[ -1 ] = '\0';
                     hb_strncpy( szId, szFrom + 2, sizeof( szId ) - 1 );
                  }
               }
            }
         }
         else if( ! *szLog )
         {
            if( szLine[ 4 ] == '-' && szLine[ 7 ] == '-' &&
                szLine[ 10 ] == ' ' && szLine[ 13 ] == ':' )
            {
               hb_strncpy( szLog, szLine, sizeof( szLog ) - 1 );
               iLen = ( int ) strlen( szLog );
               while( iLen-- && HB_ISSPACE( szLog[ iLen ] ) )
                  szLog[ iLen ] = '\0';
            }
         }
      }
      while( ! *szLog );

      fclose( file_in );

      if( ! *szLog )
      {
         if( iQuiet < 2 )
            fprintf( stderr, "Cannot find valid $" "Id entry in the %s file.\n", pszFileName );
         iResult = 1;
      }
      else
      {
         char szRevID[ 18 ];

         *szLine = '"';
         hb_strncpy( szLine + 1, szLog, sizeof( szLine ) - 3 );
         iLen = ( int ) strlen( szLine );
         szLine[ iLen ] = '"';
         szLine[ ++iLen ] = '\0';
         hb_pp_addDefine( pState, "HB_VER_LENTRY", szLine );
         *pszLastEntry = hb_strdup( szLog );

         hb_strncpy( szLine + 1, szId, sizeof( szLine ) - 3 );
         iLen = ( int ) strlen( szLine );
         szLine[ iLen ] = '"';
         szLine[ ++iLen ] = '\0';
         hb_pp_addDefine( pState, "HB_VER_CHLID", szLine );
         *pszChangeLogID = hb_strdup( szId );

         if( strlen( szLog ) >= 16 )
         {
            long lJulian = 0, lMilliSec = 0;
            int iUTC = 0;

            if( strlen( szLog ) >= 25 && szLog[ 17 ] == 'U' &&
                szLog[ 18 ] == 'T' && szLog[ 19 ] == 'C' &&
                ( szLog[ 20 ] == '+' || szLog[ 20 ] == '-' ) &&
                HB_ISDIGIT( szLog[ 21 ] ) && HB_ISDIGIT( szLog[ 22 ] ) &&
                HB_ISDIGIT( szLog[ 23 ] ) && HB_ISDIGIT( szLog[ 24 ] ) )
            {
               iUTC = ( ( int ) ( szLog[ 21 ] - '0' ) * 10 +
                        ( int ) ( szLog[ 22 ] - '0' ) ) * 60 +
                        ( int ) ( szLog[ 23 ] - '0' ) * 10 +
                        ( int ) ( szLog[ 24 ] - '0' );
            }
            szLog[ 16 ] = '\0';
            if( iUTC != 0 && hb_timeStampStrGetDT( szLog, &lJulian, &lMilliSec ) )
            {
               hb_timeStampUnpackDT( hb_timeStampPackDT( lJulian, lMilliSec ) -
                                     ( double ) iUTC / ( 24 * 60 ),
                                     &lJulian, &lMilliSec );
            }
            if( lJulian && lMilliSec )
            {
               hb_timeStampStrRawPut( szRevID, lJulian, lMilliSec );
               memmove( szRevID, szRevID + 2, 10 );
            }
            else
            {
               szRevID[ 0 ] = szLog[ 2 ];
               szRevID[ 1 ] = szLog[ 3 ];
               szRevID[ 2 ] = szLog[ 5 ];
               szRevID[ 3 ] = szLog[ 6 ];
               szRevID[ 4 ] = szLog[ 8 ];
               szRevID[ 5 ] = szLog[ 9 ];
               szRevID[ 6 ] = szLog[ 11 ];
               szRevID[ 7 ] = szLog[ 12 ];
               szRevID[ 8 ] = szLog[ 14 ];
               szRevID[ 9 ] = szLog[ 15 ];
            }
            szRevID[ 10 ] = '\0';

         }
         else
            szRevID[ 0 ] = '\0';

         *piRevID = ( int ) hb_strValInt( szRevID, &iLen );

         hb_pp_addDefine( pState, "HB_VER_REVID", szRevID );
#ifdef HB_LEGACY_LEVEL4
         hb_pp_addDefine( pState, "HB_VER_SVNID", szRevID );
#endif
      }
   }

   if( pszFree )
      hb_xfree( pszFree );

   return iResult;
}
Example #6
0
static int hb_pp_parseRepoVer( PHB_PP_STATE pState, const char * pszFileName,
                               int iQuiet, char ** pszCommitID, int * piCommitRev, char ** pszCommitInfo )
{
   FILE * file_in;

   char szId[ _VALUE_SIZE ];
   char szDate[ _VALUE_SIZE ];
   char szName[ _VALUE_SIZE ];
   char szMail[ _VALUE_SIZE ];
   char szCommitInfo[ _VALUE_SIZE ];

   int iLen;

   *szId = *szDate = *szName = *szMail = *szCommitInfo = '\0';

   file_in = hb_fopen( pszFileName, "r" );
   if( ! file_in )
   {
      if( iQuiet < 2 )
         fprintf( stderr, "'%s' not found. Skipping.\n", pszFileName );
   }
   else
   {
      char szLine[ 256 ];
      char * pszValue;

      if( iQuiet == 0 )
         fprintf( stdout, "Reading repository revision file: %s\n", pszFileName );

      for( ;; )
      {
         if( ! fgets( szLine, sizeof( szLine ), file_in ) )
            break;

         if( ! *szId )
            pszValue = szId;
         else if( ! *szDate )
            pszValue = szDate;
         else if( ! *szName )
            pszValue = szName;
         else if( ! *szMail )
            pszValue = szMail;
         else
            break;

         {
            hb_strncpy( pszValue, szLine, _VALUE_SIZE - 1 );
            iLen = ( int ) strlen( pszValue );
            while( iLen-- && HB_ISSPACE( pszValue[ iLen ] ) )
               pszValue[ iLen ] = '\0';
         }
      }

      fclose( file_in );
   }

   hb_pp_addDefine( pState, "HB_VER_COMMIT_ID", szId );
#if defined( HB_LEGACY_LEVEL4 )
   hb_pp_addDefine( pState, "HB_VER_CHLID", szId );
#endif

   *pszCommitID = hb_strdup( szId );

   if( szDate[ 0 ] && szName[ 0 ] && szMail[ 0 ] )
   {
      iLen = ( int ) strlen( szMail );
      while( iLen-- )
      {
         if( szMail[ iLen ] == '@' )
            szMail[ iLen ] = ' ';
      }
#if defined( __HB_INCLUDE_MORE_COMMIT_INFO )
      hb_snprintf( szCommitInfo, sizeof( szCommitInfo ), "%s %s (%s)", szDate, szName, szMail );
#else
      hb_snprintf( szCommitInfo, sizeof( szCommitInfo ), "%s", szDate );
      HB_SYMBOL_UNUSED( szName );
      HB_SYMBOL_UNUSED( szMail );
#endif
      if( *pszCommitInfo )
         hb_xfree( *pszCommitInfo );

      hb_pp_delDefine( pState, "HB_VER_COMMIT_INFO" );
      hb_pp_addDefine( pState, "HB_VER_COMMIT_INFO", szCommitInfo );

      *pszCommitInfo = hb_strdup( szCommitInfo );

      *piCommitRev = hb_pp_TimeStampToNum( pState, szCommitInfo );
   }

   return 0;
}
Example #7
0
static int hb_pp_parseChangelog( PHB_PP_STATE pState, const char * pszFileName,
                                 int iQuiet, int * piCommitRev, char ** pszCommitInfo )
{
   char * pszFree = NULL;
   int iResult = 0;
   FILE * file_in;

   char szToCheck[ HB_PATH_MAX ];
   PHB_FNAME pFileName = hb_fsFNameSplit( pszFileName );

   if( ! pFileName->szName )
   {
      static const char * s_szNames[] = {
         "ChangeLog.txt",
         "CHANGES.txt",
#if defined( HB_OS_DOS )
         "ChangeLo.txt",
         "Change~1.txt",
         "Change~?.txt",
         "Chang~??.txt",
#endif
         NULL
      };
      int i = 0;

      if( ! pFileName->szPath )
         pFileName->szPath = "../../../../..";

      pszFileName = s_szNames[ i++ ];
      while( pszFileName )
      {
         pFileName->szName = pszFileName;
         hb_fsFNameMerge( szToCheck, pFileName );

         if( hb_fsFileExists( szToCheck ) )
         {
            pszFileName = szToCheck;
            break;
         }

         if( strchr( szToCheck, '?' ) != NULL )
         {
            pszFree = hb_fsFileFind( szToCheck );
            if( pszFree )
            {
               pszFileName = pszFree;
               break;
            }
         }

         pszFileName = s_szNames[ i++ ];
      }

      if( ! pszFileName )
         pszFileName = s_szNames[ 0 ];
   }

   hb_xfree( pFileName );

   file_in = hb_fopen( pszFileName, "r" );
   if( ! file_in )
   {
      if( iQuiet < 2 )
      {
#if ! defined( HB_OS_WIN_CE )
         perror( pszFileName );
#else
         fprintf( stderr, "Cannot open the %s file.\n", pszFileName );
#endif
      }
      iResult = 1;
   }
   else
   {
      char szLine[ 256 ];
      char szLog[ 128 ];
      int iLen;

      if( iQuiet == 0 )
         fprintf( stdout, "Reading ChangeLog file: %s\n", pszFileName );

      *szLog = '\0';

      do
      {
         if( ! fgets( szLine, sizeof( szLine ), file_in ) )
            break;

         if( ! *szLog )
         {
            if( szLine[ 4 ] == '-' && szLine[ 7 ] == '-' &&
                szLine[ 10 ] == ' ' && szLine[ 13 ] == ':' )
            {
               hb_strncpy( szLog, szLine, sizeof( szLog ) - 1 );
               iLen = ( int ) strlen( szLog );
               while( iLen-- && HB_ISSPACE( szLog[ iLen ] ) )
                  szLog[ iLen ] = '\0';
            }
         }
      }
      while( ! *szLog );

      fclose( file_in );

      if( ! *szLog )
      {
         if( iQuiet < 2 )
            fprintf( stderr, "Cannot find valid $" "Id entry in the %s file.\n", pszFileName );
         iResult = 1;
      }
      else
      {
         *szLine = '"';
         hb_strncpy( szLine + 1, szLog, sizeof( szLine ) - 3 );
         iLen = ( int ) strlen( szLine );
         szLine[ iLen ] = '"';
         szLine[ ++iLen ] = '\0';
         hb_pp_addDefine( pState, "HB_VER_COMMIT_INFO", szLine );
         *pszCommitInfo = hb_strdup( szLog );

         *piCommitRev = hb_pp_TimeStampToNum( pState, szLog );
      }
   }

   if( pszFree )
      hb_xfree( pszFree );

   return iResult;
}
Example #8
0
static int hb_pp_TimeStampToNum( PHB_PP_STATE pState, char * pszLog )
{
   char szRevID[ 18 ];
   int iLen;

   if( strlen( pszLog ) >= 16 )
   {
      long lJulian = 0, lMilliSec = 0;
      int iUTC = 0;

      if( strlen( pszLog ) >= 25 &&
          ( pszLog[ 20 ] == '+' || pszLog[ 20 ] == '-' ) &&
          HB_ISDIGIT( pszLog[ 21 ] ) && HB_ISDIGIT( pszLog[ 22 ] ) &&
          HB_ISDIGIT( pszLog[ 23 ] ) && HB_ISDIGIT( pszLog[ 24 ] ) )
      {
         iUTC = ( ( int ) ( pszLog[ 21 ] - '0' ) * 10 +
                  ( int ) ( pszLog[ 22 ] - '0' ) ) * 60 +
                  ( int ) ( pszLog[ 23 ] - '0' ) * 10 +
                  ( int ) ( pszLog[ 24 ] - '0' );
         if( pszLog[ 20 ] == '-' )
            iUTC *= -1;
      }
      pszLog[ 16 ] = '\0';
      if( iUTC != 0 && hb_timeStampStrGetDT( pszLog, &lJulian, &lMilliSec ) )
      {
         hb_timeStampUnpackDT( hb_timeStampPackDT( lJulian, lMilliSec ) -
                               ( double ) iUTC / ( 24 * 60 ),
                               &lJulian, &lMilliSec );
      }
      if( lJulian && lMilliSec )
      {
         hb_timeStampStrRawPut( szRevID, lJulian, lMilliSec );
         memmove( szRevID, szRevID + 2, 10 );
      }
      else
      {
         szRevID[ 0 ] = pszLog[ 2 ];
         szRevID[ 1 ] = pszLog[ 3 ];
         szRevID[ 2 ] = pszLog[ 5 ];
         szRevID[ 3 ] = pszLog[ 6 ];
         szRevID[ 4 ] = pszLog[ 8 ];
         szRevID[ 5 ] = pszLog[ 9 ];
         szRevID[ 6 ] = pszLog[ 11 ];
         szRevID[ 7 ] = pszLog[ 12 ];
         szRevID[ 8 ] = pszLog[ 14 ];
         szRevID[ 9 ] = pszLog[ 15 ];
      }
      szRevID[ 10 ] = '\0';
   }
   else
      szRevID[ 0 ] = '\0';

   hb_pp_delDefine( pState, "HB_VER_COMMIT_REV" );
   hb_pp_addDefine( pState, "HB_VER_COMMIT_REV", szRevID );
#if defined( HB_LEGACY_LEVEL4 )
   hb_pp_delDefine( pState, "HB_VER_SVNID" );
   hb_pp_addDefine( pState, "HB_VER_SVNID", szRevID );
#endif

   return ( int ) hb_strValInt( szRevID, &iLen );
}