diff options
author | Sebastien Barre <sebastien.barre@kitware.com> | 2001-05-24 18:59:09 (GMT) |
---|---|---|
committer | Sebastien Barre <sebastien.barre@kitware.com> | 2001-05-24 18:59:09 (GMT) |
commit | a2a40b125918797471919f526edea2990e29bc69 (patch) | |
tree | 6714eea1dc357bd5a8395fb0bbb146d0507c58b3 /Source/cmVTKWrapTclCommand.cxx | |
parent | ffd7cfd7c3482531fe8f7469685ff5a0c19e2b68 (diff) | |
download | CMake-a2a40b125918797471919f526edea2990e29bc69.zip CMake-a2a40b125918797471919f526edea2990e29bc69.tar.gz CMake-a2a40b125918797471919f526edea2990e29bc69.tar.bz2 |
updated to handle Tk commands compiled/linked separately. Useful for VTK Tk widgets for example.
Diffstat (limited to 'Source/cmVTKWrapTclCommand.cxx')
-rw-r--r-- | Source/cmVTKWrapTclCommand.cxx | 124 |
1 files changed, 83 insertions, 41 deletions
diff --git a/Source/cmVTKWrapTclCommand.cxx b/Source/cmVTKWrapTclCommand.cxx index 8080c43..11136b7 100644 --- a/Source/cmVTKWrapTclCommand.cxx +++ b/Source/cmVTKWrapTclCommand.cxx @@ -56,39 +56,72 @@ bool cmVTKWrapTclCommand::Invoke(std::vector<std::string>& args) return true; } - // add in a depend in the vtkVTKWrapTcl executable - m_Makefile->AddUtility("vtkWrapTcl"); - - // what is the current source dir - std::string cdir = m_Makefile->GetCurrentDirectory(); - // keep the library name m_LibraryName = args[0]; - m_SourceList = args[1]; - - // get the list of classes for this library - cmMakefile::SourceMap &Classes = m_Makefile->GetSources(); - for(std::vector<std::string>::iterator j = (args.begin() + 2); + + // extract the sources and commands parameters + std::vector<std::string> sources; + bool doing_sources = true; + + for(std::vector<std::string>::iterator j = (args.begin() + 1); j != args.end(); ++j) { - cmMakefile::SourceMap::iterator l = Classes.find(*j); - for(std::vector<cmSourceFile>::iterator i = l->second.begin(); - i != l->second.end(); i++) + if(*j == "SOURCES") + { + doing_sources = true; + } + else if (*j == "COMMANDS") { - cmSourceFile &curr = *i; - // if we should wrap the class - if (!curr.GetWrapExclude()) + doing_sources = false; + } + else + { + if(doing_sources) + { + sources.push_back(*j); + } + else + { + m_Commands.push_back(*j); + } + } + } + + // get the list of classes for this library + if (sources.size()) + { + // what is the current source dir + std::string cdir = m_Makefile->GetCurrentDirectory(); + + // add in a depend in the vtkVTKWrapTcl executable + m_Makefile->AddUtility("vtkWrapTcl"); + + // get the resulting source list name + m_SourceList = sources[0]; + + cmMakefile::SourceMap &Classes = m_Makefile->GetSources(); + for(std::vector<std::string>::iterator j = (sources.begin() + 1); + j != sources.end(); ++j) + { + cmMakefile::SourceMap::iterator l = Classes.find(*j); + for(std::vector<cmSourceFile>::iterator i = l->second.begin(); + i != l->second.end(); i++) { - cmSourceFile file; - file.SetIsAnAbstractClass(curr.IsAnAbstractClass()); - std::string newName = curr.GetSourceName() + "Tcl"; - file.SetName(newName.c_str(), m_Makefile->GetCurrentOutputDirectory(), - "cxx",false); - std::string hname = cdir + "/" + curr.GetSourceName() + ".h"; - m_WrapHeaders.push_back(hname); - // add starting depends - file.GetDepends().push_back(hname); - m_WrapClasses.push_back(file); + cmSourceFile &curr = *i; + // if we should wrap the class + if (!curr.GetWrapExclude()) + { + cmSourceFile file; + file.SetIsAnAbstractClass(curr.IsAnAbstractClass()); + std::string newName = curr.GetSourceName() + "Tcl"; + file.SetName(newName.c_str(), m_Makefile->GetCurrentOutputDirectory(), + "cxx",false); + std::string hname = cdir + "/" + curr.GetSourceName() + ".h"; + m_WrapHeaders.push_back(hname); + // add starting depends + file.GetDepends().push_back(hname); + m_WrapClasses.push_back(file); + } } } } @@ -135,18 +168,8 @@ void cmVTKWrapTclCommand::FinalPass() bool cmVTKWrapTclCommand::CreateInitFile(std::string& res) { - unsigned int i; - /* we have to make sure that the name is the correct case */ - std::string kitName = m_LibraryName; - if (kitName[0] > 90) kitName[0] -= 32; - for (i = 1; i < kitName.size(); i++) - { - if ((kitName[i] > 64)&&(kitName[i] < 91)) - { - kitName[i] += 32; - } - } + std::string kitName = cmSystemTools::Capitalized(m_LibraryName); std::vector<std::string> classes; int lastClass = m_WrapHeaders.size(); @@ -187,6 +210,13 @@ bool cmVTKWrapTclCommand::WriteInit(const char *kitName, { return false; } + + // capitalized commands just once + std::vector<std::string> capcommands; + for (i = 0; i < m_Commands.size(); i++) + { + capcommands.push_back(cmSystemTools::Capitalized(m_Commands[i])); + } fprintf(fout,"#include \"vtkTclUtil.h\"\n"); @@ -211,14 +241,20 @@ bool cmVTKWrapTclCommand::WriteInit(const char *kitName, } fprintf(fout,"extern void vtkTclDeleteObjectFromHash(void *);\n"); fprintf(fout,"extern void vtkTclListInstances(Tcl_Interp *interp, ClientData arg);\n"); + + for (i = 0; i < m_Commands.size(); i++) + { + fprintf(fout,"\nextern \"C\" {int VTK_EXPORT %s_Init(Tcl_Interp *interp);}\n", + capcommands[i].c_str()); + } - fprintf(fout,"\n\nextern \"C\" {int VTK_EXPORT %s_SafeInit(Tcl_Interp *interp);}\n\n", + fprintf(fout,"\n\nextern \"C\" {int VTK_EXPORT %s_SafeInit(Tcl_Interp *interp);}\n", kitName); - fprintf(fout,"\n\nextern \"C\" {int VTK_EXPORT %s_Init(Tcl_Interp *interp);}\n\n", + fprintf(fout,"\nextern \"C\" {int VTK_EXPORT %s_Init(Tcl_Interp *interp);}\n", kitName); /* create an extern ref to the generic delete function */ - fprintf(fout,"\n\nextern void vtkTclGenericDeleteObject(ClientData cd);\n\n"); + fprintf(fout,"\nextern void vtkTclGenericDeleteObject(ClientData cd);\n"); /* the main declaration */ fprintf(fout,"\n\nint VTK_EXPORT %s_SafeInit(Tcl_Interp *interp)\n{\n",kitName); @@ -247,6 +283,12 @@ bool cmVTKWrapTclCommand::WriteInit(const char *kitName, fprintf(fout," Tcl_CreateCommand(interp,(char *) \"vtkCommand\",vtkCommand,\n (ClientData *)NULL, NULL);\n\n"); } + for (i = 0; i < m_Commands.size(); i++) + { + fprintf(fout," %s_Init(interp);\n", capcommands[i].c_str()); + } + fprintf(fout,"\n"); + for (i = 0; i < classes.size(); i++) { fprintf(fout," vtkTclCreateNew(interp,(char *) \"%s\", %sNewCommand,\n", |