summaryrefslogtreecommitdiff
path: root/codemaker/source/cppumaker/cppumaker.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'codemaker/source/cppumaker/cppumaker.cxx')
-rw-r--r--codemaker/source/cppumaker/cppumaker.cxx254
1 files changed, 60 insertions, 194 deletions
diff --git a/codemaker/source/cppumaker/cppumaker.cxx b/codemaker/source/cppumaker/cppumaker.cxx
index 1f63ef26b5b2..8869e87df4d6 100644
--- a/codemaker/source/cppumaker/cppumaker.cxx
+++ b/codemaker/source/cppumaker/cppumaker.cxx
@@ -17,221 +17,87 @@
* the License at http://www.apache.org/licenses/LICENSE-2.0 .
*/
+#include "sal/config.h"
-#include <stdio.h>
+#include <cstdlib>
+#include <cstring>
+#include <iostream>
+#include <vector>
+#include "codemaker/generatedtypeset.hxx"
+#include "codemaker/typemanager.hxx"
#include "rtl/ref.hxx"
+#include "rtl/string.hxx"
+#include "rtl/ustring.hxx"
#include "sal/main.h"
-
-#include "codemaker/typemanager.hxx"
-#include "codemaker/generatedtypeset.hxx"
+#include "sal/types.h"
+#include "unoidl/unoidl.hxx"
#include "cppuoptions.hxx"
#include "cpputype.hxx"
-
-namespace {
-
-void failed(OString const & typeName, CppuOptions * options) {
- fprintf(stderr, "%s ERROR: %s\n", options->getProgramName().getStr(),
- OString("cannot dump Type '" + typeName + "'").getStr());
- exit(99);
-}
-
-void produce(
- RegistryKey& rTypeKey, bool bIsExtraType,
- rtl::Reference< TypeManager > const & typeMgr,
- codemaker::GeneratedTypeSet & generated, CppuOptions * options)
-{
- if (!produceType(rTypeKey, bIsExtraType, typeMgr, generated, options)) {
- OString typeName = typeMgr->getTypeName(rTypeKey);
- failed(typeName, options);
- }
-}
-
-void produce(
- OString const & typeName,
- rtl::Reference< TypeManager > const & typeMgr,
- codemaker::GeneratedTypeSet & generated, CppuOptions * options)
-{
- if (!produceType(typeName, typeMgr, generated, options)) {
- failed(typeName, options);
- }
-}
-
-void produceAllTypes(RegistryKey& rTypeKey, bool bIsExtraType,
- rtl::Reference< TypeManager > const & typeMgr,
- codemaker::GeneratedTypeSet & generated,
- CppuOptions* pOptions,
- sal_Bool bFullScope)
- throw( CannotDumpException )
-{
- OString typeName = typeMgr->getTypeName(rTypeKey);
-
- produce(rTypeKey, bIsExtraType, typeMgr, generated, pOptions);
-
- RegistryKeyList typeKeys = typeMgr->getTypeKeys(typeName);
- RegistryKeyList::const_iterator iter = typeKeys.begin();
- RegistryKey key, subKey;
- RegistryKeyArray subKeys;
-
- while (iter != typeKeys.end())
- {
- key = (*iter).first;
-
- if (!(*iter).second && !key.openSubKeys(OUString(), subKeys))
- {
- for (sal_uInt32 i = 0; i < subKeys.getLength(); i++)
- {
- subKey = subKeys.getElement(i);
- if (bFullScope)
- {
- produceAllTypes(subKey, (*iter).second, typeMgr,
- generated, pOptions, true);
- } else
- {
- produce(subKey, (*iter).second,
- typeMgr, generated, pOptions);
- }
- }
+SAL_IMPLEMENT_MAIN_WITH_ARGS(argc, argv) {
+ CppuOptions options;
+ try {
+ if (!options.initOptions(argc, argv)) {
+ return EXIT_FAILURE;
}
-
- ++iter;
+ } catch (IllegalArgument & e) {
+ std::cerr << "Illegal option " << e.m_message << '\n';
+ return EXIT_FAILURE;
}
-}
-
-void produceAllTypes(const OString& typeName,
- rtl::Reference< TypeManager > const & typeMgr,
- codemaker::GeneratedTypeSet & generated,
- CppuOptions* pOptions,
- sal_Bool bFullScope)
- throw( CannotDumpException )
-{
- produce(typeName, typeMgr, generated, pOptions);
-
- RegistryKeyList typeKeys = typeMgr->getTypeKeys(typeName);
- RegistryKeyList::const_iterator iter = typeKeys.begin();
- RegistryKey key, subKey;
- RegistryKeyArray subKeys;
-
- while (iter != typeKeys.end())
- {
- key = (*iter).first;
- if (!(*iter).second && !key.openSubKeys(OUString(), subKeys))
+ try {
+ rtl::Reference< TypeManager > typeMgr(new TypeManager);
+ for (std::vector< OString >::const_iterator i(
+ options.getExtraInputFiles().begin());
+ i != options.getExtraInputFiles().end(); ++i)
{
- for (sal_uInt32 i = 0; i < subKeys.getLength(); i++)
- {
- subKey = subKeys.getElement(i);
- if (bFullScope)
- {
- produceAllTypes(subKey, (*iter).second, typeMgr,
- generated, pOptions, true);
- } else
- {
- produce(subKey, (*iter).second,
- typeMgr, generated, pOptions);
- }
- }
+ typeMgr->loadProvider(b2u(*i), false);
}
-
- ++iter;
- }
-}
-
-}
-
-SAL_IMPLEMENT_MAIN_WITH_ARGS(argc, argv)
-{
- CppuOptions options;
-
- try
- {
- if (!options.initOptions(argc, argv))
+ for (std::vector< OString >::const_iterator i(
+ options.getInputFiles().begin());
+ i != options.getInputFiles().end(); ++i)
{
- exit(1);
+ typeMgr->loadProvider(b2u(*i), true);
}
- }
- catch( IllegalArgument& e)
- {
- fprintf(stderr, "Illegal option: %s\n", e.m_message.getStr());
- exit(99);
- }
-
- rtl::Reference< TypeManager > typeMgr(new TypeManager);
-
- if (!typeMgr->init(options.getInputFiles(), options.getExtraInputFiles()))
- {
- fprintf(stderr, "%s : init registries failed, check your registry files.\n", options.getProgramName().getStr());
- exit(99);
- }
-
- if (options.isValid("-B"))
- {
- typeMgr->setBase(options.getOption("-B"));
- }
-
- codemaker::GeneratedTypeSet generated;
- try
- {
- if (options.isValid("-T"))
- {
- OString tOption(options.getOption("-T"));
-
- OString typeName, tmpName;
- sal_Int32 nIndex = 0;
- do
- {
- typeName = tOption.getToken(0, ';', nIndex);
-
- sal_Int32 nPos = typeName.lastIndexOf( '.' );
- tmpName = typeName.copy( nPos != -1 ? nPos+1 : 0 );
- if (tmpName == "*")
- {
- // produce this type and his scope
- if (typeName == "*")
- {
- tmpName = "/";
- } else
- {
- tmpName = typeName.copy(0, typeName.lastIndexOf('.')).replace('.', '/');
- if (tmpName.isEmpty())
- tmpName = "/";
- else
- tmpName = tmpName.replace('.', '/');
- }
- // related to task #116780# the scope is recursively
- // generated. bFullScope = true
- produceAllTypes(
- tmpName, typeMgr, generated, &options, true);
- } else
- {
- // produce only this type
+ codemaker::GeneratedTypeSet generated;
+ if (options.isValid("-T")) {
+ OUString names(b2u(options.getOption("-T")));
+ for (sal_Int32 i = 0; i != -1;) {
+ OUString name(names.getToken(0, ';', i));
+ if (!name.isEmpty()) {
produce(
- typeName.replace('.', '/'), typeMgr, generated, &options);
+ (name == "*"
+ ? ""
+ : name.endsWith(".*")
+ ? name.copy(0, name.getLength() - std::strlen(".*"))
+ : name),
+ typeMgr, generated, options);
}
- } while( nIndex != -1 );
- } else
- {
- // produce all types
- produceAllTypes("/", typeMgr, generated, &options, true);
+ }
+ } else {
+ produce("", typeMgr, generated, options);
}
// C++ header files generated for the following UNO types are included
// in header files in cppu/inc/com/sun/star/uno (Any.hxx, Reference.hxx,
// Type.h), so it seems best to always generate those C++ header files:
- produce("com/sun/star/uno/RuntimeException", typeMgr, generated, &options);
- produce("com/sun/star/uno/TypeClass", typeMgr, generated, &options);
- produce("com/sun/star/uno/XInterface", typeMgr, generated, &options);
+ produce(
+ "com.sun.star.uno.RuntimeException", typeMgr, generated, options);
+ produce("com.sun.star.uno.TypeClass", typeMgr, generated, options);
+ produce("com.sun.star.uno.XInterface", typeMgr, generated, options);
+ } catch (CannotDumpException & e) {
+ std::cerr << "ERROR: " << e.getMessage() << '\n';
+ return EXIT_FAILURE;
+ } catch (unoidl::NoSuchFileException & e) {
+ std::cerr << "ERROR: No such file <" << e.getUri() << ">\n";
+ return EXIT_FAILURE;
+ } catch (unoidl::FileFormatException & e) {
+ std::cerr
+ << "ERROR: Bad format of <" << e.getUri() << ">, \""
+ << e.getDetail() << "\"\n";
+ return EXIT_FAILURE;
}
- catch( CannotDumpException& e)
- {
- fprintf(stderr, "%s ERROR: %s\n",
- options.getProgramName().getStr(),
- e.m_message.getStr());
- exit(99);
- }
-
- return 0;
+ return EXIT_SUCCESS;
}
-
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */