1 | /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ |
2 | /* |
3 | * This file is part of the LibreOffice project. |
4 | * |
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/. |
8 | * |
9 | * This file incorporates work covered by the following license notice: |
10 | * |
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 . |
18 | */ |
19 | |
20 | #include "sal/config.h" |
21 | |
22 | #include <cstdlib> |
23 | #include <cstring> |
24 | #include <iostream> |
25 | #include <vector> |
26 | |
27 | #include "codemaker/generatedtypeset.hxx" |
28 | #include "codemaker/typemanager.hxx" |
29 | #include "rtl/ref.hxx" |
30 | #include "rtl/string.hxx" |
31 | #include "rtl/ustring.hxx" |
32 | #include "sal/main.h" |
33 | #include "sal/types.h" |
34 | #include "unoidl/unoidl.hxx" |
35 | |
36 | #include "cppuoptions.hxx" |
37 | #include "cpputype.hxx" |
38 | |
39 | SAL_IMPLEMENT_MAIN_WITH_ARGS(argc, argv) { |
40 | CppuOptions options; |
41 | try { |
42 | if (!options.initOptions(argc, argv)) { |
43 | return EXIT_FAILURE; |
44 | } |
45 | } catch (IllegalArgument & e) { |
46 | std::cerr << "Illegal option " << e.m_message << '\n'; |
47 | return EXIT_FAILURE; |
48 | } |
49 | try { |
50 | rtl::Reference< TypeManager > typeMgr(new TypeManager); |
51 | for (std::vector< OString >::const_iterator i( |
52 | options.getExtraInputFiles().begin()); |
53 | i != options.getExtraInputFiles().end(); ++i) |
54 | { |
55 | typeMgr->loadProvider(convertToFileUrl(*i), false); |
56 | } |
57 | for (std::vector< OString >::const_iterator i( |
58 | options.getInputFiles().begin()); |
59 | i != options.getInputFiles().end(); ++i) |
60 | { |
61 | typeMgr->loadProvider(convertToFileUrl(*i), true); |
62 | } |
63 | codemaker::GeneratedTypeSet generated; |
64 | if (options.isValid("-T" )) { |
65 | OUString names(b2u(options.getOption("-T" ))); |
66 | for (sal_Int32 i = 0; i != -1;) { |
67 | OUString name(names.getToken(0, ';', i)); |
68 | if (!name.isEmpty()) { |
69 | produce( |
70 | (name == "*" |
71 | ? "" |
72 | : name.endsWith(".*" ) |
73 | ? name.copy(0, name.getLength() - std::strlen(".*" )) |
74 | : name), |
75 | typeMgr, generated, options); |
76 | } |
77 | } |
78 | } else { |
79 | produce("" , typeMgr, generated, options); |
80 | } |
81 | if (!options.isValid("-nD" )) { |
82 | // C++ header files generated for the following UNO types are |
83 | // included in header files in cppu/inc/com/sun/star/uno (Any.hxx, |
84 | // Reference.hxx, Type.h), so it seems best to always generate those |
85 | // C++ header files: |
86 | produce( |
87 | "com.sun.star.uno.RuntimeException" , typeMgr, generated, |
88 | options); |
89 | produce( |
90 | "com.sun.star.uno.TypeClass" , typeMgr, generated, options); |
91 | produce( |
92 | "com.sun.star.uno.XInterface" , typeMgr, generated, options); |
93 | } |
94 | } catch (CannotDumpException & e) { |
95 | std::cerr << "ERROR: " << e.getMessage() << '\n'; |
96 | return EXIT_FAILURE; |
97 | } catch (unoidl::NoSuchFileException & e) { |
98 | std::cerr << "ERROR: No such file <" << e.getUri() << ">\n" ; |
99 | return EXIT_FAILURE; |
100 | } catch (unoidl::FileFormatException & e) { |
101 | std::cerr |
102 | << "ERROR: Bad format of <" << e.getUri() << ">, \"" |
103 | << e.getDetail() << "\"\n" ; |
104 | return EXIT_FAILURE; |
105 | } |
106 | return EXIT_SUCCESS; |
107 | } |
108 | |
109 | /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ |
110 | |