/*========================================================================= 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. =========================================================================*/ #ifndef cmVTKMakeInstantiatorCommand_h #define cmVTKMakeInstantiatorCommand_h #include "cmCommand.h" /** \class cmVTKMakeInstantiatorCommand * cmVTKMakeInstantiatorCommand implements the VTK_MAKE_INSTANTIATOR * command. This generates a source file to add to a VTK library that * registers instance creation functions with vtkInstantiator for every * class in that library. */ class cmVTKMakeInstantiatorCommand : public cmCommand { public: /** This is a virtual constructor for the command. */ virtual cmCommand* Clone() { return new cmVTKMakeInstantiatorCommand; } /** * This is called when the command is first encountered in * the CMakeLists.txt file. */ virtual bool InitialPass(std::vector<std::string> const& args); /** The name of the command as specified in CMakeList.txt. */ virtual const char* GetName() { return "VTK_MAKE_INSTANTIATOR"; } /** Succinct documentation. */ virtual const char* GetTerseDocumentation() { return "Deprecated. For use only in VTK 4.0."; } /** More documentation. */ virtual const char* GetFullDocumentation() { return " VTK_MAKE_INSTANTIATOR(className outSourceList\n" " src-list1 [src-list2 ..]\n" " EXPORT_MACRO exportMacro\n" " [HEADER_LOCATION dir]\n" " [GROUP_SIZE groupSize]\n" " [INCLUDES [file1 file2 ..]])\n" "Generates a new class with the given name and adds its files to the " "given outSourceList. It registers the classes from the other given " "source lists with vtkInstantiator when it is loaded. The output " "source list should be added to the library with the classes it " "registers. " "The EXPORT_MACRO argument must be given and followed by the export " "macro to use when generating the class (ex. VTK_COMMON_EXPORT). " "The HEADER_LOCATION option must be followed by a path. It specifies " "the directory in which to place the generated class's header file. " "The generated class implementation files always go in the build " "directory corresponding to the CMakeLists.txt file containing " "the command. This is the default location for the header. " "The INCLUDES option can be followed by a list of zero or more files. " "These files will be #included by the generated instantiator header, " "and can be used to gain access to the specified exportMacro in the " "C++ code."; } cmTypeMacro(cmVTKMakeInstantiatorCommand, cmCommand); protected: std::string ClassName; std::string ExportMacro; std::vector<cmStdString> Includes; std::vector<cmStdString> Classes; void GenerateHeaderFile(std::ostream&); void GenerateImplementationFile(std::ostream&); void OldGenerateHeaderFile(std::ostream&); void OldGenerateImplementationFile(std::ostream&); std::string OldGenerateCreationFileName(unsigned int group); void OldGenerateCreationFile(std::ostream&, unsigned int groupStart, unsigned int groupSize); }; #endif