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 ArgumentParser *argp = new ArgumentParser(argc, argv, "hd:v"); 00043 00044 const vector<const char *> & items = argp->items(); 00045 if ( items.size() == 0 || argp->has_arg("h") ) { 00046 cout << "Fawkes Interface generator - Usage Instructions" << endl 00047 << "===============================================================================" << endl 00048 << "Usage: " << argv[0] << " [-h] [-d dir] [-v] config.xml [config2.xml...]" << endl 00049 << "where [options] is one or more of:" << endl 00050 << " -h These help instructions" << endl 00051 << " -d dir Directory where to write generated files" << endl 00052 << " -v Verbose console output." << endl 00053 << endl; 00054 } else { 00055 string dir = "."; 00056 if ( argp->has_arg("d") ) { 00057 dir = argp->arg("d"); 00058 } 00059 00060 for ( vector<const char *>::const_iterator i = items.begin(); i != items.end(); ++i) { 00061 string s = *i; 00062 string prefix; 00063 size_t pos; 00064 00065 if ( ( pos = s.find_last_of (".")) != string::npos ) { 00066 prefix = s.substr(0, pos); 00067 } else { 00068 prefix = s; 00069 } 00070 s = prefix; 00071 if ( ( pos = s.find_last_of ("/")) != string::npos ) { 00072 prefix = s.substr(pos + 1); 00073 } else { 00074 prefix = s; 00075 } 00076 00077 if ( ! File::exists( *i ) ) { 00078 cout << "File " << *i << " does not exist" << endl; 00079 continue; 00080 } else if (! File::is_regular( *i ) ) { 00081 cout << *i << " is not a regular file" << endl; 00082 continue; 00083 } 00084 00085 try { 00086 InterfaceParser *iparse = new InterfaceParser(*i); 00087 iparse->parse(); 00088 if ( argp->has_arg("v") ) { 00089 iparse->print(); 00090 } 00091 00092 InterfaceDigest *idigest = new InterfaceDigest(*i); 00093 00094 CppInterfaceGenerator *cppigen = new CppInterfaceGenerator(dir, 00095 iparse->getInterfaceName(), 00096 prefix, 00097 iparse->getInterfaceAuthor(), 00098 iparse->getInterfaceYear(), 00099 iparse->getInterfaceCreationDate(), 00100 iparse->getDataComment(), 00101 idigest->get_hash(), 00102 idigest->get_hash_size(), 00103 iparse->getConstants(), 00104 iparse->getEnumConstants(), 00105 iparse->getDataFields(), 00106 iparse->getPseudoMaps(), 00107 iparse->getMessages() 00108 ); 00109 00110 ToLuaInterfaceGenerator *toluaigen = new ToLuaInterfaceGenerator(dir, 00111 iparse->getInterfaceName(), 00112 prefix, 00113 iparse->getInterfaceAuthor(), 00114 iparse->getInterfaceYear(), 00115 iparse->getInterfaceCreationDate(), 00116 iparse->getDataComment(), 00117 idigest->get_hash(), 00118 idigest->get_hash_size(), 00119 iparse->getConstants(), 00120 iparse->getEnumConstants(), 00121 iparse->getDataFields(), 00122 iparse->getPseudoMaps(), 00123 iparse->getMessages() 00124 ); 00125 00126 cppigen->generate(); 00127 toluaigen->generate(); 00128 00129 delete cppigen; 00130 delete toluaigen; 00131 00132 delete iparse; 00133 delete idigest; 00134 } catch (Exception &e) { 00135 cout << "Generating the interface failed." << endl; 00136 e.print_trace(); 00137 } 00138 } 00139 } 00140 00141 delete argp; 00142 }