1 /*============================================================================
2 CMake - Cross Platform Makefile Generator
3 Copyright 2000-2009 Kitware, Inc., Insight Software Consortium
5 Distributed under the OSI-approved BSD License (the "License");
6 see accompanying file Copyright.txt for details.
8 This software is distributed WITHOUT ANY WARRANTY; without even the
9 implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
10 See the License for more information.
11 ============================================================================*/
12 /* This header file defines the API that loadable commands can use. In many
13 of these commands C++ instances of cmMakefile of cmSourceFile are passed
14 in as arguments or returned. In these cases they are passed as a void *
15 argument. In the function prototypes mf is used to represent a makefile
16 and sf is used to represent a source file. The functions are grouped
17 loosely into four groups 1) Utility 2) cmMakefile 3) cmSourceFile 4)
18 cmSystemTools. Within each grouping functions are listed alphabetically */
19 /*=========================================================================*/
20 #ifndef cmCPluginAPI_h
21 #define cmCPluginAPI_h
23 #define CMAKE_VERSION_MAJOR 2
24 #define CMAKE_VERSION_MINOR 5
35 /*=========================================================================
36 this is the structure of function entry points that a plugin may call. This
37 structure must be kept in sync with the static decaled at the bottom of
39 =========================================================================*/
42 /*=========================================================================
43 Here we define the set of functions that a plugin may call. The first goup
44 of functions are utility functions that are specific to the plugin API
45 =========================================================================*/
46 /* set/Get the ClientData in the cmLoadedCommandInfo structure, this is how
47 information is passed from the InitialPass to FInalPass for commands
48 that need a FinalPass and need information from the InitialPass */
49 void *(CCONV *GetClientData) (void *info);
50 /* return the summed size in characters of all the arguments */
51 int (CCONV *GetTotalArgumentSize) (int argc, char **argv);
52 /* free all the memory associated with an argc, argv pair */
53 void (CCONV *FreeArguments) (int argc, char **argv);
54 /* set/Get the ClientData in the cmLoadedCommandInfo structure, this is how
55 information is passed from the InitialPass to FInalPass for commands
56 that need a FinalPass and need information from the InitialPass */
57 void (CCONV *SetClientData) (void *info, void *cd);
58 /* when an error occurs, call this function to set the error string */
59 void (CCONV *SetError) (void *info, const char *err);
61 /*=========================================================================
62 The following functions all directly map to methods in the cmMakefile
63 class. See cmMakefile.h for descriptions of what each method does. All of
64 these methods take the void * makefile pointer as their first argument.
65 =========================================================================*/
66 void (CCONV *AddCacheDefinition) (void *mf, const char* name,
68 const char* doc, int cachetype);
69 void (CCONV *AddCustomCommand) (void *mf, const char* source,
71 int numArgs, const char **args,
72 int numDepends, const char **depends,
73 int numOutputs, const char **outputs,
75 void (CCONV *AddDefineFlag) (void *mf, const char* definition);
76 void (CCONV *AddDefinition) (void *mf, const char* name,
78 void (CCONV *AddExecutable) (void *mf, const char *exename,
79 int numSrcs, const char **srcs, int win32);
80 void (CCONV *AddLibrary) (void *mf, const char *libname,
81 int shared, int numSrcs, const char **srcs);
82 void (CCONV *AddLinkDirectoryForTarget) (void *mf, const char *tgt,
84 void (CCONV *AddLinkLibraryForTarget) (void *mf, const char *tgt,
85 const char *libname, int libtype);
86 void (CCONV *AddUtilityCommand) (void *mf, const char* utilityName,
87 const char *command, const char *arguments,
88 int all, int numDepends, const char **depends,
89 int numOutputs, const char **outputs);
90 int (CCONV *CommandExists) (void *mf, const char* name);
91 int (CCONV *ExecuteCommand) (void *mf, const char *name,
92 int numArgs, const char **args);
93 void (CCONV *ExpandSourceListArguments) (void *mf,int argc,
95 int *resArgc, char ***resArgv,
96 unsigned int startArgumentIndex);
97 char *(CCONV *ExpandVariablesInString) (void *mf, const char *source,
98 int escapeQuotes, int atOnly);
99 unsigned int (CCONV *GetCacheMajorVersion) (void *mf);
100 unsigned int (CCONV *GetCacheMinorVersion) (void *mf);
101 const char* (CCONV *GetCurrentDirectory) (void *mf);
102 const char* (CCONV *GetCurrentOutputDirectory) (void *mf);
103 const char* (CCONV *GetDefinition) (void *mf, const char *def);
104 const char* (CCONV *GetHomeDirectory) (void *mf);
105 const char* (CCONV *GetHomeOutputDirectory) (void *mf);
106 unsigned int (CCONV *GetMajorVersion) (void *mf);
107 unsigned int (CCONV *GetMinorVersion) (void *mf);
108 const char* (CCONV *GetProjectName) (void *mf);
109 const char* (CCONV *GetStartDirectory) (void *mf);
110 const char* (CCONV *GetStartOutputDirectory) (void *mf);
111 int (CCONV *IsOn) (void *mf, const char* name);
114 /*=========================================================================
115 The following functions are designed to operate or manipulate
116 cmSourceFiles. Please see cmSourceFile.h for additional information on many
117 of these methods. Some of these methods are in cmMakefile.h.
118 =========================================================================*/
119 void *(CCONV *AddSource) (void *mf, void *sf);
120 void *(CCONV *CreateSourceFile) ();
121 void (CCONV *DestroySourceFile) (void *sf);
122 void *(CCONV *GetSource) (void *mf, const char* sourceName);
123 void (CCONV *SourceFileAddDepend) (void *sf, const char *depend);
124 const char *(CCONV *SourceFileGetProperty) (void *sf, const char *prop);
125 int (CCONV *SourceFileGetPropertyAsBool) (void *sf, const char *prop);
126 const char *(CCONV *SourceFileGetSourceName) (void *sf);
127 const char *(CCONV *SourceFileGetFullPath) (void *sf);
128 void (CCONV *SourceFileSetName) (void *sf, const char* name,
130 int numSourceExtensions,
131 const char **sourceExtensions,
132 int numHeaderExtensions,
133 const char **headerExtensions);
134 void (CCONV *SourceFileSetName2) (void *sf, const char* name,
136 const char *ext, int headerFileOnly);
137 void (CCONV *SourceFileSetProperty) (void *sf, const char *prop,
141 /*=========================================================================
142 The following methods are from cmSystemTools.h see that file for specific
143 documentation on each method.
144 =========================================================================*/
145 char *(CCONV *Capitalized)(const char *);
146 void (CCONV *CopyFileIfDifferent)(const char *f1, const char *f2);
147 char *(CCONV *GetFilenameWithoutExtension)(const char *);
148 char *(CCONV *GetFilenamePath)(const char *);
149 void (CCONV *RemoveFile)(const char *f1);
150 void (CCONV *Free)(void *);
152 /*=========================================================================
153 The following are new functions added after 1.6
154 =========================================================================*/
155 void (CCONV *AddCustomCommandToOutput) (void *mf, const char* output,
157 int numArgs, const char **args,
158 const char* main_dependency,
159 int numDepends, const char **depends);
160 void (CCONV *AddCustomCommandToTarget) (void *mf, const char* target,
162 int numArgs, const char **args,
165 /* display status information */
166 void (CCONV *DisplaySatus) (void *info, const char *message);
168 /* new functions added after 2.4 */
169 void *(CCONV *CreateNewSourceFile) (void *mf);
170 void (CCONV *DefineSourceFileProperty) (void *mf, const char *name,
171 const char *briefDocs,
172 const char *longDocs,
175 /* this is the end of the C function stub API structure */
179 /*=========================================================================
180 CM_PLUGIN_EXPORT should be used by plugins
181 =========================================================================*/
183 #define CM_PLUGIN_EXPORT __declspec( dllexport )
185 #define CM_PLUGIN_EXPORT
188 /*=========================================================================
189 define the different types of cache entries, see cmCacheManager.h for more
191 =========================================================================*/
192 #define CM_CACHE_BOOL 0
193 #define CM_CACHE_PATH 1
194 #define CM_CACHE_FILEPATH 2
195 #define CM_CACHE_STRING 3
196 #define CM_CACHE_INTERNAL 4
197 #define CM_CACHE_STATIC 5
199 /*=========================================================================
200 define the different types of compiles a library may be
201 =========================================================================*/
202 #define CM_LIBRARY_GENERAL 0
203 #define CM_LIBRARY_DEBUG 1
204 #define CM_LIBRARY_OPTIMIZED 2
206 /*=========================================================================
207 define the different types of custom commands for a target
208 =========================================================================*/
209 #define CM_PRE_BUILD 0
210 #define CM_PRE_LINK 1
211 #define CM_POST_BUILD 2
213 /*=========================================================================
214 Finally we define the key data structures and function prototypes
215 =========================================================================*/
216 typedef const char* (CCONV *CM_DOC_FUNCTION)();
217 typedef int (CCONV *CM_INITIAL_PASS_FUNCTION)(void *info, void *mf,
219 typedef void (CCONV *CM_FINAL_PASS_FUNCTION)(void *info, void *mf);
220 typedef void (CCONV *CM_DESTRUCTOR_FUNCTION)(void *info);
223 unsigned long reserved1; /* Reserved for future use. DO NOT USE. */
224 unsigned long reserved2; /* Reserved for future use. DO NOT USE. */
226 int m_Inherited; /* this ivar is no longer used in CMake 2.2 or later */
227 CM_INITIAL_PASS_FUNCTION InitialPass;
228 CM_FINAL_PASS_FUNCTION FinalPass;
229 CM_DESTRUCTOR_FUNCTION Destructor;
230 CM_DOC_FUNCTION GetTerseDocumentation;
231 CM_DOC_FUNCTION GetFullDocumentation;
235 } cmLoadedCommandInfo;
237 typedef void (CCONV *CM_INIT_FUNCTION)(cmLoadedCommandInfo *);