Parallel build on SMP machines, added cppunit-devel to build requirements, proper...
[libt2n] / codegen / main.cpp
index ca91221..75e58a0 100644 (file)
@@ -1,20 +1,24 @@
 /*
-    Copyright (C) 2006-2008
+    Copyright (C) 2006-2008 by Intra2net AG
     intra2net.com
 
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
+    The software in this package is distributed under the GNU General
+    Public License version 2 (with a special exception described below).
 
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
+    A copy of GNU General Public License (GPL) is included in this distribution,
+    in the file COPYING.GPL.
 
-    You should have received a copy of the GNU General Public License
-    along with this program; if not, write to the Free Software
-    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+    As a special exception, if other files instantiate templates or use macros
+    or inline functions from this file, or you compile this file and link it
+    with other works to produce a work based on this file, this file
+    does not by itself cause the resulting work to be covered
+    by the GNU General Public License.
+
+    However the source code for this file must still be made available
+    in accordance with section (3) of the GNU General Public License.
+
+    This exception does not invalidate any other reasons why a work based
+    on this file might be covered by the GNU General Public License.
 */
 
 #include <libxml++/libxml++.h>
@@ -24,6 +28,7 @@
 #include <fstream>
 #include <list>
 #include <stdexcept>
+#include <string>
 #include <boost/lexical_cast.hpp>
 #ifdef HAVE_CONFIG_H
 #include "config.h"
@@ -323,8 +328,22 @@ protected:
                 assert(arg->get_attribute("type"));
                 a.type=get_type(root, arg->get_attribute("type")->get_value());
 
-                if(arg->get_attribute("default"))
-                    a.defaultArg=arg->get_attribute("default")->get_value();
+                // this would be the nice way of solving the problem of default arguments
+                // but currently the output of gccxml is unreliable (e.g. namespace only
+                // sometimes available)
+                // if(arg->get_attribute("default"))
+                //    a.defaultArg=arg->get_attribute("default")->get_value();
+
+                // so we need to get the def. arg. via attribute
+                // which is previously set by the macro LIBT2N_DEFAULT_ARG(type,value)
+                if(arg->get_attribute("attributes"))
+                {
+                    std::string attr=arg->get_attribute("attributes")->get_value();
+                    const std::string look_for = "gccxml(libt2n-default-arg,";
+
+                    if (attr.compare(0,look_for.size(),look_for) == 0)
+                        a.defaultArg=attr.substr(look_for.size(),attr.size()-look_for.size()-1);
+                }
 
                 // todo: ugly - could be any other error
                 if (a.type.name.empty())
@@ -477,7 +496,7 @@ void output_client_hpp(std::ostream &o, const std::string &group, const std::lis
     o << "class " << groupClass(group) << "_client : public libt2n::command_client\n"
     << "{\n"
     << "public:\n"
-    << groupClass(group) << "_client(libt2n::client_connection &_c,\n"
+    << groupClass(group) << "_client(libt2n::client_connection *_c,\n"
     << " long long _command_timeout_usec=command_timeout_usec_default,\n"
     << " long long _hello_timeout_usec=hello_timeout_usec_default)\n"
     << " : libt2n::command_client(_c,_command_timeout_usec,_hello_timeout_usec)\n"