summaryrefslogtreecommitdiffstats
path: root/Source/cmVTKMakeInstantiatorCommand.cxx
diff options
context:
space:
mode:
authorKen Martin <ken.martin@kitware.com>2006-12-12 19:40:21 (GMT)
committerKen Martin <ken.martin@kitware.com>2006-12-12 19:40:21 (GMT)
commited4d2ec51e6e28be0daefe263df998b176adb980 (patch)
tree6d4311028d069c6e0a86a0eb55c2ca26bf830b1b /Source/cmVTKMakeInstantiatorCommand.cxx
parentaf2b0e023ab7852038ff7c06281dee48a445eeaa (diff)
downloadCMake-ed4d2ec51e6e28be0daefe263df998b176adb980.zip
CMake-ed4d2ec51e6e28be0daefe263df998b176adb980.tar.gz
CMake-ed4d2ec51e6e28be0daefe263df998b176adb980.tar.bz2
ENH: remove old commands
Diffstat (limited to 'Source/cmVTKMakeInstantiatorCommand.cxx')
-rw-r--r--Source/cmVTKMakeInstantiatorCommand.cxx491
1 files changed, 0 insertions, 491 deletions
diff --git a/Source/cmVTKMakeInstantiatorCommand.cxx b/Source/cmVTKMakeInstantiatorCommand.cxx
deleted file mode 100644
index 9f7a2f9..0000000
--- a/Source/cmVTKMakeInstantiatorCommand.cxx
+++ /dev/null
@@ -1,491 +0,0 @@
-/*=========================================================================
-
- Program: CMake - Cross-Platform Makefile Generator
- Module: $RCSfile$
- Language: C++
- Date: $Date$
- Version: $Revision$
-
- Copyright (c) 2002 Kitware, Inc., Insight Consortium. All rights reserved.
- See Copyright.txt or http://www.cmake.org/HTML/Copyright.html for details.
-
- This software is distributed WITHOUT ANY WARRANTY; without even
- the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
- PURPOSE. See the above copyright notices for more information.
-
-=========================================================================*/
-#include "cmVTKMakeInstantiatorCommand.h"
-
-#include "cmCacheManager.h"
-#include "cmGeneratedFileStream.h"
-#include "cmSourceFile.h"
-
-bool
-cmVTKMakeInstantiatorCommand
-::InitialPass(std::vector<std::string> const& argsIn)
-{
- if(argsIn.size() < 3)
- {
- this->SetError("called with incorrect number of arguments");
- return false;
- }
- std::vector<std::string> args;
- this->Makefile->ExpandSourceListArguments(argsIn, args, 2);
- std::string sourceListValue;
-
- this->ClassName = args[0];
-
- std::vector<cmStdString> inSourceLists;
- this->ExportMacro = "-";
- bool includesMode = false;
- bool oldVersion = true;
-
- // Find the path of the files to be generated.
- std::string filePath = this->Makefile->GetCurrentOutputDirectory();
- std::string headerPath = filePath;
-
- // Check whether to use the old or new form.
- if(this->Makefile->GetDefinition("VTK_USE_INSTANTIATOR_NEW"))
- {
- oldVersion = false;
- }
-
- for(unsigned int i=2;i < args.size();++i)
- {
- if(args[i] == "HEADER_LOCATION")
- {
- includesMode = false;
- if(++i < args.size())
- {
- headerPath = args[i];
- }
- else
- {
- this->SetError("HEADER_LOCATION option used without value.");
- return false;
- }
- }
- else if(args[i] == "EXPORT_MACRO")
- {
- includesMode = false;
- if(++i < args.size())
- {
- this->ExportMacro = args[i];
- }
- else
- {
- this->SetError("EXPORT_MACRO option used without value.");
- return false;
- }
- }
- else if(args[i] == "INCLUDES")
- {
- includesMode = true;
- }
- // If not an option, it must be another input source list name or
- // an include file.
- else
- {
- if(!includesMode)
- {
- inSourceLists.push_back(args[i]);
- }
- else
- {
- this->Includes.push_back(args[i]);
- }
- }
- }
-
- if(this->ExportMacro == "-")
- {
- this->SetError("No EXPORT_MACRO option given.");
- return false;
- }
-
- for(std::vector<cmStdString>::const_iterator s = inSourceLists.begin();
- s != inSourceLists.end(); ++s)
- {
- std::string srcName = cmSystemTools::GetFilenameWithoutExtension(*s);
- cmSourceFile *sf = this->Makefile->GetSource(s->c_str());
-
- // Wrap-excluded and abstract classes do not have a New() method.
- // vtkIndent and vtkTimeStamp are special cases and are not
- // vtkObject subclasses.
- if(
- (!sf || (!sf->GetPropertyAsBool("WRAP_EXCLUDE") &&
- !sf->GetPropertyAsBool("ABSTRACT"))) &&
- ((srcName != "vtkIndent") && (srcName != "vtkTimeStamp")))
- {
- this->Classes.push_back(srcName);
- }
- }
-
- // Generate the header with the class declaration.
- {
- std::string fileName = this->ClassName + ".h";
- std::string fullName = headerPath+"/"+fileName;
-
- // Generate the output file with copy-if-different.
- cmGeneratedFileStream fout(fullName.c_str());
- fout.SetCopyIfDifferent(true);
-
- // Actually generate the code in the file.
- if(!oldVersion)
- {
- this->GenerateHeaderFile(fout);
- }
- else
- {
- this->OldGenerateHeaderFile(fout);
- }
- }
-
- // Generate the implementation file.
- {
- std::string fileName = this->ClassName + ".cxx";
- std::string fullName = filePath+"/"+fileName;
-
- // Generate the output file with copy-if-different.
- {
- cmGeneratedFileStream fout(fullName.c_str());
- fout.SetCopyIfDifferent(true);
-
- // Actually generate the code in the file.
- if(!oldVersion)
- {
- this->GenerateImplementationFile(fout);
- }
- else
- {
- this->OldGenerateImplementationFile(fout);
- }
- }
-
- // Add the generated source file into the source list.
- cmSourceFile file;
- file.GetProperties().SetCMakeInstance
- (this->Makefile->GetCMakeInstance());
- file.SetProperty("WRAP_EXCLUDE","1");
- file.SetProperty("ABSTRACT","0");
- file.SetName(fileName.c_str(), filePath.c_str(),
- this->Makefile->GetSourceExtensions(),
- this->Makefile->GetHeaderExtensions());
- this->Makefile->AddSource(file);
- sourceListValue += file.GetSourceName() + ".cxx";
- }
-
- if(oldVersion)
- {
- int groupSize = 10;
- size_t numClasses = this->Classes.size();
- size_t numFullBlocks = numClasses / groupSize;
- size_t lastBlockSize = numClasses % groupSize;
- size_t numBlocks = numFullBlocks + ((lastBlockSize>0)? 1:0);
-
- // Generate the files with the ::New() calls to each class. These
- // are done in groups to keep the translation unit size smaller.
- for(unsigned int block=0; block < numBlocks;++block)
- {
- std::string fileName = this->OldGenerateCreationFileName(block);
- std::string fullName = filePath+"/"+fileName;
-
- // Generate the output file with copy-if-different.
- {
- cmGeneratedFileStream fout(fullName.c_str());
- fout.SetCopyIfDifferent(true);
-
- size_t thisBlockSize =
- (block < numFullBlocks)? groupSize:lastBlockSize;
-
- // Actually generate the code in the file.
- this->OldGenerateCreationFile(fout,
- block*groupSize,
- static_cast<int>(thisBlockSize));
- }
-
- // Add the generated source file into the source list.
- cmSourceFile file;
- file.GetProperties().SetCMakeInstance
- (this->Makefile->GetCMakeInstance());
- file.SetProperty("WRAP_EXCLUDE","1");
- file.SetProperty("ABSTRACT","0");
- file.SetName(fileName.c_str(), filePath.c_str(),
- this->Makefile->GetSourceExtensions(),
- this->Makefile->GetHeaderExtensions());
- this->Makefile->AddSource(file);
- sourceListValue += ";";
- sourceListValue += file.GetSourceName() + ".cxx";
- }
- }
-
- this->Makefile->AddDefinition(args[1].c_str(), sourceListValue.c_str());
- return true;
-}
-
-// Generates the class header file with the definition of the class
-// and its initializer class.
-void
-cmVTKMakeInstantiatorCommand
-::GenerateHeaderFile(std::ostream& os)
-{
- os <<
- "#ifndef __" << this->ClassName.c_str() << "_h\n"
- "#define __" << this->ClassName.c_str() << "_h\n"
- "\n"
- "#include \"vtkInstantiator.h\"\n";
- for(unsigned int i=0;i < this->Includes.size();++i)
- {
- os << "#include \"" << this->Includes[i].c_str() << "\"\n";
- }
-
- // Write the instantiator class definition.
- os <<
- "\n"
- "class " << this->ExportMacro.c_str()
- << " " << this->ClassName.c_str() << "\n"
- "{\n"
- "public:\n"
- " " << this->ClassName.c_str() << "();\n"
- " ~" << this->ClassName.c_str() << "();\n"
- "private:\n"
- " static void ClassInitialize();\n"
- " static void ClassFinalize();\n"
- " static unsigned int Count;\n"
- "};\n"
- "\n";
-
- // Write the initialization instance to make sure the creation
- // functions get registered when this generated header is included.
- os <<
- "static "
- << this->ClassName.c_str() << " "
- << this->ClassName.c_str() << "Initializer;\n"
- "\n"
- "#endif\n";
-}
-
-// Generates the file with the implementation of the class. All
-// methods except the actual object creation functions are generated
-// here.
-void
-cmVTKMakeInstantiatorCommand
-::GenerateImplementationFile(std::ostream& os)
-{
- // Include the instantiator class header.
- os <<
- "#include \"" << this->ClassName.c_str() << ".h\"\n"
- "\n";
-
- // Write the extern declarations for all the creation functions.
- for(unsigned int i=0;i < this->Classes.size();++i)
- {
- os << "extern vtkObject* vtkInstantiator" <<
- this->Classes[i].c_str() << "New();\n";
- }
-
- // Write the ClassInitialize method to register all the creation functions.
- os <<
- "\n"
- "void " << this->ClassName.c_str() << "::ClassInitialize()\n"
- "{\n";
-
- for(unsigned int i=0;i < this->Classes.size();++i)
- {
- os << " vtkInstantiator::RegisterInstantiator(\""
- << this->Classes[i].c_str() << "\", vtkInstantiator"
- << this->Classes[i].c_str() << "New);\n";
- }
-
- // Write the ClassFinalize method to unregister all the creation functions.
- os <<
- "}\n"
- "\n"
- "void " << this->ClassName.c_str() << "::ClassFinalize()\n"
- "{\n";
-
- for(unsigned int i=0;i < this->Classes.size();++i)
- {
- os << " vtkInstantiator::UnRegisterInstantiator(\""
- << this->Classes[i].c_str() << "\", vtkInstantiator"
- << this->Classes[i].c_str() << "New);\n";
- }
-
- // Write the constructor and destructor of the initializer class to
- // call the ClassInitialize and ClassFinalize methods at the right
- // time.
- os <<
- "}\n"
- "\n" <<
- this->ClassName.c_str() << "::" << this->ClassName.c_str() << "()\n"
- "{\n"
- " if(++" << this->ClassName.c_str() << "::Count == 1)\n"
- " { " << this->ClassName.c_str() << "::ClassInitialize(); }\n"
- "}\n"
- "\n" <<
- this->ClassName.c_str() << "::~" << this->ClassName.c_str() << "()\n"
- "{\n"
- " if(--" << this->ClassName.c_str() << "::Count == 0)\n"
- " { " << this->ClassName.c_str() << "::ClassFinalize(); }\n"
- "}\n"
- "\n"
- "// Number of translation units that include this class's header.\n"
- "// Purposely not initialized. Default is static initialization to 0.\n"
- "unsigned int " << this->ClassName.c_str() << "::Count;\n";
-}
-
-std::string
-cmVTKMakeInstantiatorCommand::OldGenerateCreationFileName(unsigned int block)
-{
- cmOStringStream nameStr;
- nameStr << this->ClassName.c_str() << block << ".cxx";
- std::string result = nameStr.str();
- return result;
-}
-
-// Generates a file that includes the headers of the classes it knows
-// how to create and provides functions which create the classes with
-// the New() method.
-void
-cmVTKMakeInstantiatorCommand
-::OldGenerateCreationFile(std::ostream& os, unsigned int groupStart,
- unsigned int groupSize)
-{
- // Need to include header of generated class.
- os <<
- "#include \"" << this->ClassName.c_str() << ".h\"\n"
- "\n";
-
- // Include class files.
- for(unsigned int i=0;i < groupSize;++i)
- {
- os << "#include \"" << this->Classes[groupStart+i].c_str() << ".h\"\n";
- }
-
- os <<
- "\n";
-
- // Write the create function implementations.
- for(unsigned int i=0;i < groupSize;++i)
- {
- os << "vtkObject* " << this->ClassName.c_str() << "::Create_"
- << this->Classes[groupStart+i].c_str() << "() { return "
- << this->Classes[groupStart+i].c_str() << "::New(); }\n";
- }
-}
-
-// Generates the class header file with the definition of the class
-// and its initializer class.
-void
-cmVTKMakeInstantiatorCommand
-::OldGenerateHeaderFile(std::ostream& os)
-{
- os <<
- "#ifndef __" << this->ClassName.c_str() << "_h\n"
- "#define __" << this->ClassName.c_str() << "_h\n"
- "\n"
- "#include \"vtkInstantiator.h\"\n";
- for(unsigned int i=0;i < this->Includes.size();++i)
- {
- os << "#include \"" << this->Includes[i].c_str() << "\"\n";
- }
- os <<
- "\n"
- "class " << this->ClassName.c_str() << "Initialize;\n"
- "\n"
- "class " << this->ExportMacro.c_str() << " "
- << this->ClassName.c_str() << "\n"
- "{\n"
- " friend class " << this->ClassName.c_str() << "Initialize;\n"
- "\n"
- " static void ClassInitialize();\n"
- " static void ClassFinalize();\n"
- "\n";
-
- for(unsigned int i=0;i < this->Classes.size();++i)
- {
- os << " static vtkObject* Create_"
- << this->Classes[i].c_str() << "();\n";
- }
-
- // Write the initializer class to make sure the creation functions
- // get registered when this generated header is included.
- os <<
- "};\n"
- "\n"
- "class " << this->ExportMacro.c_str() << " "
- << this->ClassName.c_str() << "Initialize\n"
- "{\n"
- "public:\n"
- " " << this->ClassName.c_str() << "Initialize();\n"
- " ~" << this->ClassName.c_str() << "Initialize();\n"
- "private:\n"
- " static unsigned int Count;\n"
- "};\n"
- "\n"
- "static " << this->ClassName.c_str() << "Initialize "
- << this->ClassName.c_str() << "Initializer;\n"
- "\n"
- "#endif\n";
-}
-
-// Generates the file with the implementation of the class. All
-// methods except the actual object creation functions are generated
-// here.
-void cmVTKMakeInstantiatorCommand
-::OldGenerateImplementationFile(std::ostream& os)
-{
- // Write the ClassInitialize method to register all the creation functions.
- os <<
- "#include \"" << this->ClassName.c_str() << ".h\"\n"
- "\n"
- "void " << this->ClassName.c_str() << "::ClassInitialize()\n"
- "{\n";
-
- for(unsigned int i=0;i < this->Classes.size();++i)
- {
- os << " vtkInstantiator::RegisterInstantiator(\""
- << this->Classes[i].c_str() << "\", "
- << this->ClassName.c_str() << "::Create_"
- << this->Classes[i].c_str() << ");\n";
- }
-
- // Write the ClassFinalize method to unregister all the creation functions.
- os <<
- "}\n"
- "\n"
- "void " << this->ClassName.c_str() << "::ClassFinalize()\n"
- "{\n";
-
- for(unsigned int i=0;i < this->Classes.size();++i)
- {
- os << " vtkInstantiator::UnRegisterInstantiator(\""
- << this->Classes[i].c_str() << "\", "
- << this->ClassName.c_str() << "::Create_"
- << this->Classes[i].c_str() << ");\n";
- }
-
- // Write the constructor and destructor of the initializer class to
- // call the ClassInitialize and ClassFinalize methods at the right
- // time.
- os <<
- "}\n"
- "\n" <<
- this->ClassName.c_str() << "Initialize::" <<
- this->ClassName.c_str() << "Initialize()\n"
- "{\n"
- " if(++" << this->ClassName.c_str() << "Initialize::Count == 1)\n"
- " { " << this->ClassName.c_str() << "::ClassInitialize(); }\n"
- "}\n"
- "\n" <<
- this->ClassName.c_str() << "Initialize::~" <<
- this->ClassName.c_str() << "Initialize()\n"
- "{\n"
- " if(--" << this->ClassName.c_str() << "Initialize::Count == 0)\n"
- " { " << this->ClassName.c_str() << "::ClassFinalize(); }\n"
- "}\n"
- "\n"
- "// Number of translation units that include this class's header.\n"
- "// Purposely not initialized. Default is static initialization to 0.\n"
- "unsigned int " << this->ClassName.c_str() << "Initialize::Count;\n";
-}