cmVTKMakeInstantiatorCommand.h
/*=========================================================================
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.";
}
/** This command is kept for compatibility with older CMake versions. */
virtual bool IsDiscouraged()
{
return true;
}
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