some mods to the plugin API
This commit is contained in:
parent
8cdb9a316f
commit
abf3337888
|
@ -35,6 +35,15 @@ void cmSetClientData(void *info, void *cd)
|
|||
((cmLoadedCommandInfo *)info)->ClientData = cd;
|
||||
}
|
||||
|
||||
void cmSetError(void *info, const char *err)
|
||||
{
|
||||
if (((cmLoadedCommandInfo *)info)->Error)
|
||||
{
|
||||
free(((cmLoadedCommandInfo *)info)->Error);
|
||||
}
|
||||
((cmLoadedCommandInfo *)info)->Error = strdup(err);
|
||||
}
|
||||
|
||||
unsigned int cmGetCacheMajorVersion(void *arg)
|
||||
{
|
||||
cmMakefile *mf = static_cast<cmMakefile *>(arg);
|
||||
|
@ -461,50 +470,51 @@ void cmRemoveFile(const char *name)
|
|||
cmCAPI cmStaticCAPI =
|
||||
{
|
||||
cmGetClientData,
|
||||
cmGetTotalArgumentSize,
|
||||
cmFreeArguments,
|
||||
cmSetClientData,
|
||||
cmAddCacheDefinition,
|
||||
cmAddCustomCommand,
|
||||
cmAddDefineFlag,
|
||||
cmAddDefinition,
|
||||
cmAddExecutable,
|
||||
cmAddLibrary,
|
||||
cmAddLinkDirectoryForTarget,
|
||||
cmAddLinkLibraryForTarget,
|
||||
cmAddUtilityCommand,
|
||||
cmCommandExists,
|
||||
cmExecuteCommand,
|
||||
cmExpandSourceListArguments,
|
||||
cmExpandVariablesInString,
|
||||
cmGetCacheMajorVersion,
|
||||
cmGetCacheMinorVersion,
|
||||
cmGetCurrentDirectory,
|
||||
cmGetCurrentOutputDirectory,
|
||||
cmGetDefinition,
|
||||
cmGetHomeDirectory,
|
||||
cmGetHomeOutputDirectory,
|
||||
cmGetMajorVersion,
|
||||
cmGetMinorVersion,
|
||||
cmGetProjectName,
|
||||
cmGetStartDirectory,
|
||||
cmGetStartOutputDirectory,
|
||||
cmIsOn,
|
||||
cmGetTotalArgumentSize,
|
||||
cmFreeArguments,
|
||||
cmSetClientData,
|
||||
cmSetError,
|
||||
cmAddCacheDefinition,
|
||||
cmAddCustomCommand,
|
||||
cmAddDefineFlag,
|
||||
cmAddDefinition,
|
||||
cmAddExecutable,
|
||||
cmAddLibrary,
|
||||
cmAddLinkDirectoryForTarget,
|
||||
cmAddLinkLibraryForTarget,
|
||||
cmAddUtilityCommand,
|
||||
cmCommandExists,
|
||||
cmExecuteCommand,
|
||||
cmExpandSourceListArguments,
|
||||
cmExpandVariablesInString,
|
||||
cmGetCacheMajorVersion,
|
||||
cmGetCacheMinorVersion,
|
||||
cmGetCurrentDirectory,
|
||||
cmGetCurrentOutputDirectory,
|
||||
cmGetDefinition,
|
||||
cmGetHomeDirectory,
|
||||
cmGetHomeOutputDirectory,
|
||||
cmGetMajorVersion,
|
||||
cmGetMinorVersion,
|
||||
cmGetProjectName,
|
||||
cmGetStartDirectory,
|
||||
cmGetStartOutputDirectory,
|
||||
cmIsOn,
|
||||
|
||||
cmAddSource,
|
||||
cmCreateSourceFile,
|
||||
cmGetSource,
|
||||
cmSourceFileAddDepend,
|
||||
cmSourceFileGetProperty,
|
||||
cmSourceFileGetPropertyAsBool,
|
||||
cmSourceFileGetSourceName,
|
||||
cmSourceFileSetName,
|
||||
cmSourceFileSetName2,
|
||||
cmSourceFileSetProperty,
|
||||
|
||||
cmCapitalized,
|
||||
cmCopyFileIfDifferent,
|
||||
cmGetFilenameWithoutExtension,
|
||||
cmRemoveFile,
|
||||
cmAddSource,
|
||||
cmCreateSourceFile,
|
||||
cmGetSource,
|
||||
cmSourceFileAddDepend,
|
||||
cmSourceFileGetProperty,
|
||||
cmSourceFileGetPropertyAsBool,
|
||||
cmSourceFileGetSourceName,
|
||||
cmSourceFileSetName,
|
||||
cmSourceFileSetName2,
|
||||
cmSourceFileSetProperty,
|
||||
|
||||
cmCapitalized,
|
||||
cmCopyFileIfDifferent,
|
||||
cmGetFilenameWithoutExtension,
|
||||
cmRemoveFile,
|
||||
};
|
||||
|
||||
|
|
|
@ -52,7 +52,9 @@ typedef struct
|
|||
information is passed from the InitialPass to FInalPass for commands
|
||||
that need a FinalPass and need information from the InitialPass */
|
||||
void (*SetClientData) (void *info, void *cd);
|
||||
|
||||
/* when an error occurs, call this function to set the error string */
|
||||
void (*SetError) (void *info, const char *err);
|
||||
|
||||
/*=========================================================================
|
||||
The following functions all directly map to methods in the cmMakefile
|
||||
class. See cmMakefile.h for descriptions of what each method does. All of
|
||||
|
@ -188,6 +190,7 @@ Finally we define the key data structures and function prototypes
|
|||
CM_DOC_FUNCTION GetTerseDocumentation;
|
||||
CM_DOC_FUNCTION GetFullDocumentation;
|
||||
const char *Name;
|
||||
char *Error;
|
||||
void *ClientData;
|
||||
} cmLoadedCommandInfo;
|
||||
|
||||
|
|
|
@ -110,6 +110,12 @@ bool cmLoadedCommand::InitialPass(std::vector<std::string> const& args)
|
|||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
// clear the error string
|
||||
if (this->info.Error)
|
||||
{
|
||||
free(this->info.Error);
|
||||
}
|
||||
|
||||
// create argc and argv and then invoke the command
|
||||
int argc = static_cast<int> (args.size());
|
||||
|
@ -125,10 +131,17 @@ bool cmLoadedCommand::InitialPass(std::vector<std::string> const& args)
|
|||
}
|
||||
int result = info.InitialPass((void *)&info,(void *)this->m_Makefile,argc,argv);
|
||||
cmFreeArguments(argc,argv);
|
||||
|
||||
if (result)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
/* Initial Pass must have failed so set the error string */
|
||||
if (this->info.Error)
|
||||
{
|
||||
this->SetError(this->info.Error);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
|
@ -146,6 +159,10 @@ cmLoadedCommand::~cmLoadedCommand()
|
|||
{
|
||||
this->info.Destructor((void *)&this->info);
|
||||
}
|
||||
if (this->info.Error)
|
||||
{
|
||||
free(this->info.Error);
|
||||
}
|
||||
}
|
||||
|
||||
// cmLoadCommandCommand
|
||||
|
@ -187,16 +204,18 @@ bool cmLoadCommandCommand::InitialPass(std::vector<std::string> const& argsIn)
|
|||
cmLibHandle lib = cmDynamicLoader::OpenLibrary(fullPath.c_str());
|
||||
if(lib)
|
||||
{
|
||||
// Look for the symbol cmLoad, cmGetFactoryCompilerUsed,
|
||||
// and cmGetFactoryVersion in the library
|
||||
// find the init function
|
||||
std::string initFuncName = args[0] + "Init";
|
||||
CM_INIT_FUNCTION initFunction
|
||||
= (CM_INIT_FUNCTION)
|
||||
cmDynamicLoader::GetSymbolAddress(lib, "cmInitializeCommand");
|
||||
cmDynamicLoader::GetSymbolAddress(lib, initFuncName.c_str());
|
||||
if ( !initFunction )
|
||||
{
|
||||
initFunction =
|
||||
(CM_INIT_FUNCTION)(
|
||||
cmDynamicLoader::GetSymbolAddress(lib, "_cmInitializeCommand"));
|
||||
initFuncName = "_";
|
||||
initFuncName += args[0];
|
||||
initFuncName += "Init";
|
||||
initFunction = (CM_INIT_FUNCTION)(
|
||||
cmDynamicLoader::GetSymbolAddress(lib, initFuncName.c_str()));
|
||||
}
|
||||
// if the symbol is found call it to set the name on the
|
||||
// function blocker
|
||||
|
|
Loading…
Reference in New Issue