From a18270849f29bd6bf2ffa83c34a0a2ff3b72cb8d Mon Sep 17 00:00:00 2001 From: Jacques Lucke Date: Tue, 2 May 2023 11:59:15 +0200 Subject: [PATCH 01/22] try moving rna_meta to c++ --- source/blender/makesrna/RNA_types.h | 3 ++ source/blender/makesrna/intern/CMakeLists.txt | 2 +- source/blender/makesrna/intern/makesrna.c | 40 ++++++++++++++----- .../intern/{rna_meta.c => rna_meta.cc} | 14 +++---- 4 files changed, 41 insertions(+), 18 deletions(-) rename source/blender/makesrna/intern/{rna_meta.c => rna_meta.cc} (97%) diff --git a/source/blender/makesrna/RNA_types.h b/source/blender/makesrna/RNA_types.h index 568eea48ec1..e4f96f65988 100644 --- a/source/blender/makesrna/RNA_types.h +++ b/source/blender/makesrna/RNA_types.h @@ -9,6 +9,7 @@ #define __RNA_TYPES_H__ #include "../blenlib/BLI_sys_types.h" +#include "../blenlib/BLI_utildefines.h" #ifdef __cplusplus extern "C" { @@ -81,6 +82,7 @@ typedef enum PropertyUnit { PROP_UNIT_POWER = (11 << 16), /* W */ PROP_UNIT_TEMPERATURE = (12 << 16), /* C */ } PropertyUnit; +ENUM_OPERATORS(PropertyUnit, PROP_UNIT_TEMPERATURE) /** * Use values besides #PROP_SCALE_LINEAR @@ -367,6 +369,7 @@ typedef enum ParameterFlag { */ PARM_PYFUNC_OPTIONAL = (1 << 3), } ParameterFlag; +ENUM_OPERATORS(ParameterFlag, PARM_PYFUNC_OPTIONAL) struct CollectionPropertyIterator; struct Link; diff --git a/source/blender/makesrna/intern/CMakeLists.txt b/source/blender/makesrna/intern/CMakeLists.txt index 04b3b1389ed..9a401f6e824 100644 --- a/source/blender/makesrna/intern/CMakeLists.txt +++ b/source/blender/makesrna/intern/CMakeLists.txt @@ -49,7 +49,7 @@ set(DEFSRC rna_mask.c rna_material.c rna_mesh.c - rna_meta.c + rna_meta.cc rna_modifier.c rna_movieclip.c rna_nla.c diff --git a/source/blender/makesrna/intern/makesrna.c b/source/blender/makesrna/intern/makesrna.c index a53e06aedd7..be12cf7fcf2 100644 --- a/source/blender/makesrna/intern/makesrna.c +++ b/source/blender/makesrna/intern/makesrna.c @@ -615,6 +615,20 @@ static void rna_float_print(FILE *f, float num) } } +static const char *rna_ui_scale_type_string(const PropertyScaleType type) +{ + switch (type) { + case PROP_SCALE_LINEAR: + return "PROP_SCALE_LINEAR"; + case PROP_SCALE_LOG: + return "PROP_SCALE_LOG"; + case PROP_SCALE_CUBIC: + return "PROP_SCALE_CUBIC"; + } + BLI_assert_unreachable(); + return ""; +} + static void rna_int_print(FILE *f, int64_t num) { if (num == INT_MIN) { @@ -1794,7 +1808,7 @@ static char *rna_def_property_lookup_string_func(FILE *f, fprintf(f, " }\n"); fprintf(f, " }\n"); fprintf(f, " else {\n"); - fprintf(f, " name = MEM_mallocN(namelen+1, \"name string\");\n"); + fprintf(f, " name = (char *)MEM_mallocN(namelen+1, \"name string\");\n"); fprintf(f, " %s_%s_get(&iter.ptr, name);\n", item_name_base->identifier, @@ -1912,7 +1926,8 @@ static void rna_set_raw_offset(FILE *f, StructRNA *srna, PropertyRNA *prop) { PropertyDefRNA *dp = rna_find_struct_property_def(srna, prop); - fprintf(f, "\toffsetof(%s, %s), %d", dp->dnastructname, dp->dnaname, prop->rawtype); + fprintf( + f, "\toffsetof(%s, %s), (RawPropertyType)%d", dp->dnastructname, dp->dnaname, prop->rawtype); } static void rna_def_property_funcs(FILE *f, StructRNA *srna, PropertyDefRNA *dp) @@ -3502,7 +3517,7 @@ static void rna_generate_internal_property_prototypes(BlenderRNA *UNUSED(brna), for (prop = srna->cont.properties.first; prop; prop = prop->next) { fprintf(f, - "%s rna_%s_%s;\n", + "extern %s rna_%s_%s;\n", rna_property_structname(prop->type), srna->identifier, prop->identifier); @@ -4064,7 +4079,7 @@ static void rna_generate_property(FILE *f, StructRNA *srna, const char *nest, Pr rna_print_c_string(f, prop->translation_context); fprintf(f, ",\n"); fprintf(f, - "\t%s, %s | %s, %s, %u, {%u, %u, %u}, %u,\n", + "\t%s, (PropertySubType)((int)%s | (int)%s), %s, %u, {%u, %u, %u}, %u,\n", RNA_property_typename(prop->type), rna_property_subtypename(prop->subtype), rna_property_subtype_unit(prop->subtype), @@ -4089,7 +4104,7 @@ static void rna_generate_property(FILE *f, StructRNA *srna, const char *nest, Pr rna_set_raw_offset(f, srna, prop); } else { - fprintf(f, "\t0, -1"); + fprintf(f, "\t0, PROP_RAW_UNSET"); } /* our own type - collections/arrays only */ @@ -4174,8 +4189,7 @@ static void rna_generate_property(FILE *f, StructRNA *srna, const char *nest, Pr rna_function_string(fprop->getarray_ex), rna_function_string(fprop->setarray_ex), rna_function_string(fprop->range_ex)); - rna_float_print(f, fprop->ui_scale_type); - fprintf(f, ", "); + fprintf(f, "%s, ", rna_ui_scale_type_string(fprop->ui_scale_type)); rna_float_print(f, fprop->softmin); fprintf(f, ", "); rna_float_print(f, fprop->softmax); @@ -4530,7 +4544,7 @@ static RNAProcessItem PROCESS_ITEMS[] = { {"rna_fluid.c", NULL, RNA_def_fluid}, {"rna_material.c", "rna_material_api.c", RNA_def_material}, {"rna_mesh.c", "rna_mesh_api.c", RNA_def_mesh}, - {"rna_meta.c", "rna_meta_api.c", RNA_def_meta}, + {"rna_meta.cc", "rna_meta_api.c", RNA_def_meta}, {"rna_modifier.c", NULL, RNA_def_modifier}, {"rna_gpencil_legacy_modifier.c", NULL, RNA_def_greasepencil_modifier}, {"rna_shader_fx.c", NULL, RNA_def_shader_fx}, @@ -5356,8 +5370,14 @@ static int rna_preprocess(const char *outfile, const char *public_header_outfile for (i = 0; PROCESS_ITEMS[i].filename; i++) { strcpy(deffile, outfile); strcat(deffile, PROCESS_ITEMS[i].filename); - deffile[strlen(deffile) - 2] = '\0'; - strcat(deffile, "_gen.c" TMP_EXT); + if (deffile[strlen(deffile) - 3] == '.') { + deffile[strlen(deffile) - 3] = '\0'; + strcat(deffile, "_gen.cc" TMP_EXT); + } + else { + deffile[strlen(deffile) - 2] = '\0'; + strcat(deffile, "_gen.c" TMP_EXT); + } if (status) { make_bad_file(deffile, __LINE__); diff --git a/source/blender/makesrna/intern/rna_meta.c b/source/blender/makesrna/intern/rna_meta.cc similarity index 97% rename from source/blender/makesrna/intern/rna_meta.c rename to source/blender/makesrna/intern/rna_meta.cc index 03e422df7da..e5c2a389844 100644 --- a/source/blender/makesrna/intern/rna_meta.c +++ b/source/blender/makesrna/intern/rna_meta.cc @@ -35,7 +35,7 @@ # include "WM_api.h" # include "WM_types.h" -static int rna_Meta_texspace_editable(PointerRNA *ptr, const char **UNUSED(r_info)) +static int rna_Meta_texspace_editable(PointerRNA *ptr, const char ** /*r_info*/) { MetaBall *mb = (MetaBall *)ptr->data; return (mb->texspace_flag & MB_TEXSPACE_FLAG_AUTO) ? 0 : PROP_EDITABLE; @@ -73,7 +73,7 @@ static void rna_Meta_texspace_size_set(PointerRNA *ptr, const float *values) copy_v3_v3(mb->texspace_size, values); } -static void rna_MetaBall_redraw_data(Main *UNUSED(bmain), Scene *UNUSED(scene), PointerRNA *ptr) +static void rna_MetaBall_redraw_data(Main * /*bmain*/, Scene * /*scene*/, PointerRNA *ptr) { ID *id = ptr->owner_id; @@ -81,7 +81,7 @@ static void rna_MetaBall_redraw_data(Main *UNUSED(bmain), Scene *UNUSED(scene), WM_main_add_notifier(NC_GEOM | ND_DATA, id); } -static void rna_MetaBall_update_data(Main *bmain, Scene *UNUSED(scene), PointerRNA *ptr) +static void rna_MetaBall_update_data(Main *bmain, Scene * /*scene*/, PointerRNA *ptr) { MetaBall *mb = (MetaBall *)ptr->owner_id; @@ -99,7 +99,7 @@ static void rna_MetaBall_update_data(Main *bmain, Scene *UNUSED(scene), PointerR static void rna_MetaBall_update_rotation(Main *bmain, Scene *scene, PointerRNA *ptr) { - MetaElem *ml = ptr->data; + MetaElem *ml = static_cast(ptr->data); normalize_qt(ml->quat); rna_MetaBall_update_data(bmain, scene, ptr); } @@ -119,7 +119,7 @@ static MetaElem *rna_MetaBall_elements_new(MetaBall *mb, int type) static void rna_MetaBall_elements_remove(MetaBall *mb, ReportList *reports, PointerRNA *ml_ptr) { - MetaElem *ml = ml_ptr->data; + MetaElem *ml = static_cast(ml_ptr->data); if (BLI_remlink_safe(&mb->elems, ml) == false) { BKE_reportf( @@ -157,7 +157,7 @@ static bool rna_Meta_is_editmode_get(PointerRNA *ptr) static char *rna_MetaElement_path(const PointerRNA *ptr) { const MetaBall *mb = (MetaBall *)ptr->owner_id; - const MetaElem *ml = ptr->data; + const MetaElem *ml = static_cast(ptr->data); int index = -1; if (mb->editelems) { @@ -292,7 +292,7 @@ static void rna_def_metaball_elements(BlenderRNA *brna, PropertyRNA *cprop) RNA_def_function_flag(func, FUNC_USE_REPORTS); parm = RNA_def_pointer(func, "element", "MetaElement", "", "The element to remove"); RNA_def_parameter_flags(parm, PROP_NEVER_NULL, PARM_REQUIRED | PARM_RNAPTR); - RNA_def_parameter_clear_flags(parm, PROP_THICK_WRAP, 0); + RNA_def_parameter_clear_flags(parm, PROP_THICK_WRAP, ParameterFlag(0)); func = RNA_def_function(srna, "clear", "rna_MetaBall_elements_clear"); RNA_def_function_ui_description(func, "Remove all elements from the metaball"); -- 2.30.2 From 307c13d2e8eea825dfc92325308b573a812c763c Mon Sep 17 00:00:00 2001 From: Jacques Lucke Date: Thu, 25 May 2023 16:00:40 +0200 Subject: [PATCH 02/22] support compilation --- source/blender/makesrna/intern/makesrna.c | 31 ++++++++++++++--------- 1 file changed, 19 insertions(+), 12 deletions(-) diff --git a/source/blender/makesrna/intern/makesrna.c b/source/blender/makesrna/intern/makesrna.c index a3f60c2af90..ad5de45675a 100644 --- a/source/blender/makesrna/intern/makesrna.c +++ b/source/blender/makesrna/intern/makesrna.c @@ -1752,6 +1752,20 @@ static char *rna_def_property_lookup_string_func(FILE *f, func = rna_alloc_function_name(srna->identifier, rna_safe_id(prop->identifier), "lookup_string"); + if (!manualfunc) { + /* XXX extern declaration could be avoid by including RNA_blender.h, but this has lots of + * unknown DNA types in functions, leading to conflicting function signatures. + */ + fprintf(f, + "RNA_EXTERN_C int %s_%s_length(PointerRNA *);\n", + item_name_base->identifier, + rna_safe_id(item_name_prop->identifier)); + fprintf(f, + "RNA_EXTERN_C void %s_%s_get(PointerRNA *, char *);\n\n", + item_name_base->identifier, + rna_safe_id(item_name_prop->identifier)); + } + fprintf(f, "int %s(PointerRNA *ptr, const char *key, PointerRNA *r_ptr)\n", func); fprintf(f, "{\n"); @@ -1761,18 +1775,6 @@ static char *rna_def_property_lookup_string_func(FILE *f, return func; } - /* XXX extern declaration could be avoid by including RNA_blender.h, but this has lots of unknown - * DNA types in functions, leading to conflicting function signatures. - */ - fprintf(f, - " extern int %s_%s_length(PointerRNA *);\n", - item_name_base->identifier, - rna_safe_id(item_name_prop->identifier)); - fprintf(f, - " extern void %s_%s_get(PointerRNA *, char *);\n\n", - item_name_base->identifier, - rna_safe_id(item_name_prop->identifier)); - fprintf(f, " bool found = false;\n"); fprintf(f, " CollectionPropertyIterator iter;\n"); fprintf(f, " char namebuf[%d];\n", namebuflen); @@ -4626,6 +4628,11 @@ static void rna_generate(BlenderRNA *brna, FILE *f, const char *filename, const fprintf(f, "#include \"%s\"\n", api_filename); } fprintf(f, "\n"); + fprintf(f, "#ifdef __cplusplus\n"); + fprintf(f, "# define RNA_EXTERN_C extern \"C\"\n"); + fprintf(f, "#else\n"); + fprintf(f, "# define RNA_EXTERN_C\n"); + fprintf(f, "#endif\n"); /* we want the included C files to have warnings enabled but for the generated code * ignore unused-parameter warnings which are hard to prevent */ -- 2.30.2 From 3b9c5a36aa5bed8823e45785623d750585d97bc6 Mon Sep 17 00:00:00 2001 From: Jacques Lucke Date: Thu, 25 May 2023 16:26:39 +0200 Subject: [PATCH 03/22] correct check for dynamic arrays --- source/blender/makesrna/intern/makesrna.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/source/blender/makesrna/intern/makesrna.c b/source/blender/makesrna/intern/makesrna.c index ad5de45675a..e2181c35909 100644 --- a/source/blender/makesrna/intern/makesrna.c +++ b/source/blender/makesrna/intern/makesrna.c @@ -2127,7 +2127,7 @@ static void rna_def_property_funcs_header(FILE *f, StructRNA *srna, PropertyDefR fprintf(f, "bool %sget(PointerRNA *ptr);\n", func); fprintf(f, "void %sset(PointerRNA *ptr, bool value);\n", func); } - else if (prop->arraydimension && prop->totarraylength) { + else if ((prop->flag & PROP_DYNAMIC) == 0 && prop->arraydimension && prop->totarraylength) { fprintf(f, "void %sget(PointerRNA *ptr, bool values[%u]);\n", func, prop->totarraylength); fprintf(f, "void %sset(PointerRNA *ptr, const bool values[%u]);\n", @@ -2145,7 +2145,7 @@ static void rna_def_property_funcs_header(FILE *f, StructRNA *srna, PropertyDefR fprintf(f, "int %sget(PointerRNA *ptr);\n", func); fprintf(f, "void %sset(PointerRNA *ptr, int value);\n", func); } - else if (prop->arraydimension && prop->totarraylength) { + else if ((prop->flag & PROP_DYNAMIC) == 0 && prop->arraydimension && prop->totarraylength) { fprintf(f, "void %sget(PointerRNA *ptr, int values[%u]);\n", func, prop->totarraylength); fprintf( f, "void %sset(PointerRNA *ptr, const int values[%u]);\n", func, prop->totarraylength); @@ -2161,7 +2161,7 @@ static void rna_def_property_funcs_header(FILE *f, StructRNA *srna, PropertyDefR fprintf(f, "float %sget(PointerRNA *ptr);\n", func); fprintf(f, "void %sset(PointerRNA *ptr, float value);\n", func); } - else if (prop->arraydimension && prop->totarraylength) { + else if ((prop->flag & PROP_DYNAMIC) == 0 && prop->arraydimension && prop->totarraylength) { fprintf(f, "void %sget(PointerRNA *ptr, float values[%u]);\n", func, prop->totarraylength); fprintf(f, "void %sset(PointerRNA *ptr, const float values[%u]);\n", -- 2.30.2 From 403ceaba5662a2aebdfecf07eb122ab274dd41a8 Mon Sep 17 00:00:00 2001 From: Jacques Lucke Date: Thu, 25 May 2023 16:37:40 +0200 Subject: [PATCH 04/22] add static --- source/blender/makesrna/intern/makesrna.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/source/blender/makesrna/intern/makesrna.c b/source/blender/makesrna/intern/makesrna.c index e2181c35909..d751441e2b1 100644 --- a/source/blender/makesrna/intern/makesrna.c +++ b/source/blender/makesrna/intern/makesrna.c @@ -2946,9 +2946,10 @@ static void rna_def_function_funcs(FILE *f, StructDefRNA *dsrna, FunctionDefRNA funcname = rna_alloc_function_name(srna->identifier, func->identifier, "call"); /* function definition */ - fprintf(f, - "void %s(bContext *C, ReportList *reports, PointerRNA *_ptr, ParameterList *_parms)", - funcname); + fprintf( + f, + "static void %s(bContext *C, ReportList *reports, PointerRNA *_ptr, ParameterList *_parms)", + funcname); fprintf(f, "\n{\n"); /* variable definitions */ -- 2.30.2 From 57be10914f54646f15e620452efdb8c0765ffad4 Mon Sep 17 00:00:00 2001 From: Jacques Lucke Date: Thu, 25 May 2023 17:44:06 +0200 Subject: [PATCH 05/22] avoid missing-declaration warning by always forward declaring global functions --- source/blender/makesrna/intern/makesrna.c | 116 +++++++++++++++------- 1 file changed, 82 insertions(+), 34 deletions(-) diff --git a/source/blender/makesrna/intern/makesrna.c b/source/blender/makesrna/intern/makesrna.c index d751441e2b1..63a5b267d1d 100644 --- a/source/blender/makesrna/intern/makesrna.c +++ b/source/blender/makesrna/intern/makesrna.c @@ -54,6 +54,8 @@ void BLI_system_backtrace(FILE *fp) /* Replace if different */ #define TMP_EXT ".tmp" +#define MAX_SIGNATURE_LEN 2048 + /* copied from BLI_file_older */ #include static int file_older(const char *file1, const char *file2) @@ -651,6 +653,14 @@ static void rna_int_print(FILE *f, int64_t num) } } +static void print_global_function_signature(FILE *f, const char *format, const char *func_name) +{ + char signature[MAX_SIGNATURE_LEN]; + snprintf(signature, sizeof(signature), format, func_name); + fprintf(f, "%s;\n", signature); + fprintf(f, "%s\n", signature); +} + static char *rna_def_property_get_func( FILE *f, StructRNA *srna, PropertyRNA *prop, PropertyDefRNA *dp, const char *manualfunc) { @@ -741,7 +751,7 @@ static char *rna_def_property_get_func( case PROP_STRING: { StringPropertyRNA *sprop = (StringPropertyRNA *)prop; UNUSED_VARS_NDEBUG(sprop); - fprintf(f, "void %s(PointerRNA *ptr, char *value)\n", func); + print_global_function_signature(f, "void %s(PointerRNA *ptr, char *value)", func); fprintf(f, "{\n"); if (manualfunc) { fprintf(f, " %s(ptr, value);\n", manualfunc); @@ -779,7 +789,7 @@ static char *rna_def_property_get_func( break; } case PROP_POINTER: { - fprintf(f, "PointerRNA %s(PointerRNA *ptr)\n", func); + print_global_function_signature(f, "PointerRNA %s(PointerRNA *ptr)", func); fprintf(f, "{\n"); if (manualfunc) { fprintf(f, " return %s(ptr);\n", manualfunc); @@ -828,16 +838,24 @@ static char *rna_def_property_get_func( } default: if (prop->arraydimension) { + char signature[MAX_SIGNATURE_LEN]; if (prop->flag & PROP_DYNAMIC) { - fprintf(f, "void %s(PointerRNA *ptr, %s values[])\n", func, rna_type_type(prop)); + snprintf(signature, + sizeof(signature), + "void %s(PointerRNA *ptr, %s values[])", + func, + rna_type_type(prop)); } else { - fprintf(f, - "void %s(PointerRNA *ptr, %s values[%u])\n", - func, - rna_type_type(prop), - prop->totarraylength); + snprintf(signature, + sizeof(signature), + "void %s(PointerRNA *ptr, %s values[%u])", + func, + rna_type_type(prop), + prop->totarraylength); } + fprintf(f, "%s;\n", signature); + fprintf(f, "%s\n", signature); fprintf(f, "{\n"); if (manualfunc) { @@ -929,7 +947,11 @@ static char *rna_def_property_get_func( fprintf(f, "}\n\n"); } else { - fprintf(f, "%s %s(PointerRNA *ptr)\n", rna_type_type(prop), func); + char signature[MAX_SIGNATURE_LEN]; + snprintf( + signature, sizeof(signature), "%s %s(PointerRNA *ptr)", rna_type_type(prop), func); + fprintf(f, "%s;\n", signature); + fprintf(f, "%s\n", signature); fprintf(f, "{\n"); if (manualfunc) { @@ -1107,15 +1129,16 @@ static char *rna_def_property_search_func(FILE *f, func = rna_alloc_function_name(srna->identifier, rna_safe_id(prop->identifier), "search"); - fprintf(f, - "void %s(" - "const bContext *C, " - "PointerRNA *ptr, " - "PropertyRNA *prop, " - "const char *edit_text, " - "StringPropertySearchVisitFunc visit_fn, " - "void *visit_user_data)\n", - func); + print_global_function_signature(f, + "void %s(" + "const bContext *C, " + "PointerRNA *ptr, " + "PropertyRNA *prop, " + "const char *edit_text, " + "StringPropertySearchVisitFunc visit_fn, " + "void *visit_user_data)", + func); + fprintf(f, "{\n"); fprintf(f, "\n %s(C, ptr, prop, edit_text, visit_fn, visit_user_data);\n", manualfunc); fprintf(f, "}\n\n"); @@ -1149,7 +1172,7 @@ static char *rna_def_property_set_func( switch (prop->type) { case PROP_STRING: { StringPropertyRNA *sprop = (StringPropertyRNA *)prop; - fprintf(f, "void %s(PointerRNA *ptr, const char *value)\n", func); + print_global_function_signature(f, "void %s(PointerRNA *ptr, const char *value)", func); fprintf(f, "{\n"); if (manualfunc) { fprintf(f, " %s(ptr, value);\n", manualfunc); @@ -1194,7 +1217,8 @@ static char *rna_def_property_set_func( break; } case PROP_POINTER: { - fprintf(f, "void %s(PointerRNA *ptr, PointerRNA value, struct ReportList *reports)\n", func); + print_global_function_signature( + f, "void %s(PointerRNA *ptr, PointerRNA value, struct ReportList *reports)", func); fprintf(f, "{\n"); if (manualfunc) { fprintf(f, " %s(ptr, value, reports);\n", manualfunc); @@ -1234,16 +1258,24 @@ static char *rna_def_property_set_func( } default: if (prop->arraydimension) { + char signature[MAX_SIGNATURE_LEN]; if (prop->flag & PROP_DYNAMIC) { - fprintf(f, "void %s(PointerRNA *ptr, const %s values[])\n", func, rna_type_type(prop)); + snprintf(signature, + sizeof(signature), + "void %s(PointerRNA *ptr, const %s values[])", + func, + rna_type_type(prop)); } else { - fprintf(f, - "void %s(PointerRNA *ptr, const %s values[%u])\n", - func, - rna_type_type(prop), - prop->totarraylength); + snprintf(signature, + sizeof(signature), + "void %s(PointerRNA *ptr, const %s values[%u])", + func, + rna_type_type(prop), + prop->totarraylength); } + fprintf(f, "%s;\n", signature); + fprintf(f, "%s\n", signature); fprintf(f, "{\n"); if (manualfunc) { @@ -1351,7 +1383,14 @@ static char *rna_def_property_set_func( fprintf(f, "}\n\n"); } else { - fprintf(f, "void %s(PointerRNA *ptr, %s value)\n", func, rna_type_type(prop)); + char signature[MAX_SIGNATURE_LEN]; + snprintf(signature, + sizeof(signature), + "void %s(PointerRNA *ptr, %s value)", + func, + rna_type_type(prop)); + fprintf(f, "%s;\n", signature); + fprintf(f, "%s\n", signature); fprintf(f, "{\n"); if (manualfunc) { @@ -1437,7 +1476,7 @@ static char *rna_def_property_length_func( func = rna_alloc_function_name(srna->identifier, rna_safe_id(prop->identifier), "length"); - fprintf(f, "int %s(PointerRNA *ptr)\n", func); + print_global_function_signature(f, "int %s(PointerRNA *ptr)", func); fprintf(f, "{\n"); if (manualfunc) { fprintf(f, " return %s(ptr);\n", manualfunc); @@ -1470,7 +1509,7 @@ static char *rna_def_property_length_func( func = rna_alloc_function_name(srna->identifier, rna_safe_id(prop->identifier), "length"); - fprintf(f, "int %s(PointerRNA *ptr)\n", func); + print_global_function_signature(f, "int %s(PointerRNA *ptr)", func); fprintf(f, "{\n"); if (manualfunc) { fprintf(f, " return %s(ptr);\n", manualfunc); @@ -1519,7 +1558,9 @@ static char *rna_def_property_begin_func( func = rna_alloc_function_name(srna->identifier, rna_safe_id(prop->identifier), "begin"); - fprintf(f, "void %s(CollectionPropertyIterator *iter, PointerRNA *ptr)\n", func); + print_global_function_signature( + f, "void %s(CollectionPropertyIterator *iter, PointerRNA *ptr)", func); + fprintf(f, "{\n"); if (!manualfunc) { @@ -1607,8 +1648,12 @@ static char *rna_def_property_lookup_int_func(FILE *f, } func = rna_alloc_function_name(srna->identifier, rna_safe_id(prop->identifier), "lookup_int"); + char signature[MAX_SIGNATURE_LEN]; + snprintf( + signature, sizeof(signature), "int %s(PointerRNA *ptr, int index, PointerRNA *r_ptr)", func); - fprintf(f, "int %s(PointerRNA *ptr, int index, PointerRNA *r_ptr)\n", func); + fprintf(f, "%s;\n", signature); + fprintf(f, "%s\n", signature); fprintf(f, "{\n"); if (manualfunc) { @@ -1766,7 +1811,8 @@ static char *rna_def_property_lookup_string_func(FILE *f, rna_safe_id(item_name_prop->identifier)); } - fprintf(f, "int %s(PointerRNA *ptr, const char *key, PointerRNA *r_ptr)\n", func); + print_global_function_signature( + f, "int %s(PointerRNA *ptr, const char *key, PointerRNA *r_ptr)", func); fprintf(f, "{\n"); if (manualfunc) { @@ -1844,7 +1890,7 @@ static char *rna_def_property_next_func(FILE *f, func = rna_alloc_function_name(srna->identifier, rna_safe_id(prop->identifier), "next"); - fprintf(f, "void %s(CollectionPropertyIterator *iter)\n", func); + print_global_function_signature(f, "void %s(CollectionPropertyIterator *iter)", func); fprintf(f, "{\n"); fprintf(f, " %s(iter);\n", manualfunc); @@ -1873,7 +1919,7 @@ static char *rna_def_property_end_func(FILE *f, func = rna_alloc_function_name(srna->identifier, rna_safe_id(prop->identifier), "end"); - fprintf(f, "void %s(CollectionPropertyIterator *iter)\n", func); + print_global_function_signature(f, "void %s(CollectionPropertyIterator *iter)", func); fprintf(f, "{\n"); if (manualfunc) { fprintf(f, " %s(iter);\n", manualfunc); @@ -2870,6 +2916,8 @@ static void rna_def_function_wrapper_funcs(FILE *f, StructDefRNA *dsrna, Functio funcname, sizeof(funcname), srna->identifier, func->identifier, "func"); rna_generate_static_parameter_prototypes(f, srna, dfunc, funcname, 0); + fprintf(f, ";\n"); + rna_generate_static_parameter_prototypes(f, srna, dfunc, funcname, 0); fprintf(f, "\n{\n"); -- 2.30.2 From 4a6001f3e2bbfec2e908c99a6296c644c57bfdb3 Mon Sep 17 00:00:00 2001 From: Jacques Lucke Date: Thu, 25 May 2023 18:03:49 +0200 Subject: [PATCH 06/22] rna_mask.cc compiles --- source/blender/makesrna/RNA_types.h | 1 + source/blender/makesrna/intern/CMakeLists.txt | 2 +- source/blender/makesrna/intern/makesrna.c | 6 +-- .../intern/{rna_mask.c => rna_mask.cc} | 49 ++++++++++--------- 4 files changed, 31 insertions(+), 27 deletions(-) rename source/blender/makesrna/intern/{rna_mask.c => rna_mask.cc} (95%) diff --git a/source/blender/makesrna/RNA_types.h b/source/blender/makesrna/RNA_types.h index a6ec37a5980..a26425a2793 100644 --- a/source/blender/makesrna/RNA_types.h +++ b/source/blender/makesrna/RNA_types.h @@ -308,6 +308,7 @@ typedef enum PropertyFlag { **/ PROP_PATH_OUTPUT = (1 << 2), } PropertyFlag; +ENUM_OPERATORS(PropertyFlag, PROP_NO_DEG_UPDATE) /** * Flags related to comparing and overriding RNA properties. diff --git a/source/blender/makesrna/intern/CMakeLists.txt b/source/blender/makesrna/intern/CMakeLists.txt index 9a401f6e824..b9008cb3578 100644 --- a/source/blender/makesrna/intern/CMakeLists.txt +++ b/source/blender/makesrna/intern/CMakeLists.txt @@ -46,7 +46,7 @@ set(DEFSRC rna_lightprobe.c rna_linestyle.c rna_main.c - rna_mask.c + rna_mask.cc rna_material.c rna_mesh.c rna_meta.cc diff --git a/source/blender/makesrna/intern/makesrna.c b/source/blender/makesrna/intern/makesrna.c index 63a5b267d1d..535253c4b5c 100644 --- a/source/blender/makesrna/intern/makesrna.c +++ b/source/blender/makesrna/intern/makesrna.c @@ -4194,7 +4194,7 @@ static void rna_generate_property(FILE *f, StructRNA *srna, const char *nest, Pr rna_function_string(iprop->getarray_ex), rna_function_string(iprop->setarray_ex), rna_function_string(iprop->range_ex)); - rna_int_print(f, iprop->ui_scale_type); + fprintf(f, "%s", rna_ui_scale_type_string(iprop->ui_scale_type)); fprintf(f, ", "); rna_int_print(f, iprop->softmin); fprintf(f, ", "); @@ -4256,7 +4256,7 @@ static void rna_generate_property(FILE *f, StructRNA *srna, const char *nest, Pr case PROP_STRING: { StringPropertyRNA *sprop = (StringPropertyRNA *)prop; fprintf(f, - "\t%s, %s, %s, %s, %s, %s, %s, %d, %d, ", + "\t%s, %s, %s, %s, %s, %s, %s, (eStringPropertySearchFlag)%d, %d, ", rna_function_string(sprop->get), rna_function_string(sprop->length), rna_function_string(sprop->set), @@ -4626,7 +4626,7 @@ static RNAProcessItem PROCESS_ITEMS[] = { {"rna_world.c", NULL, RNA_def_world}, {"rna_movieclip.c", NULL, RNA_def_movieclip}, {"rna_tracking.c", NULL, RNA_def_tracking}, - {"rna_mask.c", NULL, RNA_def_mask}, + {"rna_mask.cc", NULL, RNA_def_mask}, {"rna_xr.c", NULL, RNA_def_xr}, {NULL, NULL}, }; diff --git a/source/blender/makesrna/intern/rna_mask.c b/source/blender/makesrna/intern/rna_mask.cc similarity index 95% rename from source/blender/makesrna/intern/rna_mask.c rename to source/blender/makesrna/intern/rna_mask.cc index 9e4a41a5403..6095973b0c7 100644 --- a/source/blender/makesrna/intern/rna_mask.c +++ b/source/blender/makesrna/intern/rna_mask.cc @@ -43,7 +43,7 @@ # include "WM_api.h" -static void rna_Mask_update_data(Main *UNUSED(bmain), Scene *UNUSED(scene), PointerRNA *ptr) +static void rna_Mask_update_data(Main * /*bmain*/, Scene * /*scene*/, PointerRNA *ptr) { Mask *mask = (Mask *)ptr->owner_id; @@ -53,7 +53,7 @@ static void rna_Mask_update_data(Main *UNUSED(bmain), Scene *UNUSED(scene), Poin static void rna_Mask_update_parent(Main *bmain, Scene *scene, PointerRNA *ptr) { - MaskParent *parent = ptr->data; + MaskParent *parent = static_cast(ptr->data); if (parent->id) { if (GS(parent->id->name) == ID_MC) { @@ -106,11 +106,11 @@ static void rna_Mask_update_parent(Main *bmain, Scene *scene, PointerRNA *ptr) /* NOTE: this function exists only to avoid id reference-counting. */ static void rna_MaskParent_id_set(PointerRNA *ptr, PointerRNA value, - struct ReportList *UNUSED(reports)) + struct ReportList * /*reports*/) { MaskParent *mpar = (MaskParent *)ptr->data; - mpar->id = value.data; + mpar->id = static_cast(value.data); } static StructRNA *rna_MaskParent_id_typef(PointerRNA *ptr) @@ -184,7 +184,7 @@ static PointerRNA rna_Mask_layer_active_get(PointerRNA *ptr) static void rna_Mask_layer_active_set(PointerRNA *ptr, PointerRNA value, - struct ReportList *UNUSED(reports)) + struct ReportList * /*reports*/) { Mask *mask = (Mask *)ptr->owner_id; MaskLayer *masklay = (MaskLayer *)value.data; @@ -221,7 +221,7 @@ static PointerRNA rna_MaskLayer_active_spline_get(PointerRNA *ptr) static void rna_MaskLayer_active_spline_set(PointerRNA *ptr, PointerRNA value, - struct ReportList *UNUSED(reports)) + struct ReportList * /*reports*/) { MaskLayer *masklay = (MaskLayer *)ptr->data; MaskSpline *spline = (MaskSpline *)value.data; @@ -244,7 +244,7 @@ static PointerRNA rna_MaskLayer_active_spline_point_get(PointerRNA *ptr) static void rna_MaskLayer_active_spline_point_set(PointerRNA *ptr, PointerRNA value, - struct ReportList *UNUSED(reports)) + struct ReportList * /*reports*/) { MaskLayer *masklay = (MaskLayer *)ptr->data; MaskSpline *spline; @@ -252,7 +252,7 @@ static void rna_MaskLayer_active_spline_point_set(PointerRNA *ptr, masklay->act_point = NULL; - for (spline = masklay->splines.first; spline; spline = spline->next) { + for (spline = static_cast(masklay->splines.first); spline; spline = spline->next) { if (point >= spline->points && point < spline->points + spline->tot_point) { masklay->act_point = point; @@ -314,9 +314,12 @@ static int rna_MaskSplinePoint_handle_type_get(PointerRNA *ptr) static MaskSpline *mask_spline_from_point(Mask *mask, MaskSplinePoint *point) { MaskLayer *mask_layer; - for (mask_layer = mask->masklayers.first; mask_layer; mask_layer = mask_layer->next) { + for (mask_layer = static_cast(mask->masklayers.first); mask_layer; + mask_layer = mask_layer->next) + { MaskSpline *spline; - for (spline = mask_layer->splines.first; spline; spline = spline->next) { + for (spline = static_cast(mask_layer->splines.first); spline; + spline = spline->next) { if (point >= spline->points && point < spline->points + spline->tot_point) { return spline; } @@ -397,7 +400,7 @@ static MaskLayer *rna_Mask_layers_new(Mask *mask, const char *name) static void rna_Mask_layers_remove(Mask *mask, ReportList *reports, PointerRNA *masklay_ptr) { - MaskLayer *masklay = masklay_ptr->data; + MaskLayer *masklay = static_cast(masklay_ptr->data); if (BLI_findindex(&mask->masklayers, masklay) == -1) { BKE_reportf(reports, RPT_ERROR, @@ -438,7 +441,7 @@ static void rna_MaskLayer_spline_remove(ID *id, PointerRNA *spline_ptr) { Mask *mask = (Mask *)id; - MaskSpline *spline = spline_ptr->data; + MaskSpline *spline = static_cast(spline_ptr->data); if (BKE_mask_spline_remove(mask_layer, spline) == false) { BKE_reportf( @@ -485,7 +488,7 @@ static void rna_MaskSpline_points_add(ID *id, MaskSpline *spline, int count) return; } - for (layer = mask->masklayers.first; layer; layer = layer->next) { + for (layer = static_cast(mask->masklayers.first); layer; layer = layer->next) { if (BLI_findindex(&layer->splines, spline) != -1) { break; } @@ -501,8 +504,8 @@ static void rna_MaskSpline_points_add(ID *id, MaskSpline *spline, int count) active_point_index = layer->act_point - spline->points; } - spline->points = MEM_recallocN(spline->points, - sizeof(MaskSplinePoint) * (spline->tot_point + count)); + spline->points = static_cast( + MEM_recallocN(spline->points, sizeof(MaskSplinePoint) * (spline->tot_point + count))); spline->tot_point += count; if (active_point_index >= 0) { @@ -532,13 +535,13 @@ static void rna_MaskSpline_point_remove(ID *id, PointerRNA *point_ptr) { Mask *mask = (Mask *)id; - MaskSplinePoint *point = point_ptr->data; + MaskSplinePoint *point = static_cast(point_ptr->data); MaskSplinePoint *new_point_array; MaskLayer *layer; int active_point_index = -1; int point_index; - for (layer = mask->masklayers.first; layer; layer = layer->next) { + for (layer = static_cast(mask->masklayers.first); layer; layer = layer->next) { if (BLI_findindex(&layer->splines, spline) != -1) { break; } @@ -561,8 +564,8 @@ static void rna_MaskSpline_point_remove(ID *id, point_index = point - spline->points; - new_point_array = MEM_mallocN(sizeof(MaskSplinePoint) * (spline->tot_point - 1), - "remove mask point"); + new_point_array = static_cast( + MEM_mallocN(sizeof(MaskSplinePoint) * (spline->tot_point - 1), "remove mask point")); memcpy(new_point_array, spline->points, sizeof(MaskSplinePoint) * point_index); memcpy(new_point_array + point_index, @@ -807,7 +810,7 @@ static void rna_def_mask_splines(BlenderRNA *brna) RNA_def_function_flag(func, FUNC_USE_REPORTS); parm = RNA_def_pointer(func, "spline", "MaskSpline", "", "The spline to remove"); RNA_def_parameter_flags(parm, PROP_NEVER_NULL, PARM_REQUIRED | PARM_RNAPTR); - RNA_def_parameter_clear_flags(parm, PROP_THICK_WRAP, 0); + RNA_def_parameter_clear_flags(parm, PROP_THICK_WRAP, ParameterFlag(0)); /* active spline */ prop = RNA_def_property(srna, "active", PROP_POINTER, PROP_NONE); @@ -845,7 +848,7 @@ static void rna_def_maskSplinePoints(BlenderRNA *brna) RNA_def_function_ui_description(func, "Add a number of point to this spline"); parm = RNA_def_int( func, "count", 1, 0, INT_MAX, "Number", "Number of points to add to the spline", 0, INT_MAX); - RNA_def_parameter_flags(parm, 0, PARM_REQUIRED); + RNA_def_parameter_flags(parm, PropertyFlag(0), PARM_REQUIRED); /* Remove the point */ func = RNA_def_function(srna, "remove", "rna_MaskSpline_point_remove"); @@ -854,7 +857,7 @@ static void rna_def_maskSplinePoints(BlenderRNA *brna) RNA_def_function_flag(func, FUNC_USE_REPORTS); parm = RNA_def_pointer(func, "point", "MaskSplinePoint", "", "The point to remove"); RNA_def_parameter_flags(parm, PROP_NEVER_NULL, PARM_REQUIRED | PARM_RNAPTR); - RNA_def_parameter_clear_flags(parm, PROP_THICK_WRAP, 0); + RNA_def_parameter_clear_flags(parm, PROP_THICK_WRAP, ParameterFlag(0)); } static void rna_def_maskSpline(BlenderRNA *brna) @@ -1068,7 +1071,7 @@ static void rna_def_masklayers(BlenderRNA *brna, PropertyRNA *cprop) RNA_def_function_ui_description(func, "Remove layer from this mask"); parm = RNA_def_pointer(func, "layer", "MaskLayer", "", "Shape to be removed"); RNA_def_parameter_flags(parm, PROP_NEVER_NULL, PARM_REQUIRED | PARM_RNAPTR); - RNA_def_parameter_clear_flags(parm, PROP_THICK_WRAP, 0); + RNA_def_parameter_clear_flags(parm, PROP_THICK_WRAP, ParameterFlag(0)); /* clear all layers */ func = RNA_def_function(srna, "clear", "rna_Mask_layers_clear"); -- 2.30.2 From b56d9294758ae8f6f1602ece498bfb46a1dd88a7 Mon Sep 17 00:00:00 2001 From: Jacques Lucke Date: Thu, 25 May 2023 18:06:53 +0200 Subject: [PATCH 07/22] add declaration --- source/blender/makesrna/intern/makesrna.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/blender/makesrna/intern/makesrna.c b/source/blender/makesrna/intern/makesrna.c index 535253c4b5c..5eeacc3351c 100644 --- a/source/blender/makesrna/intern/makesrna.c +++ b/source/blender/makesrna/intern/makesrna.c @@ -2889,10 +2889,10 @@ static void rna_def_struct_function_impl_cpp(FILE *f, StructRNA *srna, FunctionD static void rna_def_property_wrapper_funcs(FILE *f, StructDefRNA *dsrna, PropertyDefRNA *dp) { if (dp->prop->getlength) { - char funcname[2048]; + char funcname[1024]; rna_construct_wrapper_function_name( funcname, sizeof(funcname), dsrna->srna->identifier, dp->prop->identifier, "get_length"); - fprintf(f, "int %s(PointerRNA *ptr, int *arraylen)\n", funcname); + print_global_function_signature(f, "int %s(PointerRNA *ptr, int *arraylen)", funcname); fprintf(f, "{\n"); fprintf(f, "\treturn %s(ptr, arraylen);\n", rna_function_string(dp->prop->getlength)); fprintf(f, "}\n\n"); -- 2.30.2 From 6a26d637b39202bdf7729a8b1132f2904fbc9465 Mon Sep 17 00:00:00 2001 From: Jacques Lucke Date: Thu, 25 May 2023 19:17:35 +0200 Subject: [PATCH 08/22] add extern "C" --- source/blender/makesrna/intern/makesrna.c | 65 ++++++++++++++--------- 1 file changed, 41 insertions(+), 24 deletions(-) diff --git a/source/blender/makesrna/intern/makesrna.c b/source/blender/makesrna/intern/makesrna.c index 5eeacc3351c..bba8d418d06 100644 --- a/source/blender/makesrna/intern/makesrna.c +++ b/source/blender/makesrna/intern/makesrna.c @@ -751,7 +751,8 @@ static char *rna_def_property_get_func( case PROP_STRING: { StringPropertyRNA *sprop = (StringPropertyRNA *)prop; UNUSED_VARS_NDEBUG(sprop); - print_global_function_signature(f, "void %s(PointerRNA *ptr, char *value)", func); + print_global_function_signature( + f, "RNA_EXTERN_C void %s(PointerRNA *ptr, char *value)", func); fprintf(f, "{\n"); if (manualfunc) { fprintf(f, " %s(ptr, value);\n", manualfunc); @@ -789,7 +790,7 @@ static char *rna_def_property_get_func( break; } case PROP_POINTER: { - print_global_function_signature(f, "PointerRNA %s(PointerRNA *ptr)", func); + print_global_function_signature(f, "RNA_EXTERN_C PointerRNA %s(PointerRNA *ptr)", func); fprintf(f, "{\n"); if (manualfunc) { fprintf(f, " return %s(ptr);\n", manualfunc); @@ -842,14 +843,14 @@ static char *rna_def_property_get_func( if (prop->flag & PROP_DYNAMIC) { snprintf(signature, sizeof(signature), - "void %s(PointerRNA *ptr, %s values[])", + "RNA_EXTERN_C void %s(PointerRNA *ptr, %s values[])", func, rna_type_type(prop)); } else { snprintf(signature, sizeof(signature), - "void %s(PointerRNA *ptr, %s values[%u])", + "RNA_EXTERN_C void %s(PointerRNA *ptr, %s values[%u])", func, rna_type_type(prop), prop->totarraylength); @@ -948,8 +949,11 @@ static char *rna_def_property_get_func( } else { char signature[MAX_SIGNATURE_LEN]; - snprintf( - signature, sizeof(signature), "%s %s(PointerRNA *ptr)", rna_type_type(prop), func); + snprintf(signature, + sizeof(signature), + "RNA_EXTERN_C %s %s(PointerRNA *ptr)", + rna_type_type(prop), + func); fprintf(f, "%s;\n", signature); fprintf(f, "%s\n", signature); fprintf(f, "{\n"); @@ -1035,6 +1039,7 @@ static void rna_clamp_value_range(FILE *f, PropertyRNA *prop) } #ifdef USE_RNA_RANGE_CHECK + static void rna_clamp_value_range_check(FILE *f, PropertyRNA *prop, const char *dnaname_prefix, @@ -1042,6 +1047,9 @@ static void rna_clamp_value_range_check(FILE *f, { if (prop->type == PROP_INT) { IntPropertyRNA *iprop = (IntPropertyRNA *)prop; + fprintf(f, "#ifdef __cplusplus\n"); + /* TODO: Add C++ check. */ + fprintf(f, "#else\n"); fprintf(f, " { BLI_STATIC_ASSERT(" "(TYPEOF_MAX(%s%s) >= %d) && " @@ -1053,6 +1061,7 @@ static void rna_clamp_value_range_check(FILE *f, dnaname_prefix, dnaname, iprop->hardmin); + fprintf(f, "#endif\n"); } } #endif /* USE_RNA_RANGE_CHECK */ @@ -1070,7 +1079,7 @@ static void rna_clamp_value(FILE *f, PropertyRNA *prop, int array) fprintf(f, "CLAMPIS(value, "); } if (iprop->range) { - fprintf(f, "prop_clamp_min, prop_clamp_max);"); + fprintf(f, "prop_clamp_min, prop_clamp_max);\n"); } else { rna_int_print(f, iprop->hardmin); @@ -1092,7 +1101,7 @@ static void rna_clamp_value(FILE *f, PropertyRNA *prop, int array) fprintf(f, "CLAMPIS(value, "); } if (fprop->range) { - fprintf(f, "prop_clamp_min, prop_clamp_max);"); + fprintf(f, "prop_clamp_min, prop_clamp_max);\n"); } else { rna_float_print(f, fprop->hardmin); @@ -1130,7 +1139,7 @@ static char *rna_def_property_search_func(FILE *f, func = rna_alloc_function_name(srna->identifier, rna_safe_id(prop->identifier), "search"); print_global_function_signature(f, - "void %s(" + "RNA_EXTERN_C void %s(" "const bContext *C, " "PointerRNA *ptr, " "PropertyRNA *prop, " @@ -1172,7 +1181,8 @@ static char *rna_def_property_set_func( switch (prop->type) { case PROP_STRING: { StringPropertyRNA *sprop = (StringPropertyRNA *)prop; - print_global_function_signature(f, "void %s(PointerRNA *ptr, const char *value)", func); + print_global_function_signature( + f, "RNA_EXTERN_C void %s(PointerRNA *ptr, const char *value)", func); fprintf(f, "{\n"); if (manualfunc) { fprintf(f, " %s(ptr, value);\n", manualfunc); @@ -1217,8 +1227,11 @@ static char *rna_def_property_set_func( break; } case PROP_POINTER: { + PointerPropertyRNA *pprop = (PointerPropertyRNA *)dp->prop; print_global_function_signature( - f, "void %s(PointerRNA *ptr, PointerRNA value, struct ReportList *reports)", func); + f, + "RNA_EXTERN_C void %s(PointerRNA *ptr, PointerRNA value, struct ReportList *reports)", + func); fprintf(f, "{\n"); if (manualfunc) { fprintf(f, " %s(ptr, value, reports);\n", manualfunc); @@ -1242,7 +1255,6 @@ static char *rna_def_property_set_func( fprintf(f, " }\n"); } else { - PointerPropertyRNA *pprop = (PointerPropertyRNA *)dp->prop; StructRNA *type = (pprop->type) ? rna_find_struct((const char *)pprop->type) : NULL; if (type && (type->flag & STRUCT_ID)) { fprintf(f, " if (value.data) {\n"); @@ -1251,7 +1263,7 @@ static char *rna_def_property_set_func( } } - fprintf(f, " data->%s = value.data;\n", dp->dnaname); + fprintf(f, " *(void **)data->%s = value.data;\n", dp->dnaname); } fprintf(f, "}\n\n"); break; @@ -1262,7 +1274,7 @@ static char *rna_def_property_set_func( if (prop->flag & PROP_DYNAMIC) { snprintf(signature, sizeof(signature), - "void %s(PointerRNA *ptr, const %s values[])", + "RNA_EXTERN_C void %s(PointerRNA *ptr, const %s values[])", func, rna_type_type(prop)); } @@ -1386,7 +1398,7 @@ static char *rna_def_property_set_func( char signature[MAX_SIGNATURE_LEN]; snprintf(signature, sizeof(signature), - "void %s(PointerRNA *ptr, %s value)", + "RNA_EXTERN_C void %s(PointerRNA *ptr, %s value)", func, rna_type_type(prop)); fprintf(f, "%s;\n", signature); @@ -1476,7 +1488,7 @@ static char *rna_def_property_length_func( func = rna_alloc_function_name(srna->identifier, rna_safe_id(prop->identifier), "length"); - print_global_function_signature(f, "int %s(PointerRNA *ptr)", func); + print_global_function_signature(f, "RNA_EXTERN_C int %s(PointerRNA *ptr)", func); fprintf(f, "{\n"); if (manualfunc) { fprintf(f, " return %s(ptr);\n", manualfunc); @@ -1509,7 +1521,7 @@ static char *rna_def_property_length_func( func = rna_alloc_function_name(srna->identifier, rna_safe_id(prop->identifier), "length"); - print_global_function_signature(f, "int %s(PointerRNA *ptr)", func); + print_global_function_signature(f, "RNA_EXTERN_C int %s(PointerRNA *ptr)", func); fprintf(f, "{\n"); if (manualfunc) { fprintf(f, " return %s(ptr);\n", manualfunc); @@ -1559,7 +1571,7 @@ static char *rna_def_property_begin_func( func = rna_alloc_function_name(srna->identifier, rna_safe_id(prop->identifier), "begin"); print_global_function_signature( - f, "void %s(CollectionPropertyIterator *iter, PointerRNA *ptr)", func); + f, "RNA_EXTERN_C void %s(CollectionPropertyIterator *iter, PointerRNA *ptr)", func); fprintf(f, "{\n"); @@ -1649,8 +1661,10 @@ static char *rna_def_property_lookup_int_func(FILE *f, func = rna_alloc_function_name(srna->identifier, rna_safe_id(prop->identifier), "lookup_int"); char signature[MAX_SIGNATURE_LEN]; - snprintf( - signature, sizeof(signature), "int %s(PointerRNA *ptr, int index, PointerRNA *r_ptr)", func); + snprintf(signature, + sizeof(signature), + "RNA_EXTERN_C int %s(PointerRNA *ptr, int index, PointerRNA *r_ptr)", + func); fprintf(f, "%s;\n", signature); fprintf(f, "%s\n", signature); @@ -1812,7 +1826,7 @@ static char *rna_def_property_lookup_string_func(FILE *f, } print_global_function_signature( - f, "int %s(PointerRNA *ptr, const char *key, PointerRNA *r_ptr)", func); + f, "RNA_EXTERN_C int %s(PointerRNA *ptr, const char *key, PointerRNA *r_ptr)", func); fprintf(f, "{\n"); if (manualfunc) { @@ -1890,7 +1904,8 @@ static char *rna_def_property_next_func(FILE *f, func = rna_alloc_function_name(srna->identifier, rna_safe_id(prop->identifier), "next"); - print_global_function_signature(f, "void %s(CollectionPropertyIterator *iter)", func); + print_global_function_signature( + f, "RNA_EXTERN_C void %s(CollectionPropertyIterator *iter)", func); fprintf(f, "{\n"); fprintf(f, " %s(iter);\n", manualfunc); @@ -1919,7 +1934,8 @@ static char *rna_def_property_end_func(FILE *f, func = rna_alloc_function_name(srna->identifier, rna_safe_id(prop->identifier), "end"); - print_global_function_signature(f, "void %s(CollectionPropertyIterator *iter)", func); + print_global_function_signature( + f, "RNA_EXTERN_C void %s(CollectionPropertyIterator *iter)", func); fprintf(f, "{\n"); if (manualfunc) { fprintf(f, " %s(iter);\n", manualfunc); @@ -2892,7 +2908,8 @@ static void rna_def_property_wrapper_funcs(FILE *f, StructDefRNA *dsrna, Propert char funcname[1024]; rna_construct_wrapper_function_name( funcname, sizeof(funcname), dsrna->srna->identifier, dp->prop->identifier, "get_length"); - print_global_function_signature(f, "int %s(PointerRNA *ptr, int *arraylen)", funcname); + print_global_function_signature( + f, "RNA_EXTERN_C int %s(PointerRNA *ptr, int *arraylen)", funcname); fprintf(f, "{\n"); fprintf(f, "\treturn %s(ptr, arraylen);\n", rna_function_string(dp->prop->getlength)); fprintf(f, "}\n\n"); -- 2.30.2 From c8f27b56ceea2b939c230a1a89d61bca3dca6f56 Mon Sep 17 00:00:00 2001 From: Jacques Lucke Date: Thu, 25 May 2023 19:17:48 +0200 Subject: [PATCH 09/22] compile rna_pose.cc --- source/blender/makesrna/RNA_types.h | 1 + source/blender/makesrna/intern/CMakeLists.txt | 2 +- source/blender/makesrna/intern/makesrna.c | 2 +- .../intern/{rna_pose.c => rna_pose.cc} | 108 +++++++++--------- 4 files changed, 58 insertions(+), 55 deletions(-) rename source/blender/makesrna/intern/{rna_pose.c => rna_pose.cc} (94%) diff --git a/source/blender/makesrna/RNA_types.h b/source/blender/makesrna/RNA_types.h index a26425a2793..acb739d9417 100644 --- a/source/blender/makesrna/RNA_types.h +++ b/source/blender/makesrna/RNA_types.h @@ -352,6 +352,7 @@ typedef enum PropertyOverrideFlag { */ PROPOVERRIDE_NO_PROP_NAME = (1 << 11), } PropertyOverrideFlag; +ENUM_OPERATORS(PropertyOverrideFlag, PROPOVERRIDE_NO_PROP_NAME); /** * Function parameters flags. diff --git a/source/blender/makesrna/intern/CMakeLists.txt b/source/blender/makesrna/intern/CMakeLists.txt index b9008cb3578..036df66e150 100644 --- a/source/blender/makesrna/intern/CMakeLists.txt +++ b/source/blender/makesrna/intern/CMakeLists.txt @@ -60,7 +60,7 @@ set(DEFSRC rna_palette.c rna_particle.c rna_pointcloud.c - rna_pose.c + rna_pose.cc rna_render.c rna_rigidbody.c rna_rna.c diff --git a/source/blender/makesrna/intern/makesrna.c b/source/blender/makesrna/intern/makesrna.c index bba8d418d06..651735a26c2 100644 --- a/source/blender/makesrna/intern/makesrna.c +++ b/source/blender/makesrna/intern/makesrna.c @@ -4615,7 +4615,7 @@ static RNAProcessItem PROCESS_ITEMS[] = { {"rna_palette.c", NULL, RNA_def_palette}, {"rna_particle.c", NULL, RNA_def_particle}, {"rna_pointcloud.c", NULL, RNA_def_pointcloud}, - {"rna_pose.c", "rna_pose_api.c", RNA_def_pose}, + {"rna_pose.cc", "rna_pose_api.c", RNA_def_pose}, {"rna_curveprofile.c", NULL, RNA_def_profile}, {"rna_lightprobe.c", NULL, RNA_def_lightprobe}, {"rna_render.c", NULL, RNA_def_render}, diff --git a/source/blender/makesrna/intern/rna_pose.c b/source/blender/makesrna/intern/rna_pose.cc similarity index 94% rename from source/blender/makesrna/intern/rna_pose.c rename to source/blender/makesrna/intern/rna_pose.cc index b68c344c2f2..1fc8e14ef7a 100644 --- a/source/blender/makesrna/intern/rna_pose.c +++ b/source/blender/makesrna/intern/rna_pose.cc @@ -81,7 +81,7 @@ const EnumPropertyItem rna_enum_color_sets_items[] = { # include "RNA_access.h" -static void rna_Pose_update(Main *UNUSED(bmain), Scene *UNUSED(scene), PointerRNA *ptr) +static void rna_Pose_update(Main * /*bmain*/, Scene * /*scene*/, PointerRNA *ptr) { /* XXX when to use this? ob->pose->flag |= (POSE_LOCKED|POSE_DO_UNLOCK); */ @@ -89,7 +89,7 @@ static void rna_Pose_update(Main *UNUSED(bmain), Scene *UNUSED(scene), PointerRN WM_main_add_notifier(NC_OBJECT | ND_POSE, ptr->owner_id); } -static void rna_Pose_dependency_update(Main *bmain, Scene *UNUSED(scene), PointerRNA *ptr) +static void rna_Pose_dependency_update(Main *bmain, Scene * /*scene*/, PointerRNA *ptr) { DEG_relations_tag_update(bmain); @@ -97,7 +97,7 @@ static void rna_Pose_dependency_update(Main *bmain, Scene *UNUSED(scene), Pointe WM_main_add_notifier(NC_OBJECT | ND_POSE, ptr->owner_id); } -static void rna_Pose_IK_update(Main *UNUSED(bmain), Scene *UNUSED(scene), PointerRNA *ptr) +static void rna_Pose_IK_update(Main * /*bmain*/, Scene * /*scene*/, PointerRNA *ptr) { /* XXX when to use this? ob->pose->flag |= (POSE_LOCKED|POSE_DO_UNLOCK); */ Object *ob = (Object *)ptr->owner_id; @@ -108,14 +108,14 @@ static void rna_Pose_IK_update(Main *UNUSED(bmain), Scene *UNUSED(scene), Pointe BIK_clear_data(ob->pose); } -static char *rna_Pose_path(const PointerRNA *UNUSED(ptr)) +static char *rna_Pose_path(const PointerRNA * /*ptr*/) { return BLI_strdup("pose"); } static char *rna_PoseBone_path(const PointerRNA *ptr) { - const bPoseChannel *pchan = ptr->data; + const bPoseChannel *pchan = static_cast(ptr->data); char name_esc[sizeof(pchan->name) * 2]; BLI_str_escape(name_esc, pchan->name, sizeof(name_esc)); @@ -151,7 +151,7 @@ static void rna_bone_group_remove(ID *id, bPose *pose, ReportList *reports, Poin return; } - bActionGroup *grp = grp_ptr->data; + bActionGroup *grp = static_cast(grp_ptr->data); const int grp_idx = BLI_findindex(&pose->agroups, grp); if (grp_idx == -1) { @@ -172,7 +172,7 @@ void rna_ActionGroup_colorset_set(PointerRNA *ptr, int value) return; } - bActionGroup *grp = ptr->data; + bActionGroup *grp = static_cast(ptr->data); /* ensure only valid values get set */ if ((value >= -1) && (value < 21)) { @@ -185,7 +185,7 @@ void rna_ActionGroup_colorset_set(PointerRNA *ptr, int value) bool rna_ActionGroup_is_custom_colorset_get(PointerRNA *ptr) { - bActionGroup *grp = ptr->data; + bActionGroup *grp = static_cast(ptr->data); return (grp->customCol < 0); } @@ -197,7 +197,7 @@ static void rna_BoneGroup_name_set(PointerRNA *ptr, const char *value) return; } - bActionGroup *agrp = ptr->data; + bActionGroup *agrp = static_cast(ptr->data); /* copy the new name into the name slot */ STRNCPY_UTF8(agrp->name, value); @@ -212,7 +212,7 @@ static void rna_BoneGroup_name_set(PointerRNA *ptr, const char *value) static IDProperty **rna_PoseBone_idprops(PointerRNA *ptr) { - bPoseChannel *pchan = ptr->data; + bPoseChannel *pchan = static_cast(ptr->data); return &pchan->prop; } @@ -232,10 +232,10 @@ static void rna_Pose_ik_solver_set(struct PointerRNA *ptr, int value) } } -static void rna_Pose_ik_solver_update(Main *bmain, Scene *UNUSED(scene), PointerRNA *ptr) +static void rna_Pose_ik_solver_update(Main *bmain, Scene * /*scene*/, PointerRNA *ptr) { Object *ob = (Object *)ptr->owner_id; - bPose *pose = ptr->data; + bPose *pose = static_cast(ptr->data); BKE_pose_tag_recalc(bmain, pose); /* checks & sorts pose channels */ DEG_relations_tag_update(bmain); @@ -250,7 +250,7 @@ static void rna_Pose_ik_solver_update(Main *bmain, Scene *UNUSED(scene), Pointer /* rotation - axis-angle */ static void rna_PoseChannel_rotation_axis_angle_get(PointerRNA *ptr, float *value) { - bPoseChannel *pchan = ptr->data; + bPoseChannel *pchan = static_cast(ptr->data); /* for now, assume that rotation mode is axis-angle */ value[0] = pchan->rotAngle; @@ -260,7 +260,7 @@ static void rna_PoseChannel_rotation_axis_angle_get(PointerRNA *ptr, float *valu /* rotation - axis-angle */ static void rna_PoseChannel_rotation_axis_angle_set(PointerRNA *ptr, const float *value) { - bPoseChannel *pchan = ptr->data; + bPoseChannel *pchan = static_cast(ptr->data); /* for now, assume that rotation mode is axis-angle */ pchan->rotAngle = value[0]; @@ -271,7 +271,7 @@ static void rna_PoseChannel_rotation_axis_angle_set(PointerRNA *ptr, const float static void rna_PoseChannel_rotation_mode_set(PointerRNA *ptr, int value) { - bPoseChannel *pchan = ptr->data; + bPoseChannel *pchan = static_cast(ptr->data); /* use API Method for conversions... */ BKE_rotMode_change_values( @@ -283,7 +283,7 @@ static void rna_PoseChannel_rotation_mode_set(PointerRNA *ptr, int value) static float rna_PoseChannel_length_get(PointerRNA *ptr) { - bPoseChannel *pchan = ptr->data; + bPoseChannel *pchan = static_cast(ptr->data); return len_v3v3(pchan->pose_head, pchan->pose_tail); } @@ -299,11 +299,11 @@ static void rna_PoseChannel_name_set(PointerRNA *ptr, const char *value) BLI_assert(BKE_id_is_in_global_main(&ob->id)); BLI_assert(BKE_id_is_in_global_main(ob->data)); - ED_armature_bone_rename(G_MAIN, ob->data, oldname, newname); + ED_armature_bone_rename(G_MAIN, static_cast(ob->data), oldname, newname); } /* See rna_Bone_update_renamed() */ -static void rna_PoseChannel_name_update(Main *UNUSED(bmain), Scene *UNUSED(scene), PointerRNA *ptr) +static void rna_PoseChannel_name_update(Main * /*bmain*/, Scene * /*scene*/, PointerRNA *ptr) { ID *id = ptr->owner_id; @@ -321,7 +321,7 @@ static PointerRNA rna_PoseChannel_bone_get(PointerRNA *ptr) PointerRNA tmp_ptr = *ptr; /* Replace the id_data pointer with the Armature ID. */ - tmp_ptr.owner_id = ob->data; + tmp_ptr.owner_id = static_cast(ob->data); return rna_pointer_inherit_refine(&tmp_ptr, &RNA_Bone, pchan->bone); } @@ -364,10 +364,10 @@ static StructRNA *rna_Pose_ikparam_typef(PointerRNA *ptr) } } -static void rna_Itasc_update(Main *UNUSED(bmain), Scene *UNUSED(scene), PointerRNA *ptr) +static void rna_Itasc_update(Main * /*bmain*/, Scene * /*scene*/, PointerRNA *ptr) { Object *ob = (Object *)ptr->owner_id; - bItasc *itasc = ptr->data; + bItasc *itasc = static_cast(ptr->data); /* verify values */ if (itasc->precision < 0.0001f) { @@ -413,7 +413,7 @@ static PointerRNA rna_PoseChannel_bone_group_get(PointerRNA *ptr) bActionGroup *grp; if (pose) { - grp = BLI_findlink(&pose->agroups, pchan->agrp_index - 1); + grp = static_cast(BLI_findlink(&pose->agroups, pchan->agrp_index - 1)); } else { grp = NULL; @@ -424,7 +424,7 @@ static PointerRNA rna_PoseChannel_bone_group_get(PointerRNA *ptr) static void rna_PoseChannel_bone_group_set(PointerRNA *ptr, PointerRNA value, - struct ReportList *UNUSED(reports)) + struct ReportList * /*reports*/) { Object *ob = (Object *)ptr->owner_id; bPose *pose = (ob) ? ob->pose : NULL; @@ -451,7 +451,7 @@ static void rna_PoseChannel_bone_group_index_set(PointerRNA *ptr, int value) } static void rna_PoseChannel_bone_group_index_range( - PointerRNA *ptr, int *min, int *max, int *UNUSED(softmin), int *UNUSED(softmax)) + PointerRNA *ptr, int *min, int *max, int * /*softmin*/, int * /*softmax*/) { Object *ob = (Object *)ptr->owner_id; bPose *pose = (ob) ? ob->pose : NULL; @@ -469,7 +469,7 @@ static PointerRNA rna_Pose_active_bone_group_get(PointerRNA *ptr) static void rna_Pose_active_bone_group_set(PointerRNA *ptr, PointerRNA value, - struct ReportList *UNUSED(reports)) + struct ReportList * /*reports*/) { bPose *pose = (bPose *)ptr->data; pose->active_group = BLI_findindex(&pose->agroups, value.data) + 1; @@ -488,7 +488,7 @@ static void rna_Pose_active_bone_group_index_set(PointerRNA *ptr, int value) } static void rna_Pose_active_bone_group_index_range( - PointerRNA *ptr, int *min, int *max, int *UNUSED(softmin), int *UNUSED(softmax)) + PointerRNA *ptr, int *min, int *max, int * /*softmin*/, int * /*softmax*/) { bPose *pose = (bPose *)ptr->data; @@ -565,7 +565,7 @@ static PointerRNA rna_PoseChannel_active_constraint_get(PointerRNA *ptr) static void rna_PoseChannel_active_constraint_set(PointerRNA *ptr, PointerRNA value, - struct ReportList *UNUSED(reports)) + struct ReportList * /*reports*/) { bPoseChannel *pchan = (bPoseChannel *)ptr->data; BKE_constraints_active_set(&pchan->constraints, (bConstraint *)value.data); @@ -588,7 +588,7 @@ static bConstraint *rna_PoseChannel_constraints_new(ID *id, static void rna_PoseChannel_constraints_remove( ID *id, bPoseChannel *pchan, Main *bmain, ReportList *reports, PointerRNA *con_ptr) { - bConstraint *con = con_ptr->data; + bConstraint *con = static_cast(con_ptr->data); const bool is_ik = ELEM(con->type, CONSTRAINT_TYPE_KINEMATIC, CONSTRAINT_TYPE_SPLINEIK); Object *ob = (Object *)id; @@ -637,7 +637,7 @@ static bConstraint *rna_PoseChannel_constraints_copy(ID *id, PointerRNA *con_ptr) { Object *ob = (Object *)id; - bConstraint *con = con_ptr->data; + bConstraint *con = static_cast(con_ptr->data); bConstraint *new_con = BKE_constraint_copy_for_pose(ob, pchan, con); new_con->flag |= CONSTRAINT_OVERRIDE_LIBRARY_LOCAL; @@ -650,16 +650,16 @@ static bConstraint *rna_PoseChannel_constraints_copy(ID *id, bool rna_PoseChannel_constraints_override_apply(Main *bmain, PointerRNA *ptr_dst, PointerRNA *ptr_src, - PointerRNA *UNUSED(ptr_storage), + PointerRNA * /*ptr_storage*/, PropertyRNA *prop_dst, - PropertyRNA *UNUSED(prop_src), - PropertyRNA *UNUSED(prop_storage), - const int UNUSED(len_dst), - const int UNUSED(len_src), - const int UNUSED(len_storage), - PointerRNA *UNUSED(ptr_item_dst), - PointerRNA *UNUSED(ptr_item_src), - PointerRNA *UNUSED(ptr_item_storage), + PropertyRNA * /*prop_src*/, + PropertyRNA * /*prop_storage*/, + const int /*len_dst*/, + const int /*len_src*/, + const int /*len_storage*/, + PointerRNA * /*ptr_item_dst*/, + PointerRNA * /*ptr_item_src*/, + PointerRNA * /*ptr_item_storage*/, IDOverrideLibraryPropertyOperation *opop) { BLI_assert(opop->operation == LIBOVERRIDE_OP_INSERT_AFTER && @@ -672,14 +672,15 @@ bool rna_PoseChannel_constraints_override_apply(Main *bmain, * even if we insert several items in a row, we always insert first one, then second one, etc. * So we should always find 'anchor' constraint in both _src *and* _dst */ const size_t name_offset = offsetof(bConstraint, name); - bConstraint *con_anchor = BLI_listbase_string_or_index_find(&pchan_dst->constraints, - opop->subitem_reference_name, - name_offset, - opop->subitem_reference_index); + bConstraint *con_anchor = static_cast( + BLI_listbase_string_or_index_find(&pchan_dst->constraints, + opop->subitem_reference_name, + name_offset, + opop->subitem_reference_index)); /* If `con_anchor` is NULL, `con_src` will be inserted in first position. */ - bConstraint *con_src = BLI_listbase_string_or_index_find( - &pchan_src->constraints, opop->subitem_local_name, name_offset, opop->subitem_local_index); + bConstraint *con_src = static_cast(BLI_listbase_string_or_index_find( + &pchan_src->constraints, opop->subitem_local_name, name_offset, opop->subitem_local_index)); if (con_src == NULL) { BLI_assert(con_src != NULL); @@ -701,7 +702,7 @@ bool rna_PoseChannel_constraints_override_apply(Main *bmain, return true; } -static int rna_PoseChannel_proxy_editable(PointerRNA *UNUSED(ptr), const char **UNUSED(r_info)) +static int rna_PoseChannel_proxy_editable(PointerRNA * /*ptr*/, const char ** /*r_info*/) { # if 0 Object *ob = (Object *)ptr->owner_id; @@ -851,12 +852,13 @@ static bPoseChannel *rna_PoseChannel_ensure_own_pchan(Object *ob, static void rna_PoseChannel_custom_shape_transform_set(PointerRNA *ptr, PointerRNA value, - struct ReportList *UNUSED(reports)) + struct ReportList * /*reports*/) { bPoseChannel *pchan = (bPoseChannel *)ptr->data; Object *ob = (Object *)ptr->owner_id; - pchan->custom_tx = rna_PoseChannel_ensure_own_pchan(ob, (Object *)value.owner_id, value.data); + pchan->custom_tx = static_cast(rna_PoseChannel_ensure_own_pchan( + ob, (Object *)value.owner_id, static_cast(value.data))); } #else @@ -960,7 +962,7 @@ static void rna_def_pose_channel_constraints(BlenderRNA *brna, PropertyRNA *cpro /* constraint to add */ parm = RNA_def_enum( func, "type", rna_enum_constraint_type_items, 1, "", "Constraint type to add"); - RNA_def_parameter_flags(parm, 0, PARM_REQUIRED); + RNA_def_parameter_flags(parm, PropertyFlag(0), PARM_REQUIRED); func = RNA_def_function(srna, "remove", "rna_PoseChannel_constraints_remove"); RNA_def_function_ui_description(func, "Remove a constraint from this object"); @@ -969,16 +971,16 @@ static void rna_def_pose_channel_constraints(BlenderRNA *brna, PropertyRNA *cpro /* constraint to remove */ parm = RNA_def_pointer(func, "constraint", "Constraint", "", "Removed constraint"); RNA_def_parameter_flags(parm, PROP_NEVER_NULL, PARM_REQUIRED | PARM_RNAPTR); - RNA_def_parameter_clear_flags(parm, PROP_THICK_WRAP, 0); + RNA_def_parameter_clear_flags(parm, PROP_THICK_WRAP, ParameterFlag(0)); func = RNA_def_function(srna, "move", "rna_PoseChannel_constraints_move"); RNA_def_function_ui_description(func, "Move a constraint to a different position"); RNA_def_function_flag(func, FUNC_USE_SELF_ID | FUNC_USE_MAIN | FUNC_USE_REPORTS); parm = RNA_def_int( func, "from_index", -1, INT_MIN, INT_MAX, "From Index", "Index to move", 0, 10000); - RNA_def_parameter_flags(parm, 0, PARM_REQUIRED); + RNA_def_parameter_flags(parm, PropertyFlag(0), PARM_REQUIRED); parm = RNA_def_int(func, "to_index", -1, INT_MIN, INT_MAX, "To Index", "Target index", 0, 10000); - RNA_def_parameter_flags(parm, 0, PARM_REQUIRED); + RNA_def_parameter_flags(parm, PropertyFlag(0), PARM_REQUIRED); func = RNA_def_function(srna, "copy", "rna_PoseChannel_constraints_copy"); RNA_def_function_ui_description(func, "Add a new constraint that is a copy of the given one"); @@ -990,7 +992,7 @@ static void rna_def_pose_channel_constraints(BlenderRNA *brna, PropertyRNA *cpro "", "Constraint to copy - may belong to a different object"); RNA_def_parameter_flags(parm, PROP_NEVER_NULL, PARM_REQUIRED | PARM_RNAPTR); - RNA_def_parameter_clear_flags(parm, PROP_THICK_WRAP, 0); + RNA_def_parameter_clear_flags(parm, PROP_THICK_WRAP, ParameterFlag(0)); /* return type */ parm = RNA_def_pointer(func, "new_constraint", "Constraint", "", "New constraint"); RNA_def_function_return(func, parm); @@ -1643,7 +1645,7 @@ static void rna_def_bone_groups(BlenderRNA *brna, PropertyRNA *cprop) /* bone group to remove */ parm = RNA_def_pointer(func, "group", "BoneGroup", "", "Removed bone group"); RNA_def_parameter_flags(parm, PROP_NEVER_NULL, PARM_REQUIRED | PARM_RNAPTR); - RNA_def_parameter_clear_flags(parm, PROP_THICK_WRAP, 0); + RNA_def_parameter_clear_flags(parm, PROP_THICK_WRAP, ParameterFlag(0)); prop = RNA_def_property(srna, "active", PROP_POINTER, PROP_NONE); RNA_def_property_struct_type(prop, "BoneGroup"); -- 2.30.2 From 67cdc7dd877ec75e28c9298108bab2586e045215 Mon Sep 17 00:00:00 2001 From: Jacques Lucke Date: Thu, 25 May 2023 19:23:17 +0200 Subject: [PATCH 10/22] don't warn on missing declarations --- source/blender/makesrna/intern/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/blender/makesrna/intern/CMakeLists.txt b/source/blender/makesrna/intern/CMakeLists.txt index 036df66e150..1fa647ec928 100644 --- a/source/blender/makesrna/intern/CMakeLists.txt +++ b/source/blender/makesrna/intern/CMakeLists.txt @@ -136,7 +136,7 @@ set_source_files_properties(${GENSRC} PROPERTIES GENERATED TRUE) # less strict flags for generated source set(GENSRC_CFLAGS) if(CMAKE_COMPILER_IS_GNUCC OR (CMAKE_C_COMPILER_ID MATCHES "Clang")) - set(GENSRC_CFLAGS "-Wno-missing-prototypes") + set(GENSRC_CFLAGS "-Wno-missing-prototypes -Wno-missing-declarations") endif() if(CMAKE_C_COMPILER_ID MATCHES "Clang") string(APPEND GENSRC_CFLAGS " -Wno-missing-variable-declarations") -- 2.30.2 From a783a0686a7a71420c4a4b88d44a76c016514085 Mon Sep 17 00:00:00 2001 From: Jacques Lucke Date: Thu, 25 May 2023 19:28:26 +0200 Subject: [PATCH 11/22] move rna lattice to c++ --- source/blender/makesrna/intern/CMakeLists.txt | 4 ++-- source/blender/makesrna/intern/makesrna.c | 2 +- .../intern/{rna_lattice.c => rna_lattice.cc} | 15 +++++++-------- .../{rna_lattice_api.c => rna_lattice_api.cc} | 2 +- 4 files changed, 11 insertions(+), 12 deletions(-) rename source/blender/makesrna/intern/{rna_lattice.c => rna_lattice.cc} (96%) rename source/blender/makesrna/intern/{rna_lattice_api.c => rna_lattice_api.cc} (94%) diff --git a/source/blender/makesrna/intern/CMakeLists.txt b/source/blender/makesrna/intern/CMakeLists.txt index 1fa647ec928..f96705189e4 100644 --- a/source/blender/makesrna/intern/CMakeLists.txt +++ b/source/blender/makesrna/intern/CMakeLists.txt @@ -40,7 +40,7 @@ set(DEFSRC rna_gpencil_legacy_modifier.c rna_image.c rna_key.c - rna_lattice.c + rna_lattice.cc rna_layer.c rna_light.c rna_lightprobe.c @@ -103,7 +103,7 @@ set(APISRC rna_curve_api.c rna_fcurve_api.c rna_image_api.c - rna_lattice_api.c + rna_lattice_api.cc rna_main_api.c rna_material_api.c rna_mesh_api.c diff --git a/source/blender/makesrna/intern/makesrna.c b/source/blender/makesrna/intern/makesrna.c index 651735a26c2..4d1e66ff840 100644 --- a/source/blender/makesrna/intern/makesrna.c +++ b/source/blender/makesrna/intern/makesrna.c @@ -4595,7 +4595,7 @@ static RNAProcessItem PROCESS_ITEMS[] = { {"rna_image.c", "rna_image_api.c", RNA_def_image}, {"rna_key.c", NULL, RNA_def_key}, {"rna_light.c", NULL, RNA_def_light}, - {"rna_lattice.c", "rna_lattice_api.c", RNA_def_lattice}, + {"rna_lattice.cc", "rna_lattice_api.cc", RNA_def_lattice}, {"rna_layer.c", NULL, RNA_def_view_layer}, {"rna_linestyle.c", NULL, RNA_def_linestyle}, {"rna_main.c", "rna_main_api.c", RNA_def_main}, diff --git a/source/blender/makesrna/intern/rna_lattice.c b/source/blender/makesrna/intern/rna_lattice.cc similarity index 96% rename from source/blender/makesrna/intern/rna_lattice.c rename to source/blender/makesrna/intern/rna_lattice.cc index 30bde170d74..2ba85408b84 100644 --- a/source/blender/makesrna/intern/rna_lattice.c +++ b/source/blender/makesrna/intern/rna_lattice.cc @@ -80,7 +80,7 @@ static void rna_Lattice_points_begin(CollectionPropertyIterator *iter, PointerRN } } -static void rna_Lattice_update_data(Main *UNUSED(bmain), Scene *UNUSED(scene), PointerRNA *ptr) +static void rna_Lattice_update_data(Main * /*bmain*/, Scene * /*scene*/, PointerRNA *ptr) { ID *id = ptr->owner_id; @@ -92,9 +92,7 @@ static void rna_Lattice_update_data(Main *UNUSED(bmain), Scene *UNUSED(scene), P * we could split this up differently (one update call per property) * but for now that's overkill */ -static void rna_Lattice_update_data_editlatt(Main *UNUSED(bmain), - Scene *UNUSED(scene), - PointerRNA *ptr) +static void rna_Lattice_update_data_editlatt(Main * /*bmain*/, Scene * /*scene*/, PointerRNA *ptr) { ID *id = ptr->owner_id; Lattice *lt = (Lattice *)ptr->owner_id; @@ -124,7 +122,8 @@ static void rna_Lattice_update_size(Main *bmain, Scene *scene, PointerRNA *ptr) neww = (lt->opntsw > 0) ? lt->opntsw : lt->pntsw; /* #BKE_lattice_resize needs an object, any object will have the same result */ - for (ob = bmain->objects.first; ob; ob = ob->id.next) { + for (ob = static_cast(bmain->objects.first); ob; + ob = static_cast(ob->id.next)) { if (ob->data == lt) { BKE_lattice_resize(lt, newu, newv, neww, ob); if (lt->editlatt) { @@ -147,7 +146,7 @@ static void rna_Lattice_update_size(Main *bmain, Scene *scene, PointerRNA *ptr) static void rna_Lattice_use_outside_set(PointerRNA *ptr, bool value) { - Lattice *lt = ptr->data; + Lattice *lt = static_cast(ptr->data); if (value) { lt->flag |= LT_OUTSIDE; @@ -170,7 +169,7 @@ static void rna_Lattice_use_outside_set(PointerRNA *ptr, bool value) } } -static int rna_Lattice_size_editable(PointerRNA *ptr, const char **UNUSED(r_info)) +static int rna_Lattice_size_editable(PointerRNA *ptr, const char ** /*r_info*/) { Lattice *lt = (Lattice *)ptr->data; @@ -200,7 +199,7 @@ static void rna_Lattice_points_w_set(PointerRNA *ptr, int value) static void rna_Lattice_vg_name_set(PointerRNA *ptr, const char *value) { - Lattice *lt = ptr->data; + Lattice *lt = static_cast(ptr->data); STRNCPY(lt->vgroup, value); if (lt->editlatt) { diff --git a/source/blender/makesrna/intern/rna_lattice_api.c b/source/blender/makesrna/intern/rna_lattice_api.cc similarity index 94% rename from source/blender/makesrna/intern/rna_lattice_api.c rename to source/blender/makesrna/intern/rna_lattice_api.cc index b61d329a776..eca60f9d885 100644 --- a/source/blender/makesrna/intern/rna_lattice_api.c +++ b/source/blender/makesrna/intern/rna_lattice_api.cc @@ -39,7 +39,7 @@ void RNA_api_lattice(StructRNA *srna) func = RNA_def_function(srna, "transform", "rna_Lattice_transform"); RNA_def_function_ui_description(func, "Transform lattice by a matrix"); parm = RNA_def_float_matrix(func, "matrix", 4, 4, NULL, 0.0f, 0.0f, "", "Matrix", 0.0f, 0.0f); - RNA_def_parameter_flags(parm, 0, PARM_REQUIRED); + RNA_def_parameter_flags(parm, PropertyFlag(0), PARM_REQUIRED); RNA_def_boolean(func, "shape_keys", 0, "", "Transform Shape Keys"); RNA_def_function(srna, "update_gpu_tag", "rna_Lattice_update_gpu_tag"); -- 2.30.2 From b5cc24937d846abdabb72507ddae903daab70514 Mon Sep 17 00:00:00 2001 From: Jacques Lucke Date: Thu, 25 May 2023 20:13:39 +0200 Subject: [PATCH 12/22] fix --- source/blender/makesrna/intern/rna_pose.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/blender/makesrna/intern/rna_pose.cc b/source/blender/makesrna/intern/rna_pose.cc index 1fc8e14ef7a..79056856f59 100644 --- a/source/blender/makesrna/intern/rna_pose.cc +++ b/source/blender/makesrna/intern/rna_pose.cc @@ -298,7 +298,7 @@ static void rna_PoseChannel_name_set(PointerRNA *ptr, const char *value) STRNCPY(oldname, pchan->name); BLI_assert(BKE_id_is_in_global_main(&ob->id)); - BLI_assert(BKE_id_is_in_global_main(ob->data)); + BLI_assert(BKE_id_is_in_global_main(static_cast(ob->data))); ED_armature_bone_rename(G_MAIN, static_cast(ob->data), oldname, newname); } -- 2.30.2 From 5a9ba794f95867a40e65c6fa60100c9b8b2956f7 Mon Sep 17 00:00:00 2001 From: Jacques Lucke Date: Thu, 25 May 2023 21:04:55 +0200 Subject: [PATCH 13/22] fix --- source/blender/makesrna/intern/makesrna.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/blender/makesrna/intern/makesrna.c b/source/blender/makesrna/intern/makesrna.c index 4d1e66ff840..4bb765e34b5 100644 --- a/source/blender/makesrna/intern/makesrna.c +++ b/source/blender/makesrna/intern/makesrna.c @@ -1263,7 +1263,7 @@ static char *rna_def_property_set_func( } } - fprintf(f, " *(void **)data->%s = value.data;\n", dp->dnaname); + fprintf(f, " *(void **)&data->%s = value.data;\n", dp->dnaname); } fprintf(f, "}\n\n"); break; -- 2.30.2 From a624f308a3e67fa3ab04b308cae17013f5760ce5 Mon Sep 17 00:00:00 2001 From: Jacques Lucke Date: Thu, 25 May 2023 21:12:49 +0200 Subject: [PATCH 14/22] add extern "C" --- source/blender/makesrna/intern/makesrna.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/source/blender/makesrna/intern/makesrna.c b/source/blender/makesrna/intern/makesrna.c index 4bb765e34b5..f25833eb6b2 100644 --- a/source/blender/makesrna/intern/makesrna.c +++ b/source/blender/makesrna/intern/makesrna.c @@ -5424,7 +5424,9 @@ static int rna_preprocess(const char *outfile, const char *public_header_outfile fprintf(file, "/* Automatically generated function declarations for the Data API.\n" " * Do not edit manually, changes will be overwritten. */\n\n"); + fprintf(file, "#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n"); rna_generate_struct_rna_prototypes(brna, file); + fprintf(file, "#ifdef __cplusplus\n}\n#endif\n"); fclose(file); status = (DefRNA.error != 0); } -- 2.30.2 From 858f5c078afb24fefcecf394c4c3aa99ce07302f Mon Sep 17 00:00:00 2001 From: Jacques Lucke Date: Fri, 26 May 2023 09:25:37 +0200 Subject: [PATCH 15/22] avoid warning because `-Wno-missing-prototypes` is not valid in g++ --- source/blender/makesrna/intern/CMakeLists.txt | 29 ++++++++++++++++--- 1 file changed, 25 insertions(+), 4 deletions(-) diff --git a/source/blender/makesrna/intern/CMakeLists.txt b/source/blender/makesrna/intern/CMakeLists.txt index f96705189e4..0b288d7afa2 100644 --- a/source/blender/makesrna/intern/CMakeLists.txt +++ b/source/blender/makesrna/intern/CMakeLists.txt @@ -134,21 +134,42 @@ set_source_files_properties(${GENSRC} PROPERTIES GENERATED TRUE) # CFLAGS for Generated Files # # less strict flags for generated source +set(GENSRC_FLAGS) set(GENSRC_CFLAGS) +set(GENSRC_CXXFLAGS) if(CMAKE_COMPILER_IS_GNUCC OR (CMAKE_C_COMPILER_ID MATCHES "Clang")) - set(GENSRC_CFLAGS "-Wno-missing-prototypes -Wno-missing-declarations") + set(GENSRC_CFLAGS "-Wno-missing-prototypes") + set(GENSRC_CXXFLAGS "-Wno-missing-declarations") endif() if(CMAKE_C_COMPILER_ID MATCHES "Clang") - string(APPEND GENSRC_CFLAGS " -Wno-missing-variable-declarations") + string(APPEND GENSRC_FLAGS " -Wno-missing-variable-declarations") elseif(MSVC) # Restore warn C4100 (unreferenced formal parameter) back to w4 remove_cc_flag(/w34100) endif() -if(GENSRC_CFLAGS) - set_source_files_properties(${GENSRC} PROPERTIES COMPILE_FLAGS "${GENSRC_CFLAGS}") +set(GENSRC_C ${GENSRC}) +list(FILTER GENSRC_C INCLUDE REGEX ".*\.c$") +set(GENSRC_CXX ${GENSRC}) +list(FILTER GENSRC_CXX INCLUDE REGEX ".*\.cc$") + +if(GENSRC_FLAGS) + set_source_files_properties(${GENSRC} PROPERTIES COMPILE_FLAGS "${GENSRC_FLAGS}") endif() + +if(GENSRC_CFLAGS) + set_source_files_properties(${GENSRC_C} PROPERTIES COMPILE_FLAGS "${GENSRC_CFLAGS}") +endif() + +if(GENSRC_CXXFLAGS) + set_source_files_properties(${GENSRC_CXX} PROPERTIES COMPILE_FLAGS "${GENSRC_CXXFLAGS}") +endif() + +unset(GENSRC_C) +unset(GENSRC_CXX) +unset(GENSRC_FLAGS) unset(GENSRC_CFLAGS) +unset(GENSRC_CXXFLAGS) # NOTE: Disable clang-tidy because generated files are stored outside of the source, -- 2.30.2 From 40d78d95dbfe49fe497686c1b9409e9ea0b2b4b5 Mon Sep 17 00:00:00 2001 From: Jacques Lucke Date: Fri, 26 May 2023 09:31:43 +0200 Subject: [PATCH 16/22] add extern "C" --- source/blender/makesrna/intern/makesrna.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/blender/makesrna/intern/makesrna.c b/source/blender/makesrna/intern/makesrna.c index f25833eb6b2..279cf91d4fb 100644 --- a/source/blender/makesrna/intern/makesrna.c +++ b/source/blender/makesrna/intern/makesrna.c @@ -3575,7 +3575,7 @@ static void rna_generate_internal_property_prototypes(BlenderRNA *UNUSED(brna), for (prop = srna->cont.properties.first; prop; prop = prop->next) { fprintf(f, - "extern %s rna_%s_%s;\n", + "RNA_EXTERN_C %s rna_%s_%s;\n", rna_property_structname(prop->type), srna->identifier, prop->identifier); -- 2.30.2 From b6ca707d356b541d4b17f4ae75012dba19189d1b Mon Sep 17 00:00:00 2001 From: Jacques Lucke Date: Tue, 30 May 2023 10:46:59 +0200 Subject: [PATCH 17/22] remove unnecessary declarations now that -Wno-missing-declarations works --- source/blender/makesrna/intern/makesrna.c | 138 +++++++--------------- 1 file changed, 44 insertions(+), 94 deletions(-) diff --git a/source/blender/makesrna/intern/makesrna.c b/source/blender/makesrna/intern/makesrna.c index 279cf91d4fb..2db45fcad53 100644 --- a/source/blender/makesrna/intern/makesrna.c +++ b/source/blender/makesrna/intern/makesrna.c @@ -54,8 +54,6 @@ void BLI_system_backtrace(FILE *fp) /* Replace if different */ #define TMP_EXT ".tmp" -#define MAX_SIGNATURE_LEN 2048 - /* copied from BLI_file_older */ #include static int file_older(const char *file1, const char *file2) @@ -653,14 +651,6 @@ static void rna_int_print(FILE *f, int64_t num) } } -static void print_global_function_signature(FILE *f, const char *format, const char *func_name) -{ - char signature[MAX_SIGNATURE_LEN]; - snprintf(signature, sizeof(signature), format, func_name); - fprintf(f, "%s;\n", signature); - fprintf(f, "%s\n", signature); -} - static char *rna_def_property_get_func( FILE *f, StructRNA *srna, PropertyRNA *prop, PropertyDefRNA *dp, const char *manualfunc) { @@ -751,8 +741,7 @@ static char *rna_def_property_get_func( case PROP_STRING: { StringPropertyRNA *sprop = (StringPropertyRNA *)prop; UNUSED_VARS_NDEBUG(sprop); - print_global_function_signature( - f, "RNA_EXTERN_C void %s(PointerRNA *ptr, char *value)", func); + fprintf(f, "RNA_EXTERN_C void %s(PointerRNA *ptr, char *value)\n", func); fprintf(f, "{\n"); if (manualfunc) { fprintf(f, " %s(ptr, value);\n", manualfunc); @@ -790,7 +779,7 @@ static char *rna_def_property_get_func( break; } case PROP_POINTER: { - print_global_function_signature(f, "RNA_EXTERN_C PointerRNA %s(PointerRNA *ptr)", func); + fprintf(f, "RNA_EXTERN_C PointerRNA %s(PointerRNA *ptr)\n", func); fprintf(f, "{\n"); if (manualfunc) { fprintf(f, " return %s(ptr);\n", manualfunc); @@ -839,24 +828,19 @@ static char *rna_def_property_get_func( } default: if (prop->arraydimension) { - char signature[MAX_SIGNATURE_LEN]; if (prop->flag & PROP_DYNAMIC) { - snprintf(signature, - sizeof(signature), - "RNA_EXTERN_C void %s(PointerRNA *ptr, %s values[])", - func, - rna_type_type(prop)); + fprintf(f, + "RNA_EXTERN_C void %s(PointerRNA *ptr, %s values[])\n", + func, + rna_type_type(prop)); } else { - snprintf(signature, - sizeof(signature), - "RNA_EXTERN_C void %s(PointerRNA *ptr, %s values[%u])", - func, - rna_type_type(prop), - prop->totarraylength); + fprintf(f, + "RNA_EXTERN_C void %s(PointerRNA *ptr, %s values[%u])\n", + func, + rna_type_type(prop), + prop->totarraylength); } - fprintf(f, "%s;\n", signature); - fprintf(f, "%s\n", signature); fprintf(f, "{\n"); if (manualfunc) { @@ -948,14 +932,7 @@ static char *rna_def_property_get_func( fprintf(f, "}\n\n"); } else { - char signature[MAX_SIGNATURE_LEN]; - snprintf(signature, - sizeof(signature), - "RNA_EXTERN_C %s %s(PointerRNA *ptr)", - rna_type_type(prop), - func); - fprintf(f, "%s;\n", signature); - fprintf(f, "%s\n", signature); + fprintf(f, "RNA_EXTERN_C %s %s(PointerRNA *ptr)\n", rna_type_type(prop), func); fprintf(f, "{\n"); if (manualfunc) { @@ -1039,7 +1016,6 @@ static void rna_clamp_value_range(FILE *f, PropertyRNA *prop) } #ifdef USE_RNA_RANGE_CHECK - static void rna_clamp_value_range_check(FILE *f, PropertyRNA *prop, const char *dnaname_prefix, @@ -1138,16 +1114,15 @@ static char *rna_def_property_search_func(FILE *f, func = rna_alloc_function_name(srna->identifier, rna_safe_id(prop->identifier), "search"); - print_global_function_signature(f, - "RNA_EXTERN_C void %s(" - "const bContext *C, " - "PointerRNA *ptr, " - "PropertyRNA *prop, " - "const char *edit_text, " - "StringPropertySearchVisitFunc visit_fn, " - "void *visit_user_data)", - func); - + fprintf(f, + "RNA_EXTERN_C void %s(" + "const bContext *C, " + "PointerRNA *ptr, " + "PropertyRNA *prop, " + "const char *edit_text, " + "StringPropertySearchVisitFunc visit_fn, " + "void *visit_user_data)\n", + func); fprintf(f, "{\n"); fprintf(f, "\n %s(C, ptr, prop, edit_text, visit_fn, visit_user_data);\n", manualfunc); fprintf(f, "}\n\n"); @@ -1181,8 +1156,7 @@ static char *rna_def_property_set_func( switch (prop->type) { case PROP_STRING: { StringPropertyRNA *sprop = (StringPropertyRNA *)prop; - print_global_function_signature( - f, "RNA_EXTERN_C void %s(PointerRNA *ptr, const char *value)", func); + fprintf(f, "RNA_EXTERN_C void %s(PointerRNA *ptr, const char *value)\n", func); fprintf(f, "{\n"); if (manualfunc) { fprintf(f, " %s(ptr, value);\n", manualfunc); @@ -1227,10 +1201,9 @@ static char *rna_def_property_set_func( break; } case PROP_POINTER: { - PointerPropertyRNA *pprop = (PointerPropertyRNA *)dp->prop; - print_global_function_signature( + fprintf( f, - "RNA_EXTERN_C void %s(PointerRNA *ptr, PointerRNA value, struct ReportList *reports)", + "RNA_EXTERN_C void %s(PointerRNA *ptr, PointerRNA value, struct ReportList *reports)\n", func); fprintf(f, "{\n"); if (manualfunc) { @@ -1255,6 +1228,7 @@ static char *rna_def_property_set_func( fprintf(f, " }\n"); } else { + PointerPropertyRNA *pprop = (PointerPropertyRNA *)dp->prop; StructRNA *type = (pprop->type) ? rna_find_struct((const char *)pprop->type) : NULL; if (type && (type->flag & STRUCT_ID)) { fprintf(f, " if (value.data) {\n"); @@ -1270,24 +1244,19 @@ static char *rna_def_property_set_func( } default: if (prop->arraydimension) { - char signature[MAX_SIGNATURE_LEN]; if (prop->flag & PROP_DYNAMIC) { - snprintf(signature, - sizeof(signature), - "RNA_EXTERN_C void %s(PointerRNA *ptr, const %s values[])", - func, - rna_type_type(prop)); + fprintf(f, + "RNA_EXTERN_C void %s(PointerRNA *ptr, const %s values[])\n", + func, + rna_type_type(prop)); } else { - snprintf(signature, - sizeof(signature), - "void %s(PointerRNA *ptr, const %s values[%u])", - func, - rna_type_type(prop), - prop->totarraylength); + fprintf(f, + "RNA_EXTERN_C void %s(PointerRNA *ptr, const %s values[%u])\n", + func, + rna_type_type(prop), + prop->totarraylength); } - fprintf(f, "%s;\n", signature); - fprintf(f, "%s\n", signature); fprintf(f, "{\n"); if (manualfunc) { @@ -1395,14 +1364,7 @@ static char *rna_def_property_set_func( fprintf(f, "}\n\n"); } else { - char signature[MAX_SIGNATURE_LEN]; - snprintf(signature, - sizeof(signature), - "RNA_EXTERN_C void %s(PointerRNA *ptr, %s value)", - func, - rna_type_type(prop)); - fprintf(f, "%s;\n", signature); - fprintf(f, "%s\n", signature); + fprintf(f, "RNA_EXTERN_C void %s(PointerRNA *ptr, %s value)\n", func, rna_type_type(prop)); fprintf(f, "{\n"); if (manualfunc) { @@ -1488,7 +1450,7 @@ static char *rna_def_property_length_func( func = rna_alloc_function_name(srna->identifier, rna_safe_id(prop->identifier), "length"); - print_global_function_signature(f, "RNA_EXTERN_C int %s(PointerRNA *ptr)", func); + fprintf(f, "RNA_EXTERN_C int %s(PointerRNA *ptr)\n", func); fprintf(f, "{\n"); if (manualfunc) { fprintf(f, " return %s(ptr);\n", manualfunc); @@ -1521,7 +1483,7 @@ static char *rna_def_property_length_func( func = rna_alloc_function_name(srna->identifier, rna_safe_id(prop->identifier), "length"); - print_global_function_signature(f, "RNA_EXTERN_C int %s(PointerRNA *ptr)", func); + fprintf(f, "RNA_EXTERN_C int %s(PointerRNA *ptr)\n", func); fprintf(f, "{\n"); if (manualfunc) { fprintf(f, " return %s(ptr);\n", manualfunc); @@ -1570,9 +1532,7 @@ static char *rna_def_property_begin_func( func = rna_alloc_function_name(srna->identifier, rna_safe_id(prop->identifier), "begin"); - print_global_function_signature( - f, "RNA_EXTERN_C void %s(CollectionPropertyIterator *iter, PointerRNA *ptr)", func); - + fprintf(f, "RNA_EXTERN_C void %s(CollectionPropertyIterator *iter, PointerRNA *ptr)\n", func); fprintf(f, "{\n"); if (!manualfunc) { @@ -1660,14 +1620,8 @@ static char *rna_def_property_lookup_int_func(FILE *f, } func = rna_alloc_function_name(srna->identifier, rna_safe_id(prop->identifier), "lookup_int"); - char signature[MAX_SIGNATURE_LEN]; - snprintf(signature, - sizeof(signature), - "RNA_EXTERN_C int %s(PointerRNA *ptr, int index, PointerRNA *r_ptr)", - func); - fprintf(f, "%s;\n", signature); - fprintf(f, "%s\n", signature); + fprintf(f, "RNA_EXTERN_C int %s(PointerRNA *ptr, int index, PointerRNA *r_ptr)\n", func); fprintf(f, "{\n"); if (manualfunc) { @@ -1825,8 +1779,7 @@ static char *rna_def_property_lookup_string_func(FILE *f, rna_safe_id(item_name_prop->identifier)); } - print_global_function_signature( - f, "RNA_EXTERN_C int %s(PointerRNA *ptr, const char *key, PointerRNA *r_ptr)", func); + fprintf(f, "RNA_EXTERN_C int %s(PointerRNA *ptr, const char *key, PointerRNA *r_ptr)\n", func); fprintf(f, "{\n"); if (manualfunc) { @@ -1904,8 +1857,7 @@ static char *rna_def_property_next_func(FILE *f, func = rna_alloc_function_name(srna->identifier, rna_safe_id(prop->identifier), "next"); - print_global_function_signature( - f, "RNA_EXTERN_C void %s(CollectionPropertyIterator *iter)", func); + fprintf(f, "RNA_EXTERN_C void %s(CollectionPropertyIterator *iter)\n", func); fprintf(f, "{\n"); fprintf(f, " %s(iter);\n", manualfunc); @@ -1934,8 +1886,7 @@ static char *rna_def_property_end_func(FILE *f, func = rna_alloc_function_name(srna->identifier, rna_safe_id(prop->identifier), "end"); - print_global_function_signature( - f, "RNA_EXTERN_C void %s(CollectionPropertyIterator *iter)", func); + fprintf(f, "RNA_EXTERN_C void %s(CollectionPropertyIterator *iter)\n", func); fprintf(f, "{\n"); if (manualfunc) { fprintf(f, " %s(iter);\n", manualfunc); @@ -2905,11 +2856,10 @@ static void rna_def_struct_function_impl_cpp(FILE *f, StructRNA *srna, FunctionD static void rna_def_property_wrapper_funcs(FILE *f, StructDefRNA *dsrna, PropertyDefRNA *dp) { if (dp->prop->getlength) { - char funcname[1024]; + char funcname[2048]; rna_construct_wrapper_function_name( funcname, sizeof(funcname), dsrna->srna->identifier, dp->prop->identifier, "get_length"); - print_global_function_signature( - f, "RNA_EXTERN_C int %s(PointerRNA *ptr, int *arraylen)", funcname); + fprintf(f, "RNA_EXTERN_C int %s(PointerRNA *ptr, int *arraylen)\n", funcname); fprintf(f, "{\n"); fprintf(f, "\treturn %s(ptr, arraylen);\n", rna_function_string(dp->prop->getlength)); fprintf(f, "}\n\n"); -- 2.30.2 From e68ad5ddeb82724dd2ba9bac4009478d1d436ee9 Mon Sep 17 00:00:00 2001 From: Jacques Lucke Date: Tue, 30 May 2023 10:49:04 +0200 Subject: [PATCH 18/22] cleanup --- source/blender/makesrna/intern/makesrna.c | 2 -- 1 file changed, 2 deletions(-) diff --git a/source/blender/makesrna/intern/makesrna.c b/source/blender/makesrna/intern/makesrna.c index 2db45fcad53..15c5dcd58ae 100644 --- a/source/blender/makesrna/intern/makesrna.c +++ b/source/blender/makesrna/intern/makesrna.c @@ -2883,8 +2883,6 @@ static void rna_def_function_wrapper_funcs(FILE *f, StructDefRNA *dsrna, Functio funcname, sizeof(funcname), srna->identifier, func->identifier, "func"); rna_generate_static_parameter_prototypes(f, srna, dfunc, funcname, 0); - fprintf(f, ";\n"); - rna_generate_static_parameter_prototypes(f, srna, dfunc, funcname, 0); fprintf(f, "\n{\n"); -- 2.30.2 From 000fe468f0da8886d2f1a3c30fb1ab9ff58b47fd Mon Sep 17 00:00:00 2001 From: Jacques Lucke Date: Tue, 30 May 2023 10:53:08 +0200 Subject: [PATCH 19/22] add extern "C" --- source/blender/makesrna/intern/makesrna.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/source/blender/makesrna/intern/makesrna.c b/source/blender/makesrna/intern/makesrna.c index 15c5dcd58ae..c76e9ce9179 100644 --- a/source/blender/makesrna/intern/makesrna.c +++ b/source/blender/makesrna/intern/makesrna.c @@ -3509,7 +3509,7 @@ static void rna_generate_internal_property_prototypes(BlenderRNA *UNUSED(brna), for (prop = base->cont.properties.first; prop; prop = prop->next) { fprintf(f, "%s%s rna_%s_%s;\n", - "extern ", + "RNA_EXTERN_C_OR_EXTERN ", rna_property_structname(prop->type), base->identifier, prop->identifier); @@ -4644,8 +4644,10 @@ static void rna_generate(BlenderRNA *brna, FILE *f, const char *filename, const fprintf(f, "\n"); fprintf(f, "#ifdef __cplusplus\n"); fprintf(f, "# define RNA_EXTERN_C extern \"C\"\n"); + fprintf(f, "# define RNA_EXTERN_C_OR_EXTERN extern \"C\"\n"); fprintf(f, "#else\n"); fprintf(f, "# define RNA_EXTERN_C\n"); + fprintf(f, "# define RNA_EXTERN_C_OR_EXTERN extern\n"); fprintf(f, "#endif\n"); /* we want the included C files to have warnings enabled but for the generated code -- 2.30.2 From 91657203a87747f035e45fd154e6a6309e862a56 Mon Sep 17 00:00:00 2001 From: Jacques Lucke Date: Tue, 30 May 2023 11:05:41 +0200 Subject: [PATCH 20/22] add changes from lukas --- source/blender/makesrna/intern/makesrna.c | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/source/blender/makesrna/intern/makesrna.c b/source/blender/makesrna/intern/makesrna.c index c76e9ce9179..0ebf57275fa 100644 --- a/source/blender/makesrna/intern/makesrna.c +++ b/source/blender/makesrna/intern/makesrna.c @@ -1171,7 +1171,8 @@ static char *rna_def_property_set_func( f, " if (data->%s != NULL) { MEM_freeN(data->%s); }\n", dp->dnaname, dp->dnaname); fprintf(f, " const int length = strlen(value);\n"); fprintf(f, " if (length > 0) {\n"); - fprintf(f, " data->%s = MEM_mallocN(length + 1, __func__);\n", dp->dnaname); + fprintf( + f, " data->%s = (char *)MEM_mallocN(length + 1, __func__);\n", dp->dnaname); fprintf(f, " memcpy(data->%s, value, length + 1);\n", dp->dnaname); fprintf(f, " } else { data->%s = NULL; }\n", dp->dnaname); } @@ -2882,6 +2883,7 @@ static void rna_def_function_wrapper_funcs(FILE *f, StructDefRNA *dsrna, Functio rna_construct_wrapper_function_name( funcname, sizeof(funcname), srna->identifier, func->identifier, "func"); + fprintf(f, "RNA_EXTERN_C "); rna_generate_static_parameter_prototypes(f, srna, dfunc, funcname, 0); fprintf(f, "\n{\n"); @@ -3034,7 +3036,7 @@ static void rna_def_function_funcs(FILE *f, StructDefRNA *dsrna, FunctionDefRNA rna_type_struct(dparm->prop), rna_parameter_type_name(dparm->prop), ptrstr, - dparm->prop->identifier); + rna_safe_id(dparm->prop->identifier)); } if (has_data) { @@ -3115,14 +3117,14 @@ static void rna_def_function_funcs(FILE *f, StructDefRNA *dsrna, FunctionDefRNA if (flag & PROP_DYNAMIC) { fprintf(f, "\t%s_len = %s((ParameterDynAlloc *)_data)->array_tot;\n", - dparm->prop->identifier, + rna_safe_id(dparm->prop->identifier), pout ? "(int *)&" : "(int)"); data_str = "(&(((ParameterDynAlloc *)_data)->array))"; } else { data_str = "_data"; } - fprintf(f, "\t%s = ", dparm->prop->identifier); + fprintf(f, "\t%s = ", rna_safe_id(dparm->prop->identifier)); if (!pout) { fprintf(f, "%s", valstr); @@ -3207,10 +3209,13 @@ static void rna_def_function_funcs(FILE *f, StructDefRNA *dsrna, FunctionDefRNA first = 0; if (dparm->prop->flag & PROP_DYNAMIC) { - fprintf(f, "%s_len, %s", dparm->prop->identifier, dparm->prop->identifier); + fprintf(f, + "%s_len, %s", + rna_safe_id(dparm->prop->identifier), + rna_safe_id(dparm->prop->identifier)); } else { - fprintf(f, "%s", dparm->prop->identifier); + fprintf(f, "%s", rna_safe_id(dparm->prop->identifier)); } } -- 2.30.2 From 72075bd454a98357c1cf152ff01ba39756ecd704 Mon Sep 17 00:00:00 2001 From: Jacques Lucke Date: Tue, 30 May 2023 11:45:47 +0200 Subject: [PATCH 21/22] add range check for c++ --- source/blender/makesrna/intern/makesrna.c | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/source/blender/makesrna/intern/makesrna.c b/source/blender/makesrna/intern/makesrna.c index 0ebf57275fa..117d2cba5e4 100644 --- a/source/blender/makesrna/intern/makesrna.c +++ b/source/blender/makesrna/intern/makesrna.c @@ -1023,14 +1023,17 @@ static void rna_clamp_value_range_check(FILE *f, { if (prop->type == PROP_INT) { IntPropertyRNA *iprop = (IntPropertyRNA *)prop; + fprintf(f, " {\n"); fprintf(f, "#ifdef __cplusplus\n"); - /* TODO: Add C++ check. */ + fprintf(f, " using T = decltype(%s%s);\n", dnaname_prefix, dnaname); + fprintf(f, " static_assert(std::numeric_limits::max() >= %d);\n", iprop->hardmax); + fprintf(f, " static_assert(std::numeric_limits::min() <= %d);\n", iprop->hardmin); fprintf(f, "#else\n"); fprintf(f, - " { BLI_STATIC_ASSERT(" + " BLI_STATIC_ASSERT(" "(TYPEOF_MAX(%s%s) >= %d) && " "(TYPEOF_MIN(%s%s) <= %d), " - "\"invalid limits\"); }\n", + "\"invalid limits\");\n", dnaname_prefix, dnaname, iprop->hardmax, @@ -1038,6 +1041,7 @@ static void rna_clamp_value_range_check(FILE *f, dnaname, iprop->hardmin); fprintf(f, "#endif\n"); + fprintf(f, " }\n"); } } #endif /* USE_RNA_RANGE_CHECK */ -- 2.30.2 From 1ccf5f9af2ec10aa4f0cfa8e53ca58db9c2665ea Mon Sep 17 00:00:00 2001 From: Jacques Lucke Date: Fri, 9 Jun 2023 11:41:53 +0200 Subject: [PATCH 22/22] quiet warning --- source/blender/makesrna/intern/rna_lattice.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/blender/makesrna/intern/rna_lattice.cc b/source/blender/makesrna/intern/rna_lattice.cc index 763f2a43e86..afa643f7727 100644 --- a/source/blender/makesrna/intern/rna_lattice.cc +++ b/source/blender/makesrna/intern/rna_lattice.cc @@ -175,7 +175,7 @@ static int rna_Lattice_size_editable(PointerRNA *ptr, const char ** /*r_info*/) { Lattice *lt = (Lattice *)ptr->data; - return (lt->key == NULL) ? PROP_EDITABLE : 0; + return (lt->key == NULL) ? int(PROP_EDITABLE) : 0; } static void rna_Lattice_points_u_set(PointerRNA *ptr, int value) -- 2.30.2