// Copyright (c) 2013 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef TOOLS_GN_FUNCTIONS_H_ #define TOOLS_GN_FUNCTIONS_H_ #include #include class Err; class BlockNode; class FunctionCallNode; class Label; class ListNode; class ParseNode; class Scope; class SourceDir; class Token; class Value; Value ExecuteFunction(Scope* scope, const FunctionCallNode* function, const std::vector& args, BlockNode* block, // Optional. Err* err); // Function executing functions ----------------------------------------------- Value ExecuteTemplate(Scope* scope, const FunctionCallNode* function, const std::vector& args, BlockNode* block, Err* err); Value ExecuteExecScript(Scope* scope, const FunctionCallNode* function, const std::vector& args, Err* err); Value ExecuteProcessFileTemplate(Scope* scope, const FunctionCallNode* function, const std::vector& args, Err* err); Value ExecuteReadFile(Scope* scope, const FunctionCallNode* function, const std::vector& args, Err* err); Value ExecuteSetDefaultToolchain(Scope* scope, const FunctionCallNode* function, const std::vector& args, Err* err); Value ExecuteTool(Scope* scope, const FunctionCallNode* function, const std::vector& args, BlockNode* block, Err* err); Value ExecuteToolchain(Scope* scope, const FunctionCallNode* function, const std::vector& args, BlockNode* block, Err* err); Value ExecuteWriteFile(Scope* scope, const FunctionCallNode* function, const std::vector& args, Err* err); // Target-generating functions. Value ExecuteComponent(Scope* scope, const FunctionCallNode* function, const std::vector& args, BlockNode* block, Err* err); Value ExecuteCopy(Scope* scope, const FunctionCallNode* function, const std::vector& args, Err* err); Value ExecuteCustom(Scope* scope, const FunctionCallNode* function, const std::vector& args, BlockNode* block, Err* err); Value ExecuteExecutable(Scope* scope, const FunctionCallNode* function, const std::vector& args, BlockNode* block, Err* err); Value ExecuteSharedLibrary(Scope* scope, const FunctionCallNode* function, const std::vector& args, BlockNode* block, Err* err); Value ExecuteStaticLibrary(Scope* scope, const FunctionCallNode* function, const std::vector& args, BlockNode* block, Err* err); Value ExecuteGroup(Scope* scope, const FunctionCallNode* function, const std::vector& args, BlockNode* block, Err* err); // Helper functions ----------------------------------------------------------- // Verifies that the current scope is not processing an import. If it is, it // will set the error, blame the given parse node for it, and return false. bool EnsureNotProcessingImport(const ParseNode* node, const Scope* scope, Err* err); // Like EnsureNotProcessingImport but checks for running the build config. bool EnsureNotProcessingBuildConfig(const ParseNode* node, const Scope* scope, Err* err); // Sets up the |block_scope| for executing a target (or something like it). // The |scope| is the containing scope. It should have been already set as the // parent for the |block_scope| when the |block_scope| was created. // // This will set up the target defaults and set the |target_name| variable in // the block scope to the current target name, which is assumed to be the first // argument to the function. // // On success, returns true. On failure, sets the error and returns false. bool FillTargetBlockScope(const Scope* scope, const FunctionCallNode* function, const char* target_type, const BlockNode* block, const std::vector& args, Scope* block_scope, Err* err); // Validates that the given function call has one string argument. This is // the most common function signature, so it saves space to have this helper. // Returns false and sets the error on failure. bool EnsureSingleStringArg(const FunctionCallNode* function, const std::vector& args, Err* err); // Returns the source directory for the file comtaining the given function // invocation. const SourceDir& SourceDirForFunctionCall(const FunctionCallNode* function); // Returns the name of the toolchain for the given scope. const Label& ToolchainLabelForScope(const Scope* scope); // Generates a label for the given scope, using the current directory and // toolchain, and the given name. Label MakeLabelForScope(const Scope* scope, const FunctionCallNode* function, const std::string& name); // Function name constants ---------------------------------------------------- namespace functions { extern const char kAssert[]; extern const char kComponent[]; extern const char kConfig[]; extern const char kCopy[]; extern const char kCustom[]; extern const char kDeclareArgs[]; extern const char kExecScript[]; extern const char kExecutable[]; extern const char kGroup[]; extern const char kImport[]; extern const char kPrint[]; extern const char kProcessFileTemplate[]; extern const char kReadFile[]; extern const char kSetDefaults[]; extern const char kSetDefaultToolchain[]; extern const char kSetSourcesAssignmentFilter[]; extern const char kSharedLibrary[]; extern const char kStaticLibrary[]; extern const char kTemplate[]; extern const char kTest[]; extern const char kTool[]; extern const char kToolchain[]; extern const char kWriteFile[]; } // namespace functions #endif // TOOLS_GN_FUNCTIONS_H_