office-gobmx/tools/bootstrp/rscdep.cxx
2010-06-17 11:30:15 +02:00

299 lines
8.2 KiB
C++

/*************************************************************************
*
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* Copyright 2000, 2010 Oracle and/or its affiliates.
*
* OpenOffice.org - a multi-platform office productivity suite
*
* This file is part of OpenOffice.org.
*
* OpenOffice.org is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License version 3
* only, as published by the Free Software Foundation.
*
* OpenOffice.org is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License version 3 for more details
* (a copy is included in the LICENSE file that accompanied this code).
*
* You should have received a copy of the GNU Lesser General Public License
* version 3 along with OpenOffice.org. If not, see
* <http://www.openoffice.org/license.html>
* for a copy of the LGPLv3 License.
*
************************************************************************/
// MARKER(update_precomp.py): autogen include statement, do not remove
#include "precompiled_tools.hxx"
#ifdef UNX
#include <unistd.h>
#endif
#include <sys/stat.h>
#include <stdio.h>
#include <string.h>
#include "bootstrp/prj.hxx"
#include "sal/main.h"
#include <tools/string.hxx>
#include <tools/list.hxx>
#include <tools/fsys.hxx>
#include <tools/stream.hxx>
#include "cppdep.hxx"
#if defined WNT
#if !defined HAVE_GETOPT
#define __STDC__ 1
#define __GNU_LIBRARY__
#include <external/glibc/getopt.h>
#else
#include <getopt.h>
#endif
#endif
class RscHrcDep : public CppDep
{
public:
RscHrcDep();
virtual ~RscHrcDep();
virtual void Execute();
};
RscHrcDep::RscHrcDep() :
CppDep()
{
}
RscHrcDep::~RscHrcDep()
{
}
void RscHrcDep::Execute()
{
CppDep::Execute();
}
//static String aDelim;
SAL_IMPLEMENT_MAIN_WITH_ARGS( argc, argv )
{
int c;
char aBuf[255];
char pFileNamePrefix[255];
char pOutputFileName[255];
char pSrsFileName[255];
String aSrsBaseName;
BOOL bSource = FALSE;
ByteString aRespArg;
// who needs anything but '/' ?
// String aDelim = String(DirEntry::GetAccessDelimiter());
String aDelim = '/';
RscHrcDep *pDep = new RscHrcDep;
pOutputFileName[0] = 0;
pSrsFileName[0] = 0;
for ( int i=1; i<argc; i++)
{
strcpy( aBuf, (const char *)argv[i] );
if ( aBuf[0] == '-' && aBuf[1] == 'p' && aBuf[2] == '=' )
{
strcpy(pFileNamePrefix, &aBuf[3]);
//break;
}
if ( aBuf[0] == '-' && aBuf[1] == 'f' && aBuf[2] == 'o' && aBuf[3] == '=' )
{
strcpy(pOutputFileName, &aBuf[4]);
//break;
}
if ( aBuf[0] == '-' && aBuf[1] == 'f' && aBuf[2] == 'p' && aBuf[3] == '=' )
{
strcpy(pSrsFileName, &aBuf[4]);
String aName( pSrsFileName, gsl_getSystemTextEncoding());
DirEntry aDest( aName );
aSrsBaseName = aDest.GetBase();
//break;
}
if (aBuf[0] == '-' && aBuf[1] == 'i' )
{
//printf("Include : %s\n", &aBuf[2] );
pDep->AddSearchPath( &aBuf[2] );
}
if (aBuf[0] == '-' && aBuf[1] == 'I' )
{
//printf("Include : %s\n", &aBuf[2] );
pDep->AddSearchPath( &aBuf[2] );
}
if (aBuf[0] == '@' )
{
ByteString aToken;
String aRespName( &aBuf[1], gsl_getSystemTextEncoding());
SimpleConfig aConfig( aRespName );
while ( (aToken = aConfig.GetNext()) != "")
{
char aBuf2[255];
(void) strcpy( aBuf2, aToken.GetBuffer());
if ( aBuf[0] == '-' && aBuf[1] == 'p' && aBuf[2] == '=' )
{
strcpy(pFileNamePrefix, &aBuf[3]);
//break;
}
if ( aBuf2[0] == '-' && aBuf2[1] == 'f' && aBuf2[2] == 'o' )
{
strcpy(pOutputFileName, &aBuf2[3]);
//break;
}
if ( aBuf2[0] == '-' && aBuf2[1] == 'f' && aBuf2[2] == 'p' )
{
strcpy(pSrsFileName, &aBuf2[3]);
String aName( pSrsFileName, gsl_getSystemTextEncoding());
DirEntry aDest( aName );
aSrsBaseName = aDest.GetBase();
//break;
}
if (aBuf2[0] == '-' && aBuf2[1] == 'i' )
{
//printf("Include : %s\n", &aBuf[2] );
pDep->AddSearchPath( &aBuf2[2] );
}
if (aBuf2[0] == '-' && aBuf2[1] == 'I' )
{
//printf("Include : %s\n", &aBuf[2] );
pDep->AddSearchPath( &aBuf2[2] );
}
if (( aBuf2[0] != '-' ) && ( aBuf2[0] != '@' ))
{
pDep->AddSource( &aBuf2[0] );
aRespArg += " ";
aRespArg += &aBuf2[0];
bSource = TRUE;
}
}
}
}
while( 1 )
{
c = getopt( argc, argv,
"_abcdefghi:jklmnopqrstuvwxyzABCDEFGHI:JKLMNOPQRSTUVWXYZ1234567890/-+=.\\()\"");
if ( c == -1 )
break;
switch( c )
{
case 0:
break;
case 'a' :
#ifdef DEBUG_VERBOSE
printf("option a\n");
#endif
break;
case 'l' :
#ifdef DEBUG_VERBOSE
printf("option l with Value %s\n", optarg );
#endif
pDep->AddSource( optarg );
break;
case 'h' :
case 'H' :
case '?' :
printf("RscDep 1.0 (c)2000 StarOffice\n");
break;
default:
#ifdef DEBUG_VERBOSE
printf("Unknown getopt error\n");
#endif
;
}
}
DirEntry aEntry(".");
aEntry.ToAbs();
// String aCwd = aEntry.GetName();
String aCwd(pFileNamePrefix, gsl_getSystemTextEncoding());
/* USHORT nPos;
#ifndef UNX
while ( (nPos = aCwd.Search('\\') != STRING_NOTFOUND ))
#else
while ( (nPos = aCwd.Search('/') != STRING_NOTFOUND ))
#endif
{
String attt = aCwd.Copy( 0, nPos );
aCwd.Erase( 0, nPos );
} */
SvFileStream aOutStream;
String aOutputFileName( pOutputFileName, gsl_getSystemTextEncoding());
DirEntry aOutEntry( aOutputFileName );
String aOutPath = aOutEntry.GetPath().GetFull();
String aFileName( aOutPath );
aFileName += aDelim;
aFileName += aCwd;
aFileName += String(".", gsl_getSystemTextEncoding());
aFileName += aSrsBaseName;
aFileName += String(".dprr", gsl_getSystemTextEncoding());
//fprintf( stderr, "OutFileName : %s \n",aFileName.GetStr());
aOutStream.Open( aFileName, STREAM_WRITE );
ByteString aString;
if ( optind < argc )
{
#ifdef DEBUG_VERBOSE
printf("further arguments : ");
#endif
aString = ByteString( pSrsFileName );
aString.SearchAndReplaceAll('\\', ByteString( aDelim, RTL_TEXTENCODING_ASCII_US ));
aString += ByteString(" : " );
while ( optind < argc )
{
if (!bSource )
{
aString += ByteString(" " );
aString += ByteString( argv[optind]);
pDep->AddSource( argv[optind++]);
}
else
{
optind++;
}
}
}
aString += aRespArg;
pDep->Execute();
ByteStringList *pLst = pDep->GetDepList();
ULONG nCount = pLst->Count();
if ( nCount == 0 )
{
aOutStream.WriteLine( aString );
}
else
{
aString += ByteString( "\\" );
aOutStream.WriteLine( aString );
}
for ( ULONG j=0; j<nCount; j++ )
{
ByteString *pStr = pLst->GetObject(j);
pStr->SearchAndReplaceAll('\\', ByteString( aDelim, RTL_TEXTENCODING_ASCII_US ));
if ( j != (nCount-1) )
*pStr += ByteString( "\\" );
aOutStream.WriteLine( *pStr );
}
delete pDep;
aOutStream.Close();
return 0;
}