Update git submodules
[LibreOffice.git] / idlc / source / idlcmain.cxx
blob0c4ded92be1075a0d057b00225e1f3e83aa0f9e9
1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 /*
3 * This file is part of the LibreOffice project.
5 * This Source Code Form is subject to the terms of the Mozilla Public
6 * License, v. 2.0. If a copy of the MPL was not distributed with this
7 * file, You can obtain one at http://mozilla.org/MPL/2.0/.
9 * This file incorporates work covered by the following license notice:
11 * Licensed to the Apache Software Foundation (ASF) under one or more
12 * contributor license agreements. See the NOTICE file distributed
13 * with this work for additional information regarding copyright
14 * ownership. The ASF licenses this file to you under the Apache
15 * License, Version 2.0 (the "License"); you may not use this file
16 * except in compliance with the License. You may obtain a copy of
17 * the License at http://www.apache.org/licenses/LICENSE-2.0 .
21 #include <idlc.hxx>
22 #include <sal/main.h>
24 #include <string.h>
26 SAL_IMPLEMENT_MAIN_WITH_ARGS(argc, argv)
28 std::vector< std::string > args;
29 for (int i = 1; i < argc; i++)
31 if (!Options::checkArgument (args, argv[i], strlen(argv[i])))
32 return 1;
35 Options options(argv[0]);
36 sal_Int32 nErrors = 0;
38 try
40 if (!options.initOptions(args))
41 return 0;
43 setIdlc(&options);
45 if (options.readStdin()) {
46 if ( !options.quiet() )
47 fprintf(
48 stdout, "%s: Compiling stdin\n",
49 options.getProgramName().getStr());
50 nErrors = compileFile(nullptr);
51 if ( ( idlc()->getWarningCount() > 0 ) && !options.quiet() ) {
52 fprintf(
53 stdout, "%s: detected %lu warnings compiling stdin\n",
54 options.getProgramName().getStr(),
55 sal::static_int_cast< unsigned long >(
56 idlc()->getWarningCount()));
58 OString outputUrl;
59 if (options.isValid("-O")) {
60 outputUrl = convertToFileUrl(options.getOption("-O"));
61 if (!outputUrl.endsWith("/")) {
62 outputUrl += "/";
64 outputUrl += "stdin.urd";
65 } else {
66 outputUrl = convertToFileUrl("stdin.urd");
68 if (nErrors > 0) {
69 removeIfExists(outputUrl);
70 } else {
71 nErrors = produceFile(outputUrl, nullptr);
73 idlc()->reset();
75 std::vector< OString > const & files = options.getInputFiles();
76 if ( options.verbose() )
78 fprintf( stdout, "%s: compiling %i source files ... \n",
79 options.getProgramName().getStr(), static_cast<int>(files.size()) );
80 fflush( stdout );
82 for (auto const& elem : files)
84 if (nErrors)
85 break;
86 OString sysFileName( convertToAbsoluteSystemPath(elem) );
88 if ( !options.quiet() )
89 fprintf(stdout, "Compiling: %s\n", elem.getStr());
90 nErrors = compileFile(&sysFileName);
92 if ( idlc()->getWarningCount() && !options.quiet() )
93 fprintf(stdout, "%s: detected %lu warnings compiling file '%s'\n",
94 options.getProgramName().getStr(),
95 sal::static_int_cast< unsigned long >(
96 idlc()->getWarningCount()),
97 elem.getStr());
99 // prepare output file name
100 OString const strippedFileName(
101 sysFileName.copy(sysFileName.lastIndexOf(SEPARATOR) + 1));
102 OString outputFile;
103 if ( options.isValid("-O") )
105 outputFile = options.getOption("-O");
106 if (!outputFile.endsWith("/")) {
107 outputFile += OString('/');
109 outputFile += strippedFileName.replaceAt(
110 strippedFileName.getLength() -3 , 3, "urd");
111 } else {
112 outputFile =
113 sysFileName.replaceAt(sysFileName.getLength() -3 , 3, "urd");
115 OString const outputFileUrl = convertToFileUrl(outputFile);
117 OString depFileUrl;
118 if (options.isValid("-M")) {
119 depFileUrl = convertToFileUrl(options.getOption("-M"));
120 if (!depFileUrl.endsWith("/")) {
121 depFileUrl += "/";
123 depFileUrl += strippedFileName.replaceAt(
124 strippedFileName.getLength() -3 , 3, "d");
127 if ( nErrors ) {
128 if (options.isValid("-M")) {
129 removeIfExists(depFileUrl);
131 removeIfExists(outputFileUrl);
132 } else {
133 sPair_t const pair(depFileUrl, outputFile);
134 nErrors = produceFile(outputFileUrl,
135 (options.isValid("-M")) ? &pair : nullptr);
138 idlc()->reset();
141 if ( nErrors > 0 )
143 fprintf(stderr, "%s: detected %ld errors%s",
144 options.getProgramName().getStr(),
145 sal::static_int_cast< long >(nErrors),
146 options.prepareVersion().getStr());
147 } else
149 if ( options.verbose() )
150 fprintf(stdout, "%s: returned successful%s",
151 options.getProgramName().getStr(),
152 options.prepareVersion().getStr());
154 } catch(const IllegalArgument& e)
156 fprintf(stderr, "Illegal argument: %s\n%s",
157 e.m_message.getStr(),
158 options.prepareVersion().getStr());
159 return 99;
162 return nErrors;
165 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */