Use a shorter/simpler license convention, stops the header taking so much space. Follow the SPDX license specification: https://spdx.org/licenses - C/C++/objc/objc++ - Python - Shell Scripts - CMake, GNUmakefile While most of the source tree has been included - `./extern/` was left out. - `./intern/cycles` & `./intern/atomic` are also excluded because they use different header conventions. doc/license/SPDX-license-identifiers.txt has been added to list SPDX all used identifiers. See P2788 for the script that automated these edits. Reviewed By: brecht, mont29, sergey Ref D14069
		
			
				
	
	
		
			183 lines
		
	
	
		
			6.3 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			183 lines
		
	
	
		
			6.3 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
/* SPDX-License-Identifier: GPL-2.0-or-later */
 | 
						|
 | 
						|
/** \file
 | 
						|
 * \ingroup python
 | 
						|
 *
 | 
						|
 * \subsection common_args Common Arguments
 | 
						|
 *
 | 
						|
 * - `C` the #bContext (never NULL).
 | 
						|
 *
 | 
						|
 * - `imports`: This is simply supported for convenience since imports can make constructing
 | 
						|
 *   strings more cumbersome as otherwise small expressions become multi-line code-blocks.
 | 
						|
 *   Optional (ignored when NULL), otherwise this is a NULL terminated array of module names.
 | 
						|
 *
 | 
						|
     Failure to import any modules prevents any further execution.
 | 
						|
 *
 | 
						|
 * - `err_info` #BPy_RunErrInfo is passed to some functions so errors can be forwarded to the UI.
 | 
						|
 *   Option (when NULL errors are printed to the `stdout` and cleared).
 | 
						|
 *   However this should be used in any case the error would be useful to show to the user.
 | 
						|
 */
 | 
						|
 | 
						|
#pragma once
 | 
						|
 | 
						|
#ifdef __cplusplus
 | 
						|
