From f4d25cf4e3b72b9cfbf3c2cce8230e0cad8ad16e Mon Sep 17 00:00:00 2001 From: Akihito Koriyama Date: Sun, 7 Jul 2024 12:21:26 +0900 Subject: [PATCH 1/5] Translate comments in php_rayaop.h from Japanese to English The comments in the php_rayaop.h file have been translated from Japanese to English to improve readability for a broader developer audience. Now all comments, functional explanations, and definitions use English language, enhancing code understanding and maintainability. --- php_rayaop.h | 130 +++++++++++++++++++++++++-------------------------- 1 file changed, 65 insertions(+), 65 deletions(-) diff --git a/php_rayaop.h b/php_rayaop.h index b9a6175..cd8e9c3 100644 --- a/php_rayaop.h +++ b/php_rayaop.h @@ -1,91 +1,91 @@ -#ifndef PHP_RAYAOP_H // PHP_RAYAOP_Hが定義されていない場合 -#define PHP_RAYAOP_H // PHP_RAYAOP_Hを定義(ヘッダーガード) +#ifndef PHP_RAYAOP_H // If PHP_RAYAOP_H is not defined +#define PHP_RAYAOP_H // Define PHP_RAYAOP_H (header guard) -#ifdef HAVE_CONFIG_H // HAVE_CONFIG_Hが定義されている場合 -#include "config.h" // config.hをインクルード +#ifdef HAVE_CONFIG_H // If HAVE_CONFIG_H is defined +#include "config.h" // Include config.h #endif -#include "php.h" // PHP核のヘッダーファイルをインクルード -#include "php_ini.h" // PHP INI関連のヘッダーファイルをインクルード -#include "ext/standard/info.h" // 標準拡張モジュールの情報関連ヘッダーをインクルード -#include "zend_exceptions.h" // Zend例外処理関連のヘッダーをインクルード -#include "zend_interfaces.h" // Zendインターフェース関連のヘッダーをインクルード +#include "php.h" // Include PHP core header file +#include "php_ini.h" // Include PHP INI related header file +#include "ext/standard/info.h" // Include standard extension module information related header +#include "zend_exceptions.h" // Include Zend exception handling related header +#include "zend_interfaces.h" // Include Zend interface related header -#ifdef ZTS // スレッドセーフモードの場合 -#include "TSRM.h" // Thread Safe Resource Managerをインクルード +#ifdef ZTS // If in thread-safe mode +#include "TSRM.h" // Include Thread Safe Resource Manager #endif -#define PHP_RAYAOP_VERSION "1.0.0" // RayAOP拡張機能のバージョンを定義 -#define RAYAOP_NS "Ray\\Aop\\" // RayAOPの名前空間を定義 +#define PHP_RAYAOP_VERSION "1.0.0" // Define RayAOP extension version +#define RAYAOP_NS "Ray\\Aop\\" // Define RayAOP namespace -extern zend_module_entry rayaop_module_entry; // rayaopモジュールエントリを外部参照として宣言 -#define phpext_rayaop_ptr &rayaop_module_entry // rayaopモジュールへのポインタを定義 +extern zend_module_entry rayaop_module_entry; // Declare rayaop module entry as external reference +#define phpext_rayaop_ptr &rayaop_module_entry // Define pointer to rayaop module -#ifdef PHP_WIN32 // Windows環境の場合 -#define PHP_RAYAOP_API __declspec(dllexport) // DLLエクスポート指定 -#elif defined(__GNUC__) && __GNUC__ >= 4 // GCC 4以上の場合 -#define PHP_RAYAOP_API __attribute__ ((visibility("default"))) // デフォルトの可視性を指定 -#else // その他の環境 -#define PHP_RAYAOP_API // 特に指定なし +#ifdef PHP_WIN32 // If in Windows environment +#define PHP_RAYAOP_API __declspec(dllexport) // Specify DLL export +#elif defined(__GNUC__) && __GNUC__ >= 4 // If using GCC 4 or later +#define PHP_RAYAOP_API __attribute__ ((visibility("default"))) // Specify default visibility +#else // For other environments +#define PHP_RAYAOP_API // No specific definition #endif -#ifdef ZTS // スレッドセーフモードの場合 -#include "TSRM.h" // Thread Safe Resource Managerを再度インクルード(冗長だが安全のため) +#ifdef ZTS // If in thread-safe mode +#include "TSRM.h" // Include Thread Safe Resource Manager again (redundant but for safety) #endif -// デバッグ出力用マクロ -#ifdef RAYAOP_DEBUG // デバッグモードが有効な場合 -#define RAYAOP_DEBUG_PRINT(fmt, ...) php_printf("RAYAOP DEBUG: " fmt "\n", ##__VA_ARGS__) // デバッグ出力マクロを定義 -#else // デバッグモードが無効な場合 -#define RAYAOP_DEBUG_PRINT(fmt, ...) // 何もしない +// Macro for debug output +#ifdef RAYAOP_DEBUG // If debug mode is enabled +#define RAYAOP_DEBUG_PRINT(fmt, ...) php_printf("RAYAOP DEBUG: " fmt "\n", ##__VA_ARGS__) // Define debug output macro +#else // If debug mode is disabled +#define RAYAOP_DEBUG_PRINT(fmt, ...) // Do nothing #endif -// エラーコード -#define RAYAOP_ERROR_MEMORY_ALLOCATION 1 // メモリ割り当てエラーのコード -#define RAYAOP_ERROR_HASH_UPDATE 2 // ハッシュ更新エラーのコード +// Error codes +#define RAYAOP_ERROR_MEMORY_ALLOCATION 1 // Error code for memory allocation +#define RAYAOP_ERROR_HASH_UPDATE 2 // Error code for hash update /** - * インターセプト情報を保持する構造体 - * link: http//://www.phpinternalsbook.com/php5/classes_objects/internal_structures_and_implementation.html + * Structure to hold intercept information + * link: http://www.phpinternalsbook.com/php5/classes_objects/internal_structures_and_implementation.html * link: http://php.adamharvey.name/manual/ja/internals2.variables.tables.php */ typedef struct _intercept_info { - zend_string *class_name; // インターセプト対象のクラス名 - zend_string *method_name; // インターセプト対象のメソッド名 - zval handler; // インターセプトハンドラー + zend_string *class_name; // Class name to intercept + zend_string *method_name; // Method name to intercept + zval handler; // Intercept handler } intercept_info; -// 関数宣言 -PHP_MINIT_FUNCTION(rayaop); // モジュール初期化関数 -PHP_MSHUTDOWN_FUNCTION(rayaop); // モジュールシャットダウン関数 -PHP_RINIT_FUNCTION(rayaop); // リクエスト初期化関数 -PHP_RSHUTDOWN_FUNCTION(rayaop); // リクエストシャットダウン関数 -PHP_MINFO_FUNCTION(rayaop); // モジュール情報関数 - -PHP_FUNCTION(method_intercept); // メソッドインターセプト関数 - -// ユーティリティ関数の宣言 -void rayaop_handle_error(const char *message); // エラーハンドリング関数 -bool rayaop_should_intercept(zend_execute_data *execute_data); // インターセプトの必要性を判断する関数 -char* rayaop_generate_intercept_key(zend_string *class_name, zend_string *method_name, size_t *key_len); // インターセプトキーを生成する関数 -intercept_info* rayaop_find_intercept_info(const char *key, size_t key_len); // インターセプト情報を検索する関数 -void rayaop_execute_intercept(zend_execute_data *execute_data, intercept_info *info); // インターセプトを実行する関数 -void rayaop_free_intercept_info(zval *zv); // インターセプト情報を解放する関数 - -#ifdef RAYAOP_DEBUG // デバッグモードが有効な場合 -void rayaop_debug_print_zval(zval *value); // zval値をデバッグ出力する関数 -void rayaop_dump_intercept_info(void); // インターセプト情報をダンプする関数 +// Function declarations +PHP_MINIT_FUNCTION(rayaop); // Module initialization function +PHP_MSHUTDOWN_FUNCTION(rayaop); // Module shutdown function +PHP_RINIT_FUNCTION(rayaop); // Request initialization function +PHP_RSHUTDOWN_FUNCTION(rayaop); // Request shutdown function +PHP_MINFO_FUNCTION(rayaop); // Module information function + +PHP_FUNCTION(method_intercept); // Method intercept function + +// Utility function declarations +void rayaop_handle_error(const char *message); // Error handling function +bool rayaop_should_intercept(zend_execute_data *execute_data); // Function to determine if interception is necessary +char* rayaop_generate_intercept_key(zend_string *class_name, zend_string *method_name, size_t *key_len); // Function to generate intercept key +intercept_info* rayaop_find_intercept_info(const char *key, size_t key_len); // Function to search for intercept information +void rayaop_execute_intercept(zend_execute_data *execute_data, intercept_info *info); // Function to execute interception +void rayaop_free_intercept_info(zval *zv); // Function to free intercept information + +#ifdef RAYAOP_DEBUG // If debug mode is enabled +void rayaop_debug_print_zval(zval *value); // Function to debug print zval value +void rayaop_dump_intercept_info(void); // Function to dump intercept information #endif -ZEND_BEGIN_MODULE_GLOBALS(rayaop) // rayaopモジュールのグローバル変数の開始 - HashTable *intercept_ht; // インターセプトハッシュテーブル - zend_bool is_intercepting; // インターセプト中フラグ -ZEND_END_MODULE_GLOBALS(rayaop) // rayaopモジュールのグローバル変数の終了 +ZEND_BEGIN_MODULE_GLOBALS(rayaop) // Start of rayaop module global variables + HashTable *intercept_ht; // Intercept hash table + zend_bool is_intercepting; // Intercepting flag +ZEND_END_MODULE_GLOBALS(rayaop) // End of rayaop module global variables -#ifdef ZTS // スレッドセーフモードの場合 -#define RAYAOP_G(v) TSRMG(rayaop_globals_id, zend_rayaop_globals *, v) // グローバル変数アクセスマクロ(スレッドセーフ版) -#else // 非スレッドセーフモードの場合 -#define RAYAOP_G(v) (rayaop_globals.v) // グローバル変数アクセスマクロ(非スレッドセーフ版) +#ifdef ZTS // If in thread-safe mode +#define RAYAOP_G(v) TSRMG(rayaop_globals_id, zend_rayaop_globals *, v) // Global variable access macro (thread-safe version) +#else // If in non-thread-safe mode +#define RAYAOP_G(v) (rayaop_globals.v) // Global variable access macro (non-thread-safe version) #endif -#endif /* PHP_RAYAOP_H */ // ヘッダーガードの終了 \ No newline at end of file +#endif /* PHP_RAYAOP_H */ // End of header guard \ No newline at end of file From 2a387ddeed40d027b374d7c423fd183d05e82000 Mon Sep 17 00:00:00 2001 From: Akihito Koriyama Date: Sun, 7 Jul 2024 12:25:37 +0900 Subject: [PATCH 2/5] Translate comments and logs in rayaop.c from Japanese to English This commit translated all the comments and log messages inside rayaop.c file from Japanese to English to make it more understandable for the global audience. Additionally, code has been altered related to debugging, error message outputs, function names and handlers for more descriptive and clear understanding. --- rayaop.c | 422 ++++++++++++++++++++++++++++--------------------------- 1 file changed, 218 insertions(+), 204 deletions(-) diff --git a/rayaop.c b/rayaop.c index 24b9656..c20b02f 100644 --- a/rayaop.c +++ b/rayaop.c @@ -1,386 +1,400 @@ #ifdef HAVE_CONFIG_H -#include "config.h" // 設定ファイルをインクルード +#include "config.h" // Include configuration file #endif -#include "php_rayaop.h" // RayAOP拡張機能のヘッダーファイルをインクルード +#include "php_rayaop.h" // Include header file for RayAOP extension -// モジュールグローバル変数の宣言 +// Declaration of module global variables ZEND_DECLARE_MODULE_GLOBALS(rayaop) -// 静的変数の宣言:元のzend_execute_ex関数へのポインタ +// Declaration of static variable: pointer to the original zend_execute_ex function static void (*original_zend_execute_ex)(zend_execute_data *execute_data); /** - * グローバル初期化関数 - * @param zend_rayaop_globals *rayaop_globals グローバル変数へのポインタ + * Global initialization function + * + * @param zend_rayaop_globals *rayaop_globals Pointer to global variables */ static void php_rayaop_init_globals(zend_rayaop_globals *rayaop_globals) { - rayaop_globals->intercept_ht = NULL; // インターセプトハッシュテーブルを初期化 - rayaop_globals->is_intercepting = 0; // インターセプトフラグを初期化 + rayaop_globals->intercept_ht = NULL; // Initialize intercept hash table + rayaop_globals->is_intercepting = 0; // Initialize intercept flag } -// デバッグ出力用マクロ +// Macro for debug output #ifdef RAYAOP_DEBUG -#define RAYAOP_DEBUG_PRINT(fmt, ...) php_printf("RAYAOP DEBUG: " fmt "\n", ##__VA_ARGS__) // デバッグ情報を出力 +#define RAYAOP_DEBUG_PRINT(fmt, ...) php_printf("RAYAOP DEBUG: " fmt "\n", ##__VA_ARGS__) // Output debug information #else -#define RAYAOP_DEBUG_PRINT(fmt, ...) // デバッグモードでない場合は何もしない +#define RAYAOP_DEBUG_PRINT(fmt, ...) // Do nothing if not in debug mode #endif -// method_intercept 関数の引数情報 +// Argument information for method_intercept function ZEND_BEGIN_ARG_INFO_EX(arginfo_method_intercept, 0, 0, 3) - ZEND_ARG_TYPE_INFO(0, class_name, IS_STRING, 0) // クラス名の引数情報 - ZEND_ARG_TYPE_INFO(0, method_name, IS_STRING, 0) // メソッド名の引数情報 - ZEND_ARG_OBJ_INFO(0, interceptor, Ray\\Aop\\MethodInterceptorInterface, 0) // インターセプトハンドラーの引数情報 + ZEND_ARG_TYPE_INFO(0, class_name, IS_STRING, 0) // Argument information for class name + ZEND_ARG_TYPE_INFO(0, method_name, IS_STRING, 0) // Argument information for method name + ZEND_ARG_OBJ_INFO(0, interceptor, Ray\\Aop\\MethodInterceptorInterface, 0) // Argument information for intercept handler ZEND_END_ARG_INFO() -// ユーティリティ関数の実装 +// Implementation of utility functions /** - * エラーハンドリング関数 - * @param const char *message エラーメッセージ + * Error handling function + * + * @param const char *message Error message */ void rayaop_handle_error(const char *message) { - php_error_docref(NULL, E_ERROR, "Memory error: %s", message); // エラーメッセージを出力 + php_error_docref(NULL, E_ERROR, "Memory error: %s", message); // Output error message } /** - * インターセプトが必要かどうかを判断する関数 - * @param zend_execute_data *execute_data 実行データ - * @return bool インターセプトが必要な場合はtrue + * Function to determine if interception is necessary + * + * @param zend_execute_data *execute_data Execution data + * @return bool true if interception is necessary */ bool rayaop_should_intercept(zend_execute_data *execute_data) { - return execute_data->func->common.scope && // スコープが存在し - execute_data->func->common.function_name && // 関数名が存在し - !RAYAOP_G(is_intercepting); // 現在インターセプト中でない + return execute_data->func->common.scope && // Scope exists + execute_data->func->common.function_name && // Function name exists + !RAYAOP_G(is_intercepting); // Not currently intercepting } /** - * インターセプトキーを生成する関数 - * @param zend_string *class_name クラス名 - * @param zend_string *method_name メソッド名 - * @param size_t *key_len キーの長さを格納するポインタ - * @return char* 生成されたキー + * Function to generate intercept key + * + * @param zend_string *class_name Class name + * @param zend_string *method_name Method name + * @param size_t *key_len Pointer to store the key length + * @return char* Generated key */ char* rayaop_generate_intercept_key(zend_string *class_name, zend_string *method_name, size_t *key_len) { char *key = NULL; - *key_len = spprintf(&key, 0, "%s::%s", ZSTR_VAL(class_name), ZSTR_VAL(method_name)); // クラス名::メソッド名 の形式でキーを生成 - RAYAOP_DEBUG_PRINT("Generated key: %s", key); // 生成されたキーをデバッグ出力 + *key_len = spprintf(&key, 0, "%s::%s", ZSTR_VAL(class_name), ZSTR_VAL(method_name)); // Generate key in the format class_name::method_name + RAYAOP_DEBUG_PRINT("Generated key: %s", key); // Output generated key for debugging return key; } /** - * インターセプト情報を検索する関数 - * @param const char *key 検索キー - * @param size_t key_len キーの長さ - * @return intercept_info* 見つかったインターセプト情報、見つからない場合はNULL + * Function to search for intercept information + * + * @param const char *key Search key + * @param size_t key_len Key length + * @return intercept_info* Found intercept information, NULL if not found */ intercept_info* rayaop_find_intercept_info(const char *key, size_t key_len) { - return zend_hash_str_find_ptr(RAYAOP_G(intercept_ht), key, key_len); // ハッシュテーブルからインターセプト情報を検索 + return zend_hash_str_find_ptr(RAYAOP_G(intercept_ht), key, key_len); // Search for intercept information in hash table } /** - * インターセプトを実行する関数 - * @param zend_execute_data *execute_data 実行データ - * @param intercept_info *info インターセプト情報 + * Function to execute interception + * + * @param zend_execute_data *execute_data Execution data + * @param intercept_info *info Intercept information */ void rayaop_execute_intercept(zend_execute_data *execute_data, intercept_info *info) { - if (Z_TYPE(info->handler) != IS_OBJECT) { // ハンドラーがオブジェクトでない場合 - return; // 処理を中断 + if (Z_TYPE(info->handler) != IS_OBJECT) { // If handler is not an object + return; // Abort processing } - if (execute_data->This.value.obj == NULL) { // 対象オブジェクトがNULLの場合 - RAYAOP_DEBUG_PRINT("Object is NULL, calling original function"); // デバッグ情報を出力 - original_zend_execute_ex(execute_data); // 元の関数を実行 - return; // 処理を中断 + if (execute_data->This.value.obj == NULL) { // If target object is NULL + RAYAOP_DEBUG_PRINT("Object is NULL, calling original function"); // Output debug information + original_zend_execute_ex(execute_data); // Execute original function + return; // Abort processing } - zval retval, params[3]; // 戻り値と引数を格納する変数を準備 - ZVAL_OBJ(¶ms[0], execute_data->This.value.obj); // 第1引数:対象オブジェクト - ZVAL_STR(¶ms[1], info->method_name); // 第2引数:メソッド名 + zval retval, params[3]; // Prepare variables to store return value and arguments + ZVAL_OBJ(¶ms[0], execute_data->This.value.obj); // 1st argument: target object + ZVAL_STR(¶ms[1], info->method_name); // 2nd argument: method name - array_init(¶ms[2]); // 第3引数:メソッドの引数を格納する配列を初期化 - uint32_t arg_count = ZEND_CALL_NUM_ARGS(execute_data); // 引数の数を取得 - zval *args = ZEND_CALL_ARG(execute_data, 1); // 引数の配列を取得 - for (uint32_t i = 0; i < arg_count; i++) { // 各引数に対して + array_init(¶ms[2]); // Initialize array to store method arguments as 3rd argument + uint32_t arg_count = ZEND_CALL_NUM_ARGS(execute_data); // Get number of arguments + zval *args = ZEND_CALL_ARG(execute_data, 1); // Get argument array + for (uint32_t i = 0; i < arg_count; i++) { // For each argument zval *arg = &args[i]; - Z_TRY_ADDREF_P(arg); // 参照カウントを増やす - add_next_index_zval(¶ms[2], arg); // 配列に追加 + Z_TRY_ADDREF_P(arg); // Increase reference count + add_next_index_zval(¶ms[2], arg); // Add to array } - RAYAOP_G(is_intercepting) = 1; // インターセプトフラグを設定 + RAYAOP_G(is_intercepting) = 1; // Set intercept flag zval func_name; - ZVAL_STRING(&func_name, "intercept"); // 呼び出す関数名を設定 + ZVAL_STRING(&func_name, "intercept"); // Set function name to call - ZVAL_UNDEF(&retval); // 戻り値を未定義に初期化 - if (call_user_function(NULL, &info->handler, &func_name, &retval, 3, params) == SUCCESS) { // インターセプト関数を呼び出し - if (!Z_ISUNDEF(retval)) { // 戻り値が定義されている場合 - ZVAL_COPY(execute_data->return_value, &retval); // 戻り値をコピー + ZVAL_UNDEF(&retval); // Initialize return value as undefined + if (call_user_function(NULL, &info->handler, &func_name, &retval, 3, params) == SUCCESS) { // Call intercept function + if (!Z_ISUNDEF(retval)) { // If return value is defined + ZVAL_COPY(execute_data->return_value, &retval); // Copy return value } - } else { // インターセプトに失敗した場合 - php_error_docref(NULL, E_WARNING, "Interception failed for %s::%s", ZSTR_VAL(info->class_name), ZSTR_VAL(info->method_name)); // 警告を出力 + } else { // If interception fails + php_error_docref(NULL, E_WARNING, "Interception failed for %s::%s", ZSTR_VAL(info->class_name), ZSTR_VAL(info->method_name)); // Output warning } - zval_ptr_dtor(&retval); // 戻り値のメモリを解放 - zval_ptr_dtor(&func_name); // 関数名のメモリを解放 - zval_ptr_dtor(¶ms[1]); // メソッド名のメモリを解放 - zval_ptr_dtor(¶ms[2]); // 引数配列のメモリを解放 + zval_ptr_dtor(&retval); // Free memory for return value + zval_ptr_dtor(&func_name); // Free memory for function name + zval_ptr_dtor(¶ms[1]); // Free memory for method name + zval_ptr_dtor(¶ms[2]); // Free memory for argument array - RAYAOP_G(is_intercepting) = 0; // インターセプトフラグをリセット + RAYAOP_G(is_intercepting) = 0; // Reset intercept flag } /** - * インターセプト情報を解放する関数 - * @param zval *zv 解放するインターセプト情報を含むzval + * Function to free intercept information + * + * @param zval *zv zval containing intercept information to be freed */ void rayaop_free_intercept_info(zval *zv) { - intercept_info *info = Z_PTR_P(zv); // zvalからインターセプト情報ポインタを取得 - if (info) { // インターセプト情報が存在する場合 - RAYAOP_DEBUG_PRINT("Freeing intercept info for %s::%s", ZSTR_VAL(info->class_name), ZSTR_VAL(info->method_name)); // デバッグ情報を出力 - zend_string_release(info->class_name); // クラス名のメモリを解放 - zend_string_release(info->method_name); // メソッド名のメモリを解放 - zval_ptr_dtor(&info->handler); // ハンドラーのメモリを解放 - efree(info); // インターセプト情報構造体のメモリを解放 + intercept_info *info = Z_PTR_P(zv); // Get intercept information pointer from zval + if (info) { // If intercept information exists + RAYAOP_DEBUG_PRINT("Freeing intercept info for %s::%s", ZSTR_VAL(info->class_name), ZSTR_VAL(info->method_name)); // Output debug information + zend_string_release(info->class_name); // Free memory for class name + zend_string_release(info->method_name); // Free memory for method name + zval_ptr_dtor(&info->handler); // Free memory for handler + efree(info); // Free memory for intercept information structure } } /** - * カスタム zend_execute_ex 関数 - * @param zend_execute_data *execute_data 実行データ + * Custom zend_execute_ex function + * + * @param zend_execute_data *execute_data Execution data */ static void rayaop_zend_execute_ex(zend_execute_data *execute_data) { - RAYAOP_DEBUG_PRINT("rayaop_zend_execute_ex called"); // デバッグ情報を出力 + RAYAOP_DEBUG_PRINT("rayaop_zend_execute_ex called"); // Output debug information - if (!rayaop_should_intercept(execute_data)) { // インターセプトが不要な場合 - original_zend_execute_ex(execute_data); // 元の実行関数を呼び出し - return; // 処理を終了 + if (!rayaop_should_intercept(execute_data)) { // If interception is not necessary + original_zend_execute_ex(execute_data); // Call the original execution function + return; // End processing } - zend_function *current_function = execute_data->func; // 現在の関数情報を取得 - zend_string *class_name = current_function->common.scope->name; // クラス名を取得 - zend_string *method_name = current_function->common.function_name; // メソッド名を取得 + zend_function *current_function = execute_data->func; // Get current function information + zend_string *class_name = current_function->common.scope->name; // Get class name + zend_string *method_name = current_function->common.function_name; // Get method name size_t key_len; - char *key = rayaop_generate_intercept_key(class_name, method_name, &key_len); // インターセプトキーを生成 + char *key = rayaop_generate_intercept_key(class_name, method_name, &key_len); // Generate intercept key - intercept_info *info = rayaop_find_intercept_info(key, key_len); // インターセプト情報を検索 + intercept_info *info = rayaop_find_intercept_info(key, key_len); // Search for intercept information - if (info) { // インターセプト情報が見つかった場合 - RAYAOP_DEBUG_PRINT("Found intercept info for key: %s", key); // デバッグ情報を出力 - rayaop_execute_intercept(execute_data, info); // インターセプトを実行 - } else { // インターセプト情報が見つからなかった場合 - RAYAOP_DEBUG_PRINT("No intercept info found for key: %s", key); // デバッグ情報を出力 - original_zend_execute_ex(execute_data); // 元の実行関数を呼び出し + if (info) { // If intercept information is found + RAYAOP_DEBUG_PRINT("Found intercept info for key: %s", key); // Output debug information + rayaop_execute_intercept(execute_data, info); // Execute interception + } else { // If intercept information is not found + RAYAOP_DEBUG_PRINT("No intercept info found for key: %s", key); // Output debug information + original_zend_execute_ex(execute_data); // Call the original execution function } - efree(key); // キーのメモリを解放 + efree(key); // Free memory for key } /** - * ハッシュテーブル更新失敗時の処理 - * @param intercept_info *new_info 新しいインターセプト情報 - * @param char *key 更新に使用されたキー + * Handling for hash table update failure + * + * @param intercept_info *new_info New intercept information + * @param char *key Key used for update */ void hash_update_failed(intercept_info *new_info, char *key) { - rayaop_handle_error("Failed to update intercept hash table"); // エラーメッセージを出力 - zend_string_release(new_info->class_name); // クラス名のメモリを解放 - zend_string_release(new_info->method_name); // メソッド名のメモリを解放 - zval_ptr_dtor(&new_info->handler); // ハンドラーのメモリを解放 - efree(new_info); // インターセプト情報構造体のメモリを解放 - efree(key); // キーのメモリを解放 + rayaop_handle_error("Failed to update intercept hash table"); // Output error message + zend_string_release(new_info->class_name); // Free memory for class name + zend_string_release(new_info->method_name); // Free memory for method name + zval_ptr_dtor(&new_info->handler); // Free memory for handler + efree(new_info); // Free memory for intercept information structure + efree(key); // Free memory for key } /** - * インターセプトメソッドを登録する関数 + * Function to register intercept method * link: https://www.phpinternalsbook.com/php7/extensions_design/php_functions.html * - * @param INTERNAL_FUNCTION_PARAMETERS 内部関数パラメータ + * @param INTERNAL_FUNCTION_PARAMETERS Internal function parameters */ PHP_FUNCTION(method_intercept) { - RAYAOP_DEBUG_PRINT("method_intercept called"); // デバッグ情報を出力 + RAYAOP_DEBUG_PRINT("method_intercept called"); // Output debug information - char *class_name, *method_name; // クラス名とメソッド名のポインタ - size_t class_name_len, method_name_len; // クラス名とメソッド名の長さ - zval *intercepted; // インターセプトハンドラー + char *class_name, *method_name; // Pointers for class name and method name + size_t class_name_len, method_name_len; // Lengths of class name and method name + zval *intercepted; // Intercept handler ZEND_PARSE_PARAMETERS_START(3, 3) - Z_PARAM_STRING(class_name, class_name_len) // クラス名のパラメータを解析 - Z_PARAM_STRING(method_name, method_name_len) // メソッド名のパラメータを解析 - Z_PARAM_OBJECT(intercepted) // インターセプトハンドラーのパラメータを解析 + Z_PARAM_STRING(class_name, class_name_len) // Parse class name parameter + Z_PARAM_STRING(method_name, method_name_len) // Parse method name parameter + Z_PARAM_OBJECT(intercepted) // Parse intercept handler parameter ZEND_PARSE_PARAMETERS_END(); - intercept_info *new_info = ecalloc(1, sizeof(intercept_info)); // 新しいインターセプト情報のメモリを確保 - if (!new_info) { // メモリ確保に失敗した場合 - rayaop_handle_error("Failed to allocate memory for intercept_info"); // エラーメッセージを出力 - RETURN_FALSE; // falseを返して終了 + intercept_info *new_info = ecalloc(1, sizeof(intercept_info)); // Allocate memory for new intercept information + if (!new_info) { // If memory allocation fails + rayaop_handle_error("Failed to allocate memory for intercept_info"); // Output error message + RETURN_FALSE; // Return false and end } -new_info->class_name = zend_string_init(class_name, class_name_len, 0); // クラス名を初期化 - new_info->method_name = zend_string_init(method_name, method_name_len, 0); // メソッド名を初期化 - ZVAL_COPY(&new_info->handler, intercepted); // インターセプトハンドラーをコピー + new_info->class_name = zend_string_init(class_name, class_name_len, 0); // Initialize class name + new_info->method_name = zend_string_init(method_name, method_name_len, 0); // Initialize method name + ZVAL_COPY(&new_info->handler, intercepted); // Copy intercept handler char *key = NULL; - size_t key_len = spprintf(&key, 0, "%s::%s", class_name, method_name); // インターセプトキーを生成 + size_t key_len = spprintf(&key, 0, "%s::%s", class_name, method_name); // Generate intercept key - if (zend_hash_str_update_ptr(RAYAOP_G(intercept_ht), key, key_len, new_info) == NULL) { // ハッシュテーブルに追加 - hash_update_failed(new_info, key); // 追加に失敗した場合、エラー処理を実行 - RETURN_FALSE; // falseを返して終了 + if (zend_hash_str_update_ptr(RAYAOP_G(intercept_ht), key, key_len, new_info) == NULL) { // Add to hash table + hash_update_failed(new_info, key); // Execute error handling if addition fails + RETURN_FALSE; // Return false and end } - efree(key); // キーのメモリを解放 - RAYAOP_DEBUG_PRINT("Successfully registered intercept info"); // デバッグ情報を出力 - RETURN_TRUE; // trueを返して終了 + efree(key); // Free memory for key + RAYAOP_DEBUG_PRINT("Successfully registered intercept info"); // Output debug information + RETURN_TRUE; // Return true and end } -// インターフェースの定義 +// Interface definition zend_class_entry *ray_aop_method_interceptor_interface_ce; ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_ray_aop_method_interceptor_intercept, 0, 3, IS_MIXED, 0) - ZEND_ARG_TYPE_INFO(0, object, IS_OBJECT, 0) // 第1引数:オブジェクト - ZEND_ARG_TYPE_INFO(0, method, IS_STRING, 0) // 第2引数:メソッド名 - ZEND_ARG_TYPE_INFO(0, params, IS_ARRAY, 0) // 第3引数:パラメータ配列 + ZEND_ARG_TYPE_INFO(0, object, IS_OBJECT, 0) // 1st argument: object + ZEND_ARG_TYPE_INFO(0, method, IS_STRING, 0) // 2nd argument: method name + ZEND_ARG_TYPE_INFO(0, params, IS_ARRAY, 0) // 3rd argument: parameter array ZEND_END_ARG_INFO() static const zend_function_entry ray_aop_method_interceptor_interface_methods[] = { - ZEND_ABSTRACT_ME(Ray_Aop_MethodInterceptorInterface, intercept, arginfo_ray_aop_method_interceptor_intercept) // interceptメソッドを定義 - PHP_FE_END // 関数エントリの終了 + ZEND_ABSTRACT_ME(Ray_Aop_MethodInterceptorInterface, intercept, arginfo_ray_aop_method_interceptor_intercept) // Define intercept method + PHP_FE_END // End of function entries }; /** - * 拡張機能の初期化関数 - * @param INIT_FUNC_ARGS 初期化関数の引数 - * @return int 初期化の成功・失敗 + * Extension initialization function + * + * @param INIT_FUNC_ARGS Initialization function arguments + * @return int Success or failure of initialization */ PHP_MINIT_FUNCTION(rayaop) { - RAYAOP_DEBUG_PRINT("PHP_MINIT_FUNCTION called"); // デバッグ情報を出力 + RAYAOP_DEBUG_PRINT("PHP_MINIT_FUNCTION called"); // Output debug information #ifdef ZTS - ts_allocate_id(&rayaop_globals_id, sizeof(zend_rayaop_globals), (ts_allocate_ctor) php_rayaop_init_globals, NULL); // スレッドセーフモードでのグローバル変数の初期化 + ts_allocate_id(&rayaop_globals_id, sizeof(zend_rayaop_globals), (ts_allocate_ctor) php_rayaop_init_globals, NULL); // Initialize global variables in thread-safe mode #else - php_rayaop_init_globals(&rayaop_globals); // 非スレッドセーフモードでのグローバル変数の初期化 + php_rayaop_init_globals(&rayaop_globals); // Initialize global variables in non-thread-safe mode #endif zend_class_entry ce; - INIT_CLASS_ENTRY(ce, "Ray\\Aop\\MethodInterceptorInterface", ray_aop_method_interceptor_interface_methods); // クラスエントリを初期化 - ray_aop_method_interceptor_interface_ce = zend_register_internal_interface(&ce); // インターフェースを登録 + INIT_CLASS_ENTRY(ce, "Ray\\Aop\\MethodInterceptorInterface", ray_aop_method_interceptor_interface_methods); // Initialize class entry + ray_aop_method_interceptor_interface_ce = zend_register_internal_interface(&ce); // Register interface - original_zend_execute_ex = zend_execute_ex; // 元のzend_execute_ex関数を保存 - zend_execute_ex = rayaop_zend_execute_ex; // カスタムのzend_execute_ex関数を設定 +original_zend_execute_ex = zend_execute_ex; // Save the original zend_execute_ex function + zend_execute_ex = rayaop_zend_execute_ex; // Set the custom zend_execute_ex function - RAYAOP_DEBUG_PRINT("RayAOP extension initialized"); // デバッグ情報を出力 - return SUCCESS; // 成功を返す + RAYAOP_DEBUG_PRINT("RayAOP extension initialized"); // Output debug information + return SUCCESS; // Return success } /** - * 拡張機能のシャットダウン関数 - * @param SHUTDOWN_FUNC_ARGS シャットダウン関数の引数 - * @return int シャットダウンの成功・失敗 + * Extension shutdown function + * + * @param SHUTDOWN_FUNC_ARGS Shutdown function arguments + * @return int Success or failure of shutdown */ PHP_MSHUTDOWN_FUNCTION(rayaop) { - RAYAOP_DEBUG_PRINT("RayAOP PHP_MSHUTDOWN_FUNCTION called"); // デバッグ情報を出力 + RAYAOP_DEBUG_PRINT("RayAOP PHP_MSHUTDOWN_FUNCTION called"); // Output debug information - zend_execute_ex = original_zend_execute_ex; // 元のzend_execute_ex関数を復元 - original_zend_execute_ex = NULL; // 保存していたポインタをクリア + zend_execute_ex = original_zend_execute_ex; // Restore the original zend_execute_ex function + original_zend_execute_ex = NULL; // Clear the saved pointer - RAYAOP_DEBUG_PRINT("RayAOP PHP_MSHUTDOWN_FUNCTION shut down"); // デバッグ情報を出力 - return SUCCESS; // シャットダウン成功 + RAYAOP_DEBUG_PRINT("RayAOP PHP_MSHUTDOWN_FUNCTION shut down"); // Output debug information + return SUCCESS; // Return shutdown success } /** - * リクエスト開始時の初期化関数 - * @param INIT_FUNC_ARGS 初期化関数の引数 - * @return int 初期化の成功・失敗 + * Initialization function at the start of a request + * + * @param INIT_FUNC_ARGS Initialization function arguments + * @return int Success or failure of initialization */ PHP_RINIT_FUNCTION(rayaop) { - RAYAOP_DEBUG_PRINT("PHP_RINIT_FUNCTION called"); // デバッグ情報を出力 + RAYAOP_DEBUG_PRINT("PHP_RINIT_FUNCTION called"); // Output debug information - if (RAYAOP_G(intercept_ht) == NULL) { // インターセプトハッシュテーブルが未初期化の場合 - ALLOC_HASHTABLE(RAYAOP_G(intercept_ht)); // ハッシュテーブルのメモリを確保 - zend_hash_init(RAYAOP_G(intercept_ht), 8, NULL, rayaop_free_intercept_info, 0); // ハッシュテーブルを初期化 + if (RAYAOP_G(intercept_ht) == NULL) { // If intercept hash table is not initialized + ALLOC_HASHTABLE(RAYAOP_G(intercept_ht)); // Allocate memory for hash table + zend_hash_init(RAYAOP_G(intercept_ht), 8, NULL, rayaop_free_intercept_info, 0); // Initialize hash table } - RAYAOP_G(is_intercepting) = 0; // インターセプトフラグを初期化 + RAYAOP_G(is_intercepting) = 0; // Initialize intercept flag - return SUCCESS; // 成功を返す + return SUCCESS; // Return success } /** - * リクエスト終了時のシャットダウン関数 - * @param SHUTDOWN_FUNC_ARGS シャットダウン関数の引数 - * @return int シャットダウンの成功・失敗 + * Shutdown function at the end of a request + * + * @param SHUTDOWN_FUNC_ARGS Shutdown function arguments + * @return int Success or failure of shutdown */ PHP_RSHUTDOWN_FUNCTION(rayaop) { - RAYAOP_DEBUG_PRINT("RayAOP PHP_RSHUTDOWN_FUNCTION called"); // デバッグ情報を出力 - if (RAYAOP_G(intercept_ht)) { // インターセプトハッシュテーブルが存在する場合 - zend_hash_destroy(RAYAOP_G(intercept_ht)); // ハッシュテーブルを破棄 - FREE_HASHTABLE(RAYAOP_G(intercept_ht)); // ハッシュテーブルのメモリを解放 - RAYAOP_G(intercept_ht) = NULL; // ハッシュテーブルポインタをNULLに設定 + RAYAOP_DEBUG_PRINT("RayAOP PHP_RSHUTDOWN_FUNCTION called"); // Output debug information + if (RAYAOP_G(intercept_ht)) { // If intercept hash table exists + zend_hash_destroy(RAYAOP_G(intercept_ht)); // Destroy hash table + FREE_HASHTABLE(RAYAOP_G(intercept_ht)); // Free memory for hash table + RAYAOP_G(intercept_ht) = NULL; // Set hash table pointer to NULL } - RAYAOP_DEBUG_PRINT("RayAOP PHP_RSHUTDOWN_FUNCTION shut down"); // デバッグ情報を出力 - return SUCCESS; // シャットダウン成功 + RAYAOP_DEBUG_PRINT("RayAOP PHP_RSHUTDOWN_FUNCTION shut down"); // Output debug information + return SUCCESS; // Return shutdown success } /** - * 拡張機能の情報表示関数 - * @param ZEND_MODULE_INFO_FUNC_ARGS 情報表示関数の引数 + * Extension information display function + * + * @param ZEND_MODULE_INFO_FUNC_ARGS Information display function arguments */ PHP_MINFO_FUNCTION(rayaop) { - php_info_print_table_start(); // 情報テーブルの開始 - php_info_print_table_header(2, "rayaop support", "enabled"); // テーブルヘッダーの表示 - php_info_print_table_row(2, "Version", PHP_RAYAOP_VERSION); // バージョン情報の表示 - php_info_print_table_end(); // 情報テーブルの終了 + php_info_print_table_start(); // Start information table + php_info_print_table_header(2, "rayaop support", "enabled"); // Display table header + php_info_print_table_row(2, "Version", PHP_RAYAOP_VERSION); // Display version information + php_info_print_table_end(); // End information table } -// デバッグ用:インターセプト情報をダンプする関数 +// For debugging: Function to dump intercept information #ifdef RAYAOP_DEBUG /** - * インターセプト情報をダンプする関数(デバッグ用) + * Function to dump intercept information (for debugging) */ static void rayaop_dump_intercept_info(void) { - RAYAOP_DEBUG_PRINT("Dumping intercept information:"); // デバッグ情報を出力 - if (RAYAOP_G(intercept_ht)) { // インターセプトハッシュテーブルが存在する場合 + RAYAOP_DEBUG_PRINT("Dumping intercept information:"); // Output debug information + if (RAYAOP_G(intercept_ht)) { // If intercept hash table exists zend_string *key; intercept_info *info; - ZEND_HASH_FOREACH_STR_KEY_PTR(RAYAOP_G(intercept_ht), key, info) { // ハッシュテーブルの各要素に対して - if (key && info) { // キーと情報が存在する場合 - RAYAOP_DEBUG_PRINT("Key: %s", ZSTR_VAL(key)); // キーを出力 - RAYAOP_DEBUG_PRINT(" Class: %s", ZSTR_VAL(info->class_name)); // クラス名を出力 - RAYAOP_DEBUG_PRINT(" Method: %s", ZSTR_VAL(info->method_name)); // メソッド名を出力 - RAYAOP_DEBUG_PRINT(" Handler type: %d", Z_TYPE(info->handler)); // ハンドラーの型を出力 + ZEND_HASH_FOREACH_STR_KEY_PTR(RAYAOP_G(intercept_ht), key, info) { // For each element in the hash table + if (key && info) { // If key and information exist + RAYAOP_DEBUG_PRINT("Key: %s", ZSTR_VAL(key)); // Output key + RAYAOP_DEBUG_PRINT(" Class: %s", ZSTR_VAL(info->class_name)); // Output class name + RAYAOP_DEBUG_PRINT(" Method: %s", ZSTR_VAL(info->method_name)); // Output method name + RAYAOP_DEBUG_PRINT(" Handler type: %d", Z_TYPE(info->handler)); // Output handler type } } ZEND_HASH_FOREACH_END(); - } else { // インターセプトハッシュテーブルが存在しない場合 - RAYAOP_DEBUG_PRINT("Intercept hash table is not initialized"); // 初期化されていないことを出力 + } else { // If intercept hash table does not exist + RAYAOP_DEBUG_PRINT("Intercept hash table is not initialized"); // Output that it's not initialized } } #endif -// 拡張機能が提供する関数の定義 +// Definition of functions provided by the extension static const zend_function_entry rayaop_functions[] = { - PHP_FE(method_intercept, arginfo_method_intercept) // method_intercept関数の登録 - PHP_FE_END // 関数エントリの終了 + PHP_FE(method_intercept, arginfo_method_intercept) // Register method_intercept function + PHP_FE_END // End of function entries }; -// 拡張機能のモジュールエントリ +// Extension module entry zend_module_entry rayaop_module_entry = { STANDARD_MODULE_HEADER, - "rayaop", // 拡張機能の名前 - rayaop_functions, // 拡張機能が提供する関数 - PHP_MINIT(rayaop), // 拡張機能の初期化関数 - PHP_MSHUTDOWN(rayaop), // 拡張機能のシャットダウン関数 - PHP_RINIT(rayaop), // リクエスト開始時の関数 - PHP_RSHUTDOWN(rayaop), // リクエスト終了時の関数 - PHP_MINFO(rayaop), // 拡張機能の情報表示関数 - PHP_RAYAOP_VERSION, // 拡張機能のバージョン + "rayaop", // Extension name + rayaop_functions, // Functions provided by the extension + PHP_MINIT(rayaop), // Extension initialization function + PHP_MSHUTDOWN(rayaop), // Extension shutdown function + PHP_RINIT(rayaop), // Function at request start + PHP_RSHUTDOWN(rayaop), // Function at request end + PHP_MINFO(rayaop), // Extension information display function + PHP_RAYAOP_VERSION, // Extension version STANDARD_MODULE_PROPERTIES }; #ifdef COMPILE_DL_RAYAOP -ZEND_GET_MODULE(rayaop) // 動的ロード時のモジュール取得関数 -#endif +ZEND_GET_MODULE(rayaop) // Function to get module for dynamic loading +#endif \ No newline at end of file From afc8861222895120dfd63637a700d5b5dd7d6b1f Mon Sep 17 00:00:00 2001 From: Akihito Koriyama Date: Sun, 7 Jul 2024 12:26:38 +0900 Subject: [PATCH 3/5] Translate comments in config.m4 from Japanese to English The comments in the config.m4 file have been translated from Japanese to English for better understandability and maintainability. This includes comments for configuration macros, initialization of PECL extension, enabling the extension, and more. This is important for developers who are not familiar with Japanese. --- config.m4 | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/config.m4 b/config.m4 index 9a27757..03bfadf 100644 --- a/config.m4 +++ b/config.m4 @@ -1,37 +1,37 @@ dnl $Id$ dnl config.m4 for extension rayaop -dnl PECLの設定マクロをインクルード +dnl Include PECL configuration macro dnl link https://github.com/php/pecl-tools/blob/master/autoconf/pecl.m4 sinclude(./autoconf/pecl.m4) -dnl PHP実行ファイルの検出マクロをインクルード +dnl Include macro for detecting PHP executable dnl link https://github.com/php/pecl-tools/blob/master/autoconf/php-executable.m4 sinclude(./autoconf/php-executable.m4) -dnl PECL拡張の初期化 +dnl Initialize PECL extension dnl link https://github.com/php/pecl-tools/blob/master/pecl.m4#L229 PECL_INIT([rayaop]) -dnl 拡張機能を有効にするかどうかの設定オプションを追加 +dnl Add configuration option to enable the extension dnl link https://www.gnu.org/software/autoconf/manual/autoconf-2.68/html_node/External-Shell-Variables.html PHP_ARG_ENABLE(rayaop, whether to enable rayaop, [ --enable-rayaop Enable rayaop]) -dnl 拡張機能が有効な場合の処理 +dnl Process if the extension is enabled if test "$PHP_RAYAOP" != "no"; then - dnl 拡張機能が有効かどうかを定義 + dnl Define whether the extension is enabled dnl link https://www.gnu.org/software/autoconf/manual/autoconf-2.68/html_node/Defining-Variables.html AC_DEFINE(HAVE_RAYAOP, 1, [whether rayaop is enabled]) - dnl PHPの新しい拡張機能を追加 + dnl Add new PHP extension dnl link https://www.phpinternalsbook.com/build_system/build_system.html PHP_NEW_EXTENSION(rayaop, rayaop.c, $ext_shared) - dnl Makefileフラグメントを追加 + dnl Add Makefile fragment dnl link https://www.phpinternalsbook.com/build_system/build_system.html#php-add-makefile-fragment PHP_ADD_MAKEFILE_FRAGMENT - dnl ヘッダーファイルのインストール指示を追加 + dnl Add instruction to install header files dnl link https://www.phpinternalsbook.com/build_system/build_system.html#php-install-headers PHP_INSTALL_HEADERS([ext/rayaop], [php_rayaop.h]) fi From 8c7a746ff4a451efd8f169c3d3248639cf54e52e Mon Sep 17 00:00:00 2001 From: Akihito Koriyama Date: Sun, 7 Jul 2024 12:29:20 +0900 Subject: [PATCH 4/5] Improve structure of Makefile.frag This commit enhances the readability of the Makefile.frag file by introducing comments to sections for clarity. It also ensures proper indentation for better visibility of each section. This helps in quickly identifying the purpose of each target and the files it affects. --- Makefile.frag | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/Makefile.frag b/Makefile.frag index 43f3386..bd47121 100644 --- a/Makefile.frag +++ b/Makefile.frag @@ -1,16 +1,21 @@ +# Clean up test artifacts clean-tests: - rm -f tests/*.diff tests/*.exp tests/*.log tests/*.out tests/*.php tests/*.sh + rm -f tests/*.diff tests/*.exp tests/*.log tests/*.out tests/*.php tests/*.sh +# Perform a thorough cleanup, including test artifacts and build files mrproper: clean clean-tests - rm -rf autom4te.cache build modules vendor - rm -f acinclude.m4 aclocal.m4 config.guess config.h config.h.in config.log config.nice config.status config.sub \ - configure configure.ac install-sh libtool ltmain.sh Makefile Makefile.fragments Makefile.global \ - Makefile.objects missing mkinstalldirs run-tests.php *~ + rm -rf autom4te.cache build modules vendor + rm -f acinclude.m4 aclocal.m4 config.guess config.h config.h.in config.log config.nice config.status config.sub \ + configure configure.ac install-sh libtool ltmain.sh Makefile Makefile.fragments Makefile.global \ + Makefile.objects missing mkinstalldirs run-tests.php *~ +# Display information about the extension info: $(all_targets) - "$(PHP_EXECUTABLE)" -d "extension=$(phplibdir)/$(PHP_PECL_EXTENSION).so" --re "$(PHP_PECL_EXTENSION)" + "$(PHP_EXECUTABLE)" -d "extension=$(phplibdir)/$(PHP_PECL_EXTENSION).so" --re "$(PHP_PECL_EXTENSION)" +# Generate package.xml file package.xml: php_$(PHP_PECL_EXTENSION).h - $(PHP_EXECUTABLE) build-packagexml.php + $(PHP_EXECUTABLE) build-packagexml.php +# Declare phony targets (targets that don't represent files) .PHONY: all clean install distclean test prof-gen prof-clean prof-use clean-tests mrproper info \ No newline at end of file From 2bdff3bda37cae35ee3522c54a2cb73c7d2252d1 Mon Sep 17 00:00:00 2001 From: Akihito Koriyama Date: Sun, 7 Jul 2024 12:33:27 +0900 Subject: [PATCH 5/5] fixup! Improve structure of Makefile.frag --- Makefile.frag | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/Makefile.frag b/Makefile.frag index bd47121..f505bb3 100644 --- a/Makefile.frag +++ b/Makefile.frag @@ -1,21 +1,21 @@ # Clean up test artifacts clean-tests: - rm -f tests/*.diff tests/*.exp tests/*.log tests/*.out tests/*.php tests/*.sh + rm -f tests/*.diff tests/*.exp tests/*.log tests/*.out tests/*.php tests/*.sh # Perform a thorough cleanup, including test artifacts and build files mrproper: clean clean-tests - rm -rf autom4te.cache build modules vendor - rm -f acinclude.m4 aclocal.m4 config.guess config.h config.h.in config.log config.nice config.status config.sub \ - configure configure.ac install-sh libtool ltmain.sh Makefile Makefile.fragments Makefile.global \ - Makefile.objects missing mkinstalldirs run-tests.php *~ + rm -rf autom4te.cache build modules vendor + rm -f acinclude.m4 aclocal.m4 config.guess config.h config.h.in config.log config.nice config.status config.sub \ + configure configure.ac install-sh libtool ltmain.sh Makefile Makefile.fragments Makefile.global \ + Makefile.objects missing mkinstalldirs run-tests.php *~ # Display information about the extension info: $(all_targets) - "$(PHP_EXECUTABLE)" -d "extension=$(phplibdir)/$(PHP_PECL_EXTENSION).so" --re "$(PHP_PECL_EXTENSION)" + "$(PHP_EXECUTABLE)" -d "extension=$(phplibdir)/$(PHP_PECL_EXTENSION).so" --re "$(PHP_PECL_EXTENSION)" # Generate package.xml file package.xml: php_$(PHP_PECL_EXTENSION).h - $(PHP_EXECUTABLE) build-packagexml.php + $(PHP_EXECUTABLE) build-packagexml.php # Declare phony targets (targets that don't represent files) .PHONY: all clean install distclean test prof-gen prof-clean prof-use clean-tests mrproper info \ No newline at end of file