CMake/Source/cmcmd.h
Bill Hoffman 3bbe95f58a Clean up iwyu code to not be one big if statement.
This commit changes the internal -E__run_iwyu to be -E__run_co_compile. This
is used for co-compile commands. These are tools that want to mirror the
compiler. For each compiler invocation the tool will be invoked first. This
started as a way to implement include what you use (iwyu), but has expanded
to include cpplint, cppcheck and others. Likely there will be more in the
future as well. This commit implements each one in its own function and
provides a way to add additional ones in the future with less work.
2017-09-13 17:44:49 -04:00

55 lines
2.2 KiB
C++

/* Distributed under the OSI-approved BSD 3-Clause License. See accompanying
file Copyright.txt or https://cmake.org/licensing for details. */
#ifndef cmcmd_h
#define cmcmd_h
#include "cmConfigure.h" // IWYU pragma: keep
#include "cmCryptoHash.h"
#include <string>
#include <vector>
class cmcmd
{
public:
/**
* Execute commands during the build process. Supports options such
* as echo, remove file etc.
*/
static int ExecuteCMakeCommand(std::vector<std::string>&);
// define co-compile command handlers they must be public
// because they are used in a std::function map
static int HandleIWYU(const std::string& runCmd,
const std::string& sourceFile,
const std::vector<std::string>& orig_cmd);
static int HandleTidy(const std::string& runCmd,
const std::string& sourceFile,
const std::vector<std::string>& orig_cmd);
static int HandleLWYU(const std::string& runCmd,
const std::string& sourceFile,
const std::vector<std::string>& orig_cmd);
static int HandleCppLint(const std::string& runCmd,
const std::string& sourceFile,
const std::vector<std::string>& orig_cmd);
static int HandleCppCheck(const std::string& runCmd,
const std::string& sourceFile,
const std::vector<std::string>& orig_cmd);
protected:
static int HandleCoCompileCommands(std::vector<std::string>& args);
static int HashSumFile(std::vector<std::string>& args,
cmCryptoHash::Algo algo);
static int SymlinkLibrary(std::vector<std::string>& args);
static int SymlinkExecutable(std::vector<std::string>& args);
static bool SymlinkInternal(std::string const& file,
std::string const& link);
static int ExecuteEchoColor(std::vector<std::string>& args);
static int ExecuteLinkScript(std::vector<std::string>& args);
static int WindowsCEEnvironment(const char* version,
const std::string& name);
static int VisualStudioLink(std::vector<std::string>& args, int type);
};
#endif