main.cpp

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 }

Generated on Tue Feb 22 13:32:17 2011 for Fawkes API by  doxygen 1.4.7