2010-10-12 15:53:47 +02:00
|
|
|
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
|
2012-07-11 19:49:09 +01:00
|
|
|
/*
|
|
|
|
* This file is part of the LibreOffice project.
|
|
|
|
*
|
|
|
|
* This Source Code Form is subject to the terms of the Mozilla Public
|
|
|
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
|
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
|
|
|
*
|
|
|
|
* This file incorporates work covered by the following license notice:
|
|
|
|
*
|
|
|
|
* Licensed to the Apache Software Foundation (ASF) under one or more
|
|
|
|
* contributor license agreements. See the NOTICE file distributed
|
|
|
|
* with this work for additional information regarding copyright
|
|
|
|
* ownership. The ASF licenses this file to you under the Apache
|
|
|
|
* License, Version 2.0 (the "License"); you may not use this file
|
|
|
|
* except in compliance with the License. You may obtain a copy of
|
|
|
|
* the License at http://www.apache.org/licenses/LICENSE-2.0 .
|
|
|
|
*/
|
2000-09-18 15:33:13 +00:00
|
|
|
|
2006-09-16 11:49:42 +00:00
|
|
|
|
2000-09-18 15:33:13 +00:00
|
|
|
#include <stdlib.h>
|
|
|
|
#include <stdio.h>
|
|
|
|
#include <database.hxx>
|
|
|
|
#include <globals.hxx>
|
|
|
|
#include <command.hxx>
|
2013-10-20 15:15:42 +01:00
|
|
|
#include <rtl/ustring.hxx>
|
2013-03-22 21:08:31 +01:00
|
|
|
#include <osl/file.hxx>
|
2015-11-10 13:36:34 +02:00
|
|
|
#include <memory>
|
2000-09-18 15:33:13 +00:00
|
|
|
|
|
|
|
#define BR 0x8000
|
2018-09-15 19:13:19 +02:00
|
|
|
static bool FileMove_Impl( const OUString & rFile1, const OUString & rFile2, bool bMoveAlways )
|
2000-09-18 15:33:13 +00:00
|
|
|
{
|
|
|
|
//printf( "Move from %s to %s\n", rFile2.GetStr(), rFile1.GetStr() );
|
2011-01-13 09:32:03 +01:00
|
|
|
sal_uLong nC1 = 0;
|
|
|
|
sal_uLong nC2 = 1;
|
2017-06-04 17:18:28 +02:00
|
|
|
if( !bMoveAlways )
|
2000-09-18 15:33:13 +00:00
|
|
|
{
|
2016-08-27 10:18:06 +02:00
|
|
|
SvFileStream aOutStm1( rFile1, StreamMode::STD_READ );
|
|
|
|
SvFileStream aOutStm2( rFile2, StreamMode::STD_READ );
|
2017-06-05 15:02:51 +02:00
|
|
|
if( aOutStm1.GetError() == ERRCODE_NONE )
|
2000-09-18 15:33:13 +00:00
|
|
|
{
|
2015-11-10 13:36:34 +02:00
|
|
|
std::unique_ptr<sal_uInt8[]> pBuf1(new sal_uInt8[ BR ]);
|
|
|
|
std::unique_ptr<sal_uInt8[]> pBuf2(new sal_uInt8[ BR ]);
|
2016-06-03 14:45:59 +02:00
|
|
|
nC1 = aOutStm1.ReadBytes(pBuf1.get(), BR);
|
|
|
|
nC2 = aOutStm2.ReadBytes(pBuf2.get(), BR);
|
2000-09-18 15:33:13 +00:00
|
|
|
while( nC1 == nC2 )
|
|
|
|
{
|
2015-11-10 13:36:34 +02:00
|
|
|
if( memcmp( pBuf1.get(), pBuf2.get(), nC1 ) )
|
2000-09-18 15:33:13 +00:00
|
|
|
{
|
|
|
|
nC1++;
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
if( 0x8000 != nC1 )
|
|
|
|
break;
|
2016-06-03 14:45:59 +02:00
|
|
|
nC1 = aOutStm1.ReadBytes(pBuf1.get(), BR);
|
|
|
|
nC2 = aOutStm2.ReadBytes(pBuf2.get(), BR);
|
2000-09-18 15:33:13 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2013-03-22 21:08:31 +01:00
|
|
|
OUString fileURL2;
|
|
|
|
osl::FileBase::getFileURLFromSystemPath( rFile2, fileURL2 );
|
2000-09-18 15:33:13 +00:00
|
|
|
if( nC1 != nC2 )
|
2011-02-13 18:06:10 +01:00
|
|
|
{// something has changed
|
2013-03-22 21:08:31 +01:00
|
|
|
OUString fileURL1;
|
|
|
|
osl::FileBase::getFileURLFromSystemPath( rFile1, fileURL1 );
|
2011-02-13 18:06:10 +01:00
|
|
|
// move file
|
2013-03-22 21:08:31 +01:00
|
|
|
if( osl::FileBase::E_None != osl::File::move( fileURL2, fileURL1 ) )
|
2000-09-18 15:33:13 +00:00
|
|
|
{
|
2011-02-13 18:06:10 +01:00
|
|
|
// delete both files
|
2013-03-22 21:08:31 +01:00
|
|
|
osl::File::remove( fileURL1 );
|
|
|
|
osl::File::remove( fileURL2 );
|
2014-05-08 11:42:16 +02:00
|
|
|
return false;
|
2000-09-18 15:33:13 +00:00
|
|
|
}
|
2014-05-08 11:42:16 +02:00
|
|
|
return true;
|
2000-09-18 15:33:13 +00:00
|
|
|
}
|
2013-03-22 21:08:31 +01:00
|
|
|
return osl::FileBase::E_None == osl::File::remove( fileURL2 );
|
|
|
|
}
|
|
|
|
|
|
|
|
//This function gets a system path to a file [fname], creates a temp file in
|
|
|
|
//the same folder as [fname] and returns the system path of the temp file.
|
2018-10-09 10:28:48 +02:00
|
|
|
static OUString tempFileHelper(OUString const & fname)
|
2013-03-22 21:08:31 +01:00
|
|
|
{
|
|
|
|
OUString aTmpFile;
|
|
|
|
|
|
|
|
sal_Int32 delimIndex = fname.lastIndexOf( '/' );
|
|
|
|
if( delimIndex > 0 )
|
|
|
|
{
|
|
|
|
OUString aTmpDir( fname.copy( 0, delimIndex ) );
|
|
|
|
osl::FileBase::getFileURLFromSystemPath( aTmpDir, aTmpDir );
|
2015-11-10 10:17:16 +01:00
|
|
|
osl::FileBase::createTempFile( &aTmpDir, nullptr, &aTmpFile );
|
2013-03-22 21:08:31 +01:00
|
|
|
osl::FileBase::getSystemPathFromFileURL( aTmpFile, aTmpFile );
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
2019-10-14 14:27:57 +02:00
|
|
|
OString aStr = "invalid filename: " +
|
|
|
|
OUStringToOString(fname, RTL_TEXTENCODING_UTF8);
|
2013-03-22 21:08:31 +01:00
|
|
|
fprintf(stderr, "%s\n", aStr.getStr());
|
|
|
|
}
|
|
|
|
return aTmpFile;
|
2000-09-18 15:33:13 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
int main ( int argc, char ** argv)
|
|
|
|
{
|
2013-03-22 21:08:31 +01:00
|
|
|
OUString aTmpSlotMapFile;
|
|
|
|
OUString aTmpDepFile;
|
2000-09-18 15:33:13 +00:00
|
|
|
|
|
|
|
SvCommand aCommand( argc, argv );
|
CWS-TOOLING: integrate CWS buildverbosity
2009-10-13 15:51:48 +0200 fs r276867 : allow building with 'nodep'==''
2009-10-11 22:39:56 +0200 fs r276820 : silence a compiler warning in a file only used when VERBOSE!=""
2009-10-09 14:37:43 +0200 fs r276807 : let not override the non-presence of $VERBOSE the given command line arguments
2009-10-09 14:36:25 +0200 fs r276806 : also deliver spirit/home/classic/debug/impl
2009-10-08 13:38:07 +0200 fs r276789 : not that many line feeds in --show mode
2009-10-08 13:13:01 +0200 fs r276788 : minor adjustments requested by hjs:
- replaced space/tab mixes at beginning of lines with mere tab
- made "nothing to update" message for the ZIPALLTARGET target more prominent
- removed useless "echo > /dev/nul" statements
2009-10-07 13:32:12 +0200 fs r276753 : #i105585#
2009-10-07 11:31:59 +0200 fs r276742 : #i10000# missing dependency between stoc/security and stoc/util
2009-10-06 22:59:59 +0200 fs r276729 : CWS-TOOLING: rebase CWS buildverbosity to trunk@276699 (milestone: DEV300:m61)
2009-09-29 12:04:58 +0200 fs r276518 : #i10000#
2009-09-29 12:04:25 +0200 fs r276517 : oops
2009-09-29 12:01:07 +0200 fs r276516 : #i84497# removed some more (non-diagnostic) 'echo ------' directives
2009-09-29 11:59:29 +0200 fs r276515 : #i84497# removed some more (non-diagnostic) 'echo ------' directives
2009-09-29 11:52:32 +0200 fs r276514 : #i84497# removed the various 'echo ------------' directives from verbose mode, as per hjs' request
2009-09-29 11:44:16 +0200 fs r276513 : do not duplicate IDLC call commands with different verbosity switches
2009-09-28 21:43:50 +0200 thb r276502 : #i84497# fixed potential recursive macro def + extra ls
* solenv/inc/settings.mk: now setting via VERBOSE!:=, removes warning
and my spurious "recursive macro definition" error
* solenv/inc/tg_app.mk: one extra ls silenced for app target (and
quiet mode, that goes without saying)
2009-09-23 08:57:01 +0200 fs r276366 : use ULFEX_VERBOSITY instead of duplicating the ULFEX call
2009-09-21 11:42:26 +0200 fs r276320 : ignore output paths
2009-09-21 11:04:27 +0200 fs r276318 : silence another compiler warning, which only hits us when actually using this (debug) file, which is the case only when slideshow is compiled with a env variable VERBOSE, thus came up in CWS buildverbosity
2009-09-21 10:30:14 +0200 fs r276313 : make some output depend on VERBOSE==TRUE, not COMMAND_ECHO=""
While both are equivalent at the moment, COMMAND_ECHO finally is an implementation
default of the VERBOSE flag only, so better rely on VERBOSE as the primary verbosity flag
2009-09-21 09:56:57 +0200 fs r276311 : forgot to re-generate from tg_zip before committing
2009-09-21 09:52:11 +0200 fs r276310 : #i84497# even less verbosity
2009-09-17 11:02:47 +0200 fs r276232 : #i84497# verbose implies VERBOSE nowadays, and VERBOSE==FALSE should not lead to -DVERBOSE
2009-09-15 22:59:37 +0200 fs r276189 : #i105022# copy fix for this P1 into this CWS
2009-09-15 11:56:35 +0200 fs r276165 : CWS-TOOLING: rebase CWS buildverbosity to trunk@276043 (milestone: DEV300:m58)
2009-09-14 17:45:10 +0200 fs r276137 : #i84497# don't duplicate zip lines w/ and w/o -q switch, use a variable instead (maintenance)
2009-09-14 15:01:33 +0200 fs r276124 : #i10000#
2009-09-11 23:58:46 +0200 thb r276083 : #i84497#: More quiet-build fine tuning
- silenced rsc for real (properly filtering options for
cpp, and a pretty brutal amputation of the tool blurp,
which would have needed cmd opt parser duplication)
- silenced deliver.pl
- silenced checkdll.sh
- silenced zip via -q (in quiet mode)
- silenced various idl, resource, transex whatever tool,
passing appropriate options down to them '-QQ' sometimes
- silenced dmake, pointless blurb that something does *not*
need update removed
- silenced the old starview idl compiler, to not output
tool's name & progress chars in quiet mode
2009-09-11 21:13:59 +0200 thb r276081 : #i84497#: More bits on the quiet mode of the build.
The bulk of the changes is disabling those annoying
"echo ------------------" lines for the quiet build,
which has the stretch goal of outputting *exactly*
one line per file compiled/linked/processed.
Apart from that, silenced a few especialy annoying
module-specific makefiles (basically adding
$(COMMAND_ECHO) in front of a gazillion rules).
Additionally, slightly tweaked what idlc regards
verbose, normal, and quiet mode; this was to have it
echo exactly one line per idl file processed (the
fact that quiet mode did not echo *anything* for idl
files was a bit too much for my taste)
2009-09-04 09:14:35 +0200 fs r275777 : don't emit the link parameters if VERBOSE!=TRUE
2009-09-02 10:31:15 +0200 fs r275700 : #i10000#
2009-09-02 08:44:14 +0200 fs r275697 : update svn:ignore to ignore the output paths
2009-09-02 08:40:54 +0200 fs r275695 : #i84497# less verbose output during build, unless a dedicated '-verbose' switch is given
2009-09-02 08:40:28 +0200 fs r275694 : GRAPHITE is missing in the BUILD_TYPE
2009-09-02 08:40:05 +0200 fs r275693 : #i84497# less verbose output during build, unless a dedicated '-verbose' switch is given
2009-09-02 08:39:25 +0200 fs r275692 : #i84497# less verbose output during build, unless a dedicated '-verbose' switch is given
2009-09-02 08:39:02 +0200 fs r275691 : #i84497# less verbose output during build, unless a dedicated '-verbose' switch is given
2009-09-02 08:38:09 +0200 fs r275690 : #i84497# less verbose output during build
2009-09-02 08:37:06 +0200 fs r275689 : #i84497# don't emit that much noise, unless a '-verbose' switch is given
2009-10-21 10:43:22 +00:00
|
|
|
|
|
|
|
if( aCommand.nVerbosity != 0 )
|
|
|
|
printf( "StarView Interface Definition Language (IDL) Compiler 3.0\n" );
|
|
|
|
|
2006-06-19 09:43:59 +00:00
|
|
|
Init();
|
2015-11-10 13:36:34 +02:00
|
|
|
std::unique_ptr<SvIdlWorkingBase> pDataBase( new SvIdlWorkingBase(aCommand));
|
2000-09-18 15:33:13 +00:00
|
|
|
|
|
|
|
int nExit = 0;
|
2013-03-22 21:08:31 +01:00
|
|
|
if( !aCommand.aExportFile.isEmpty() )
|
2000-09-18 15:33:13 +00:00
|
|
|
{
|
2013-03-22 21:08:31 +01:00
|
|
|
osl::DirectoryItem aDI;
|
|
|
|
osl::FileStatus fileStatus( osl_FileStatus_Mask_FileName );
|
2019-07-18 10:35:26 +01:00
|
|
|
(void)osl::DirectoryItem::get( aCommand.aExportFile, aDI );
|
|
|
|
(void)aDI.getFileStatus(fileStatus);
|
2013-03-22 21:08:31 +01:00
|
|
|
pDataBase->SetExportFile( fileStatus.getFileName() );
|
2000-09-18 15:33:13 +00:00
|
|
|
}
|
|
|
|
|
2015-11-10 13:36:34 +02:00
|
|
|
if( ReadIdl( pDataBase.get(), aCommand ) )
|
2000-09-18 15:33:13 +00:00
|
|
|
{
|
2013-03-22 21:08:31 +01:00
|
|
|
if( nExit == 0 && !aCommand.aSlotMapFile.isEmpty() )
|
2000-09-18 15:33:13 +00:00
|
|
|
{
|
2013-03-22 21:08:31 +01:00
|
|
|
aTmpSlotMapFile = tempFileHelper(aCommand.aSlotMapFile);
|
2016-08-27 10:18:06 +02:00
|
|
|
SvFileStream aOutStm( aTmpSlotMapFile, StreamMode::READWRITE | StreamMode::TRUNC );
|
2000-09-18 15:33:13 +00:00
|
|
|
if( !pDataBase->WriteSfx( aOutStm ) )
|
|
|
|
{
|
|
|
|
nExit = -1;
|
2019-10-14 14:27:57 +02:00
|
|
|
OString aStr = "cannot write slotmap file: " +
|
|
|
|
OUStringToOString(aCommand.aSlotMapFile, RTL_TEXTENCODING_UTF8);
|
2011-11-27 08:21:00 +00:00
|
|
|
fprintf(stderr, "%s\n", aStr.getStr());
|
2000-09-18 15:33:13 +00:00
|
|
|
}
|
|
|
|
}
|
2011-12-26 17:19:24 -02:00
|
|
|
if (nExit == 0 && !aCommand.m_DepFile.isEmpty())
|
2011-11-08 18:51:13 +01:00
|
|
|
{
|
2013-03-22 21:08:31 +01:00
|
|
|
aTmpDepFile = tempFileHelper(aCommand.m_DepFile);
|
2016-08-27 10:18:06 +02:00
|
|
|
SvFileStream aOutStm( aTmpDepFile, StreamMode::READWRITE | StreamMode::TRUNC );
|
2011-11-08 18:51:13 +01:00
|
|
|
pDataBase->WriteDepFile(aOutStm, aCommand.aTargetFile);
|
2017-06-05 15:02:51 +02:00
|
|
|
if( aOutStm.GetError() != ERRCODE_NONE )
|
2011-11-08 18:51:13 +01:00
|
|
|
{
|
|
|
|
nExit = -1;
|
|
|
|
fprintf( stderr, "cannot write dependency file: %s\n",
|
2013-04-07 12:06:47 +02:00
|
|
|
OUStringToOString( aCommand.m_DepFile,
|
2011-11-08 18:51:13 +01:00
|
|
|
RTL_TEXTENCODING_UTF8 ).getStr() );
|
|
|
|
}
|
|
|
|
}
|
2000-09-18 15:33:13 +00:00
|
|
|
}
|
|
|
|
else
|
|
|
|
nExit = -1;
|
|
|
|
|
|
|
|
if( nExit == 0 )
|
|
|
|
{
|
2014-01-22 14:58:57 +01:00
|
|
|
bool bErr = false;
|
2014-05-08 11:42:16 +02:00
|
|
|
bool bDoMove = aCommand.aTargetFile.isEmpty();
|
2013-09-16 07:56:50 +02:00
|
|
|
OUString aErrFile, aErrFile2;
|
2018-10-22 16:30:03 +01:00
|
|
|
if (!aCommand.aSlotMapFile.isEmpty())
|
2000-09-18 15:33:13 +00:00
|
|
|
{
|
2018-10-22 16:30:03 +01:00
|
|
|
bErr = !FileMove_Impl( aCommand.aSlotMapFile, aTmpSlotMapFile, bDoMove );
|
2006-11-06 13:54:06 +00:00
|
|
|
if( bErr ) {
|
2000-09-18 15:33:13 +00:00
|
|
|
aErrFile = aCommand.aSlotMapFile;
|
2006-11-06 13:54:06 +00:00
|
|
|
aErrFile2 = aTmpSlotMapFile;
|
|
|
|
}
|
2000-09-18 15:33:13 +00:00
|
|
|
}
|
2011-12-26 17:19:24 -02:00
|
|
|
if (!bErr && !aCommand.m_DepFile.isEmpty())
|
2011-11-08 18:51:13 +01:00
|
|
|
{
|
|
|
|
bErr |= !FileMove_Impl( aCommand.m_DepFile, aTmpDepFile, bDoMove );
|
|
|
|
if (bErr) {
|
|
|
|
aErrFile = aCommand.m_DepFile;
|
|
|
|
aErrFile2 = aTmpDepFile;
|
|
|
|
}
|
|
|
|
}
|
2000-09-18 15:33:13 +00:00
|
|
|
|
|
|
|
if( bErr )
|
|
|
|
{
|
|
|
|
nExit = -1;
|
2019-10-14 14:27:57 +02:00
|
|
|
OString aStr = "cannot move file from: " +
|
|
|
|
OUStringToOString(aErrFile2, RTL_TEXTENCODING_UTF8) +
|
|
|
|
"\n to file: " +
|
|
|
|
OUStringToOString(aErrFile, RTL_TEXTENCODING_UTF8);
|
2011-11-27 08:21:00 +00:00
|
|
|
fprintf( stderr, "%s\n", aStr.getStr() );
|
2000-09-18 15:33:13 +00:00
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
2013-09-16 07:56:50 +02:00
|
|
|
if( !aCommand.aTargetFile.isEmpty() )
|
2000-09-18 15:33:13 +00:00
|
|
|
{
|
2011-02-13 18:06:10 +01:00
|
|
|
// stamp file, because idl passed through correctly
|
2000-09-18 15:33:13 +00:00
|
|
|
SvFileStream aOutStm( aCommand.aTargetFile,
|
2016-08-27 10:18:06 +02:00
|
|
|
StreamMode::READWRITE | StreamMode::TRUNC );
|
2000-09-18 15:33:13 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
if( nExit != 0 )
|
|
|
|
{
|
2013-03-22 21:08:31 +01:00
|
|
|
if( !aCommand.aSlotMapFile.isEmpty() )
|
|
|
|
{
|
|
|
|
osl::FileBase::getSystemPathFromFileURL( aTmpSlotMapFile, aTmpSlotMapFile );
|
|
|
|
osl::File::remove( aTmpSlotMapFile );
|
|
|
|
}
|
2000-09-18 15:33:13 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
if( nExit != 0 )
|
|
|
|
fprintf( stderr, "svidl terminated with errors\n" );
|
|
|
|
return nExit;
|
|
|
|
}
|
|
|
|
|
2010-10-12 15:53:47 +02:00
|
|
|
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|