189b56da7SAndrew Rist /************************************************************** 2cdf0e10cSrcweir * 389b56da7SAndrew Rist * Licensed to the Apache Software Foundation (ASF) under one 489b56da7SAndrew Rist * or more contributor license agreements. See the NOTICE file 589b56da7SAndrew Rist * distributed with this work for additional information 689b56da7SAndrew Rist * regarding copyright ownership. The ASF licenses this file 789b56da7SAndrew Rist * to you under the Apache License, Version 2.0 (the 889b56da7SAndrew Rist * "License"); you may not use this file except in compliance 989b56da7SAndrew Rist * with the License. You may obtain a copy of the License at 10cdf0e10cSrcweir * 1189b56da7SAndrew Rist * http://www.apache.org/licenses/LICENSE-2.0 12cdf0e10cSrcweir * 1389b56da7SAndrew Rist * Unless required by applicable law or agreed to in writing, 1489b56da7SAndrew Rist * software distributed under the License is distributed on an 1589b56da7SAndrew Rist * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 1689b56da7SAndrew Rist * KIND, either express or implied. See the License for the 1789b56da7SAndrew Rist * specific language governing permissions and limitations 1889b56da7SAndrew Rist * under the License. 19cdf0e10cSrcweir * 2089b56da7SAndrew Rist *************************************************************/ 2189b56da7SAndrew Rist 2289b56da7SAndrew Rist 23cdf0e10cSrcweir 24cdf0e10cSrcweir // MARKER(update_precomp.py): autogen include statement, do not remove 25cdf0e10cSrcweir #include "precompiled_tools.hxx" 26cdf0e10cSrcweir 27cdf0e10cSrcweir // global includes 28cdf0e10cSrcweir #include <stdio.h> 29cdf0e10cSrcweir 30cdf0e10cSrcweir // local includes 31cdf0e10cSrcweir #include "bootstrp/mkcreate.hxx" 32cdf0e10cSrcweir #include "bootstrp/inimgr.hxx" 33cdf0e10cSrcweir #include "bootstrp/appdef.hxx" 34cdf0e10cSrcweir #include <tools/geninfo.hxx> 35cdf0e10cSrcweir #include <tools/iparser.hxx> 36cdf0e10cSrcweir #include "bootstrp/prj.hxx" 37cdf0e10cSrcweir 38cdf0e10cSrcweir char const *NoBuildProject[] = { 39cdf0e10cSrcweir "solenv", 40cdf0e10cSrcweir "EndOf_NoBuildProject" 41cdf0e10cSrcweir }; 42cdf0e10cSrcweir 43cdf0e10cSrcweir char const *LimitedPath[] = { 44cdf0e10cSrcweir "jurt\\com\\sun\\star", 45cdf0e10cSrcweir "r_tools", 46cdf0e10cSrcweir "ridljar", 47cdf0e10cSrcweir "setup2", 48cdf0e10cSrcweir "connectivity", 49cdf0e10cSrcweir "EndOf_LimitedPath" 50cdf0e10cSrcweir }; 51cdf0e10cSrcweir 52cdf0e10cSrcweir // 53cdf0e10cSrcweir // class SourceDirectory 54cdf0e10cSrcweir // 55cdf0e10cSrcweir 56cdf0e10cSrcweir /*****************************************************************************/ 57cdf0e10cSrcweir SourceDirectory::SourceDirectory( const ByteString &rDirectoryName, 58cdf0e10cSrcweir sal_uInt16 nOperatingSystem, SourceDirectory *pParentDirectory ) 59cdf0e10cSrcweir /*****************************************************************************/ 60cdf0e10cSrcweir : ByteString( rDirectoryName ), 61cdf0e10cSrcweir pParent( pParentDirectory ), 62cdf0e10cSrcweir pSubDirectories( NULL ), 63cdf0e10cSrcweir nOSType( nOperatingSystem ), 64cdf0e10cSrcweir nDepth( 0 ), 65cdf0e10cSrcweir pDependencies( NULL ), 66cdf0e10cSrcweir pCodedDependencies( NULL ), 67cdf0e10cSrcweir pCodedIdentifier( NULL ) 68cdf0e10cSrcweir { 69cdf0e10cSrcweir if ( pParent ) { 70cdf0e10cSrcweir if ( !pParent->pSubDirectories ) 71cdf0e10cSrcweir pParent->pSubDirectories = new SourceDirectoryList(); 72cdf0e10cSrcweir pParent->pSubDirectories->InsertSorted( this ); 73cdf0e10cSrcweir nDepth = pParent->nDepth + 1; 74cdf0e10cSrcweir } 75cdf0e10cSrcweir } 76cdf0e10cSrcweir 77cdf0e10cSrcweir /*****************************************************************************/ 78cdf0e10cSrcweir SourceDirectory::~SourceDirectory() 79cdf0e10cSrcweir /*****************************************************************************/ 80cdf0e10cSrcweir { 81cdf0e10cSrcweir delete pSubDirectories; 82cdf0e10cSrcweir } 83cdf0e10cSrcweir 84cdf0e10cSrcweir /*****************************************************************************/ 85cdf0e10cSrcweir CodedDependency *SourceDirectory::AddCodedDependency( 86cdf0e10cSrcweir const ByteString &rCodedIdentifier, sal_uInt16 nOperatingSystems ) 87cdf0e10cSrcweir /*****************************************************************************/ 88cdf0e10cSrcweir { 89cdf0e10cSrcweir CodedDependency *pReturn = NULL; 90cdf0e10cSrcweir 91cdf0e10cSrcweir if ( !pCodedDependencies ) { 92cdf0e10cSrcweir pCodedDependencies = new SByteStringList(); 93cdf0e10cSrcweir pReturn = new CodedDependency( rCodedIdentifier, nOperatingSystems ); 94cdf0e10cSrcweir pCodedDependencies->PutString(( ByteString * ) pReturn ); 95cdf0e10cSrcweir } 96cdf0e10cSrcweir else { 97cdf0e10cSrcweir sal_uIntPtr nPos = 98cdf0e10cSrcweir pCodedDependencies->IsString( (ByteString *) (& rCodedIdentifier) ); 99cdf0e10cSrcweir if ( nPos == NOT_THERE ) { 100cdf0e10cSrcweir pReturn = 101cdf0e10cSrcweir new CodedDependency( rCodedIdentifier, nOperatingSystems ); 102cdf0e10cSrcweir pCodedDependencies->PutString(( ByteString * ) pReturn ); 103cdf0e10cSrcweir } 104cdf0e10cSrcweir else { 105cdf0e10cSrcweir pReturn = 106cdf0e10cSrcweir ( CodedDependency * ) pCodedDependencies->GetObject( nPos ); 107cdf0e10cSrcweir pReturn->TryToMerge( rCodedIdentifier, nOperatingSystems ); 108cdf0e10cSrcweir } 109cdf0e10cSrcweir } 110cdf0e10cSrcweir return pReturn; 111cdf0e10cSrcweir } 112cdf0e10cSrcweir 113cdf0e10cSrcweir /*****************************************************************************/ 114cdf0e10cSrcweir CodedDependency *SourceDirectory::AddCodedIdentifier( 115cdf0e10cSrcweir const ByteString &rCodedIdentifier, sal_uInt16 nOperatingSystems ) 116cdf0e10cSrcweir /*****************************************************************************/ 117cdf0e10cSrcweir { 118cdf0e10cSrcweir CodedDependency *pReturn = NULL; 119cdf0e10cSrcweir 120cdf0e10cSrcweir if ( !pCodedIdentifier ) { 121cdf0e10cSrcweir pCodedIdentifier = new SByteStringList(); 122cdf0e10cSrcweir pReturn = new CodedDependency( rCodedIdentifier, nOperatingSystems ); 123cdf0e10cSrcweir pCodedIdentifier->PutString(( ByteString * ) pReturn ); 124cdf0e10cSrcweir } 125cdf0e10cSrcweir else { 126cdf0e10cSrcweir sal_uIntPtr nPos = 127cdf0e10cSrcweir pCodedIdentifier->IsString( ( ByteString *) (& rCodedIdentifier) ); 128cdf0e10cSrcweir if ( nPos == NOT_THERE ) { 129cdf0e10cSrcweir pReturn = 130cdf0e10cSrcweir new CodedDependency( rCodedIdentifier, nOperatingSystems ); 131cdf0e10cSrcweir pCodedIdentifier->PutString(( ByteString * ) pReturn ); 132cdf0e10cSrcweir } 133cdf0e10cSrcweir else { 134cdf0e10cSrcweir pReturn = 135cdf0e10cSrcweir ( CodedDependency * ) pCodedIdentifier->GetObject( nPos ); 136cdf0e10cSrcweir pReturn->TryToMerge( rCodedIdentifier, nOperatingSystems ); 137cdf0e10cSrcweir } 138cdf0e10cSrcweir } 139cdf0e10cSrcweir if ( pParent && pParent->nDepth > 1 ) 140cdf0e10cSrcweir pParent->AddCodedIdentifier( rCodedIdentifier, nOperatingSystems ); 141cdf0e10cSrcweir 142cdf0e10cSrcweir return pReturn; 143cdf0e10cSrcweir } 144cdf0e10cSrcweir 145cdf0e10cSrcweir /*****************************************************************************/ 146cdf0e10cSrcweir ByteString SourceDirectory::GetFullPath() 147cdf0e10cSrcweir /*****************************************************************************/ 148cdf0e10cSrcweir { 149cdf0e10cSrcweir ByteString sFullPath; 150cdf0e10cSrcweir if ( pParent ) { 151cdf0e10cSrcweir sFullPath = pParent->GetFullPath(); 152cdf0e10cSrcweir sFullPath += ByteString( PATH_SEPARATOR ); 153cdf0e10cSrcweir } 154cdf0e10cSrcweir sFullPath += *this; 155cdf0e10cSrcweir 156cdf0e10cSrcweir return sFullPath; 157cdf0e10cSrcweir } 158cdf0e10cSrcweir 159cdf0e10cSrcweir /*****************************************************************************/ 160cdf0e10cSrcweir SourceDirectory *SourceDirectory::GetRootDirectory() 161cdf0e10cSrcweir /*****************************************************************************/ 162cdf0e10cSrcweir { 163cdf0e10cSrcweir if ( !pParent ) 164cdf0e10cSrcweir return this; 165cdf0e10cSrcweir 166cdf0e10cSrcweir return pParent->GetRootDirectory(); 167cdf0e10cSrcweir } 168cdf0e10cSrcweir 169cdf0e10cSrcweir /*****************************************************************************/ 170cdf0e10cSrcweir SourceDirectory *SourceDirectory::GetSubDirectory( 171cdf0e10cSrcweir const ByteString &rDirectoryPath, sal_uInt16 nOperatingSystem ) 172cdf0e10cSrcweir /*****************************************************************************/ 173cdf0e10cSrcweir { 174cdf0e10cSrcweir ByteString sSearch; 175cdf0e10cSrcweir 176cdf0e10cSrcweir sal_Bool bSubs = sal_True; 177cdf0e10cSrcweir sal_uIntPtr nIndex = 0; 178cdf0e10cSrcweir 179cdf0e10cSrcweir while ( bSubs && ByteString( LimitedPath[ nIndex ]) != "EndOf_LimitedPath" ) { 180cdf0e10cSrcweir SourceDirectory *pActDir = this; 181cdf0e10cSrcweir ByteString sLimitation( LimitedPath[ nIndex ]); 182cdf0e10cSrcweir 183cdf0e10cSrcweir sal_Bool bBreak = sal_False; 184cdf0e10cSrcweir for ( sal_uIntPtr i = sLimitation.GetTokenCount( '\\' ); i > 0 && !bBreak; i-- ) { 185cdf0e10cSrcweir if (( !pActDir ) || ( *pActDir != sLimitation.GetToken(( sal_uInt16 )( i - 1 ), '\\' ))) 186cdf0e10cSrcweir bBreak = sal_True; 187cdf0e10cSrcweir else 188cdf0e10cSrcweir pActDir = pActDir->pParent; 189cdf0e10cSrcweir } 190cdf0e10cSrcweir bSubs = bBreak; 191cdf0e10cSrcweir nIndex++; 192cdf0e10cSrcweir } 193cdf0e10cSrcweir 194cdf0e10cSrcweir if ( !bSubs ) 195cdf0e10cSrcweir { 196cdf0e10cSrcweir sSearch = rDirectoryPath; 197cdf0e10cSrcweir } 198cdf0e10cSrcweir else 199cdf0e10cSrcweir sSearch = rDirectoryPath.GetToken( 0, PATH_SEPARATOR ); 200cdf0e10cSrcweir 201cdf0e10cSrcweir SourceDirectory *pSubDirectory = NULL; 202cdf0e10cSrcweir 203cdf0e10cSrcweir if ( pSubDirectories ) 204cdf0e10cSrcweir pSubDirectory = pSubDirectories->Search( sSearch ); 205cdf0e10cSrcweir 206cdf0e10cSrcweir if ( !pSubDirectory ) 207cdf0e10cSrcweir pSubDirectory = new SourceDirectory( 208cdf0e10cSrcweir sSearch, nOperatingSystem, this ); 209cdf0e10cSrcweir 210cdf0e10cSrcweir pSubDirectory->nOSType |= nOperatingSystem; 211cdf0e10cSrcweir 212cdf0e10cSrcweir if ( sSearch.Len() == rDirectoryPath.Len()) 213cdf0e10cSrcweir return pSubDirectory; 214cdf0e10cSrcweir 215cdf0e10cSrcweir ByteString sPath = rDirectoryPath.Copy( sSearch.Len() + 1 ); 216cdf0e10cSrcweir 217cdf0e10cSrcweir return pSubDirectory->GetSubDirectory( sPath, nOperatingSystem ); 218cdf0e10cSrcweir } 219cdf0e10cSrcweir 220cdf0e10cSrcweir /*****************************************************************************/ 221cdf0e10cSrcweir SourceDirectory *SourceDirectory::GetDirectory( 222cdf0e10cSrcweir const ByteString &rDirectoryName, sal_uInt16 nOperatingSystem ) 223cdf0e10cSrcweir /*****************************************************************************/ 224cdf0e10cSrcweir { 225cdf0e10cSrcweir ByteString sDirectoryName( rDirectoryName ); 226cdf0e10cSrcweir #ifdef UNX 227cdf0e10cSrcweir sDirectoryName.SearchAndReplaceAll( "\\", "/" ); 228cdf0e10cSrcweir #endif 229cdf0e10cSrcweir 230cdf0e10cSrcweir SourceDirectory *pRoot = GetRootDirectory(); 231cdf0e10cSrcweir 232cdf0e10cSrcweir if ( sDirectoryName.Search( *pRoot ) != 0 ) 233cdf0e10cSrcweir return NULL; 234cdf0e10cSrcweir 235cdf0e10cSrcweir if ( sDirectoryName.Len() == pRoot->Len()) 236cdf0e10cSrcweir return pRoot; 237cdf0e10cSrcweir 238cdf0e10cSrcweir if ( sDirectoryName.GetChar( pRoot->Len()) == PATH_SEPARATOR ) { 239cdf0e10cSrcweir ByteString sSub = sDirectoryName.Copy( pRoot->Len() + 1 ); 240cdf0e10cSrcweir return pRoot->GetSubDirectory( sSub, nOperatingSystem ); 241cdf0e10cSrcweir } 242cdf0e10cSrcweir 243cdf0e10cSrcweir return NULL; 244cdf0e10cSrcweir } 245cdf0e10cSrcweir 246cdf0e10cSrcweir /*****************************************************************************/ 247cdf0e10cSrcweir SourceDirectory *SourceDirectory::Insert( const ByteString &rDirectoryName, 248cdf0e10cSrcweir sal_uInt16 nOperatingSystem ) 249cdf0e10cSrcweir /*****************************************************************************/ 250cdf0e10cSrcweir { 251cdf0e10cSrcweir SourceDirectory *pSubDirectory = NULL; 252cdf0e10cSrcweir if ( pSubDirectories ) 253cdf0e10cSrcweir pSubDirectory = pSubDirectories->Search( rDirectoryName ); 254cdf0e10cSrcweir 255cdf0e10cSrcweir if ( !pSubDirectory ) 256cdf0e10cSrcweir pSubDirectory = new SourceDirectory( 257cdf0e10cSrcweir rDirectoryName, nOperatingSystem, this ); 258cdf0e10cSrcweir 259cdf0e10cSrcweir return pSubDirectory; 260cdf0e10cSrcweir } 261cdf0e10cSrcweir 262cdf0e10cSrcweir /*****************************************************************************/ 263cdf0e10cSrcweir Dependency *SourceDirectory::ResolvesDependency( 264cdf0e10cSrcweir CodedDependency *pCodedDependency ) 265cdf0e10cSrcweir /*****************************************************************************/ 266cdf0e10cSrcweir { 267cdf0e10cSrcweir if ( !pCodedIdentifier ) 268cdf0e10cSrcweir return NULL; 269cdf0e10cSrcweir 270cdf0e10cSrcweir sal_uIntPtr nPos = pCodedIdentifier->IsString( pCodedDependency ); 271cdf0e10cSrcweir if ( nPos != NOT_THERE ) { 272cdf0e10cSrcweir CodedDependency *pIdentifier = 273cdf0e10cSrcweir ( CodedDependency * ) pCodedIdentifier->GetObject( nPos ); 274cdf0e10cSrcweir sal_uInt16 nResult = 275cdf0e10cSrcweir pIdentifier->GetOperatingSystem() & 276cdf0e10cSrcweir pCodedDependency->GetOperatingSystem(); 277cdf0e10cSrcweir Dependency *pReturn = new Dependency( *this, nResult ); 278cdf0e10cSrcweir nResult ^= pCodedDependency->GetOperatingSystem(); 279cdf0e10cSrcweir pCodedDependency->SetOperatingSystem( nResult ); 280cdf0e10cSrcweir return pReturn; 281cdf0e10cSrcweir } 282cdf0e10cSrcweir return NULL; 283cdf0e10cSrcweir } 284cdf0e10cSrcweir 285cdf0e10cSrcweir 286cdf0e10cSrcweir /*****************************************************************************/ 287cdf0e10cSrcweir void SourceDirectory::ResolveDependencies() 288cdf0e10cSrcweir /*****************************************************************************/ 289cdf0e10cSrcweir { 290cdf0e10cSrcweir if ( !pSubDirectories ) 291cdf0e10cSrcweir return; 292cdf0e10cSrcweir 293cdf0e10cSrcweir for ( sal_uIntPtr i = 0; i < pSubDirectories->Count(); i++ ) { 294cdf0e10cSrcweir SourceDirectory *pActDirectory = 295cdf0e10cSrcweir ( SourceDirectory * ) pSubDirectories->GetObject( i ); 296cdf0e10cSrcweir if ( pActDirectory->pSubDirectories ) 297cdf0e10cSrcweir pActDirectory->ResolveDependencies(); 298cdf0e10cSrcweir 299cdf0e10cSrcweir if ( pActDirectory->pCodedDependencies ) { 300cdf0e10cSrcweir while ( pActDirectory->pCodedDependencies->Count()) 301cdf0e10cSrcweir { 302cdf0e10cSrcweir CodedDependency *pCodedDependency = ( CodedDependency * ) 303cdf0e10cSrcweir pActDirectory->pCodedDependencies->GetObject(( sal_uIntPtr ) 0 ); 304cdf0e10cSrcweir 305cdf0e10cSrcweir for ( 306cdf0e10cSrcweir sal_uIntPtr k = 0; 307cdf0e10cSrcweir ( k < pSubDirectories->Count()) && 308cdf0e10cSrcweir ( pCodedDependency->GetOperatingSystem() != OS_NONE ); 309cdf0e10cSrcweir k++ 310cdf0e10cSrcweir ) { 311cdf0e10cSrcweir Dependency *pDependency = 312cdf0e10cSrcweir ((SourceDirectory *) pSubDirectories->GetObject( k ))-> 313cdf0e10cSrcweir ResolvesDependency( pCodedDependency ); 314cdf0e10cSrcweir if ( pDependency ) 315cdf0e10cSrcweir { 316cdf0e10cSrcweir if ( !pActDirectory->pDependencies ) 317cdf0e10cSrcweir pActDirectory->pDependencies = new SByteStringList(); 318cdf0e10cSrcweir pActDirectory->pDependencies->PutString( pDependency ); 319cdf0e10cSrcweir } 320cdf0e10cSrcweir } 321cdf0e10cSrcweir if ( pCodedDependency->GetOperatingSystem()) { 322cdf0e10cSrcweir if ( !pCodedDependencies ) 323cdf0e10cSrcweir pCodedDependencies = new SByteStringList(); 324cdf0e10cSrcweir pCodedDependencies->PutString( pCodedDependency ); 325cdf0e10cSrcweir } 326cdf0e10cSrcweir else 327cdf0e10cSrcweir delete pCodedDependency; 328cdf0e10cSrcweir pActDirectory->pCodedDependencies->Remove(( sal_uIntPtr ) 0 ); 329cdf0e10cSrcweir } 330cdf0e10cSrcweir } 331cdf0e10cSrcweir } 332cdf0e10cSrcweir } 333cdf0e10cSrcweir 334cdf0e10cSrcweir /*****************************************************************************/ 335cdf0e10cSrcweir ByteString SourceDirectory::GetTarget() 336cdf0e10cSrcweir /*****************************************************************************/ 337cdf0e10cSrcweir { 338cdf0e10cSrcweir ByteString sReturn; 339cdf0e10cSrcweir 340cdf0e10cSrcweir if ( !pDependencies ) 341cdf0e10cSrcweir return sReturn; 342cdf0e10cSrcweir 343cdf0e10cSrcweir sal_uIntPtr k = 0; 344cdf0e10cSrcweir while ( k < pDependencies->Count()) { 345cdf0e10cSrcweir if ( *this == *pDependencies->GetObject( k )) 346cdf0e10cSrcweir delete pDependencies->Remove( k ); 347cdf0e10cSrcweir else 348cdf0e10cSrcweir k++; 349cdf0e10cSrcweir } 350cdf0e10cSrcweir 351cdf0e10cSrcweir if ( !pDependencies->Count()) { 352cdf0e10cSrcweir delete pDependencies; 353cdf0e10cSrcweir pDependencies = NULL; 354cdf0e10cSrcweir return sReturn; 355cdf0e10cSrcweir } 356cdf0e10cSrcweir 357cdf0e10cSrcweir sal_Bool bDependsOnPlatform = sal_False; 358cdf0e10cSrcweir for ( sal_uIntPtr i = 0; i < pDependencies->Count(); i++ ) 359cdf0e10cSrcweir if ((( Dependency * ) pDependencies->GetObject( i ))-> 360cdf0e10cSrcweir GetOperatingSystem() != OS_ALL ) 361cdf0e10cSrcweir bDependsOnPlatform = sal_True; 362cdf0e10cSrcweir 363cdf0e10cSrcweir ByteString sTarget( *this ); 364cdf0e10cSrcweir sTarget.SearchAndReplaceAll( "\\", "$/" ); 365cdf0e10cSrcweir if ( !bDependsOnPlatform ) { 366cdf0e10cSrcweir sReturn = sTarget; 367cdf0e10cSrcweir sReturn += " :"; 368cdf0e10cSrcweir for ( sal_uIntPtr i = 0; i < pDependencies->Count(); i++ ) { 369cdf0e10cSrcweir ByteString sDependency( *pDependencies->GetObject( i )); 370cdf0e10cSrcweir sDependency.SearchAndReplaceAll( "\\", "$/" ); 371cdf0e10cSrcweir sReturn += " "; 372cdf0e10cSrcweir sReturn += sDependency; 373cdf0e10cSrcweir } 374cdf0e10cSrcweir } 375cdf0e10cSrcweir else { 376cdf0e10cSrcweir ByteString sUNX( ".IF \"$(GUI)\" == \"UNX\"\n" ); 377cdf0e10cSrcweir sUNX += sTarget; 378cdf0e10cSrcweir sUNX += " :"; 379cdf0e10cSrcweir sal_Bool bUNX = sal_False; 380cdf0e10cSrcweir 381cdf0e10cSrcweir ByteString sWNT( ".IF \"$(GUI)\" == \"WNT\"\n" ); 382cdf0e10cSrcweir sWNT += sTarget; 383cdf0e10cSrcweir sWNT += " :"; 384cdf0e10cSrcweir sal_Bool bWNT = sal_False; 385cdf0e10cSrcweir 386cdf0e10cSrcweir ByteString sOS2( ".IF \"$(GUI)\" == \"OS2\"\n" ); 387cdf0e10cSrcweir sOS2 += sTarget; 388cdf0e10cSrcweir sOS2 += " :"; 389cdf0e10cSrcweir sal_Bool bOS2 = sal_False; 390cdf0e10cSrcweir 391cdf0e10cSrcweir for ( sal_uIntPtr i = 0; i < pDependencies->Count(); i++ ) { 392cdf0e10cSrcweir Dependency *pDependency = 393cdf0e10cSrcweir ( Dependency * ) pDependencies->GetObject( i ); 394cdf0e10cSrcweir ByteString sDependency( *pDependency ); 395cdf0e10cSrcweir sDependency.SearchAndReplaceAll( "\\", "$/" ); 396cdf0e10cSrcweir 397cdf0e10cSrcweir if ( pDependency->GetOperatingSystem() & OS_UNX ) { 398cdf0e10cSrcweir sUNX += " "; 399cdf0e10cSrcweir sUNX += sDependency; 400cdf0e10cSrcweir bUNX = sal_True; 401cdf0e10cSrcweir } 402cdf0e10cSrcweir if ( pDependency->GetOperatingSystem() & OS_WIN32 ) { 403cdf0e10cSrcweir sWNT += " "; 404cdf0e10cSrcweir sWNT += sDependency; 405cdf0e10cSrcweir bWNT = sal_True; 406cdf0e10cSrcweir } 407cdf0e10cSrcweir if ( pDependency->GetOperatingSystem() & OS_OS2 ) { 408cdf0e10cSrcweir sOS2 += " "; 409cdf0e10cSrcweir sOS2 += sDependency; 410cdf0e10cSrcweir bOS2 = sal_True; 411cdf0e10cSrcweir } 412cdf0e10cSrcweir } 413cdf0e10cSrcweir 414cdf0e10cSrcweir if ( bUNX ) { 415cdf0e10cSrcweir sReturn += sUNX; 416cdf0e10cSrcweir sReturn += "\n.ENDIF\n"; 417cdf0e10cSrcweir } 418cdf0e10cSrcweir if ( bWNT ) { 419cdf0e10cSrcweir sReturn += sWNT; 420cdf0e10cSrcweir sReturn += "\n.ENDIF\n"; 421cdf0e10cSrcweir } 422cdf0e10cSrcweir if ( bOS2 ) { 423cdf0e10cSrcweir sReturn += sOS2; 424cdf0e10cSrcweir sReturn += "\n.ENDIF\n"; 425cdf0e10cSrcweir } 426cdf0e10cSrcweir } 427cdf0e10cSrcweir sReturn.EraseTrailingChars( '\n' ); 428cdf0e10cSrcweir return sReturn; 429cdf0e10cSrcweir } 430cdf0e10cSrcweir 431cdf0e10cSrcweir /*****************************************************************************/ 432cdf0e10cSrcweir ByteString SourceDirectory::GetSubDirsTarget() 433cdf0e10cSrcweir /*****************************************************************************/ 434cdf0e10cSrcweir { 435cdf0e10cSrcweir ByteString sReturn; 436cdf0e10cSrcweir 437cdf0e10cSrcweir if ( pSubDirectories ) { 438cdf0e10cSrcweir sal_Bool bDependsOnPlatform = sal_False; 439cdf0e10cSrcweir for ( sal_uIntPtr i = 0; i < pSubDirectories->Count(); i++ ) 440cdf0e10cSrcweir if ((( SourceDirectory * ) pSubDirectories->GetObject( i ))-> 441cdf0e10cSrcweir GetOperatingSystems() != OS_ALL ) 442cdf0e10cSrcweir bDependsOnPlatform = sal_True; 443cdf0e10cSrcweir 444cdf0e10cSrcweir if ( !bDependsOnPlatform ) { 445cdf0e10cSrcweir sReturn = "RC_SUBDIRS = "; 446cdf0e10cSrcweir 447cdf0e10cSrcweir for ( sal_uIntPtr i = 0; i < pSubDirectories->Count(); i++ ) { 448cdf0e10cSrcweir ByteString sSubDirectory( *pSubDirectories->GetObject( i )); 449cdf0e10cSrcweir sSubDirectory.SearchAndReplaceAll( "\\", "$/" ); 450cdf0e10cSrcweir sReturn += " \\\n\t"; 451cdf0e10cSrcweir sReturn += sSubDirectory; 452cdf0e10cSrcweir } 453cdf0e10cSrcweir sReturn += "\n"; 454cdf0e10cSrcweir } 455cdf0e10cSrcweir else { 456cdf0e10cSrcweir ByteString sUNX( ".IF \"$(GUI)\" == \"UNX\"\n" ); 457cdf0e10cSrcweir sUNX += "RC_SUBDIRS = "; 458cdf0e10cSrcweir sal_Bool bUNX = sal_False; 459cdf0e10cSrcweir 460cdf0e10cSrcweir ByteString sWNT( ".IF \"$(GUI)\" == \"WNT\"\n" ); 461cdf0e10cSrcweir sWNT += "RC_SUBDIRS = "; 462cdf0e10cSrcweir sal_Bool bWNT = sal_False; 463cdf0e10cSrcweir 464cdf0e10cSrcweir ByteString sOS2( ".IF \"$(GUI)\" == \"OS2\"\n" ); 465cdf0e10cSrcweir sOS2 += "RC_SUBDIRS = "; 466cdf0e10cSrcweir sal_Bool bOS2 = sal_False; 467cdf0e10cSrcweir 468cdf0e10cSrcweir for ( sal_uIntPtr i = 0; i < pSubDirectories->Count(); i++ ) { 469cdf0e10cSrcweir SourceDirectory *pDirectory = 470cdf0e10cSrcweir ( SourceDirectory * ) pSubDirectories->GetObject( i ); 471cdf0e10cSrcweir ByteString sDirectory( *pDirectory ); 472cdf0e10cSrcweir sDirectory.SearchAndReplaceAll( "\\", "$/" ); 473cdf0e10cSrcweir 474cdf0e10cSrcweir if ( pDirectory->GetOperatingSystems() & OS_UNX ) { 475cdf0e10cSrcweir sUNX += " \\\n\t"; 476cdf0e10cSrcweir sUNX += sDirectory; 477cdf0e10cSrcweir bUNX = sal_True; 478cdf0e10cSrcweir } 479cdf0e10cSrcweir if ( pDirectory->GetOperatingSystems() & OS_WIN32 ) { 480cdf0e10cSrcweir sWNT += " \\\n\t"; 481cdf0e10cSrcweir sWNT += sDirectory; 482cdf0e10cSrcweir bWNT = sal_True; 483cdf0e10cSrcweir } 484cdf0e10cSrcweir if ( pDirectory->GetOperatingSystems() & OS_OS2 ) { 485cdf0e10cSrcweir sOS2 += " \\\n\t"; 486cdf0e10cSrcweir sOS2 += sDirectory; 487cdf0e10cSrcweir bOS2 = sal_True; 488cdf0e10cSrcweir } 489cdf0e10cSrcweir } 490cdf0e10cSrcweir if ( bUNX ) { 491cdf0e10cSrcweir sReturn += sUNX; 492cdf0e10cSrcweir sReturn += "\n.ENDIF\n"; 493cdf0e10cSrcweir } 494cdf0e10cSrcweir if ( bWNT ) { 495cdf0e10cSrcweir sReturn += sWNT; 496cdf0e10cSrcweir sReturn += "\n.ENDIF\n"; 497cdf0e10cSrcweir } 498cdf0e10cSrcweir if ( bOS2 ) { 499cdf0e10cSrcweir sReturn += sOS2; 500cdf0e10cSrcweir sReturn += "\n.ENDIF\n"; 501cdf0e10cSrcweir } 502cdf0e10cSrcweir } 503cdf0e10cSrcweir } 504cdf0e10cSrcweir return sReturn; 505cdf0e10cSrcweir } 506cdf0e10cSrcweir 507cdf0e10cSrcweir /*****************************************************************************/ 508cdf0e10cSrcweir sal_uInt16 SourceDirectory::GetOSType( const ByteString &sDependExt ) 509cdf0e10cSrcweir /*****************************************************************************/ 510cdf0e10cSrcweir { 511cdf0e10cSrcweir sal_uInt16 nOSType = 0; 512cdf0e10cSrcweir if ( sDependExt == "" ) 513cdf0e10cSrcweir nOSType |= OS_ALL; 514cdf0e10cSrcweir else if ( sDependExt == "N" || sDependExt == "W" ) 515cdf0e10cSrcweir nOSType |= OS_WIN32; 516cdf0e10cSrcweir else if ( sDependExt == "U" ) 517cdf0e10cSrcweir nOSType |= OS_UNX; 518cdf0e10cSrcweir else if ( sDependExt == "P" ) 519cdf0e10cSrcweir nOSType |= OS_OS2; 520cdf0e10cSrcweir return nOSType; 521cdf0e10cSrcweir } 522cdf0e10cSrcweir 523cdf0e10cSrcweir /*****************************************************************************/ 524cdf0e10cSrcweir SourceDirectory *SourceDirectory::CreateRootDirectory( 525cdf0e10cSrcweir const ByteString &rRoot, const ByteString &rVersion, sal_Bool bAll ) 526cdf0e10cSrcweir /*****************************************************************************/ 527cdf0e10cSrcweir { 528cdf0e10cSrcweir IniManager aIniManager; 529cdf0e10cSrcweir aIniManager.Update(); 530cdf0e10cSrcweir 531cdf0e10cSrcweir ByteString sDefLst( GetDefStandList()); 532cdf0e10cSrcweir ByteString sStandLst( aIniManager.ToLocal( sDefLst )); 533cdf0e10cSrcweir String s = String( sStandLst, gsl_getSystemTextEncoding()); 534cdf0e10cSrcweir InformationParser aParser; 535cdf0e10cSrcweir // fprintf( stderr, 536cdf0e10cSrcweir // "Reading database %s ...\n", sStandLst.GetBuffer()); 537cdf0e10cSrcweir GenericInformationList *pVerList = aParser.Execute( 538cdf0e10cSrcweir s ); 539cdf0e10cSrcweir 540cdf0e10cSrcweir /* 541cdf0e10cSrcweir ByteString sPath( rVersion ); 542cdf0e10cSrcweir #ifndef UNX 543cdf0e10cSrcweir sPath += ByteString( "/settings/solarlist" ); 544cdf0e10cSrcweir #else 545cdf0e10cSrcweir sPath += ByteString( "/settings/unxsolarlist" ); 546cdf0e10cSrcweir #endif 547cdf0e10cSrcweir ByteString sSolarList( _SOLARLIST ); 548cdf0e10cSrcweir 549cdf0e10cSrcweir GenericInformation *pInfo = pVerList->GetInfo( sPath, sal_True ); 550cdf0e10cSrcweir if ( pInfo ) { 551cdf0e10cSrcweir ByteString aIniRoot( GetIniRoot() ); 552cdf0e10cSrcweir DirEntry aIniEntry( String( aIniRoot, RTL_TEXTENCODING_ASCII_US )); 553cdf0e10cSrcweir aIniEntry += DirEntry( String( pInfo->GetValue(), RTL_TEXTENCODING_ASCII_US )).GetBase( PATH_SEPARATOR ); 554cdf0e10cSrcweir sSolarList = ByteString( aIniEntry.GetFull(), RTL_TEXTENCODING_ASCII_US ); 555cdf0e10cSrcweir } 556cdf0e10cSrcweir 557cdf0e10cSrcweir sSolarList = aIniManager.ToLocal( sSolarList ); 558cdf0e10cSrcweir fprintf( stderr, 559cdf0e10cSrcweir "Reading directory information %s ...\n", sSolarList.GetBuffer()); 560cdf0e10cSrcweir */ 561cdf0e10cSrcweir 562cdf0e10cSrcweir ByteString sVersion( rVersion ); 563cdf0e10cSrcweir Star aStar( pVerList, sVersion, sal_True, rRoot.GetBuffer()); 564cdf0e10cSrcweir // fprintf( stderr, 565cdf0e10cSrcweir // "Creating virtual directory tree ...\n" ); 566cdf0e10cSrcweir 567cdf0e10cSrcweir 568cdf0e10cSrcweir SourceDirectory *pSourceRoot = new SourceDirectory( rRoot, OS_ALL ); 569cdf0e10cSrcweir 570cdf0e10cSrcweir for ( sal_uIntPtr i = 0; i < aStar.Count(); i++ ) { 571cdf0e10cSrcweir Prj *pPrj = aStar.GetObject( i ); 572cdf0e10cSrcweir 573cdf0e10cSrcweir sal_Bool bBuildable = sal_True; 574cdf0e10cSrcweir sal_uIntPtr nIndex = 0; 575cdf0e10cSrcweir 576cdf0e10cSrcweir while ( bBuildable && ByteString( NoBuildProject[ nIndex ]) != "EndOf_NoBuildProject" ) { 577cdf0e10cSrcweir bBuildable = ( ByteString( NoBuildProject[ nIndex ]) != pPrj->GetProjectName()); 578cdf0e10cSrcweir nIndex ++; 579cdf0e10cSrcweir } 580cdf0e10cSrcweir 581cdf0e10cSrcweir if ( bBuildable ) { 582cdf0e10cSrcweir SourceDirectory *pProject = pSourceRoot->Insert( pPrj->GetProjectName(), OS_ALL ); 583cdf0e10cSrcweir 584cdf0e10cSrcweir SByteStringList *pPrjDependencies = pPrj->GetDependencies( sal_False ); 585cdf0e10cSrcweir if ( pPrjDependencies ) 586cdf0e10cSrcweir for ( sal_uIntPtr x = 0; x < pPrjDependencies->Count(); x++ ) 587cdf0e10cSrcweir pProject->AddCodedDependency( *pPrjDependencies->GetObject( x ), OS_ALL ); 588cdf0e10cSrcweir 589cdf0e10cSrcweir pProject->AddCodedIdentifier( pPrj->GetProjectName(), OS_ALL ); 590cdf0e10cSrcweir 591cdf0e10cSrcweir for ( sal_uIntPtr j = 0; j < pPrj->Count(); j++ ) { 592cdf0e10cSrcweir CommandData *pData = pPrj->GetObject( j ); 593cdf0e10cSrcweir if ( bAll || ( pData->GetCommandType() == COMMAND_NMAKE )) { 594cdf0e10cSrcweir ByteString sDirPath( rRoot ); 595cdf0e10cSrcweir sDirPath += ByteString( PATH_SEPARATOR ); 596cdf0e10cSrcweir sDirPath += pData->GetPath(); 597cdf0e10cSrcweir SourceDirectory *pDirectory = 598cdf0e10cSrcweir pSourceRoot->InsertFull( sDirPath, pData->GetOSType()); 599cdf0e10cSrcweir SByteStringList *pDependencies = pData->GetDependencies(); 600cdf0e10cSrcweir if ( pDependencies ) { 601cdf0e10cSrcweir for ( sal_uIntPtr k = 0; k < pDependencies->Count(); k++ ) { 602cdf0e10cSrcweir ByteString sDependency(*pDependencies->GetObject( k )); 603cdf0e10cSrcweir ByteString sDependExt(sDependency.GetToken( 1, '.' )); 604cdf0e10cSrcweir sDependExt.ToUpperAscii(); 605cdf0e10cSrcweir pDirectory->AddCodedDependency( 606cdf0e10cSrcweir sDependency.GetToken( 0, '.' ), GetOSType( sDependExt )); 607cdf0e10cSrcweir } 608cdf0e10cSrcweir } 609cdf0e10cSrcweir ByteString sIdentifier = pData->GetLogFile(); 610cdf0e10cSrcweir ByteString sIdExt = sIdentifier.GetToken( 1, '.' ); 611cdf0e10cSrcweir sIdExt.ToUpperAscii(); 612cdf0e10cSrcweir pDirectory->AddCodedIdentifier( sIdentifier.GetToken( 0, '.' ), GetOSType( sIdExt )); 613cdf0e10cSrcweir } 614cdf0e10cSrcweir } 615cdf0e10cSrcweir } 616cdf0e10cSrcweir } 617cdf0e10cSrcweir delete pVerList; 618cdf0e10cSrcweir return pSourceRoot; 619cdf0e10cSrcweir } 620cdf0e10cSrcweir 621cdf0e10cSrcweir /*****************************************************************************/ 622cdf0e10cSrcweir sal_Bool SourceDirectory::RemoveDirectoryTreeAndAllDependencies() 623cdf0e10cSrcweir /*****************************************************************************/ 624cdf0e10cSrcweir { 625cdf0e10cSrcweir if ( !pParent ) 626cdf0e10cSrcweir return sal_False; 627cdf0e10cSrcweir 628cdf0e10cSrcweir SourceDirectoryList *pParentContent = pParent->pSubDirectories; 629cdf0e10cSrcweir sal_uIntPtr i = 0; 630cdf0e10cSrcweir while ( i < pParentContent->Count()) { 631cdf0e10cSrcweir SourceDirectory *pCandidate = 632cdf0e10cSrcweir ( SourceDirectory * )pParentContent->GetObject( i ); 633cdf0e10cSrcweir if ( pCandidate == this ) { 634cdf0e10cSrcweir pParentContent->Remove( i ); 635cdf0e10cSrcweir } 636cdf0e10cSrcweir else { 637cdf0e10cSrcweir if ( pCandidate->pDependencies ) { 638cdf0e10cSrcweir sal_uIntPtr nPos = pCandidate->pDependencies->IsString( this ); 639cdf0e10cSrcweir if ( nPos != NOT_THERE ) 640cdf0e10cSrcweir delete pCandidate->pDependencies->Remove( nPos ); 641cdf0e10cSrcweir } 642cdf0e10cSrcweir i++; 643cdf0e10cSrcweir } 644cdf0e10cSrcweir } 645cdf0e10cSrcweir delete this; 646cdf0e10cSrcweir return sal_True; 647cdf0e10cSrcweir } 648cdf0e10cSrcweir 649cdf0e10cSrcweir /*****************************************************************************/ 650cdf0e10cSrcweir sal_Bool SourceDirectory::CreateRecursiveMakefile( sal_Bool bAllChilds ) 651cdf0e10cSrcweir /*****************************************************************************/ 652cdf0e10cSrcweir { 653cdf0e10cSrcweir if ( !pSubDirectories ) 654cdf0e10cSrcweir return sal_True; 655cdf0e10cSrcweir 656cdf0e10cSrcweir fprintf( stdout, "%s", GetFullPath().GetBuffer()); 657cdf0e10cSrcweir 658cdf0e10cSrcweir String aTmpStr( GetFullPath(), gsl_getSystemTextEncoding()); 659cdf0e10cSrcweir DirEntry aEntry( aTmpStr ); 660cdf0e10cSrcweir if ( !aEntry.Exists()) { 661cdf0e10cSrcweir fprintf( stdout, " ... no directory!n" ); 662cdf0e10cSrcweir return sal_False; 663cdf0e10cSrcweir } 664cdf0e10cSrcweir 665cdf0e10cSrcweir sal_uIntPtr j = 0; 666cdf0e10cSrcweir while( j < pSubDirectories->Count()) { 667cdf0e10cSrcweir String sSubDirectory( 668cdf0e10cSrcweir (( SourceDirectory * ) pSubDirectories->GetObject( j ))-> 669cdf0e10cSrcweir GetFullPath(), 670cdf0e10cSrcweir gsl_getSystemTextEncoding() 671cdf0e10cSrcweir ); 672cdf0e10cSrcweir DirEntry aSubDirectory( sSubDirectory ); 673cdf0e10cSrcweir if ( !aSubDirectory.Exists()) 674cdf0e10cSrcweir (( SourceDirectory * ) pSubDirectories->GetObject( j ))-> 675cdf0e10cSrcweir RemoveDirectoryTreeAndAllDependencies(); 676cdf0e10cSrcweir else 677cdf0e10cSrcweir j++; 678cdf0e10cSrcweir } 679cdf0e10cSrcweir 680cdf0e10cSrcweir DirEntry aRCFile( String( "makefile.rc", gsl_getSystemTextEncoding())); 681cdf0e10cSrcweir DirEntry aRCEntry( aEntry ); 682cdf0e10cSrcweir aRCEntry += aRCFile; 683cdf0e10cSrcweir 684cdf0e10cSrcweir DirEntry aMKFile( String( "makefile.mk", gsl_getSystemTextEncoding())); 685cdf0e10cSrcweir DirEntry aMKEntry( aEntry ); 686cdf0e10cSrcweir aMKEntry += aMKFile; 687cdf0e10cSrcweir 688cdf0e10cSrcweir sal_Bool bMakefileMk = sal_False; 689cdf0e10cSrcweir if ( aMKEntry.Exists()) { 690cdf0e10cSrcweir if ( nDepth == 1 && *this == ByteString( "api" )) 691cdf0e10cSrcweir fprintf( stdout, " ... makefile.mk exists, ignoring (hack: prj == api)!" ); 692cdf0e10cSrcweir else { 693cdf0e10cSrcweir fprintf( stdout, " ... makefile.mk exists, including!" ); 694cdf0e10cSrcweir bMakefileMk = sal_True; 695cdf0e10cSrcweir } 696cdf0e10cSrcweir } 697cdf0e10cSrcweir 698cdf0e10cSrcweir SvFileStream aMakefile( aRCEntry.GetFull(), STREAM_STD_WRITE | STREAM_TRUNC ); 699cdf0e10cSrcweir if ( !aMakefile.IsOpen()) { 700cdf0e10cSrcweir fprintf( stdout, " ... failed!\n" ); 701cdf0e10cSrcweir return sal_False; 702cdf0e10cSrcweir } 703cdf0e10cSrcweir 704cdf0e10cSrcweir ByteString sHeader( 705*76f5c358SAndrew Rist "#**************************************************************\n" 706cdf0e10cSrcweir "# \n" 707*76f5c358SAndrew Rist "# Licensed to the Apache Software Foundation (ASF) under one\n" 708*76f5c358SAndrew Rist "# or more contributor license agreements. See the NOTICE file\n" 709*76f5c358SAndrew Rist "# distributed with this work for additional information\n" 710*76f5c358SAndrew Rist "# regarding copyright ownership. The ASF licenses this file\n" 711*76f5c358SAndrew Rist "# to you under the Apache License, Version 2.0 (the\n" 712*76f5c358SAndrew Rist "# "License"); you may not use this file except in compliance\n" 713*76f5c358SAndrew Rist "# with the License. You may obtain a copy of the License at\n" 714cdf0e10cSrcweir "# \n" 715*76f5c358SAndrew Rist "# http://www.apache.org/licenses/LICENSE-2.0\n" 716cdf0e10cSrcweir "# \n" 717*76f5c358SAndrew Rist "# Unless required by applicable law or agreed to in writing,\n" 718*76f5c358SAndrew Rist "# software distributed under the License is distributed on an\n" 719*76f5c358SAndrew Rist "# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n" 720*76f5c358SAndrew Rist "# KIND, either express or implied. See the License for the\n" 721*76f5c358SAndrew Rist "# specific language governing permissions and limitations\n" 722*76f5c358SAndrew Rist "# under the License.\n" 723cdf0e10cSrcweir "# \n" 724*76f5c358SAndrew Rist "#**************************************************************\n" 725cdf0e10cSrcweir "\n" 726cdf0e10cSrcweir ); 727cdf0e10cSrcweir if ( !bMakefileMk ) { 728cdf0e10cSrcweir if ( nDepth == 0 ) { 729cdf0e10cSrcweir sHeader += ByteString( 730cdf0e10cSrcweir "\n" 731cdf0e10cSrcweir "# \n" 732cdf0e10cSrcweir "# mark this makefile as a recursive one\n" 733cdf0e10cSrcweir "# \n" 734cdf0e10cSrcweir "\n" 735cdf0e10cSrcweir "MAKEFILERC=yes\n" 736cdf0e10cSrcweir "\n" 737cdf0e10cSrcweir "# \n" 738cdf0e10cSrcweir "# implementation of cvs checkout\n" 739cdf0e10cSrcweir "# \n" 740cdf0e10cSrcweir "\n" 741cdf0e10cSrcweir ".IF \"$(checkout)\"==\"\"\n" 742cdf0e10cSrcweir "all_target: ALLTAR\n" 743cdf0e10cSrcweir ".ELSE\t# \"$(checkout)\"==\"\"\n" 744cdf0e10cSrcweir ".IF \"$(checkout)\"==\"true\"\n" 745cdf0e10cSrcweir "% : $(NULL)\n" 746cdf0e10cSrcweir "\t_cvs co $@\n" 747cdf0e10cSrcweir ".ELSE\t# \"$(checkout)\"==\"true\"\n" 748cdf0e10cSrcweir "% : $(NULL)\n" 749cdf0e10cSrcweir "\t_cvs co -r$(checkout) $@\n" 750cdf0e10cSrcweir ".ENDIF\t# \"$(checkout)\"==\"true\"\n" 751cdf0e10cSrcweir "all_subdirs : $(RC_SUBDIRS)\n" 752cdf0e10cSrcweir ".ENDIF\t# \"$(checkout)\"==\"\"\n" 753cdf0e10cSrcweir ); 754cdf0e10cSrcweir } 755cdf0e10cSrcweir else { 756cdf0e10cSrcweir sHeader += ByteString( 757cdf0e10cSrcweir "\n" 758cdf0e10cSrcweir "# \n" 759cdf0e10cSrcweir "# mark this makefile as a recursive one\n" 760cdf0e10cSrcweir "# \n" 761cdf0e10cSrcweir "\n" 762cdf0e10cSrcweir "MAKEFILERC=yes\n" 763cdf0e10cSrcweir ); 764cdf0e10cSrcweir if ( nDepth == 1 ) 765cdf0e10cSrcweir sHeader += ByteString( 766cdf0e10cSrcweir ".IF \"$(build_deliver)\"==\"true\"\n" 767cdf0e10cSrcweir "all_target:\t\t\\\n" 768cdf0e10cSrcweir "\tTG_DELIVER\t\\\n" 769cdf0e10cSrcweir "\tALLTAR\n" 770cdf0e10cSrcweir ".ELSE # \"$(build_deliver)\"==\"true\"\n" 771cdf0e10cSrcweir "all_target: ALLTAR\n" 772cdf0e10cSrcweir ".ENDIF # \"$(build_deliver)\"==\"true\"\n" 773cdf0e10cSrcweir ); 774cdf0e10cSrcweir else 775cdf0e10cSrcweir sHeader += ByteString( 776cdf0e10cSrcweir "all_target: ALLTAR\n" 777cdf0e10cSrcweir ); 778cdf0e10cSrcweir } 779cdf0e10cSrcweir } 780cdf0e10cSrcweir else { 781cdf0e10cSrcweir if ( nDepth == 1 ) 782cdf0e10cSrcweir sHeader += ByteString( 783cdf0e10cSrcweir ".IF \"$(build_deliver)\"==\"true\"\n" 784cdf0e10cSrcweir "all_target:\t\t\\\n" 785cdf0e10cSrcweir "\tTG_DELIVER\t\\\n" 786cdf0e10cSrcweir "\tALLTAR\n" 787cdf0e10cSrcweir ".ELSE # \"$(build_deliver)\"==\"true\"\n" 788cdf0e10cSrcweir "all_target: ALLTAR\n" 789cdf0e10cSrcweir ".ENDIF # \"$(build_deliver)\"==\"true\"\n" 790cdf0e10cSrcweir ); 791cdf0e10cSrcweir } 792cdf0e10cSrcweir sHeader += ByteString( 793cdf0e10cSrcweir "\n" 794cdf0e10cSrcweir "# \n" 795cdf0e10cSrcweir "# macro RC_SUBDIRS handles iteration over\n" 796cdf0e10cSrcweir "# all mandatory sub directories\n" 797cdf0e10cSrcweir "# \n" 798cdf0e10cSrcweir ); 799cdf0e10cSrcweir 800cdf0e10cSrcweir aMakefile.WriteLine( sHeader ); 801cdf0e10cSrcweir aMakefile.WriteLine( GetSubDirsTarget()); 802cdf0e10cSrcweir 803cdf0e10cSrcweir if ( nDepth == 0 ) { 804cdf0e10cSrcweir ByteString sBootstrapTarget( 805cdf0e10cSrcweir "# \n" 806cdf0e10cSrcweir "# bootstrap target\n" 807cdf0e10cSrcweir "# \n\n" 808cdf0e10cSrcweir "bootstrap .PHONY :\n" 809cdf0e10cSrcweir "\t@config_office/bootstrap\n\n" 810cdf0e10cSrcweir ); 811cdf0e10cSrcweir aMakefile.WriteLine( sBootstrapTarget ); 812cdf0e10cSrcweir ByteString sConfigureTarget( 813cdf0e10cSrcweir "# \n" 814cdf0e10cSrcweir "# configure target\n" 815cdf0e10cSrcweir "# \n\n" 816cdf0e10cSrcweir "configure .PHONY SETDIR=config_office :\n" 817cdf0e10cSrcweir "\t@configure\n" 818cdf0e10cSrcweir ); 819cdf0e10cSrcweir aMakefile.WriteLine( sConfigureTarget ); 820cdf0e10cSrcweir } 821cdf0e10cSrcweir else if ( nDepth == 1 ) { 822cdf0e10cSrcweir ByteString sDeliverTarget( 823cdf0e10cSrcweir "# \n" 824cdf0e10cSrcweir "# deliver target to handle\n" 825cdf0e10cSrcweir "# project dependencies\n" 826cdf0e10cSrcweir "# \n\n" 827cdf0e10cSrcweir "TG_DELIVER : $(RC_SUBDIRS)\n" 828cdf0e10cSrcweir "\t$(DELIVER)\n" 829cdf0e10cSrcweir ); 830cdf0e10cSrcweir aMakefile.WriteLine( sDeliverTarget ); 831cdf0e10cSrcweir } 832cdf0e10cSrcweir 833cdf0e10cSrcweir if ( bMakefileMk ) { 834cdf0e10cSrcweir ByteString sInclude( 835cdf0e10cSrcweir "# \n" 836cdf0e10cSrcweir "# local makefile\n" 837cdf0e10cSrcweir "# \n" 838cdf0e10cSrcweir "\n" 839cdf0e10cSrcweir ".INCLUDE : makefile.mk\n" 840cdf0e10cSrcweir ); 841cdf0e10cSrcweir 842cdf0e10cSrcweir if ( nDepth != 1 ) 843cdf0e10cSrcweir sInclude += ByteString( 844cdf0e10cSrcweir "\n" 845cdf0e10cSrcweir "all_rc_target: ALLTAR\n" 846cdf0e10cSrcweir ); 847cdf0e10cSrcweir 848cdf0e10cSrcweir aMakefile.WriteLine( sInclude ); 849cdf0e10cSrcweir } 850cdf0e10cSrcweir 851cdf0e10cSrcweir ByteString sComment( 852cdf0e10cSrcweir "# \n" 853cdf0e10cSrcweir "# single directory targets for\n" 854cdf0e10cSrcweir "# dependency handling between directories\n" 855cdf0e10cSrcweir "# \n" 856cdf0e10cSrcweir ); 857cdf0e10cSrcweir aMakefile.WriteLine( sComment ); 858cdf0e10cSrcweir 859cdf0e10cSrcweir for ( sal_uIntPtr i = 0; i < pSubDirectories->Count(); i++ ) { 860cdf0e10cSrcweir ByteString sTarget( 861cdf0e10cSrcweir (( SourceDirectory * )pSubDirectories->GetObject( i ))-> 862cdf0e10cSrcweir GetTarget() 863cdf0e10cSrcweir ); 864cdf0e10cSrcweir if ( sTarget.Len()) 865cdf0e10cSrcweir aMakefile.WriteLine( sTarget ); 866cdf0e10cSrcweir } 867cdf0e10cSrcweir 868cdf0e10cSrcweir ByteString sFooter( 869cdf0e10cSrcweir "\n" 870cdf0e10cSrcweir ); 871cdf0e10cSrcweir if ( !bMakefileMk ) { 872cdf0e10cSrcweir sFooter += ByteString( 873cdf0e10cSrcweir "# \n" 874cdf0e10cSrcweir "# central target makefile\n" 875cdf0e10cSrcweir "# \n" 876cdf0e10cSrcweir "\n" 877cdf0e10cSrcweir ); 878cdf0e10cSrcweir if ( nDepth != 0 ) { 879cdf0e10cSrcweir sFooter += ByteString( 880cdf0e10cSrcweir ".INCLUDE : target.mk\n" 881cdf0e10cSrcweir ); 882cdf0e10cSrcweir } 883cdf0e10cSrcweir else { 884cdf0e10cSrcweir sFooter += ByteString( 885cdf0e10cSrcweir ".IF \"$(checkout)\"==\"\"\n" 886cdf0e10cSrcweir ".INCLUDE : target.mk\n" 887cdf0e10cSrcweir ".ENDIF\t#\"$(checkout)\"==\"\"\n" 888cdf0e10cSrcweir ); 889cdf0e10cSrcweir } 890cdf0e10cSrcweir } 891cdf0e10cSrcweir sFooter += ByteString( 892cdf0e10cSrcweir "\n" 893cdf0e10cSrcweir "#*************************************************************************\n" 894cdf0e10cSrcweir ); 895cdf0e10cSrcweir aMakefile.WriteLine( sFooter ); 896cdf0e10cSrcweir 897cdf0e10cSrcweir aMakefile.Close(); 898cdf0e10cSrcweir 899cdf0e10cSrcweir fprintf( stdout, "\n" ); 900cdf0e10cSrcweir 901cdf0e10cSrcweir sal_Bool bSuccess = sal_True; 902cdf0e10cSrcweir if ( bAllChilds ) 903cdf0e10cSrcweir for ( sal_uIntPtr k = 0; k < pSubDirectories->Count(); k++ ) 904cdf0e10cSrcweir if ( !(( SourceDirectory * ) pSubDirectories->GetObject( k ))-> 905cdf0e10cSrcweir CreateRecursiveMakefile( sal_True )) 906cdf0e10cSrcweir bSuccess = sal_False; 907cdf0e10cSrcweir 908cdf0e10cSrcweir return bSuccess; 909cdf0e10cSrcweir } 910cdf0e10cSrcweir 911cdf0e10cSrcweir // 912cdf0e10cSrcweir // class SourceDirectoryList 913cdf0e10cSrcweir // 914cdf0e10cSrcweir 915cdf0e10cSrcweir /*****************************************************************************/ 916cdf0e10cSrcweir SourceDirectoryList::~SourceDirectoryList() 917cdf0e10cSrcweir /*****************************************************************************/ 918cdf0e10cSrcweir { 919cdf0e10cSrcweir for ( sal_uIntPtr i = 0; i < Count(); i++ ) 920cdf0e10cSrcweir delete GetObject( i ); 921cdf0e10cSrcweir } 922cdf0e10cSrcweir 923cdf0e10cSrcweir /*****************************************************************************/ 924cdf0e10cSrcweir SourceDirectory *SourceDirectoryList::Search( 925cdf0e10cSrcweir const ByteString &rDirectoryName ) 926cdf0e10cSrcweir /*****************************************************************************/ 927cdf0e10cSrcweir { 928cdf0e10cSrcweir sal_uIntPtr nPos = IsString( ( ByteString * ) (&rDirectoryName) ); 929cdf0e10cSrcweir if ( nPos != LIST_ENTRY_NOTFOUND ) 930cdf0e10cSrcweir return ( SourceDirectory * ) GetObject( nPos ); 931cdf0e10cSrcweir 932cdf0e10cSrcweir return NULL; 933cdf0e10cSrcweir } 934cdf0e10cSrcweir 935cdf0e10cSrcweir 936