diff options
Diffstat (limited to 'tools/gn/functions.h')
-rw-r--r-- | tools/gn/functions.h | 182 |
1 files changed, 182 insertions, 0 deletions
diff --git a/tools/gn/functions.h b/tools/gn/functions.h new file mode 100644 index 0000000..806de1d --- /dev/null +++ b/tools/gn/functions.h @@ -0,0 +1,182 @@ +// 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 <string> +#include <vector> + +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<Value>& args, + BlockNode* block, // Optional. + Err* err); + +// Function executing functions ----------------------------------------------- + +Value ExecuteTemplate(Scope* scope, + const FunctionCallNode* function, + const std::vector<Value>& args, + BlockNode* block, + Err* err); +Value ExecuteExecScript(Scope* scope, + const FunctionCallNode* function, + const std::vector<Value>& args, + Err* err); +Value ExecuteProcessFileTemplate(Scope* scope, + const FunctionCallNode* function, + const std::vector<Value>& args, + Err* err); +Value ExecuteReadFile(Scope* scope, + const FunctionCallNode* function, + const std::vector<Value>& args, + Err* err); +Value ExecuteSetDefaultToolchain(Scope* scope, + const FunctionCallNode* function, + const std::vector<Value>& args, + Err* err); +Value ExecuteTool(Scope* scope, + const FunctionCallNode* function, + const std::vector<Value>& args, + BlockNode* block, + Err* err); +Value ExecuteToolchain(Scope* scope, + const FunctionCallNode* function, + const std::vector<Value>& args, + BlockNode* block, + Err* err); +Value ExecuteWriteFile(Scope* scope, + const FunctionCallNode* function, + const std::vector<Value>& args, + Err* err); + +// Target-generating functions. +Value ExecuteComponent(Scope* scope, + const FunctionCallNode* function, + const std::vector<Value>& args, + BlockNode* block, + Err* err); +Value ExecuteCopy(Scope* scope, + const FunctionCallNode* function, + const std::vector<Value>& args, + Err* err); +Value ExecuteCustom(Scope* scope, + const FunctionCallNode* function, + const std::vector<Value>& args, + BlockNode* block, + Err* err); +Value ExecuteExecutable(Scope* scope, + const FunctionCallNode* function, + const std::vector<Value>& args, + BlockNode* block, + Err* err); +Value ExecuteSharedLibrary(Scope* scope, + const FunctionCallNode* function, + const std::vector<Value>& args, + BlockNode* block, + Err* err); +Value ExecuteStaticLibrary(Scope* scope, + const FunctionCallNode* function, + const std::vector<Value>& args, + BlockNode* block, + Err* err); +Value ExecuteGroup(Scope* scope, + const FunctionCallNode* function, + const std::vector<Value>& 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<Value>& 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<Value>& 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_ |