main.cpp
00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 #include <interfaces/generator/cpp_generator.h>
00024 #include <interfaces/generator/tolua_generator.h>
00025 #include <interfaces/generator/parser.h>
00026 #include <interfaces/generator/digest.h>
00027 #include <interfaces/generator/exceptions.h>
00028
00029 #include <utils/system/argparser.h>
00030 #include <utils/system/file.h>
00031
00032 #include <iostream>
00033 #include <vector>
00034 #include <string>
00035
00036 using namespace std;
00037 using namespace fawkes;
00038
00039 int
00040 main(int argc, char **argv)
00041 {
00042 ArgumentParser *argp = new ArgumentParser(argc, argv, "d:v");
00043
00044 const vector<const char *> & items = argp->items();
00045 if ( items.size() == 0 ) {
00046 cout << "Usage: " << argv[0] << " [-d dir] config.xml [config2.xml...]" << endl << endl;
00047 } else {
00048 string dir = ".";
00049 if ( argp->has_arg("d") ) {
00050 dir = argp->arg("d");
00051 }
00052
00053 for ( vector<const char *>::const_iterator i = items.begin(); i != items.end(); ++i) {
00054 string s = *i;
00055 string prefix;
00056 size_t pos;
00057
00058 if ( ( pos = s.find_last_of (".")) != string::npos ) {
00059 prefix = s.substr(0, pos);
00060 } else {
00061 prefix = s;
00062 }
00063 s = prefix;
00064 if ( ( pos = s.find_last_of ("/")) != string::npos ) {
00065 prefix = s.substr(pos + 1);
00066 } else {
00067 prefix = s;
00068 }
00069
00070 if ( ! File::exists( *i ) ) {
00071 cout << "File " << *i << " does not exist" << endl;
00072 continue;
00073 } else if (! File::is_regular( *i ) ) {
00074 cout << *i << " is not a regular file" << endl;
00075 continue;
00076 }
00077
00078 try {
00079 InterfaceParser *iparse = new InterfaceParser(*i);
00080 iparse->parse();
00081 if ( argp->has_arg("v") ) {
00082 iparse->print();
00083 }
00084
00085 InterfaceDigest *idigest = new InterfaceDigest(*i);
00086
00087 CppInterfaceGenerator *cppigen = new CppInterfaceGenerator(dir,
00088 iparse->getInterfaceName(),
00089 prefix,
00090 iparse->getInterfaceAuthor(),
00091 iparse->getInterfaceYear(),
00092 iparse->getInterfaceCreationDate(),
00093 iparse->getDataComment(),
00094 idigest->get_hash(),
00095 idigest->get_hash_size(),
00096 iparse->getConstants(),
00097 iparse->getEnumConstants(),
00098 iparse->getDataFields(),
00099 iparse->getPseudoMaps(),
00100 iparse->getMessages()
00101 );
00102
00103 ToLuaInterfaceGenerator *toluaigen = new ToLuaInterfaceGenerator(dir,
00104 iparse->getInterfaceName(),
00105 prefix,
00106 iparse->getInterfaceAuthor(),
00107 iparse->getInterfaceYear(),
00108 iparse->getInterfaceCreationDate(),
00109 iparse->getDataComment(),
00110 idigest->get_hash(),
00111 idigest->get_hash_size(),
00112 iparse->getConstants(),
00113 iparse->getEnumConstants(),
00114 iparse->getDataFields(),
00115 iparse->getPseudoMaps(),
00116 iparse->getMessages()
00117 );
00118
00119 cppigen->generate();
00120 toluaigen->generate();
00121
00122 delete cppigen;
00123 delete toluaigen;
00124
00125 delete iparse;
00126 delete idigest;
00127 } catch (Exception &e) {
00128 cout << "Generating the interface failed." << endl;
00129 e.print_trace();
00130 }
00131 }
00132 }
00133
00134 delete argp;
00135 }