summaryrefslogtreecommitdiff
path: root/tools/bootstrp/prj.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'tools/bootstrp/prj.cxx')
-rw-r--r--tools/bootstrp/prj.cxx1438
1 files changed, 4 insertions, 1434 deletions
diff --git a/tools/bootstrp/prj.cxx b/tools/bootstrp/prj.cxx
index 4f4d44a33536..e5ed5b2451e9 100644
--- a/tools/bootstrp/prj.cxx
+++ b/tools/bootstrp/prj.cxx
@@ -29,7 +29,7 @@
#include "precompiled_tools.hxx"
#include <stdlib.h>
#include <stdio.h>
-#include "bootstrp/sstring.hxx"
+//#include "bootstrp/sstring.hxx"
#include <vos/mutex.hxx>
#include <tools/stream.hxx>
@@ -37,6 +37,8 @@
#include "bootstrp/prj.hxx"
#include "bootstrp/inimgr.hxx"
+DECLARE_LIST( UniStringList, UniString* )
+
//#define TEST 1
#if defined(WNT) || defined(OS2)
@@ -47,7 +49,7 @@
#define PATH_DELIMETER '/'
#endif
-Link Star::aDBNotFoundHdl;
+//Link Star::aDBNotFoundHdl;
//
// class SimpleConfig
@@ -166,1435 +168,3 @@ ByteString SimpleConfig::GetCleanedNextLine( BOOL bReadComments )
return aTmpStr;
}
-
-
-//
-// class CommandData
-//
-
-/*****************************************************************************/
-CommandData::CommandData()
-/*****************************************************************************/
-{
- nOSType = 0;
- nCommand = 0;
- pDepList = 0;
-}
-
-/*****************************************************************************/
-CommandData::~CommandData()
-/*****************************************************************************/
-{
- if ( pDepList )
- {
- ByteString *pString = pDepList->First();
- while ( pString )
- {
- delete pString;
- pString = pDepList->Next();
- }
- delete pDepList;
-
- pDepList = NULL;
- }
-}
-
-/*****************************************************************************/
-ByteString CommandData::GetOSTypeString()
-/*****************************************************************************/
-{
- ByteString aRetStr;
-
- switch (nOSType)
- {
- case OS_WIN16 | OS_WIN32 | OS_OS2 | OS_UNX :
- aRetStr = "all";
- break;
- case OS_WIN32 | OS_WIN16 :
- aRetStr = "w";
- break;
- case OS_OS2 :
- aRetStr = "p";
- break;
- case OS_UNX :
- aRetStr = "u";
- break;
- case OS_WIN16 :
- aRetStr = "d";
- break;
- case OS_WIN32 :
- aRetStr = "n";
- break;
- default :
- aRetStr = "none";
- }
-
- return aRetStr;
-}
-
-/*****************************************************************************/
-ByteString CommandData::GetCommandTypeString()
-/*****************************************************************************/
-{
- ByteString aRetStr;
-
- switch (nCommand)
- {
- case COMMAND_NMAKE :
- aRetStr = "nmake";
- break;
- case COMMAND_GET :
- aRetStr = "get";
- break;
- default :
- aRetStr = "usr";
- aRetStr += ByteString::CreateFromInt64( nCommand + 1 - COMMAND_USER_START );
-
- }
-
- return aRetStr;
-}
-
-/*****************************************************************************/
-CommandData* Prj::GetDirectoryList ( USHORT, USHORT )
-/*****************************************************************************/
-{
- return (CommandData *)NULL;
-}
-
-/*****************************************************************************/
-CommandData* Prj::GetDirectoryData( ByteString aLogFileName )
-/*****************************************************************************/
-{
- CommandData *pData = NULL;
- ULONG nObjCount = Count();
- for ( ULONG i=0; i<nObjCount; i++ )
- {
- pData = GetObject(i);
- if ( pData->GetLogFile() == aLogFileName )
- return pData;
- }
- return NULL;
-}
-
-//
-// class Prj
-//
-
-/*****************************************************************************/
-Prj::Prj() :
- bVisited( FALSE ),
- pPrjInitialDepList(0),
- pPrjDepList(0),
- bHardDependencies( FALSE ),
- bSorted( FALSE )
-/*****************************************************************************/
-{
-}
-
-/*****************************************************************************/
-Prj::Prj( ByteString aName ) :
- bVisited( FALSE ),
- aProjectName( aName ),
- pPrjInitialDepList(0),
- pPrjDepList(0),
- bHardDependencies( FALSE ),
- bSorted( FALSE )
-/*****************************************************************************/
-{
-}
-
-/*****************************************************************************/
-Prj::~Prj()
-/*****************************************************************************/
-{
- if ( pPrjDepList )
- {
- ByteString *pString = pPrjDepList->First();
- while ( pString )
- {
- delete pString;
- pString = pPrjDepList->Next();
- }
- delete pPrjDepList;
-
- pPrjDepList = NULL;
- }
-
- if ( pPrjInitialDepList )
- {
- ByteString *pString = pPrjInitialDepList->First();
- while ( pString )
- {
- delete pString;
- pString = pPrjInitialDepList->Next();
- }
- delete pPrjInitialDepList;
-
- pPrjInitialDepList = NULL;
- }
-}
-
-/*****************************************************************************/
-void Prj::AddDependencies( ByteString aStr )
-/*****************************************************************************/
-{
-
- // needs dirty flag - not expanded
- if ( !pPrjDepList )
- pPrjDepList = new SByteStringList;
-
- pPrjDepList->PutString( new ByteString(aStr) );
-
- if ( !pPrjInitialDepList )
- pPrjInitialDepList = new SByteStringList;
-
- pPrjInitialDepList->PutString( new ByteString(aStr) );
-}
-
-/*****************************************************************************/
-SByteStringList* Prj::GetDependencies( BOOL bExpanded )
-/*****************************************************************************/
-{
- if ( bExpanded )
- return pPrjDepList;
- else
- return pPrjInitialDepList;
-}
-
-
-
-/*****************************************************************************/
-BOOL Prj::InsertDirectory ( ByteString aDirName, USHORT aWhat,
- USHORT aWhatOS, ByteString aLogFileName,
- const ByteString &rClientRestriction )
-/*****************************************************************************/
-{
- CommandData* pData = new CommandData();
-
- pData->SetPath( aDirName );
- pData->SetCommandType( aWhat );
- pData->SetOSType( aWhatOS );
- pData->SetLogFile( aLogFileName );
- pData->SetClientRestriction( rClientRestriction );
-
- Insert( pData );
-
- return FALSE;
-}
-
-/*****************************************************************************/
-//
-// removes directory and existing dependencies on it
-//
-CommandData* Prj::RemoveDirectory ( ByteString aLogFileName )
-/*****************************************************************************/
-{
- ULONG nCountMember = Count();
- CommandData* pData;
- CommandData* pDataFound = NULL;
- SByteStringList* pDataDeps;
-
- for ( USHORT i = 0; i < nCountMember; i++ )
- {
- pData = GetObject( i );
- if ( pData->GetLogFile() == aLogFileName )
- pDataFound = pData;
- else
- {
- pDataDeps = pData->GetDependencies();
- if ( pDataDeps )
- {
- ByteString* pString;
- ULONG nDataDepsCount = pDataDeps->Count();
- for ( ULONG j = nDataDepsCount; j > 0; j-- )
- {
- pString = pDataDeps->GetObject( j - 1 );
- if ( pString->GetToken( 0, '.') == aLogFileName )
- pDataDeps->Remove( pString );
- }
- }
- }
- }
-
- Remove( pDataFound );
-
- return pDataFound;
-}
-
-//
-// class Star
-//
-
-/*****************************************************************************/
-Star::Star()
-/*****************************************************************************/
-{
- // this ctor is only used by StarWriter
-}
-
-/*****************************************************************************/
-Star::Star(String aFileName, USHORT nMode )
-/*****************************************************************************/
- : nStarMode( nMode )
-{
- Read( aFileName );
-}
-
-/*****************************************************************************/
-Star::Star( SolarFileList *pSolarFiles )
-/*****************************************************************************/
- : nStarMode( STAR_MODE_MULTIPLE_PARSE )
-{
- // this ctor is used by StarBuilder to get the information for the whole workspace
- Read( pSolarFiles );
-}
-
-/*****************************************************************************/
-Star::Star( GenericInformationList *pStandLst, ByteString &rVersion,
- BOOL bLocal, const char *pSourceRoot )
-/*****************************************************************************/
-{
- ByteString sPath( rVersion );
- String sSrcRoot;
- if ( pSourceRoot )
- sSrcRoot = String::CreateFromAscii( pSourceRoot );
-
-#ifdef UNX
- sPath += "/settings/UNXSOLARLIST";
-#else
- sPath += "/settings/SOLARLIST";
-#endif
- GenericInformation *pInfo = pStandLst->GetInfo( sPath, TRUE );
-
- if( pInfo && pInfo->GetValue().Len()) {
- ByteString sFile( pInfo->GetValue());
- if ( bLocal ) {
- IniManager aIniManager;
- aIniManager.ToLocal( sFile );
- }
- String sFileName( sFile, RTL_TEXTENCODING_ASCII_US );
- nStarMode = STAR_MODE_SINGLE_PARSE;
- Read( sFileName );
- }
- else {
- SolarFileList *pFileList = new SolarFileList();
-
- sPath = rVersion;
- sPath += "/drives";
-
- GenericInformation *pInfo2 = pStandLst->GetInfo( sPath, TRUE );
- if ( pInfo2 && pInfo2->GetSubList()) {
- GenericInformationList *pDrives = pInfo2->GetSubList();
- for ( ULONG i = 0; i < pDrives->Count(); i++ ) {
- GenericInformation *pDrive = pDrives->GetObject( i );
- if ( pDrive ) {
- DirEntry aEntry;
- BOOL bOk = FALSE;
- if ( sSrcRoot.Len()) {
- aEntry = DirEntry( sSrcRoot );
- bOk = TRUE;
- }
- else {
-#ifdef UNX
- sPath = "UnixVolume";
- GenericInformation *pUnixVolume = pDrive->GetSubInfo( sPath );
- if ( pUnixVolume ) {
- String sRoot( pUnixVolume->GetValue(), RTL_TEXTENCODING_ASCII_US );
- aEntry = DirEntry( sRoot );
- bOk = TRUE;
- }
-#else
- bOk = TRUE;
- String sRoot( *pDrive, RTL_TEXTENCODING_ASCII_US );
- sRoot += String::CreateFromAscii( "\\" );
- aEntry = DirEntry( sRoot );
-#endif
- }
- if ( bOk ) {
- sPath = "projects";
- GenericInformation *pProjectsKey = pDrive->GetSubInfo( sPath, TRUE );
- if ( pProjectsKey ) {
- if ( !sSrcRoot.Len()) {
- sPath = rVersion;
- sPath += "/settings/PATH";
- GenericInformation *pPath = pStandLst->GetInfo( sPath, TRUE );
- if( pPath ) {
- ByteString sAddPath( pPath->GetValue());
-#ifdef UNX
- sAddPath.SearchAndReplaceAll( "\\", "/" );
-#else
- sAddPath.SearchAndReplaceAll( "/", "\\" );
-#endif
- String ssAddPath( sAddPath, RTL_TEXTENCODING_ASCII_US );
- aEntry += DirEntry( ssAddPath );
- }
- }
- GenericInformationList *pProjects = pProjectsKey->GetSubList();
- if ( pProjects ) {
- String sPrjDir( String::CreateFromAscii( "prj" ));
- String sSolarFile( String::CreateFromAscii( "build.lst" ));
-
- for ( ULONG j = 0; j < pProjects->Count(); j++ ) {
- ByteString sProject( *pProjects->GetObject( j ));
- String ssProject( sProject, RTL_TEXTENCODING_ASCII_US );
-
- DirEntry aPrjEntry( aEntry );
-
- aPrjEntry += DirEntry( ssProject );
- aPrjEntry += DirEntry( sPrjDir );
- aPrjEntry += DirEntry( sSolarFile );
-
- pFileList->Insert( new String( aPrjEntry.GetFull()), LIST_APPEND );
-
- ByteString sFile( aPrjEntry.GetFull(), RTL_TEXTENCODING_ASCII_US );
- }
- }
- }
- }
- }
- }
- }
- Read( pFileList );
- }
-}
-
-/*****************************************************************************/
-Star::~Star()
-/*****************************************************************************/
-{
-}
-
-/*****************************************************************************/
-BOOL Star::NeedsUpdate()
-/*****************************************************************************/
-{
- aMutex.acquire();
- for ( ULONG i = 0; i < aLoadedFilesList.Count(); i++ )
- if ( aLoadedFilesList.GetObject( i )->NeedsUpdate()) {
- aMutex.release();
- return TRUE;
- }
-
- aMutex.release();
- return FALSE;
-}
-
-/*****************************************************************************/
-void Star::Read( String &rFileName )
-/*****************************************************************************/
-{
- ByteString aString;
- aFileList.Insert( new String( rFileName ));
-
- DirEntry aEntry( rFileName );
- aEntry.ToAbs();
- aEntry = aEntry.GetPath().GetPath().GetPath();
- sSourceRoot = aEntry.GetFull();
-
- while( aFileList.Count()) {
- StarFile *pFile = new StarFile( *aFileList.GetObject(( ULONG ) 0 ));
- if ( pFile->Exists()) {
- SimpleConfig aSolarConfig( *aFileList.GetObject(( ULONG ) 0 ));
- while (( aString = aSolarConfig.GetNext()) != "" )
- InsertToken (( char * ) aString.GetBuffer());
- }
- aMutex.acquire();
- aLoadedFilesList.Insert( pFile, LIST_APPEND );
- aMutex.release();
- aFileList.Remove(( ULONG ) 0 );
- }
- // resolve all dependencies recursive
- Expand_Impl();
-}
-
-/*****************************************************************************/
-void Star::Read( SolarFileList *pSolarFiles )
-/*****************************************************************************/
-{
- while( pSolarFiles->Count()) {
- ByteString aString;
-
- StarFile *pFile = new StarFile( *pSolarFiles->GetObject(( ULONG ) 0 ));
- if ( pFile->Exists()) {
- SimpleConfig aSolarConfig( *pSolarFiles->GetObject(( ULONG ) 0 ));
- while (( aString = aSolarConfig.GetNext()) != "" )
- InsertToken (( char * ) aString.GetBuffer());
- }
-
- aMutex.acquire();
- aLoadedFilesList.Insert( pFile, LIST_APPEND );
- aMutex.release();
- delete pSolarFiles->Remove(( ULONG ) 0 );
- }
- delete pSolarFiles;
-
- Expand_Impl();
-}
-
-/*****************************************************************************/
-String Star::CreateFileName( String sProject )
-/*****************************************************************************/
-{
- // this method is used to find solarlist parts of nabours (other projects)
- String sPrjDir( String::CreateFromAscii( "prj" ));
- String sSolarFile( String::CreateFromAscii( "build.lst" ));
-
- DirEntry aEntry( sSourceRoot );
- aEntry += DirEntry( sProject );
- aEntry += DirEntry( sPrjDir );
- aEntry += DirEntry( sSolarFile );
-
- if ( !aEntry.Exists() && aDBNotFoundHdl.IsSet())
- aDBNotFoundHdl.Call( &sProject );
-
- return aEntry.GetFull();
-}
-
-/*****************************************************************************/
-void Star::InsertSolarList( String sProject )
-/*****************************************************************************/
-{
- // inserts a new solarlist part of another project
- String sFileName( CreateFileName( sProject ));
-
- for ( ULONG i = 0; i < aFileList.Count(); i++ ) {
- if (( *aFileList.GetObject( i )) == sFileName )
- return;
- }
-
- ByteString ssProject( sProject, RTL_TEXTENCODING_ASCII_US );
- if ( HasProject( ssProject ))
- return;
-
- aFileList.Insert( new String( sFileName ), LIST_APPEND );
-}
-
-/*****************************************************************************/
-void Star::ExpandPrj_Impl( Prj *pPrj, Prj *pDepPrj )
-/*****************************************************************************/
-{
- if ( pDepPrj->bVisited )
- return;
-
- pDepPrj->bVisited = TRUE;
-
- SByteStringList* pPrjLst = pPrj->GetDependencies();
- SByteStringList* pDepLst = NULL;
- ByteString* pDepend;
- ByteString* pPutStr;
- Prj *pNextPrj = NULL;
- ULONG i, nRetPos;
-
- if ( pPrjLst ) {
- pDepLst = pDepPrj->GetDependencies();
- if ( pDepLst ) {
- for ( i = 0; i < pDepLst->Count(); i++ ) {
- pDepend = pDepLst->GetObject( i );
- pPutStr = new ByteString( *pDepend );
- nRetPos = pPrjLst->PutString( pPutStr );
- if( nRetPos == NOT_THERE )
- delete pPutStr;
- pNextPrj = GetPrj( *pDepend );
- if ( pNextPrj ) {
- ExpandPrj_Impl( pPrj, pNextPrj );
- }
- }
- }
- }
-}
-
-/*****************************************************************************/
-void Star::Expand_Impl()
-/*****************************************************************************/
-{
- for ( ULONG i = 0; i < Count(); i++ ) {
- for ( ULONG j = 0; j < Count(); j++ )
- GetObject( j )->bVisited = FALSE;
-
- Prj* pPrj = GetObject( i );
- ExpandPrj_Impl( pPrj, pPrj );
- }
-}
-
-/*****************************************************************************/
-void Star::InsertToken ( char *yytext )
-/*****************************************************************************/
-{
- static int i = 0;
- static ByteString aDirName, aWhat, aWhatOS,
- sClientRestriction, aLogFileName, aProjectName, aPrefix, aCommandPara;
- static BOOL bPrjDep = FALSE;
- static BOOL bHardDep = FALSE;
- static USHORT nCommandType, nOSType;
- CommandData* pCmdData;
- static SByteStringList *pStaticDepList;
- Prj* pPrj;
-
- switch (i)
- {
- case 0:
- aPrefix = yytext;
- pStaticDepList = 0;
- break;
- case 1:
- aDirName = yytext;
- break;
- case 2:
- if ( !strcmp( yytext, ":" ))
- {
- bPrjDep = TRUE;
- bHardDep = FALSE;
- i = 9;
- }
- else if ( !strcmp( yytext, "::" ))
- {
- bPrjDep = TRUE;
- bHardDep = TRUE;
- i = 9;
- }
- else
- {
- bPrjDep = FALSE;
- bHardDep = FALSE;
-
- aWhat = yytext;
- if ( aWhat == "nmake" )
- nCommandType = COMMAND_NMAKE;
- else if ( aWhat == "get" )
- nCommandType = COMMAND_GET;
- else {
- ULONG nOffset = aWhat.Copy( 3 ).ToInt32();
- nCommandType = sal::static_int_cast< USHORT >(
- COMMAND_USER_START + nOffset - 1);
- }
- }
- break;
- case 3:
- if ( !bPrjDep )
- {
- aWhat = yytext;
- if ( aWhat == "-" )
- {
- aCommandPara = ByteString();
- }
- else
- aCommandPara = aWhat;
- }
- break;
- case 4:
- if ( !bPrjDep )
- {
- aWhatOS = yytext;
- if ( aWhatOS.GetTokenCount( ',' ) > 1 ) {
- sClientRestriction = aWhatOS.Copy( aWhatOS.GetToken( 0, ',' ).Len() + 1 );
- aWhatOS = aWhatOS.GetToken( 0, ',' );
- }
- if ( aWhatOS == "all" )
- nOSType = ( OS_WIN16 | OS_WIN32 | OS_OS2 | OS_UNX );
- else if ( aWhatOS == "w" )
- nOSType = ( OS_WIN16 | OS_WIN32 );
- else if ( aWhatOS == "p" )
- nOSType = OS_OS2;
- else if ( aWhatOS == "u" )
- nOSType = OS_UNX;
- else if ( aWhatOS == "d" )
- nOSType = OS_WIN16;
- else if ( aWhatOS == "n" )
- nOSType = OS_WIN32;
- else
- nOSType = OS_NONE;
- }
- break;
- case 5:
- if ( !bPrjDep )
- {
- aLogFileName = yytext;
- }
- break;
- default:
- if ( !bPrjDep )
- {
- ByteString aItem = yytext;
- if ( aItem == "NULL" )
- {
- // Liste zu Ende
- i = -1;
- }
- else
- {
- // ggfs. Dependency liste anlegen und ergaenzen
- if ( !pStaticDepList )
- pStaticDepList = new SByteStringList;
- pStaticDepList->PutString( new ByteString( aItem ));
- }
- }
- else
- {
- ByteString aItem = yytext;
- if ( aItem == "NULL" )
- {
- // Liste zu Ende
- i = -1;
- bPrjDep= FALSE;
- }
- else
- {
- aProjectName = aDirName.GetToken ( 0, '\\');
- if ( HasProject( aProjectName ))
- {
- pPrj = GetPrj( aProjectName );
- // Projekt exist. schon, neue Eintraege anhaengen
- }
- else
- {
- // neues Project anlegen
- pPrj = new Prj ( aProjectName );
- pPrj->SetPreFix( aPrefix );
- Insert(pPrj,LIST_APPEND);
- }
- pPrj->AddDependencies( aItem );
- pPrj->HasHardDependencies( bHardDep );
-
- if ( nStarMode == STAR_MODE_RECURSIVE_PARSE ) {
- String sItem( aItem, RTL_TEXTENCODING_ASCII_US );
- InsertSolarList( sItem );
- }
- }
- }
- break;
- }
- /* Wenn dieses Project noch nicht vertreten ist, in die Liste
- der Solar-Projekte einfuegen */
- if ( i == -1 )
- {
- aProjectName = aDirName.GetToken ( 0, '\\');
- if ( HasProject( aProjectName ))
- {
- pPrj = GetPrj( aProjectName );
- // Projekt exist. schon, neue Eintraege anhaengen
- }
- else
- {
- // neues Project anlegen
- pPrj = new Prj ( aProjectName );
- pPrj->SetPreFix( aPrefix );
- Insert(pPrj,LIST_APPEND);
- }
-
- pCmdData = new CommandData;
- pCmdData->SetPath( aDirName );
- pCmdData->SetCommandType( nCommandType );
- pCmdData->SetCommandPara( aCommandPara );
- pCmdData->SetOSType( nOSType );
- pCmdData->SetLogFile( aLogFileName );
- pCmdData->SetClientRestriction( sClientRestriction );
- if ( pStaticDepList )
- pCmdData->SetDependencies( pStaticDepList );
-
- pStaticDepList = 0;
- pPrj->Insert ( pCmdData, LIST_APPEND );
- aDirName ="";
- aWhat ="";
- aWhatOS = "";
- sClientRestriction = "";
- aLogFileName = "";
- nCommandType = 0;
- nOSType = 0;
- }
- i++;
-
- // und wer raeumt die depLst wieder ab ?
-}
-
-/*****************************************************************************/
-BOOL Star::HasProject ( ByteString aProjectName )
-/*****************************************************************************/
-{
- Prj *pPrj;
- int nCountMember;
-
- nCountMember = Count();
-
- for ( int i=0; i<nCountMember; i++)
- {
- pPrj = GetObject(i);
- if ( pPrj->GetProjectName().EqualsIgnoreCaseAscii(aProjectName) )
- return TRUE;
- }
- return FALSE;
-}
-
-/*****************************************************************************/
-Prj* Star::GetPrj ( ByteString aProjectName )
-/*****************************************************************************/
-{
- Prj* pPrj;
- int nCountMember = Count();
- for ( int i=0;i<nCountMember;i++)
- {
- pPrj = GetObject(i);
- if ( pPrj->GetProjectName().EqualsIgnoreCaseAscii(aProjectName) )
- return pPrj;
- }
-// return (Prj*)NULL;
- return 0L ;
-}
-
-/*****************************************************************************/
-ByteString Star::GetPrjName( DirEntry &aPath )
-/*****************************************************************************/
-{
- ByteString aRetPrj, aDirName;
- ByteString aFullPathName = ByteString( aPath.GetFull(), gsl_getSystemTextEncoding());
-
- xub_StrLen nToken = aFullPathName.GetTokenCount(PATH_DELIMETER);
- for ( xub_StrLen i=0; i< nToken; i++ )
- {
- aDirName = aFullPathName.GetToken( i, PATH_DELIMETER );
- if ( HasProject( aDirName ))
- {
- aRetPrj = aDirName;
- break;
- }
- }
-
- return aRetPrj;
-}
-
-
-//
-// class StarWriter
-//
-
-/*****************************************************************************/
-StarWriter::StarWriter( String aFileName, BOOL bReadComments, USHORT nMode )
-/*****************************************************************************/
-{
- Read ( aFileName, bReadComments, nMode );
-}
-
-/*****************************************************************************/
-StarWriter::StarWriter( SolarFileList *pSolarFiles, BOOL bReadComments )
-/*****************************************************************************/
-{
- Read( pSolarFiles, bReadComments );
-}
-
-/*****************************************************************************/
-StarWriter::StarWriter( GenericInformationList *pStandLst, ByteString &rVersion,
- BOOL bLocal, const char *pSourceRoot )
-/*****************************************************************************/
-{
- ByteString sPath( rVersion );
- String sSrcRoot;
- if ( pSourceRoot )
- sSrcRoot = String::CreateFromAscii( pSourceRoot );
-
-#ifdef UNX
- sPath += "/settings/UNXSOLARLIST";
-#else
- sPath += "/settings/SOLARLIST";
-#endif
- GenericInformation *pInfo = pStandLst->GetInfo( sPath, TRUE );
-
- if( pInfo && pInfo->GetValue().Len()) {
- ByteString sFile( pInfo->GetValue());
- if ( bLocal ) {
- IniManager aIniManager;
- aIniManager.ToLocal( sFile );
- }
- String sFileName( sFile, RTL_TEXTENCODING_ASCII_US );
- nStarMode = STAR_MODE_SINGLE_PARSE;
- Read( sFileName );
- }
- else {
- SolarFileList *pFileList = new SolarFileList();
-
- sPath = rVersion;
- sPath += "/drives";
-
- GenericInformation *pInfo2 = pStandLst->GetInfo( sPath, TRUE );
- if ( pInfo2 && pInfo2->GetSubList()) {
- GenericInformationList *pDrives = pInfo2->GetSubList();
- for ( ULONG i = 0; i < pDrives->Count(); i++ ) {
- GenericInformation *pDrive = pDrives->GetObject( i );
- if ( pDrive ) {
- DirEntry aEntry;
- BOOL bOk = FALSE;
- if ( sSrcRoot.Len()) {
- aEntry = DirEntry( sSrcRoot );
- bOk = TRUE;
- }
- else {
-#ifdef UNX
- sPath = "UnixVolume";
- GenericInformation *pUnixVolume = pDrive->GetSubInfo( sPath );
- if ( pUnixVolume ) {
- String sRoot( pUnixVolume->GetValue(), RTL_TEXTENCODING_ASCII_US );
- aEntry = DirEntry( sRoot );
- bOk = TRUE;
- }
-#else
- bOk = TRUE;
- String sRoot( *pDrive, RTL_TEXTENCODING_ASCII_US );
- sRoot += String::CreateFromAscii( "\\" );
- aEntry = DirEntry( sRoot );
-#endif
- }
- if ( bOk ) {
- sPath = "projects";
- GenericInformation *pProjectsKey = pDrive->GetSubInfo( sPath, TRUE );
- if ( pProjectsKey ) {
- if ( !sSrcRoot.Len()) {
- sPath = rVersion;
- sPath += "/settings/PATH";
- GenericInformation *pPath = pStandLst->GetInfo( sPath, TRUE );
- if( pPath ) {
- ByteString sAddPath( pPath->GetValue());
-#ifdef UNX
- sAddPath.SearchAndReplaceAll( "\\", "/" );
-#else
- sAddPath.SearchAndReplaceAll( "/", "\\" );
-#endif
- String ssAddPath( sAddPath, RTL_TEXTENCODING_ASCII_US );
- aEntry += DirEntry( ssAddPath );
- }
- }
- GenericInformationList *pProjects = pProjectsKey->GetSubList();
- if ( pProjects ) {
- String sPrjDir( String::CreateFromAscii( "prj" ));
- String sSolarFile( String::CreateFromAscii( "build.lst" ));
-
- for ( ULONG j = 0; j < pProjects->Count(); j++ ) {
- ByteString sProject( *pProjects->GetObject( j ));
- String ssProject( sProject, RTL_TEXTENCODING_ASCII_US );
-
- DirEntry aPrjEntry( aEntry );
-
- aPrjEntry += DirEntry( ssProject );
- aPrjEntry += DirEntry( sPrjDir );
- aPrjEntry += DirEntry( sSolarFile );
-
- pFileList->Insert( new String( aPrjEntry.GetFull()), LIST_APPEND );
-
- ByteString sFile( aPrjEntry.GetFull(), RTL_TEXTENCODING_ASCII_US );
- fprintf( stdout, "%s\n", sFile.GetBuffer());
- }
- }
- }
- }
- }
- }
- }
- Read( pFileList );
- }
-}
-
-/*****************************************************************************/
-void StarWriter::CleanUp()
-/*****************************************************************************/
-{
- Expand_Impl();
-}
-
-/*****************************************************************************/
-USHORT StarWriter::Read( String aFileName, BOOL bReadComments, USHORT nMode )
-/*****************************************************************************/
-{
- nStarMode = nMode;
-
- ByteString aString;
- aFileList.Insert( new String( aFileName ));
-
- DirEntry aEntry( aFileName );
- aEntry.ToAbs();
- aEntry = aEntry.GetPath().GetPath().GetPath();
- sSourceRoot = aEntry.GetFull();
-
- while( aFileList.Count()) {
-
- StarFile *pFile = new StarFile( *aFileList.GetObject(( ULONG ) 0 ));
- if ( pFile->Exists()) {
- SimpleConfig aSolarConfig( *aFileList.GetObject(( ULONG ) 0 ));
- while (( aString = aSolarConfig.GetCleanedNextLine( bReadComments )) != "" )
- InsertTokenLine ( aString );
- }
-
- aMutex.acquire();
- aLoadedFilesList.Insert( pFile, LIST_APPEND );
- aMutex.release();
- delete aFileList.Remove(( ULONG ) 0 );
- }
- // resolve all dependencies recursive
- Expand_Impl();
-
- // Die gefundenen Abhaengigkeiten rekursiv aufloesen
- Expand_Impl();
- return 0;
-}
-
-/*****************************************************************************/
-USHORT StarWriter::Read( SolarFileList *pSolarFiles, BOOL bReadComments )
-/*****************************************************************************/
-{
- nStarMode = STAR_MODE_MULTIPLE_PARSE;
-
- // this ctor is used by StarBuilder to get the information for the whole workspace
- while( pSolarFiles->Count()) {
- ByteString aString;
-
- StarFile *pFile = new StarFile( *pSolarFiles->GetObject(( ULONG ) 0 ));
- if ( pFile->Exists()) {
- SimpleConfig aSolarConfig( *pSolarFiles->GetObject(( ULONG ) 0 ));
- while (( aString = aSolarConfig.GetCleanedNextLine( bReadComments )) != "" )
- InsertTokenLine ( aString );
- }
-
- aMutex.acquire();
- aLoadedFilesList.Insert( pFile, LIST_APPEND );
- aMutex.release();
- delete pSolarFiles->Remove(( ULONG ) 0 );
- }
- delete pSolarFiles;
-
- Expand_Impl();
- return 0;
-}
-
-/*****************************************************************************/
-USHORT StarWriter::WritePrj( Prj *pPrj, SvFileStream& rStream )
-/*****************************************************************************/
-{
- ByteString aDataString;
- ByteString aTab('\t');
- ByteString aSpace(' ');
- ByteString aEmptyString("");
- SByteStringList* pCmdDepList;
-
- CommandData* pCmdData = NULL;
- if ( pPrj->Count() > 0 )
- {
- pCmdData = pPrj->First();
- SByteStringList* pPrjDepList = pPrj->GetDependencies( FALSE );
- if ( pPrjDepList != 0 )
- {
- aDataString = pPrj->GetPreFix();
- aDataString += aTab;
- aDataString += pPrj->GetProjectName();
- aDataString += aTab;
- if ( pPrj->HasHardDependencies())
- aDataString+= ByteString("::");
- else
- aDataString+= ByteString(":");
- aDataString += aTab;
- for ( USHORT i = 0; i< pPrjDepList->Count(); i++ ) {
- aDataString += *pPrjDepList->GetObject( i );
- aDataString += aSpace;
- }
- aDataString+= "NULL";
-
- rStream.WriteLine( aDataString );
-
- pCmdData = pPrj->Next();
- }
- if ( pCmdData ) {
- do
- {
- if (( aDataString = pCmdData->GetComment()) == aEmptyString )
- {
- aDataString = pPrj->GetPreFix();
- aDataString += aTab;
-
- aDataString+= pCmdData->GetPath();
- aDataString += aTab;
- USHORT nPathLen = pCmdData->GetPath().Len();
- if ( nPathLen < 40 )
- for ( int i = 0; i < 9 - pCmdData->GetPath().Len() / 4 ; i++ )
- aDataString += aTab;
- else
- for ( int i = 0; i < 12 - pCmdData->GetPath().Len() / 4 ; i++ )
- aDataString += aTab;
- aDataString += pCmdData->GetCommandTypeString();
- aDataString += aTab;
- if ( pCmdData->GetCommandType() == COMMAND_GET )
- aDataString += aTab;
- if ( pCmdData->GetCommandPara() == aEmptyString )
- aDataString+= ByteString("-");
- else
- aDataString+= pCmdData->GetCommandPara();
- aDataString += aTab;
- aDataString+= pCmdData->GetOSTypeString();
- if ( pCmdData->GetClientRestriction().Len()) {
- aDataString += ByteString( "," );
- aDataString += pCmdData->GetClientRestriction();
- }
- aDataString += aTab;
- aDataString += pCmdData->GetLogFile();
- aDataString += aSpace;
-
- pCmdDepList = pCmdData->GetDependencies();
- if ( pCmdDepList )
- for ( USHORT i = 0; i< pCmdDepList->Count(); i++ ) {
- aDataString += *pCmdDepList->GetObject( i );
- aDataString += aSpace;
- }
- aDataString += "NULL";
- }
-
- rStream.WriteLine( aDataString );
-
- pCmdData = pPrj->Next();
- } while ( pCmdData );
- }
- }
- return 0;
-}
-
-/*****************************************************************************/
-USHORT StarWriter::Write( String aFileName )
-/*****************************************************************************/
-{
- SvFileStream aFileStream;
-
- aFileStream.Open( aFileName, STREAM_WRITE | STREAM_TRUNC);
-
- if ( Count() > 0 )
- {
- Prj* pPrj = First();
- do
- {
- WritePrj( pPrj, aFileStream );
- pPrj = Next();
- } while ( pPrj );
- }
-
- aFileStream.Close();
-
- return 0;
-}
-
-/*****************************************************************************/
-USHORT StarWriter::WriteMultiple( String rSourceRoot )
-/*****************************************************************************/
-{
- if ( Count() > 0 )
- {
- String sPrjDir( String::CreateFromAscii( "prj" ));
- String sSolarFile( String::CreateFromAscii( "build.lst" ));
-
- Prj* pPrj = First();
- do
- {
- String sName( pPrj->GetProjectName(), RTL_TEXTENCODING_ASCII_US );
-
- DirEntry aEntry( rSourceRoot );
- aEntry += DirEntry( sName );
- aEntry += DirEntry( sPrjDir );
- aEntry += DirEntry( sSolarFile );
-
- SvFileStream aFileStream;
- aFileStream.Open( aEntry.GetFull(), STREAM_WRITE | STREAM_TRUNC);
-
- WritePrj( pPrj, aFileStream );
-
- aFileStream.Close();
-
- pPrj = Next();
- } while ( pPrj );
- }
-
- return 0;
-}
-
-/*****************************************************************************/
-void StarWriter::InsertTokenLine ( ByteString& rString )
-/*****************************************************************************/
-{
- int i = 0;
- ByteString aWhat, aWhatOS,
- sClientRestriction, aLogFileName, aProjectName, aPrefix, aCommandPara;
- static ByteString aDirName;
- BOOL bPrjDep = FALSE;
- BOOL bHardDep = FALSE;
- USHORT nCommandType = 0;
- USHORT nOSType = 0;
- CommandData* pCmdData;
- SByteStringList *pDepList2 = NULL;
- Prj* pPrj;
-
- ByteString aEmptyString;
- ByteString aToken = rString.GetToken( 0, '\t' );
- ByteString aCommentString;
-
- const char* yytext = aToken.GetBuffer();
-
- while ( !( aToken == aEmptyString ) )
- {
- switch (i)
- {
- case 0:
- if ( rString.Search( "#" ) == 0 )
- {
- i = -1;
- aCommentString = rString;
- rString = aEmptyString;
- if ( Count() == 0 )
- aDirName = "null_entry" ; //comments at begin of file
- break;
- }
- aPrefix = yytext;
- pDepList2 = NULL;
- break;
- case 1:
- aDirName = yytext;
- break;
- case 2:
- if ( !strcmp( yytext, ":" ))
- {
- bPrjDep = TRUE;
- bHardDep = FALSE;
- i = 9;
- }
- else if ( !strcmp( yytext, "::" ))
- {
- bPrjDep = TRUE;
- bHardDep = TRUE;
- i = 9;
- }
- else
- {
- bPrjDep = FALSE;
- bHardDep = FALSE;
-
- aWhat = yytext;
- if ( aWhat == "nmake" )
- nCommandType = COMMAND_NMAKE;
- else if ( aWhat == "get" )
- nCommandType = COMMAND_GET;
- else {
- ULONG nOffset = aWhat.Copy( 3 ).ToInt32();
- nCommandType = sal::static_int_cast< USHORT >(
- COMMAND_USER_START + nOffset - 1);
- }
- }
- break;
- case 3:
- if ( !bPrjDep )
- {
- aWhat = yytext;
- if ( aWhat == "-" )
- {
- aCommandPara = ByteString();
- }
- else
- aCommandPara = aWhat;
- }
- break;
- case 4:
- if ( !bPrjDep )
- {
- aWhatOS = yytext;
- if ( aWhatOS.GetTokenCount( ',' ) > 1 ) {
- sClientRestriction = aWhatOS.Copy( aWhatOS.GetToken( 0, ',' ).Len() + 1 );
- aWhatOS = aWhatOS.GetToken( 0, ',' );
- }
- aWhatOS = aWhatOS.GetToken( 0, ',' );
- if ( aWhatOS == "all" )
- nOSType = ( OS_WIN16 | OS_WIN32 | OS_OS2 | OS_UNX );
- else if ( aWhatOS == "w" )
- nOSType = ( OS_WIN16 | OS_WIN32 );
- else if ( aWhatOS == "p" )
- nOSType = OS_OS2;
- else if ( aWhatOS == "u" )
- nOSType = OS_UNX;
- else if ( aWhatOS == "d" )
- nOSType = OS_WIN16;
- else if ( aWhatOS == "n" )
- nOSType = OS_WIN32;
- else
- nOSType = OS_NONE;
- }
- break;
- case 5:
- if ( !bPrjDep )
- {
- aLogFileName = yytext;
- }
- break;
- default:
- if ( !bPrjDep )
- {
- ByteString aItem = yytext;
- if ( aItem == "NULL" )
- {
- // Liste zu Ende
- i = -1;
- }
- else
- {
- // ggfs. Dependency liste anlegen und ergaenzen
- if ( !pDepList2 )
- pDepList2 = new SByteStringList;
- pDepList2->PutString( new ByteString( aItem ));
- }
- }
- else
- {
- ByteString aItem = yytext;
- if ( aItem == "NULL" )
- {
- // Liste zu Ende
- i = -1;
- bPrjDep= FALSE;
- }
- else
- {
- aProjectName = aDirName.GetToken ( 0, '\\');
- if ( HasProject( aProjectName ))
- {
- pPrj = GetPrj( aProjectName );
- // Projekt exist. schon, neue Eintraege anhaengen
- }
- else
- {
- // neues Project anlegen
- pPrj = new Prj ( aProjectName );
- pPrj->SetPreFix( aPrefix );
- Insert(pPrj,LIST_APPEND);
- }
- pPrj->AddDependencies( aItem );
- pPrj->HasHardDependencies( bHardDep );
-
- if ( nStarMode == STAR_MODE_RECURSIVE_PARSE ) {
- String sItem( aItem, RTL_TEXTENCODING_ASCII_US );
- InsertSolarList( sItem );
- }
- }
-
- }
- break;
- }
- /* Wenn dieses Project noch nicht vertreten ist, in die Liste
- der Solar-Projekte einfuegen */
- if ( i == -1 )
- {
- aProjectName = aDirName.GetToken ( 0, '\\');
- if ( HasProject( aProjectName ))
- {
- pPrj = GetPrj( aProjectName );
- // Projekt exist. schon, neue Eintraege anhaengen
- }
- else
- {
- // neues Project anlegen
- pPrj = new Prj ( aProjectName );
- pPrj->SetPreFix( aPrefix );
- Insert(pPrj,LIST_APPEND);
- }
-
- pCmdData = new CommandData;
- pCmdData->SetPath( aDirName );
- pCmdData->SetCommandType( nCommandType );
- pCmdData->SetCommandPara( aCommandPara );
- pCmdData->SetOSType( nOSType );
- pCmdData->SetLogFile( aLogFileName );
- pCmdData->SetComment( aCommentString );
- pCmdData->SetClientRestriction( sClientRestriction );
- if ( pDepList2 )
- pCmdData->SetDependencies( pDepList2 );
-
- pPrj->Insert ( pCmdData, LIST_APPEND );
-
- }
- i++;
-
- rString.Erase(0, aToken.Len()+1);
- aToken = rString.GetToken( 0, '\t' );
- yytext = aToken.GetBuffer();
-
- }
- // und wer raeumt die depLst wieder ab ?
-}
-
-/*****************************************************************************/
-BOOL StarWriter::InsertProject ( Prj* )
-/*****************************************************************************/
-{
- return FALSE;
-}
-
-/*****************************************************************************/
-Prj* StarWriter::RemoveProject ( ByteString aProjectName )
-/*****************************************************************************/
-{
- ULONG nCountMember = Count();
- Prj* pPrj;
- Prj* pPrjFound = NULL;
- SByteStringList* pPrjDeps;
-
- for ( USHORT i = 0; i < nCountMember; i++ )
- {
- pPrj = GetObject( i );
- if ( pPrj->GetProjectName() == aProjectName )
- pPrjFound = pPrj;
- else
- {
- pPrjDeps = pPrj->GetDependencies( FALSE );
- if ( pPrjDeps )
- {
- ByteString* pString;
- ULONG nPrjDepsCount = pPrjDeps->Count();
- for ( ULONG j = nPrjDepsCount; j > 0; j-- )
- {
- pString = pPrjDeps->GetObject( j - 1 );
- if ( pString->GetToken( 0, '.') == aProjectName )
- pPrjDeps->Remove( pString );
- }
- }
- }
- }
-
- Remove( pPrjFound );
-
- return pPrjFound;
-}
-
-//
-// class StarFile
-//
-
-/*****************************************************************************/
-StarFile::StarFile( const String &rFile )
-/*****************************************************************************/
- : aFileName( rFile )
-{
- DirEntry aEntry( aFileName );
- if ( aEntry.Exists()) {
- bExists = TRUE;
- FileStat aStat( aEntry );
- aDate = aStat.DateModified();
- aTime = aStat.TimeModified();
- }
- else
- bExists = FALSE;
-}
-
-/*****************************************************************************/
-BOOL StarFile::NeedsUpdate()
-/*****************************************************************************/
-{
- DirEntry aEntry( aFileName );
- if ( aEntry.Exists()) {
- if ( !bExists ) {
- bExists = TRUE;
- return TRUE;
- }
- FileStat aStat( aEntry );
- if (( aStat.DateModified() > aDate ) ||
- (( aStat.DateModified() == aDate ) && ( aStat.TimeModified() > aTime )))
- return TRUE;
- }
- return FALSE;
-}
-