Fawkes API
Fawkes Development Version
|
00001 00002 /*************************************************************************** 00003 * main.cpp - Interface generator main app 00004 * 00005 * Generated: Tue Oct 10 17:42:05 2006 00006 * Copyright 2006 Tim Niemueller [www.niemueller.de] 00007 * 00008 ****************************************************************************/ 00009 00010 /* This program is free software; you can redistribute it and/or modify 00011 * it under the terms of the GNU General Public License as published by 00012 * the Free Software Foundation; either version 2 of the License, or 00013 * (at your option) any later version. 00014 * 00015 * This program is distributed in the hope that it will be useful, 00016 * but WITHOUT ANY WARRANTY; without even the implied warranty of 00017 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 00018 * GNU Library General Public License for more details. 00019 * 00020 * Read the full text in the LICENSE.GPL file in the doc directory. 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 int rv = 0; 00043 ArgumentParser *argp = new ArgumentParser(argc, argv, "hd:v"); 00044 00045 const vector<const char *> & items = argp->items(); 00046 if ( items.size() == 0 || argp->has_arg("h") ) { 00047 cout << "Fawkes Interface generator - Usage Instructions" << endl 00048 << "===============================================================================" << endl 00049 << "Usage: " << argv[0] << " [-h] [-d dir] [-v] config.xml [config2.xml...]" << endl 00050 << "where [options] is one or more of:" << endl 00051 << " -h These help instructions" << endl 00052 << " -d dir Directory where to write generated files" << endl 00053 << " -v Verbose console output." << endl 00054 << endl; 00055 } else { 00056 string dir = "."; 00057 if ( argp->has_arg("d") ) { 00058 dir = argp->arg("d"); 00059 } 00060 00061 for ( vector<const char *>::const_iterator i = items.begin(); i != items.end(); ++i) { 00062 string s = *i; 00063 string prefix; 00064 size_t pos; 00065 00066 if ( ( pos = s.find_last_of (".")) != string::npos ) { 00067 prefix = s.substr(0, pos); 00068 } else { 00069 prefix = s; 00070 } 00071 s = prefix; 00072 if ( ( pos = s.find_last_of ("/")) != string::npos ) { 00073 prefix = s.substr(pos + 1); 00074 } else { 00075 prefix = s; 00076 } 00077 00078 if ( ! File::exists( *i ) ) { 00079 cout << "File " << *i << " does not exist" << endl; 00080 continue; 00081 } else if (! File::is_regular( *i ) ) { 00082 cout << *i << " is not a regular file" << endl; 00083 continue; 00084 } 00085 00086 try { 00087 InterfaceParser *iparse = new InterfaceParser(*i); 00088 iparse->parse(); 00089 if ( argp->has_arg("v") ) { 00090 iparse->print(); 00091 } 00092 00093 InterfaceDigest *idigest = new InterfaceDigest(*i); 00094 00095 CppInterfaceGenerator *cppigen = new CppInterfaceGenerator(dir, 00096 iparse->getInterfaceName(), 00097 prefix, 00098 iparse->getInterfaceAuthor(), 00099 iparse->getInterfaceYear(), 00100 iparse->getInterfaceCreationDate(), 00101 iparse->getDataComment(), 00102 idigest->get_hash(), 00103 idigest->get_hash_size(), 00104 iparse->getConstants(), 00105 iparse->getEnumConstants(), 00106 iparse->getDataFields(), 00107 iparse->getPseudoMaps(), 00108 iparse->getMessages() 00109 ); 00110 00111 ToLuaInterfaceGenerator *toluaigen = new ToLuaInterfaceGenerator(dir, 00112 iparse->getInterfaceName(), 00113 prefix, 00114 iparse->getInterfaceAuthor(), 00115 iparse->getInterfaceYear(), 00116 iparse->getInterfaceCreationDate(), 00117 iparse->getDataComment(), 00118 idigest->get_hash(), 00119 idigest->get_hash_size(), 00120 iparse->getConstants(), 00121 iparse->getEnumConstants(), 00122 iparse->getDataFields(), 00123 iparse->getPseudoMaps(), 00124 iparse->getMessages() 00125 ); 00126 00127 cppigen->generate(); 00128 toluaigen->generate(); 00129 00130 delete cppigen; 00131 delete toluaigen; 00132 00133 delete iparse; 00134 delete idigest; 00135 } catch (Exception &e) { 00136 cout << "Generating the interface failed." << endl; 00137 e.print_trace(); 00138 rv = -1; 00139 } 00140 } 00141 } 00142 00143 delete argp; 00144 00145 return rv; 00146 }