extern "C" {
 | 
						|
#endif
 | 
						|
 | 
						|
#include "BLI_sys_types.h"
 | 
						|
 | 
						|
#include "BLI_compiler_attrs.h"
 | 
						|
 | 
						|
struct ReportList;
 | 
						|
struct Text;
 | 
						|
struct bContext;
 | 
						|
 | 
						|
/* bpy_interface_run.c */
 | 
						|
 | 
						|
/* -------------------------------------------------------------------- */
 | 
						|
/** \name Run File/Text as a Script
 | 
						|
 *
 | 
						|
 * \note #BPY_run_filepath and #BPY_run_filepath have almost identical behavior
 | 
						|
 * one operates on a file-path, the other on a blender text-block.
 | 
						|
 * \{ */
 | 
						|
 | 
						|
/**
 | 
						|
 * Execute `filepath` as a Python script.
 | 
						|
 *
 | 
						|
 * Wrapper for `PyRun_File` (similar to calling python with a script argument).
 | 
						|
 * Used for the `--python` command line argument.
 | 
						|
 *
 | 
						|
 * \param C: The context (never NULL).
 | 
						|
 * \param filepath: The file path to execute.
 | 
						|
 * \param reports: Failure to execute the script will report the exception here (may be NULL).
 | 
						|
 * \return true on success, otherwise false with an error reported to `reports`.
 | 
						|
 *
 | 
						|
 * \note Python scripts could consider `bpy.utils.execfile`, which has the advantage of returning
 | 
						|
 * the object as a module for data access & caching `pyc` file for faster re-execution.
 | 
						|
 */
 | 
						|
bool BPY_run_filepath(struct bContext *C, const char *filepath, struct ReportList *reports)
 | 
						|
    ATTR_NONNULL(1, 2);
 | 
						|
/**
 | 
						|
 * Execute a Blender `text` block as a Python script.
 | 
						|
 *
 | 
						|
 * Wrapper for `Py_CompileStringObject` & `PyEval_EvalCode`.
 | 
						|
 * Used for the `--python-text` command line argument.
 | 
						|
 *
 | 
						|
 * \param C: The context (never NULL).
 | 
						|
 * \param text: The text-block to execute.
 | 
						|
 * \param reports: Failure to execute the script will report the exception here (may be NULL).
 | 
						|
 * \param do_jump: When true, any error moves the cursor to the location of that error.
 | 
						|
 * Useful for executing scripts interactively from the text editor.
 | 
						|
 * \return true on success, otherwise false with an error reported to `reports`.
 | 
						|
 *
 | 
						|
 * \note The `__file__` is constructed by joining the blend file-path to the name of the text.
 | 
						|
 * This is done so error messages give useful output however there are rare cases causes problems
 | 
						|
 * with introspection tools which attempt to load `__file__`.
 | 
						|
 */
 | 
						|
bool BPY_run_text(struct bContext *C, struct Text *text, struct ReportList *reports, bool do_jump)
 | 
						|
    ATTR_NONNULL(1, 2);
 | 
						|
 | 
						|
/** \} */
 | 
						|
 | 
						|
/* -------------------------------------------------------------------- */
 | 
						|
/** \name Run a String as a Script
 | 
						|
 *
 | 
						|
 * - Use 'eval' for simple single-line expressions.
 | 
						|
 * - Use 'exec' for full multi-line scripts.
 | 
						|
 * \{ */
 | 
						|
 | 
						|
/**
 | 
						|
 * Run an entire script, matches: `exec(compile(..., "exec"))`
 | 
						|
 */
 | 
						|
bool BPY_run_string_exec(struct bContext *C, const char *imports[], const char *expr);
 | 
						|
/**
 | 
						|
 * Run an expression, matches: `exec(compile(..., "eval"))`.
 | 
						|
 */
 | 
						|
bool BPY_run_string_eval(struct bContext *C, const char *imports[], const char *expr);
 | 
						|
 | 
						|
/** \} */
 | 
						|
 | 
						|
/* -------------------------------------------------------------------- */
 | 
						|
/** \name Run a String as a Script & Return the Result
 | 
						|
 *
 | 
						|
 * Convenience functions for executing a script and returning the result as an expected type.
 | 
						|
 * \{ */
 | 
						|
 | 
						|
/**
 | 
						|
 * \note When this struct is passed in as NULL,
 | 
						|
 * print errors to the `stdout` and clear.
 | 
						|
 */
 | 
						|
struct BPy_RunErrInfo {
 | 
						|
  /** Brief text, single line (can show this in status bar for e.g.). */
 | 
						|
  bool use_single_line_error;
 | 
						|
 | 
						|
  /** Report with optional prefix (when non-NULL). */
 | 
						|
  struct ReportList *reports;
 | 
						|
  const char *report_prefix;
 | 
						|
 | 
						|
  /** Allocated exception text (assign when non-NULL). */
 | 
						|
  char **r_string;
 | 
						|
};
 | 
						|
 | 
						|
/**
 | 
						|
 * Evaluate `expr` as a number (double).
 | 
						|
 *
 | 
						|
 * \param C: See \ref common_args.
 | 
						|
 * \param imports: See \ref common_args.
 | 
						|
 * \param expr: The expression to evaluate.
 | 
						|
 * \param err_info: See \ref common_args.
 | 
						|
 * \param r_value: The resulting value.
 | 
						|
 * \return Success.
 | 
						|
 */
 | 
						|
bool BPY_run_string_as_number(struct bContext *C,
 | 
						|
                              const char *imports[],
 | 
						|
                              const char *expr,
 | 
						|
                              struct BPy_RunErrInfo *err_info,
 | 
						|
                              double *r_value) ATTR_NONNULL(1, 3, 5);
 | 
						|
/**
 | 
						|
 * Evaluate `expr` as an integer or pointer.
 | 
						|
 *
 | 
						|
 * \note Support both int and pointers.
 | 
						|
 *
 | 
						|
 * \param C: See \ref common_args.
 | 
						|
 * \param imports: See \ref common_args.
 | 
						|
 * \param expr: The expression to evaluate.
 | 
						|
 * \param err_info: See \ref common_args.
 | 
						|
 * \param r_value: The resulting value.
 | 
						|
 * \return Success.
 | 
						|
 */
 | 
						|
bool BPY_run_string_as_intptr(struct bContext *C,
 | 
						|
                              const char *imports[],
 | 
						|
                              const char *expr,
 | 
						|
                              struct BPy_RunErrInfo *err_info,
 | 
						|
                              intptr_t *r_value) ATTR_NONNULL(1, 3, 5);
 | 
						|
/**
 | 
						|
 * Evaluate `expr` as a string.
 | 
						|
 *
 | 
						|
 * \param C: See \ref common_args.
 | 
						|
 * \param imports: See \ref common_args.
 | 
						|
 * \param expr: The expression to evaluate.
 | 
						|
 * \param err_info: See \ref common_args.
 | 
						|
 * \param r_value: The resulting value.
 | 
						|
 * \return Success.
 | 
						|
 */
 | 
						|
bool BPY_run_string_as_string_and_size(struct bContext *C,
 | 
						|
                                       const char *imports[],
 | 
						|
                                       const char *expr,
 | 
						|
                                       struct BPy_RunErrInfo *err_info,
 | 
						|
                                       char **r_value,
 | 
						|
                                       size_t *r_value_size) ATTR_NONNULL(1, 3, 5, 6);
 | 
						|
 | 
						|
/** See #BPY_run_string_as_string_and_size */
 | 
						|
bool BPY_run_string_as_string(struct bContext *C,
 | 
						|
                              const char *imports[],
 | 
						|
                              const char *expr,
 | 
						|
                              struct BPy_RunErrInfo *err_info,
 | 
						|
                              char **r_value) ATTR_NONNULL(1, 3, 5);
 | 
						|
 | 
						|
/** \} */
 | 
						|
 | 
						|
#ifdef __cplusplus
 | 
						|
} /* extern "C" */
 | 
						|
#endif
 |