diff options
Diffstat (limited to 'Source/cmCommands.cxx')
-rw-r--r-- | Source/cmCommands.cxx | 344 |
1 files changed, 228 insertions, 116 deletions
diff --git a/Source/cmCommands.cxx b/Source/cmCommands.cxx index 4c5b093..e1d8ef1 100644 --- a/Source/cmCommands.cxx +++ b/Source/cmCommands.cxx @@ -1,6 +1,8 @@ /* Distributed under the OSI-approved BSD 3-Clause License. See accompanying file Copyright.txt or https://cmake.org/licensing for details. */ #include "cmCommands.h" +#include "cmPolicies.h" +#include "cmState.h" #include "cmAddCustomCommandCommand.h" #include "cmAddCustomTargetCommand.h" @@ -68,7 +70,6 @@ #include "cmTargetLinkLibrariesCommand.h" #include "cmTryCompileCommand.h" #include "cmTryRunCommand.h" -#include "cmUnexpectedCommand.h" #include "cmUnsetCommand.h" #include "cmWhileCommand.h" @@ -104,138 +105,249 @@ #include "cmWriteFileCommand.h" #endif -std::vector<cmCommand*> GetPredefinedCommands() +void GetScriptingCommands(cmState* state) { - std::vector<cmCommand*> commands; + state->AddBuiltinCommand("break", new cmBreakCommand); + state->AddBuiltinCommand("cmake_minimum_required", + new cmCMakeMinimumRequired); + state->AddBuiltinCommand("cmake_policy", new cmCMakePolicyCommand); + state->AddBuiltinCommand("configure_file", new cmConfigureFileCommand); + state->AddBuiltinCommand("continue", new cmContinueCommand); + state->AddBuiltinCommand("exec_program", new cmExecProgramCommand); + state->AddBuiltinCommand("execute_process", new cmExecuteProcessCommand); + state->AddBuiltinCommand("file", new cmFileCommand); + state->AddBuiltinCommand("find_file", new cmFindFileCommand); + state->AddBuiltinCommand("find_library", new cmFindLibraryCommand); + state->AddBuiltinCommand("find_package", new cmFindPackageCommand); + state->AddBuiltinCommand("find_path", new cmFindPathCommand); + state->AddBuiltinCommand("find_program", new cmFindProgramCommand); + state->AddBuiltinCommand("foreach", new cmForEachCommand); + state->AddBuiltinCommand("function", new cmFunctionCommand); + state->AddBuiltinCommand("get_cmake_property", + new cmGetCMakePropertyCommand); + state->AddBuiltinCommand("get_directory_property", + new cmGetDirectoryPropertyCommand); + state->AddBuiltinCommand("get_filename_component", + new cmGetFilenameComponentCommand); + state->AddBuiltinCommand("get_property", new cmGetPropertyCommand); + state->AddBuiltinCommand("if", new cmIfCommand); + state->AddBuiltinCommand("include", new cmIncludeCommand); + state->AddBuiltinCommand("list", new cmListCommand); + state->AddBuiltinCommand("macro", new cmMacroCommand); + state->AddBuiltinCommand("make_directory", new cmMakeDirectoryCommand); + state->AddBuiltinCommand("mark_as_advanced", new cmMarkAsAdvancedCommand); + state->AddBuiltinCommand("math", new cmMathCommand); + state->AddBuiltinCommand("message", new cmMessageCommand); + state->AddBuiltinCommand("option", new cmOptionCommand); + state->AddBuiltinCommand("cmake_parse_arguments", + new cmParseArgumentsCommand); + state->AddBuiltinCommand("return", new cmReturnCommand); + state->AddBuiltinCommand("separate_arguments", + new cmSeparateArgumentsCommand); + state->AddBuiltinCommand("set", new cmSetCommand); + state->AddBuiltinCommand("set_directory_properties", + new cmSetDirectoryPropertiesCommand); + state->AddBuiltinCommand("set_property", new cmSetPropertyCommand); + state->AddBuiltinCommand("site_name", new cmSiteNameCommand); + state->AddBuiltinCommand("string", new cmStringCommand); + state->AddBuiltinCommand("unset", new cmUnsetCommand); + state->AddBuiltinCommand("while", new cmWhileCommand); - commands.push_back(new cmAddCustomCommandCommand); - commands.push_back(new cmAddCustomTargetCommand); - commands.push_back(new cmAddDefinitionsCommand); - commands.push_back(new cmAddDependenciesCommand); - commands.push_back(new cmAddExecutableCommand); - commands.push_back(new cmAddLibraryCommand); - commands.push_back(new cmAddSubDirectoryCommand); - commands.push_back(new cmAddTestCommand); - commands.push_back(new cmBreakCommand); - commands.push_back(new cmBuildCommand); - commands.push_back(new cmCMakeMinimumRequired); - commands.push_back(new cmCMakePolicyCommand); - commands.push_back(new cmConfigureFileCommand); - commands.push_back(new cmContinueCommand); - commands.push_back(new cmCreateTestSourceList); - commands.push_back(new cmDefinePropertyCommand); - commands.push_back(new cmEnableLanguageCommand); - commands.push_back(new cmEnableTestingCommand); - commands.push_back(new cmExecProgramCommand); - commands.push_back(new cmExecuteProcessCommand); - commands.push_back(new cmFileCommand); - commands.push_back(new cmFindFileCommand); - commands.push_back(new cmFindLibraryCommand); - commands.push_back(new cmFindPackageCommand); - commands.push_back(new cmFindPathCommand); - commands.push_back(new cmFindProgramCommand); - commands.push_back(new cmForEachCommand); - commands.push_back(new cmFunctionCommand); - commands.push_back(new cmGetCMakePropertyCommand); - commands.push_back(new cmGetDirectoryPropertyCommand); - commands.push_back(new cmGetFilenameComponentCommand); - commands.push_back(new cmGetPropertyCommand); - commands.push_back(new cmGetSourceFilePropertyCommand); - commands.push_back(new cmGetTargetPropertyCommand); - commands.push_back(new cmGetTestPropertyCommand); - commands.push_back(new cmIfCommand); - commands.push_back(new cmIncludeCommand); - commands.push_back(new cmIncludeDirectoryCommand); - commands.push_back(new cmIncludeRegularExpressionCommand); - commands.push_back(new cmInstallCommand); - commands.push_back(new cmInstallFilesCommand); - commands.push_back(new cmInstallTargetsCommand); - commands.push_back(new cmLinkDirectoriesCommand); - commands.push_back(new cmListCommand); - commands.push_back(new cmMacroCommand); - commands.push_back(new cmMakeDirectoryCommand); - commands.push_back(new cmMarkAsAdvancedCommand); - commands.push_back(new cmMathCommand); - commands.push_back(new cmMessageCommand); - commands.push_back(new cmOptionCommand); - commands.push_back(new cmParseArgumentsCommand); - commands.push_back(new cmProjectCommand); - commands.push_back(new cmReturnCommand); - commands.push_back(new cmSeparateArgumentsCommand); - commands.push_back(new cmSetCommand); - commands.push_back(new cmSetDirectoryPropertiesCommand); - commands.push_back(new cmSetPropertyCommand); - commands.push_back(new cmSetSourceFilesPropertiesCommand); - commands.push_back(new cmSetTargetPropertiesCommand); - commands.push_back(new cmSetTestsPropertiesCommand); - commands.push_back(new cmSiteNameCommand); - commands.push_back(new cmStringCommand); - commands.push_back(new cmSubdirCommand); - commands.push_back(new cmTargetLinkLibrariesCommand); - commands.push_back(new cmTryCompileCommand); - commands.push_back(new cmTryRunCommand); - commands.push_back(new cmUnsetCommand); - commands.push_back(new cmWhileCommand); - - commands.push_back(new cmUnexpectedCommand( + state->AddUnexpectedCommand( "else", "An ELSE command was found outside of a proper " "IF ENDIF structure. Or its arguments did not match " - "the opening IF command.")); - commands.push_back(new cmUnexpectedCommand( + "the opening IF command."); + state->AddUnexpectedCommand( "elseif", "An ELSEIF command was found outside of a proper " - "IF ENDIF structure.")); - commands.push_back(new cmUnexpectedCommand( + "IF ENDIF structure."); + state->AddUnexpectedCommand( "endforeach", "An ENDFOREACH command was found outside of a proper " "FOREACH ENDFOREACH structure. Or its arguments did " - "not match the opening FOREACH command.")); - commands.push_back(new cmUnexpectedCommand( + "not match the opening FOREACH command."); + state->AddUnexpectedCommand( "endfunction", "An ENDFUNCTION command was found outside of a proper " "FUNCTION ENDFUNCTION structure. Or its arguments did not " - "match the opening FUNCTION command.")); - commands.push_back(new cmUnexpectedCommand( + "match the opening FUNCTION command."); + state->AddUnexpectedCommand( "endif", "An ENDIF command was found outside of a proper " "IF ENDIF structure. Or its arguments did not match " - "the opening IF command.")); - commands.push_back(new cmUnexpectedCommand( + "the opening IF command."); + state->AddUnexpectedCommand( "endmacro", "An ENDMACRO command was found outside of a proper " "MACRO ENDMACRO structure. Or its arguments did not " - "match the opening MACRO command.")); - commands.push_back(new cmUnexpectedCommand( + "match the opening MACRO command."); + state->AddUnexpectedCommand( "endwhile", "An ENDWHILE command was found outside of a proper " "WHILE ENDWHILE structure. Or its arguments did not " - "match the opening WHILE command.")); + "match the opening WHILE command."); #if defined(CMAKE_BUILD_WITH_CMAKE) - commands.push_back(new cmAddCompileOptionsCommand); - commands.push_back(new cmAuxSourceDirectoryCommand); - commands.push_back(new cmBuildNameCommand); - commands.push_back(new cmCMakeHostSystemInformationCommand); - commands.push_back(new cmExportCommand); - commands.push_back(new cmExportLibraryDependenciesCommand); - commands.push_back(new cmFLTKWrapUICommand); - commands.push_back(new cmIncludeExternalMSProjectCommand); - commands.push_back(new cmInstallProgramsCommand); - commands.push_back(new cmLinkLibrariesCommand); - commands.push_back(new cmLoadCacheCommand); - commands.push_back(new cmLoadCommandCommand); - commands.push_back(new cmOutputRequiredFilesCommand); - commands.push_back(new cmQTWrapCPPCommand); - commands.push_back(new cmQTWrapUICommand); - commands.push_back(new cmRemoveCommand); - commands.push_back(new cmRemoveDefinitionsCommand); - commands.push_back(new cmSourceGroupCommand); - commands.push_back(new cmSubdirDependsCommand); - commands.push_back(new cmTargetCompileDefinitionsCommand); - commands.push_back(new cmTargetCompileFeaturesCommand); - commands.push_back(new cmTargetCompileOptionsCommand); - commands.push_back(new cmTargetIncludeDirectoriesCommand); - commands.push_back(new cmTargetSourcesCommand); - commands.push_back(new cmUseMangledMesaCommand); - commands.push_back(new cmUtilitySourceCommand); - commands.push_back(new cmVariableRequiresCommand); - commands.push_back(new cmVariableWatchCommand); - commands.push_back(new cmWriteFileCommand); + state->AddBuiltinCommand("cmake_host_system_information", + new cmCMakeHostSystemInformationCommand); + state->AddBuiltinCommand("remove", new cmRemoveCommand); + state->AddBuiltinCommand("variable_watch", new cmVariableWatchCommand); + state->AddBuiltinCommand("write_file", new cmWriteFileCommand); + + state->AddDisallowedCommand( + "build_name", new cmBuildNameCommand, cmPolicies::CMP0036, + "The build_name command should not be called; see CMP0036."); + state->AddDisallowedCommand( + "use_mangled_mesa", new cmUseMangledMesaCommand, cmPolicies::CMP0030, + "The use_mangled_mesa command should not be called; see CMP0030."); + #endif +} + +void GetProjectCommands(cmState* state) +{ + state->AddBuiltinCommand("add_custom_command", + new cmAddCustomCommandCommand); + state->AddBuiltinCommand("add_custom_target", new cmAddCustomTargetCommand); + state->AddBuiltinCommand("add_definitions", new cmAddDefinitionsCommand); + state->AddBuiltinCommand("add_dependencies", new cmAddDependenciesCommand); + state->AddBuiltinCommand("add_executable", new cmAddExecutableCommand); + state->AddBuiltinCommand("add_library", new cmAddLibraryCommand); + state->AddBuiltinCommand("add_subdirectory", new cmAddSubDirectoryCommand); + state->AddBuiltinCommand("add_test", new cmAddTestCommand); + state->AddBuiltinCommand("build_command", new cmBuildCommand); + state->AddBuiltinCommand("create_test_sourcelist", + new cmCreateTestSourceList); + state->AddBuiltinCommand("define_property", new cmDefinePropertyCommand); + state->AddBuiltinCommand("enable_language", new cmEnableLanguageCommand); + state->AddBuiltinCommand("enable_testing", new cmEnableTestingCommand); + state->AddBuiltinCommand("get_source_file_property", + new cmGetSourceFilePropertyCommand); + state->AddBuiltinCommand("get_target_property", + new cmGetTargetPropertyCommand); + state->AddBuiltinCommand("get_test_property", new cmGetTestPropertyCommand); + state->AddBuiltinCommand("include_directories", + new cmIncludeDirectoryCommand); + state->AddBuiltinCommand("include_regular_expression", + new cmIncludeRegularExpressionCommand); + state->AddBuiltinCommand("install", new cmInstallCommand); + state->AddBuiltinCommand("install_files", new cmInstallFilesCommand); + state->AddBuiltinCommand("install_targets", new cmInstallTargetsCommand); + state->AddBuiltinCommand("link_directories", new cmLinkDirectoriesCommand); + state->AddBuiltinCommand("project", new cmProjectCommand); + state->AddBuiltinCommand("set_source_files_properties", + new cmSetSourceFilesPropertiesCommand); + state->AddBuiltinCommand("set_target_properties", + new cmSetTargetPropertiesCommand); + state->AddBuiltinCommand("set_tests_properties", + new cmSetTestsPropertiesCommand); + state->AddBuiltinCommand("subdirs", new cmSubdirCommand); + state->AddBuiltinCommand("target_link_libraries", + new cmTargetLinkLibrariesCommand); + state->AddBuiltinCommand("try_compile", new cmTryCompileCommand); + state->AddBuiltinCommand("try_run", new cmTryRunCommand); + +#if defined(CMAKE_BUILD_WITH_CMAKE) + state->AddBuiltinCommand("add_compile_options", + new cmAddCompileOptionsCommand); + state->AddBuiltinCommand("aux_source_directory", + new cmAuxSourceDirectoryCommand); + state->AddBuiltinCommand("export", new cmExportCommand); + state->AddBuiltinCommand("fltk_wrap_ui", new cmFLTKWrapUICommand); + state->AddBuiltinCommand("include_external_msproject", + new cmIncludeExternalMSProjectCommand); + state->AddBuiltinCommand("install_programs", new cmInstallProgramsCommand); + state->AddBuiltinCommand("link_libraries", new cmLinkLibrariesCommand); + state->AddBuiltinCommand("load_cache", new cmLoadCacheCommand); + state->AddBuiltinCommand("qt_wrap_cpp", new cmQTWrapCPPCommand); + state->AddBuiltinCommand("qt_wrap_ui", new cmQTWrapUICommand); + state->AddBuiltinCommand("remove_definitions", + new cmRemoveDefinitionsCommand); + state->AddBuiltinCommand("source_group", new cmSourceGroupCommand); + state->AddBuiltinCommand("target_compile_definitions", + new cmTargetCompileDefinitionsCommand); + state->AddBuiltinCommand("target_compile_features", + new cmTargetCompileFeaturesCommand); + state->AddBuiltinCommand("target_compile_options", + new cmTargetCompileOptionsCommand); + state->AddBuiltinCommand("target_include_directories", + new cmTargetIncludeDirectoriesCommand); + state->AddBuiltinCommand("target_sources", new cmTargetSourcesCommand); + + state->AddDisallowedCommand( + "export_library_dependencies", new cmExportLibraryDependenciesCommand, + cmPolicies::CMP0033, + "The export_library_dependencies command should not be called; " + "see CMP0033."); + state->AddDisallowedCommand( + "load_command", new cmLoadCommandCommand, cmPolicies::CMP0031, + "The load_command command should not be called; see CMP0031."); + state->AddDisallowedCommand( + "output_required_files", new cmOutputRequiredFilesCommand, + cmPolicies::CMP0032, + "The output_required_files command should not be called; see CMP0032."); + state->AddDisallowedCommand( + "subdir_depends", new cmSubdirDependsCommand, cmPolicies::CMP0029, + "The subdir_depends command should not be called; see CMP0029."); + state->AddDisallowedCommand( + "utility_source", new cmUtilitySourceCommand, cmPolicies::CMP0034, + "The utility_source command should not be called; see CMP0034."); + state->AddDisallowedCommand( + "variable_requires", new cmVariableRequiresCommand, cmPolicies::CMP0035, + "The variable_requires command should not be called; see CMP0035."); +#endif +} + +void GetProjectCommandsInScriptMode(cmState* state) +{ +#define CM_UNEXPECTED_PROJECT_COMMAND(NAME) \ + state->AddUnexpectedCommand(NAME, "command is not scriptable") + + CM_UNEXPECTED_PROJECT_COMMAND("add_compile_options"); + CM_UNEXPECTED_PROJECT_COMMAND("add_custom_command"); + CM_UNEXPECTED_PROJECT_COMMAND("add_custom_target"); + CM_UNEXPECTED_PROJECT_COMMAND("add_definitions"); + CM_UNEXPECTED_PROJECT_COMMAND("add_dependencies"); + CM_UNEXPECTED_PROJECT_COMMAND("add_executable"); + CM_UNEXPECTED_PROJECT_COMMAND("add_library"); + CM_UNEXPECTED_PROJECT_COMMAND("add_subdirectory"); + CM_UNEXPECTED_PROJECT_COMMAND("add_test"); + CM_UNEXPECTED_PROJECT_COMMAND("aux_source_directory"); + CM_UNEXPECTED_PROJECT_COMMAND("build_command"); + CM_UNEXPECTED_PROJECT_COMMAND("create_test_sourcelist"); + CM_UNEXPECTED_PROJECT_COMMAND("define_property"); + CM_UNEXPECTED_PROJECT_COMMAND("enable_language"); + CM_UNEXPECTED_PROJECT_COMMAND("enable_testing"); + CM_UNEXPECTED_PROJECT_COMMAND("export"); + CM_UNEXPECTED_PROJECT_COMMAND("fltk_wrap_ui"); + CM_UNEXPECTED_PROJECT_COMMAND("get_source_file_property"); + CM_UNEXPECTED_PROJECT_COMMAND("get_target_property"); + CM_UNEXPECTED_PROJECT_COMMAND("get_test_property"); + CM_UNEXPECTED_PROJECT_COMMAND("include_directories"); + CM_UNEXPECTED_PROJECT_COMMAND("include_external_msproject"); + CM_UNEXPECTED_PROJECT_COMMAND("include_regular_expression"); + CM_UNEXPECTED_PROJECT_COMMAND("install"); + CM_UNEXPECTED_PROJECT_COMMAND("link_directories"); + CM_UNEXPECTED_PROJECT_COMMAND("link_libraries"); + CM_UNEXPECTED_PROJECT_COMMAND("load_cache"); + CM_UNEXPECTED_PROJECT_COMMAND("project"); + CM_UNEXPECTED_PROJECT_COMMAND("qt_wrap_cpp"); + CM_UNEXPECTED_PROJECT_COMMAND("qt_wrap_ui"); + CM_UNEXPECTED_PROJECT_COMMAND("remove_definitions"); + CM_UNEXPECTED_PROJECT_COMMAND("set_source_files_properties"); + CM_UNEXPECTED_PROJECT_COMMAND("set_target_properties"); + CM_UNEXPECTED_PROJECT_COMMAND("set_tests_properties"); + CM_UNEXPECTED_PROJECT_COMMAND("source_group"); + CM_UNEXPECTED_PROJECT_COMMAND("target_compile_definitions"); + CM_UNEXPECTED_PROJECT_COMMAND("target_compile_features"); + CM_UNEXPECTED_PROJECT_COMMAND("target_compile_options"); + CM_UNEXPECTED_PROJECT_COMMAND("target_include_directories"); + CM_UNEXPECTED_PROJECT_COMMAND("target_link_libraries"); + CM_UNEXPECTED_PROJECT_COMMAND("target_sources"); + CM_UNEXPECTED_PROJECT_COMMAND("try_compile"); + CM_UNEXPECTED_PROJECT_COMMAND("try_run"); + + // deprected commands + CM_UNEXPECTED_PROJECT_COMMAND("export_library_dependencies"); + CM_UNEXPECTED_PROJECT_COMMAND("load_command"); + CM_UNEXPECTED_PROJECT_COMMAND("output_required_files"); + CM_UNEXPECTED_PROJECT_COMMAND("subdir_depends"); + CM_UNEXPECTED_PROJECT_COMMAND("utility_source"); + CM_UNEXPECTED_PROJECT_COMMAND("variable_requires"); - return commands; +#undef CM_UNEXPECTED_PROJECT_COMMAND } |