cmTestCommand.c 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156
  1. #include "cmCPluginAPI.h"
  2. #include <string.h>
  3. #include <stdlib.h>
  4. #include <stdio.h>
  5. typedef struct
  6. {
  7. char *LibraryName;
  8. int Argc;
  9. char** Argv;
  10. } cmVTKWrapTclData;
  11. /* do almost everything in the initial pass */
  12. static int InitialPass(void *inf, void *mf, int argc, char *argv[])
  13. {
  14. char* file;
  15. char* str;
  16. const char* cstr;
  17. char buffer[1024];
  18. void *source_file;
  19. cmLoadedCommandInfo *info = (cmLoadedCommandInfo *)inf;
  20. cmVTKWrapTclData *cdata =
  21. (cmVTKWrapTclData *)malloc(sizeof(cmVTKWrapTclData));
  22. cdata->LibraryName = "BOO";
  23. cdata->Argc = argc;
  24. cdata->Argv = argv;
  25. info->CAPI->SetClientData(info,cdata);
  26. /* Now check and see if the value has been stored in the cache */
  27. /* already, if so use that value and don't look for the program */
  28. if(!info->CAPI->IsOn(mf,"TEST_COMMAND_TEST1"))
  29. {
  30. info->CAPI->AddDefinition(mf, "TEST_DEF", "HOO");
  31. return 1;
  32. }
  33. info->CAPI->AddDefinition(mf, "TEST_DEF", "HOO");
  34. cdata->LibraryName = "HOO";
  35. info->CAPI->AddCacheDefinition(mf, "SOME_CACHE_VARIABLE", "ON",
  36. "Test cache variable",
  37. CM_CACHE_BOOL);
  38. info->CAPI->AddCacheDefinition(mf, "SOME_CACHE_VARIABLE1", "",
  39. "Test cache variable 1",
  40. CM_CACHE_PATH);
  41. info->CAPI->AddCacheDefinition(mf, "SOME_CACHE_VARIABLE2", "",
  42. "Test cache variable 2",
  43. CM_CACHE_FILEPATH);
  44. info->CAPI->AddCacheDefinition(mf, "SOME_CACHE_VARIABLE3", "",
  45. "Test cache variable 3",
  46. CM_CACHE_STRING);
  47. info->CAPI->AddCacheDefinition(mf, "SOME_CACHE_VARIABLE4", "",
  48. "Test cache variable 4",
  49. CM_CACHE_INTERNAL);
  50. info->CAPI->AddCacheDefinition(mf, "SOME_CACHE_VARIABLE5", "",
  51. "Test cache variable 5",
  52. CM_CACHE_STATIC);
  53. file = info->CAPI->ExpandVariablesInString(mf, "${CMAKE_COMMAND}", 0, 0);
  54. str = info->CAPI->GetFilenameWithoutExtension(file);
  55. info->CAPI->DisplaySatus(mf, str);
  56. info->CAPI->Free(str);
  57. str = info->CAPI->GetFilenamePath(file);
  58. info->CAPI->DisplaySatus(mf, str);
  59. info->CAPI->Free(str);
  60. str = info->CAPI->Capitalized("cmake");
  61. info->CAPI->DisplaySatus(mf, str);
  62. info->CAPI->Free(str);
  63. info->CAPI->Free(file);
  64. info->CAPI->DisplaySatus(mf, info->CAPI->GetProjectName(mf));
  65. info->CAPI->DisplaySatus(mf, info->CAPI->GetHomeDirectory(mf));
  66. info->CAPI->DisplaySatus(mf, info->CAPI->GetHomeOutputDirectory(mf));
  67. info->CAPI->DisplaySatus(mf, info->CAPI->GetStartDirectory(mf));
  68. info->CAPI->DisplaySatus(mf, info->CAPI->GetStartOutputDirectory(mf));
  69. info->CAPI->DisplaySatus(mf, info->CAPI->GetCurrentDirectory(mf));
  70. info->CAPI->DisplaySatus(mf, info->CAPI->GetCurrentOutputDirectory(mf));
  71. sprintf(buffer, "Cache version: %d.%d, CMake version: %d.%d",
  72. info->CAPI->GetCacheMajorVersion(mf),
  73. info->CAPI->GetCacheMinorVersion(mf),
  74. info->CAPI->GetMajorVersion(mf),
  75. info->CAPI->GetMinorVersion(mf));
  76. info->CAPI->DisplaySatus(mf, buffer);
  77. if ( info->CAPI->CommandExists(mf, "SET") )
  78. {
  79. info->CAPI->DisplaySatus(mf, "Command SET exists");
  80. }
  81. if ( info->CAPI->CommandExists(mf, "SET_FOO_BAR") )
  82. {
  83. info->CAPI->SetError(mf, "Command SET_FOO_BAR should not exists");
  84. return 0;
  85. }
  86. info->CAPI->AddDefineFlag(mf, "-DADDED_DEFINITION");
  87. source_file = info->CAPI->CreateSourceFile();
  88. cstr = info->CAPI->SourceFileGetSourceName(source_file);
  89. sprintf(buffer, "Shold be empty (source file name): [%s]", cstr);
  90. info->CAPI->DisplaySatus(mf, buffer);
  91. cstr = info->CAPI->SourceFileGetFullPath(source_file);
  92. sprintf(buffer, "Shold be empty (source file full path): [%s]", cstr);
  93. info->CAPI->DisplaySatus(mf, buffer);
  94. if ( info->CAPI->SourceFileGetPropertyAsBool(source_file, "SOME_PROPERTY") )
  95. {
  96. info->CAPI->SetError(mf, "Property SOME_PROPERTY should not be defined");
  97. return 0;
  98. }
  99. cstr = info->CAPI->SourceFileGetProperty(source_file, "ABSTRACT");
  100. sprintf(buffer, "Shold be 0 (source file abstract property): [%p]", cstr);
  101. info->CAPI->DisplaySatus(mf, buffer);
  102. info->CAPI->DestroySourceFile(source_file);
  103. return 1;
  104. }
  105. static void FinalPass(void *inf, void *mf)
  106. {
  107. cmLoadedCommandInfo *info = (cmLoadedCommandInfo *)inf;
  108. /* get our client data from initial pass */
  109. cmVTKWrapTclData *cdata =
  110. (cmVTKWrapTclData *)info->CAPI->GetClientData(info);
  111. if (strcmp(info->CAPI->GetDefinition(mf, "TEST_DEF"),"HOO") ||
  112. strcmp(cdata->LibraryName,"HOO"))
  113. {
  114. fprintf(stderr,"*** Failed LOADED COMMAND Final Pass\n");
  115. }
  116. }
  117. static void Destructor(void *inf)
  118. {
  119. cmLoadedCommandInfo *info = (cmLoadedCommandInfo *)inf;
  120. /* get our client data from initial pass */
  121. cmVTKWrapTclData *cdata =
  122. (cmVTKWrapTclData *)info->CAPI->GetClientData(info);
  123. free(cdata);
  124. }
  125. #ifdef MUCHO_MUDSLIDE
  126. void CM_PLUGIN_EXPORT CMAKE_TEST_COMMANDInit(cmLoadedCommandInfo *info)
  127. {
  128. info->InitialPass = InitialPass;
  129. info->FinalPass = FinalPass;
  130. info->Destructor = Destructor;
  131. info->m_Inherited = 0;
  132. info->Name = "CMAKE_TEST_COMMAND";
  133. }
  134. #endif