1*cdf0e10cSrcweir /************************************************************************* 2*cdf0e10cSrcweir * 3*cdf0e10cSrcweir * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4*cdf0e10cSrcweir * 5*cdf0e10cSrcweir * Copyright 2000, 2010 Oracle and/or its affiliates. 6*cdf0e10cSrcweir * 7*cdf0e10cSrcweir * OpenOffice.org - a multi-platform office productivity suite 8*cdf0e10cSrcweir * 9*cdf0e10cSrcweir * This file is part of OpenOffice.org. 10*cdf0e10cSrcweir * 11*cdf0e10cSrcweir * OpenOffice.org is free software: you can redistribute it and/or modify 12*cdf0e10cSrcweir * it under the terms of the GNU Lesser General Public License version 3 13*cdf0e10cSrcweir * only, as published by the Free Software Foundation. 14*cdf0e10cSrcweir * 15*cdf0e10cSrcweir * OpenOffice.org is distributed in the hope that it will be useful, 16*cdf0e10cSrcweir * but WITHOUT ANY WARRANTY; without even the implied warranty of 17*cdf0e10cSrcweir * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 18*cdf0e10cSrcweir * GNU Lesser General Public License version 3 for more details 19*cdf0e10cSrcweir * (a copy is included in the LICENSE file that accompanied this code). 20*cdf0e10cSrcweir * 21*cdf0e10cSrcweir * You should have received a copy of the GNU Lesser General Public License 22*cdf0e10cSrcweir * version 3 along with OpenOffice.org. If not, see 23*cdf0e10cSrcweir * <http://www.openoffice.org/license.html> 24*cdf0e10cSrcweir * for a copy of the LGPLv3 License. 25*cdf0e10cSrcweir * 26*cdf0e10cSrcweir ************************************************************************/ 27*cdf0e10cSrcweir 28*cdf0e10cSrcweir // MARKER(update_precomp.py): autogen include statement, do not remove 29*cdf0e10cSrcweir #include "precompiled_tools.hxx" 30*cdf0e10cSrcweir #ifdef UNX 31*cdf0e10cSrcweir #include <unistd.h> 32*cdf0e10cSrcweir #endif 33*cdf0e10cSrcweir 34*cdf0e10cSrcweir #include <sys/stat.h> 35*cdf0e10cSrcweir #include <stdio.h> 36*cdf0e10cSrcweir #include <string.h> 37*cdf0e10cSrcweir 38*cdf0e10cSrcweir #include "bootstrp/prj.hxx" 39*cdf0e10cSrcweir #include "sal/main.h" 40*cdf0e10cSrcweir 41*cdf0e10cSrcweir #include <tools/string.hxx> 42*cdf0e10cSrcweir #include <tools/list.hxx> 43*cdf0e10cSrcweir #include <tools/fsys.hxx> 44*cdf0e10cSrcweir #include <tools/stream.hxx> 45*cdf0e10cSrcweir 46*cdf0e10cSrcweir #include "cppdep.hxx" 47*cdf0e10cSrcweir 48*cdf0e10cSrcweir #if defined WNT 49*cdf0e10cSrcweir #if !defined HAVE_GETOPT 50*cdf0e10cSrcweir #define __STDC__ 1 51*cdf0e10cSrcweir #define __GNU_LIBRARY__ 52*cdf0e10cSrcweir #include <external/glibc/getopt.h> 53*cdf0e10cSrcweir #else 54*cdf0e10cSrcweir #include <getopt.h> 55*cdf0e10cSrcweir #endif 56*cdf0e10cSrcweir #endif 57*cdf0e10cSrcweir 58*cdf0e10cSrcweir class RscHrcDep : public CppDep 59*cdf0e10cSrcweir { 60*cdf0e10cSrcweir public: 61*cdf0e10cSrcweir RscHrcDep(); 62*cdf0e10cSrcweir virtual ~RscHrcDep(); 63*cdf0e10cSrcweir 64*cdf0e10cSrcweir virtual void Execute(); 65*cdf0e10cSrcweir }; 66*cdf0e10cSrcweir 67*cdf0e10cSrcweir RscHrcDep::RscHrcDep() : 68*cdf0e10cSrcweir CppDep() 69*cdf0e10cSrcweir { 70*cdf0e10cSrcweir } 71*cdf0e10cSrcweir 72*cdf0e10cSrcweir RscHrcDep::~RscHrcDep() 73*cdf0e10cSrcweir { 74*cdf0e10cSrcweir } 75*cdf0e10cSrcweir 76*cdf0e10cSrcweir void RscHrcDep::Execute() 77*cdf0e10cSrcweir { 78*cdf0e10cSrcweir CppDep::Execute(); 79*cdf0e10cSrcweir } 80*cdf0e10cSrcweir 81*cdf0e10cSrcweir //static String aDelim; 82*cdf0e10cSrcweir 83*cdf0e10cSrcweir int main( int argc, char** argv ) 84*cdf0e10cSrcweir { 85*cdf0e10cSrcweir int c; 86*cdf0e10cSrcweir char aBuf[255]; 87*cdf0e10cSrcweir char pFileNamePrefix[255]; 88*cdf0e10cSrcweir char pOutputFileName[255]; 89*cdf0e10cSrcweir char pSrsFileName[255]; 90*cdf0e10cSrcweir String aSrsBaseName; 91*cdf0e10cSrcweir sal_Bool bSource = sal_False; 92*cdf0e10cSrcweir ByteString aRespArg; 93*cdf0e10cSrcweir // who needs anything but '/' ? 94*cdf0e10cSrcweir // String aDelim = String(DirEntry::GetAccessDelimiter()); 95*cdf0e10cSrcweir String aDelim = '/'; 96*cdf0e10cSrcweir 97*cdf0e10cSrcweir RscHrcDep *pDep = new RscHrcDep; 98*cdf0e10cSrcweir 99*cdf0e10cSrcweir pOutputFileName[0] = 0; 100*cdf0e10cSrcweir pSrsFileName[0] = 0; 101*cdf0e10cSrcweir 102*cdf0e10cSrcweir for ( int i=1; i<argc; i++) 103*cdf0e10cSrcweir { 104*cdf0e10cSrcweir strcpy( aBuf, (const char *)argv[i] ); 105*cdf0e10cSrcweir if ( aBuf[0] == '-' && aBuf[1] == 'p' && aBuf[2] == '=' ) 106*cdf0e10cSrcweir { 107*cdf0e10cSrcweir strcpy(pFileNamePrefix, &aBuf[3]); 108*cdf0e10cSrcweir //break; 109*cdf0e10cSrcweir } 110*cdf0e10cSrcweir if ( aBuf[0] == '-' && aBuf[1] == 'f' && aBuf[2] == 'o' && aBuf[3] == '=' ) 111*cdf0e10cSrcweir { 112*cdf0e10cSrcweir strcpy(pOutputFileName, &aBuf[4]); 113*cdf0e10cSrcweir //break; 114*cdf0e10cSrcweir } 115*cdf0e10cSrcweir if ( aBuf[0] == '-' && aBuf[1] == 'f' && aBuf[2] == 'p' && aBuf[3] == '=' ) 116*cdf0e10cSrcweir { 117*cdf0e10cSrcweir strcpy(pSrsFileName, &aBuf[4]); 118*cdf0e10cSrcweir String aName( pSrsFileName, gsl_getSystemTextEncoding()); 119*cdf0e10cSrcweir DirEntry aDest( aName ); 120*cdf0e10cSrcweir aSrsBaseName = aDest.GetBase(); 121*cdf0e10cSrcweir //break; 122*cdf0e10cSrcweir } 123*cdf0e10cSrcweir if (aBuf[0] == '-' && aBuf[1] == 'i' ) 124*cdf0e10cSrcweir { 125*cdf0e10cSrcweir //printf("Include : %s\n", &aBuf[2] ); 126*cdf0e10cSrcweir pDep->AddSearchPath( &aBuf[2] ); 127*cdf0e10cSrcweir } 128*cdf0e10cSrcweir if (aBuf[0] == '-' && aBuf[1] == 'I' ) 129*cdf0e10cSrcweir { 130*cdf0e10cSrcweir //printf("Include : %s\n", &aBuf[2] ); 131*cdf0e10cSrcweir pDep->AddSearchPath( &aBuf[2] ); 132*cdf0e10cSrcweir } 133*cdf0e10cSrcweir if (aBuf[0] == '@' ) 134*cdf0e10cSrcweir { 135*cdf0e10cSrcweir ByteString aToken; 136*cdf0e10cSrcweir String aRespName( &aBuf[1], gsl_getSystemTextEncoding()); 137*cdf0e10cSrcweir SimpleConfig aConfig( aRespName ); 138*cdf0e10cSrcweir while ( (aToken = aConfig.GetNext()) != "") 139*cdf0e10cSrcweir { 140*cdf0e10cSrcweir char aBuf2[255]; 141*cdf0e10cSrcweir (void) strcpy( aBuf2, aToken.GetBuffer()); 142*cdf0e10cSrcweir if ( aBuf[0] == '-' && aBuf[1] == 'p' && aBuf[2] == '=' ) 143*cdf0e10cSrcweir { 144*cdf0e10cSrcweir strcpy(pFileNamePrefix, &aBuf[3]); 145*cdf0e10cSrcweir //break; 146*cdf0e10cSrcweir } 147*cdf0e10cSrcweir if ( aBuf2[0] == '-' && aBuf2[1] == 'f' && aBuf2[2] == 'o' ) 148*cdf0e10cSrcweir { 149*cdf0e10cSrcweir strcpy(pOutputFileName, &aBuf2[3]); 150*cdf0e10cSrcweir //break; 151*cdf0e10cSrcweir } 152*cdf0e10cSrcweir if ( aBuf2[0] == '-' && aBuf2[1] == 'f' && aBuf2[2] == 'p' ) 153*cdf0e10cSrcweir { 154*cdf0e10cSrcweir strcpy(pSrsFileName, &aBuf2[3]); 155*cdf0e10cSrcweir String aName( pSrsFileName, gsl_getSystemTextEncoding()); 156*cdf0e10cSrcweir DirEntry aDest( aName ); 157*cdf0e10cSrcweir aSrsBaseName = aDest.GetBase(); 158*cdf0e10cSrcweir //break; 159*cdf0e10cSrcweir } 160*cdf0e10cSrcweir if (aBuf2[0] == '-' && aBuf2[1] == 'i' ) 161*cdf0e10cSrcweir { 162*cdf0e10cSrcweir //printf("Include : %s\n", &aBuf[2] ); 163*cdf0e10cSrcweir pDep->AddSearchPath( &aBuf2[2] ); 164*cdf0e10cSrcweir } 165*cdf0e10cSrcweir if (aBuf2[0] == '-' && aBuf2[1] == 'I' ) 166*cdf0e10cSrcweir { 167*cdf0e10cSrcweir //printf("Include : %s\n", &aBuf[2] ); 168*cdf0e10cSrcweir pDep->AddSearchPath( &aBuf2[2] ); 169*cdf0e10cSrcweir } 170*cdf0e10cSrcweir if (( aBuf2[0] != '-' ) && ( aBuf2[0] != '@' )) 171*cdf0e10cSrcweir { 172*cdf0e10cSrcweir pDep->AddSource( &aBuf2[0] ); 173*cdf0e10cSrcweir aRespArg += " "; 174*cdf0e10cSrcweir aRespArg += &aBuf2[0]; 175*cdf0e10cSrcweir bSource = sal_True; 176*cdf0e10cSrcweir } 177*cdf0e10cSrcweir } 178*cdf0e10cSrcweir } 179*cdf0e10cSrcweir } 180*cdf0e10cSrcweir 181*cdf0e10cSrcweir while( 1 ) 182*cdf0e10cSrcweir { 183*cdf0e10cSrcweir c = getopt( argc, argv, 184*cdf0e10cSrcweir "_abcdefghi:jklmnopqrstuvwxyzABCDEFGHI:JKLMNOPQRSTUVWXYZ1234567890/-+=.\\()\""); 185*cdf0e10cSrcweir if ( c == -1 ) 186*cdf0e10cSrcweir break; 187*cdf0e10cSrcweir 188*cdf0e10cSrcweir switch( c ) 189*cdf0e10cSrcweir { 190*cdf0e10cSrcweir case 0: 191*cdf0e10cSrcweir break; 192*cdf0e10cSrcweir case 'a' : 193*cdf0e10cSrcweir #ifdef DEBUG_VERBOSE 194*cdf0e10cSrcweir printf("option a\n"); 195*cdf0e10cSrcweir #endif 196*cdf0e10cSrcweir break; 197*cdf0e10cSrcweir 198*cdf0e10cSrcweir case 'l' : 199*cdf0e10cSrcweir #ifdef DEBUG_VERBOSE 200*cdf0e10cSrcweir printf("option l with Value %s\n", optarg ); 201*cdf0e10cSrcweir #endif 202*cdf0e10cSrcweir pDep->AddSource( optarg ); 203*cdf0e10cSrcweir break; 204*cdf0e10cSrcweir 205*cdf0e10cSrcweir case 'h' : 206*cdf0e10cSrcweir case 'H' : 207*cdf0e10cSrcweir case '?' : 208*cdf0e10cSrcweir printf("RscDep 1.0\n"); 209*cdf0e10cSrcweir break; 210*cdf0e10cSrcweir 211*cdf0e10cSrcweir default: 212*cdf0e10cSrcweir #ifdef DEBUG_VERBOSE 213*cdf0e10cSrcweir printf("Unknown getopt error\n"); 214*cdf0e10cSrcweir #endif 215*cdf0e10cSrcweir ; 216*cdf0e10cSrcweir } 217*cdf0e10cSrcweir } 218*cdf0e10cSrcweir 219*cdf0e10cSrcweir 220*cdf0e10cSrcweir DirEntry aEntry("."); 221*cdf0e10cSrcweir aEntry.ToAbs(); 222*cdf0e10cSrcweir // String aCwd = aEntry.GetName(); 223*cdf0e10cSrcweir String aCwd(pFileNamePrefix, gsl_getSystemTextEncoding()); 224*cdf0e10cSrcweir /* sal_uInt16 nPos; 225*cdf0e10cSrcweir #ifndef UNX 226*cdf0e10cSrcweir while ( (nPos = aCwd.Search('\\') != STRING_NOTFOUND )) 227*cdf0e10cSrcweir #else 228*cdf0e10cSrcweir while ( (nPos = aCwd.Search('/') != STRING_NOTFOUND )) 229*cdf0e10cSrcweir #endif 230*cdf0e10cSrcweir { 231*cdf0e10cSrcweir String attt = aCwd.Copy( 0, nPos ); 232*cdf0e10cSrcweir aCwd.Erase( 0, nPos ); 233*cdf0e10cSrcweir } */ 234*cdf0e10cSrcweir SvFileStream aOutStream; 235*cdf0e10cSrcweir String aOutputFileName( pOutputFileName, gsl_getSystemTextEncoding()); 236*cdf0e10cSrcweir DirEntry aOutEntry( aOutputFileName ); 237*cdf0e10cSrcweir String aOutPath = aOutEntry.GetPath().GetFull(); 238*cdf0e10cSrcweir 239*cdf0e10cSrcweir String aFileName( aOutPath ); 240*cdf0e10cSrcweir aFileName += aDelim; 241*cdf0e10cSrcweir aFileName += aCwd; 242*cdf0e10cSrcweir aFileName += String(".", gsl_getSystemTextEncoding()); 243*cdf0e10cSrcweir aFileName += aSrsBaseName; 244*cdf0e10cSrcweir aFileName += String(".dprr", gsl_getSystemTextEncoding()); 245*cdf0e10cSrcweir //fprintf( stderr, "OutFileName : %s \n",aFileName.GetStr()); 246*cdf0e10cSrcweir aOutStream.Open( aFileName, STREAM_WRITE ); 247*cdf0e10cSrcweir 248*cdf0e10cSrcweir ByteString aString; 249*cdf0e10cSrcweir if ( optind < argc ) 250*cdf0e10cSrcweir { 251*cdf0e10cSrcweir #ifdef DEBUG_VERBOSE 252*cdf0e10cSrcweir printf("further arguments : "); 253*cdf0e10cSrcweir #endif 254*cdf0e10cSrcweir aString = ByteString( pSrsFileName ); 255*cdf0e10cSrcweir aString.SearchAndReplaceAll('\\', ByteString( aDelim, RTL_TEXTENCODING_ASCII_US )); 256*cdf0e10cSrcweir aString += ByteString(" : " ); 257*cdf0e10cSrcweir 258*cdf0e10cSrcweir while ( optind < argc ) 259*cdf0e10cSrcweir { 260*cdf0e10cSrcweir if (!bSource ) 261*cdf0e10cSrcweir { 262*cdf0e10cSrcweir aString += ByteString(" " ); 263*cdf0e10cSrcweir aString += ByteString( argv[optind]); 264*cdf0e10cSrcweir pDep->AddSource( argv[optind++]); 265*cdf0e10cSrcweir } 266*cdf0e10cSrcweir else 267*cdf0e10cSrcweir { 268*cdf0e10cSrcweir optind++; 269*cdf0e10cSrcweir } 270*cdf0e10cSrcweir } 271*cdf0e10cSrcweir } 272*cdf0e10cSrcweir aString += aRespArg; 273*cdf0e10cSrcweir pDep->Execute(); 274*cdf0e10cSrcweir ByteStringList *pLst = pDep->GetDepList(); 275*cdf0e10cSrcweir sal_uIntPtr nCount = pLst->Count(); 276*cdf0e10cSrcweir if ( nCount == 0 ) 277*cdf0e10cSrcweir { 278*cdf0e10cSrcweir aOutStream.WriteLine( aString ); 279*cdf0e10cSrcweir } 280*cdf0e10cSrcweir else 281*cdf0e10cSrcweir { 282*cdf0e10cSrcweir aString += ByteString( "\\" ); 283*cdf0e10cSrcweir aOutStream.WriteLine( aString ); 284*cdf0e10cSrcweir } 285*cdf0e10cSrcweir 286*cdf0e10cSrcweir for ( sal_uIntPtr j=0; j<nCount; j++ ) 287*cdf0e10cSrcweir { 288*cdf0e10cSrcweir ByteString *pStr = pLst->GetObject(j); 289*cdf0e10cSrcweir pStr->SearchAndReplaceAll('\\', ByteString( aDelim, RTL_TEXTENCODING_ASCII_US )); 290*cdf0e10cSrcweir if ( j != (nCount-1) ) 291*cdf0e10cSrcweir *pStr += ByteString( "\\" ); 292*cdf0e10cSrcweir aOutStream.WriteLine( *pStr ); 293*cdf0e10cSrcweir } 294*cdf0e10cSrcweir delete pDep; 295*cdf0e10cSrcweir aOutStream.Close(); 296*cdf0e10cSrcweir 297*cdf0e10cSrcweir return 0; 298*cdf0e10cSrcweir } 299*cdf0e10cSrcweir 300