2010-10-14 08:30:07 +02:00
|
|
|
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
|
2012-07-17 12:30:48 +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 .
|
|
|
|
*/
|
2006-09-17 07:14:44 +00:00
|
|
|
|
2011-01-31 13:30:43 +01:00
|
|
|
|
2017-10-23 22:39:57 +02:00
|
|
|
#include <idlc.hxx>
|
2014-05-19 12:02:48 +02:00
|
|
|
#include <sal/main.h>
|
2001-03-15 11:30:43 +00:00
|
|
|
|
2011-01-31 13:30:43 +01:00
|
|
|
#include <string.h>
|
|
|
|
|
2004-10-28 15:21:26 +00:00
|
|
|
SAL_IMPLEMENT_MAIN_WITH_ARGS(argc, argv)
|
2001-03-15 11:30:43 +00:00
|
|
|
{
|
2010-12-10 08:38:05 +01:00
|
|
|
std::vector< std::string > args;
|
|
|
|
for (int i = 1; i < argc; i++)
|
|
|
|
{
|
|
|
|
if (!Options::checkArgument (args, argv[i], strlen(argv[i])))
|
2015-02-11 13:20:49 +02:00
|
|
|
return 1;
|
2010-12-10 08:38:05 +01:00
|
|
|
}
|
2001-03-15 11:30:43 +00:00
|
|
|
|
2010-12-10 08:38:05 +01:00
|
|
|
Options options(argv[0]);
|
2014-10-23 16:21:54 +01:00
|
|
|
sal_Int32 nErrors = 0;
|
|
|
|
|
2001-03-15 11:30:43 +00:00
|
|
|
try
|
|
|
|
{
|
2010-12-10 08:38:05 +01:00
|
|
|
if (!options.initOptions(args))
|
2015-02-11 13:20:49 +02:00
|
|
|
return 0;
|
2001-03-15 11:30:43 +00:00
|
|
|
|
2014-10-23 16:21:54 +01:00
|
|
|
setIdlc(&options);
|
|
|
|
|
|
|
|
if (options.readStdin()) {
|
|
|
|
if ( !options.quiet() )
|
|
|
|
fprintf(
|
|
|
|
stdout, "%s: Compiling stdin\n",
|
|
|
|
options.getProgramName().getStr());
|
2015-11-10 10:17:21 +01:00
|
|
|
nErrors = compileFile(nullptr);
|
2014-10-23 16:21:54 +01:00
|
|
|
if ( ( idlc()->getWarningCount() > 0 ) && !options.quiet() ) {
|
|
|
|
fprintf(
|
|
|
|
stdout, "%s: detected %lu warnings compiling stdin\n",
|
|
|
|
options.getProgramName().getStr(),
|
|
|
|
sal::static_int_cast< unsigned long >(
|
|
|
|
idlc()->getWarningCount()));
|
|
|
|
}
|
|
|
|
OString outputUrl;
|
|
|
|
if (options.isValid("-O")) {
|
|
|
|
outputUrl = convertToFileUrl(options.getOption("-O"));
|
|
|
|
if (!outputUrl.endsWith("/")) {
|
|
|
|
outputUrl += "/";
|
|
|
|
}
|
|
|
|
outputUrl += "stdin.urd";
|
|
|
|
} else {
|
|
|
|
outputUrl = convertToFileUrl("stdin.urd");
|
2004-03-30 15:47:32 +00:00
|
|
|
}
|
2014-10-23 16:21:54 +01:00
|
|
|
if (nErrors > 0) {
|
|
|
|
removeIfExists(outputUrl);
|
|
|
|
} else {
|
2015-11-10 10:17:21 +01:00
|
|
|
nErrors = produceFile(outputUrl, nullptr);
|
2014-10-23 16:21:54 +01:00
|
|
|
}
|
|
|
|
idlc()->reset();
|
2005-01-18 12:34:34 +00:00
|
|
|
}
|
2016-10-13 14:42:16 +05:30
|
|
|
std::vector< OString > const & files = options.getInputFiles();
|
2014-10-23 16:21:54 +01:00
|
|
|
if ( options.verbose() )
|
|
|
|
{
|
|
|
|
fprintf( stdout, "%s: compiling %i source files ... \n",
|
|
|
|
options.getProgramName().getStr(), (int)files.size() );
|
|
|
|
fflush( stdout );
|
2004-03-30 15:47:32 +00:00
|
|
|
}
|
2016-10-13 14:42:16 +05:30
|
|
|
for (std::vector< OString >::const_iterator i(files.begin());
|
2014-10-23 16:21:54 +01:00
|
|
|
i != files.end() && nErrors == 0; ++i)
|
|
|
|
{
|
|
|
|
OString sysFileName( convertToAbsoluteSystemPath(*i) );
|
2004-05-18 12:40:57 +00:00
|
|
|
|
2014-10-23 16:21:54 +01:00
|
|
|
if ( !options.quiet() )
|
2017-05-26 10:58:42 +02:00
|
|
|
fprintf(stdout, "Compiling: %s\n", (*i).getStr());
|
2014-10-23 16:21:54 +01:00
|
|
|
nErrors = compileFile(&sysFileName);
|
|
|
|
|
|
|
|
if ( idlc()->getWarningCount() && !options.quiet() )
|
|
|
|
fprintf(stdout, "%s: detected %lu warnings compiling file '%s'\n",
|
|
|
|
options.getProgramName().getStr(),
|
|
|
|
sal::static_int_cast< unsigned long >(
|
|
|
|
idlc()->getWarningCount()),
|
|
|
|
(*i).getStr());
|
|
|
|
|
|
|
|
// prepare output file name
|
|
|
|
OString const strippedFileName(
|
|
|
|
sysFileName.copy(sysFileName.lastIndexOf(SEPARATOR) + 1));
|
|
|
|
OString outputFile;
|
|
|
|
if ( options.isValid("-O") )
|
|
|
|
{
|
|
|
|
outputFile = (options.getOption("-O"));
|
|
|
|
if (!outputFile.endsWith("/")) {
|
|
|
|
outputFile += OString('/');
|
|
|
|
}
|
|
|
|
outputFile += strippedFileName.replaceAt(
|
|
|
|
strippedFileName.getLength() -3 , 3, "urd");
|
|
|
|
} else {
|
|
|
|
outputFile =
|
|
|
|
sysFileName.replaceAt(sysFileName.getLength() -3 , 3, "urd");
|
2012-01-14 21:16:17 +01:00
|
|
|
}
|
2014-10-23 16:21:54 +01:00
|
|
|
OString const outputFileUrl = convertToFileUrl(outputFile);
|
2004-05-18 12:40:57 +00:00
|
|
|
|
2014-10-23 16:21:54 +01:00
|
|
|
OString depFileUrl;
|
|
|
|
if (options.isValid("-M")) {
|
|
|
|
depFileUrl = convertToFileUrl(options.getOption("-M"));
|
|
|
|
if (!depFileUrl.endsWith("/")) {
|
|
|
|
depFileUrl += "/";
|
|
|
|
}
|
|
|
|
depFileUrl += strippedFileName.replaceAt(
|
|
|
|
strippedFileName.getLength() -3 , 3, "d");
|
2012-01-14 21:16:17 +01:00
|
|
|
}
|
2004-05-18 12:40:57 +00:00
|
|
|
|
2014-10-23 16:21:54 +01:00
|
|
|
if ( nErrors ) {
|
|
|
|
if (options.isValid("-M")) {
|
|
|
|
removeIfExists(depFileUrl);
|
|
|
|
}
|
|
|
|
removeIfExists(outputFileUrl);
|
|
|
|
} else {
|
|
|
|
sPair_t const pair(depFileUrl, outputFile);
|
|
|
|
nErrors = produceFile(outputFileUrl,
|
2015-11-10 10:17:21 +01:00
|
|
|
(options.isValid("-M")) ? &pair : nullptr);
|
2012-01-14 21:16:17 +01:00
|
|
|
}
|
2004-05-18 12:40:57 +00:00
|
|
|
|
2014-10-23 16:21:54 +01:00
|
|
|
idlc()->reset();
|
|
|
|
}
|
2001-03-15 11:30:43 +00:00
|
|
|
|
2014-10-23 16:21:54 +01:00
|
|
|
if ( nErrors > 0 )
|
|
|
|
{
|
|
|
|
fprintf(stderr, "%s: detected %ld errors%s",
|
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
|
|
|
options.getProgramName().getStr(),
|
2014-10-23 16:21:54 +01:00
|
|
|
sal::static_int_cast< long >(nErrors),
|
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
|
|
|
options.prepareVersion().getStr());
|
2014-10-23 16:21:54 +01:00
|
|
|
} else
|
|
|
|
{
|
|
|
|
if ( options.verbose() )
|
|
|
|
fprintf(stdout, "%s: returned successful%s",
|
|
|
|
options.getProgramName().getStr(),
|
|
|
|
options.prepareVersion().getStr());
|
|
|
|
}
|
|
|
|
} catch(const IllegalArgument& e)
|
|
|
|
{
|
|
|
|
fprintf(stderr, "Illegal argument: %s\n%s",
|
|
|
|
e.m_message.getStr(),
|
|
|
|
options.prepareVersion().getStr());
|
2015-02-11 13:20:49 +02:00
|
|
|
return 99;
|
2001-03-15 11:30:43 +00:00
|
|
|
}
|
2014-10-23 16:21:54 +01:00
|
|
|
|
2006-06-20 02:49:07 +00:00
|
|
|
return nErrors;
|
2001-03-15 11:30:43 +00:00
|
|
|
}
|
2010-10-14 08:30:07 +02:00
|
|
|
|
|
|
|
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|