1 /* Distributed under the OSI-approved BSD 3-Clause License. See accompanying
2 file Copyright.txt or https://cmake.org/licensing for details. */
3 /* This header file defines the API that loadable commands can use. In many
4 of these commands C++ instances of cmMakefile of cmSourceFile are passed
5 in as arguments or returned. In these cases they are passed as a void *
6 argument. In the function prototypes mf is used to represent a makefile
7 and sf is used to represent a source file. The functions are grouped
8 loosely into four groups 1) Utility 2) cmMakefile 3) cmSourceFile 4)
9 cmSystemTools. Within each grouping functions are listed alphabetically */
10 /*=========================================================================*/
11 #ifndef cmCPluginAPI_h
12 #define cmCPluginAPI_h
14 #define CMAKE_VERSION_MAJOR 2
15 #define CMAKE_VERSION_MINOR 5
22 # define CCONV __cdecl
26 /*=========================================================================
27 this is the structure of function entry points that a plugin may call. This
28 structure must be kept in sync with the static decaled at the bottom of
30 =========================================================================*/
31 /* NOLINTNEXTLINE(modernize-use-using) */
34 /*=========================================================================
35 Here we define the set of functions that a plugin may call. The first goup
36 of functions are utility functions that are specific to the plugin API
37 =========================================================================*/
38 /* set/Get the ClientData in the cmLoadedCommandInfo structure, this is how
39 information is passed from the InitialPass to FinalPass for commands
40 that need a FinalPass and need information from the InitialPass */
41 void*(CCONV* GetClientData)(void* info);
42 /* return the summed size in characters of all the arguments */
43 int(CCONV* GetTotalArgumentSize)(int argc, char** argv);
44 /* free all the memory associated with an argc, argv pair */
45 void(CCONV* FreeArguments)(int argc, char** argv);
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* SetClientData)(void* info, void* cd);
50 /* when an error occurs, call this function to set the error string */
51 void(CCONV* SetError)(void* info, const char* err);
53 /*=========================================================================
54 The following functions all directly map to methods in the cmMakefile
55 class. See cmMakefile.h for descriptions of what each method does. All of
56 these methods take the void * makefile pointer as their first argument.
57 =========================================================================*/
58 void(CCONV* AddCacheDefinition)(void* mf, const char* name,
59 const char* value, const char* doc,
61 void(CCONV* AddCustomCommand)(void* mf, const char* source,
62 const char* command, int numArgs,
63 const char** args, int numDepends,
64 const char** depends, int numOutputs,
65 const char** outputs, const char* target);
66 void(CCONV* AddDefineFlag)(void* mf, const char* definition);
67 void(CCONV* AddDefinition)(void* mf, const char* name, const char* value);
68 void(CCONV* AddExecutable)(void* mf, const char* exename, int numSrcs,
69 const char** srcs, int win32);
70 void(CCONV* AddLibrary)(void* mf, const char* libname, int shared,
71 int numSrcs, const char** srcs);
72 void(CCONV* AddLinkDirectoryForTarget)(void* mf, const char* tgt,
74 void(CCONV* AddLinkLibraryForTarget)(void* mf, const char* tgt,
75 const char* libname, int libtype);
76 void(CCONV* AddUtilityCommand)(void* mf, const char* utilityName,
77 const char* command, const char* arguments,
78 int all, int numDepends, const char** depends,
79 int numOutputs, const char** outputs);
80 int(CCONV* CommandExists)(void* mf, const char* name);
81 int(CCONV* ExecuteCommand)(void* mf, const char* name, int numArgs,
83 void(CCONV* ExpandSourceListArguments)(void* mf, int argc, const char** argv,
84 int* resArgc, char*** resArgv,
85 unsigned int startArgumentIndex);
86 char*(CCONV* ExpandVariablesInString)(void* mf, const char* source,
87 int escapeQuotes, int atOnly);
88 unsigned int(CCONV* GetCacheMajorVersion)(void* mf);
89 unsigned int(CCONV* GetCacheMinorVersion)(void* mf);
90 const char*(CCONV* GetCurrentDirectory)(void* mf);
91 const char*(CCONV* GetCurrentOutputDirectory)(void* mf);
92 const char*(CCONV* GetDefinition)(void* mf, const char* def);
93 const char*(CCONV* GetHomeDirectory)(void* mf);
94 const char*(CCONV* GetHomeOutputDirectory)(void* mf);
95 unsigned int(CCONV* GetMajorVersion)(void* mf);
96 unsigned int(CCONV* GetMinorVersion)(void* mf);
97 const char*(CCONV* GetProjectName)(void* mf);
98 const char*(CCONV* GetStartDirectory)(void* mf);
99 const char*(CCONV* GetStartOutputDirectory)(void* mf);
100 int(CCONV* IsOn)(void* mf, const char* name);
102 /*=========================================================================
103 The following functions are designed to operate or manipulate
104 cmSourceFiles. Please see cmSourceFile.h for additional information on many
105 of these methods. Some of these methods are in cmMakefile.h.
106 =========================================================================*/
107 void*(CCONV* AddSource)(void* mf, void* sf);
108 void*(CCONV* CreateSourceFile)();
109 void(CCONV* DestroySourceFile)(void* sf);
110 void*(CCONV* GetSource)(void* mf, const char* sourceName);
111 void(CCONV* SourceFileAddDepend)(void* sf, const char* depend);
112 const char*(CCONV* SourceFileGetProperty)(void* sf, const char* prop);
113 int(CCONV* SourceFileGetPropertyAsBool)(void* sf, const char* prop);
114 const char*(CCONV* SourceFileGetSourceName)(void* sf);
115 const char*(CCONV* SourceFileGetFullPath)(void* sf);
116 void(CCONV* SourceFileSetName)(void* sf, const char* name, const char* dir,
117 int numSourceExtensions,
118 const char** sourceExtensions,
119 int numHeaderExtensions,
120 const char** headerExtensions);
121 void(CCONV* SourceFileSetName2)(void* sf, const char* name, const char* dir,
122 const char* ext, int headerFileOnly);
123 void(CCONV* SourceFileSetProperty)(void* sf, const char* prop,
126 /*=========================================================================
127 The following methods are from cmSystemTools.h see that file for specific
128 documentation on each method.
129 =========================================================================*/
130 char*(CCONV* Capitalized)(const char*);
131 void(CCONV* CopyFileIfDifferent)(const char* f1, const char* f2);
132 char*(CCONV* GetFilenameWithoutExtension)(const char*);
133 char*(CCONV* GetFilenamePath)(const char*);
134 void(CCONV* RemoveFile)(const char* f1);
135 void(CCONV* Free)(void*);
137 /*=========================================================================
138 The following are new functions added after 1.6
139 =========================================================================*/
140 void(CCONV* AddCustomCommandToOutput)(void* mf, const char* output,
141 const char* command, int numArgs,
143 const char* main_dependency,
144 int numDepends, const char** depends);
145 void(CCONV* AddCustomCommandToTarget)(void* mf, const char* target,
146 const char* command, int numArgs,
147 const char** args, int commandType);
149 /* display status information */
150 void(CCONV* DisplaySatus)(void* info, const char* message);
152 /* new functions added after 2.4 */
153 void*(CCONV* CreateNewSourceFile)(void* mf);
154 void(CCONV* DefineSourceFileProperty)(void* mf, const char* name,
155 const char* briefDocs,
156 const char* longDocs, int chained);
158 /* this is the end of the C function stub API structure */
161 /*=========================================================================
162 CM_PLUGIN_EXPORT should be used by plugins
163 =========================================================================*/
165 # define CM_PLUGIN_EXPORT __declspec(dllexport)
167 # define CM_PLUGIN_EXPORT
170 /*=========================================================================
171 define the different types of cache entries, see cmCacheManager.h for more
173 =========================================================================*/
174 #define CM_CACHE_BOOL 0
175 #define CM_CACHE_PATH 1
176 #define CM_CACHE_FILEPATH 2
177 #define CM_CACHE_STRING 3
178 #define CM_CACHE_INTERNAL 4
179 #define CM_CACHE_STATIC 5
181 /*=========================================================================
182 define the different types of compiles a library may be
183 =========================================================================*/
184 #define CM_LIBRARY_GENERAL 0
185 #define CM_LIBRARY_DEBUG 1
186 #define CM_LIBRARY_OPTIMIZED 2
188 /*=========================================================================
189 define the different types of custom commands for a target
190 =========================================================================*/
191 #define CM_PRE_BUILD 0
192 #define CM_PRE_LINK 1
193 #define CM_POST_BUILD 2
195 /*=========================================================================
196 Finally we define the key data structures and function prototypes
197 =========================================================================*/
199 /* NOLINTNEXTLINE(modernize-use-using) */
200 typedef const char*(CCONV* CM_DOC_FUNCTION)();
202 /* NOLINTNEXTLINE(modernize-use-using) */
203 typedef int(CCONV* CM_INITIAL_PASS_FUNCTION)(void* info, void* mf, int argc,
206 /* NOLINTNEXTLINE(modernize-use-using) */
207 typedef void(CCONV* CM_FINAL_PASS_FUNCTION)(void* info, void* mf);
209 /* NOLINTNEXTLINE(modernize-use-using) */
210 typedef void(CCONV* CM_DESTRUCTOR_FUNCTION)(void* info);
212 /* NOLINTNEXTLINE(modernize-use-using) */
215 unsigned long reserved1; /* Reserved for future use. DO NOT USE. */
216 unsigned long reserved2; /* Reserved for future use. DO NOT USE. */
218 int m_Inherited; /* this ivar is no longer used in CMake 2.2 or later */
219 CM_INITIAL_PASS_FUNCTION InitialPass;
220 CM_FINAL_PASS_FUNCTION FinalPass;
221 CM_DESTRUCTOR_FUNCTION Destructor;
222 CM_DOC_FUNCTION GetTerseDocumentation;
223 CM_DOC_FUNCTION GetFullDocumentation;
227 } cmLoadedCommandInfo;
229 /* NOLINTNEXTLINE(modernize-use-using) */
230 typedef void(CCONV* CM_INIT_FUNCTION)(cmLoadedCommandInfo*);