[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [18417] branches/blender2.5/blender/source /blender/makesrna: RNA

Brecht Van Lommel brecht at blender.org
Thu Jan 8 14:57:29 CET 2009


Revision: 18417
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=18417
Author:   blendix
Date:     2009-01-08 14:57:29 +0100 (Thu, 08 Jan 2009)

Log Message:
-----------
RNA
* The generated code is now split into multiple files instead
  of a single big one. Scons, make and cmake are updated to
  deal with this.

Modified Paths:
--------------
    branches/blender2.5/blender/source/blender/makesrna/RNA_types.h
    branches/blender2.5/blender/source/blender/makesrna/intern/CMakeLists.txt
    branches/blender2.5/blender/source/blender/makesrna/intern/Makefile
    branches/blender2.5/blender/source/blender/makesrna/intern/SConscript
    branches/blender2.5/blender/source/blender/makesrna/intern/makesrna.c
    branches/blender2.5/blender/source/blender/makesrna/intern/rna_ID.c
    branches/blender2.5/blender/source/blender/makesrna/intern/rna_internal.h
    branches/blender2.5/blender/source/blender/makesrna/intern/rna_lattice.c
    branches/blender2.5/blender/source/blender/makesrna/intern/rna_meta.c
    branches/blender2.5/blender/source/blender/makesrna/intern/rna_modifier.c
    branches/blender2.5/blender/source/blender/makesrna/intern/rna_object.c
    branches/blender2.5/blender/source/blender/makesrna/intern/rna_rna.c
    branches/blender2.5/blender/source/blender/makesrna/intern/rna_scene.c
    branches/blender2.5/blender/source/blender/makesrna/intern/rna_text.c

Modified: branches/blender2.5/blender/source/blender/makesrna/RNA_types.h
===================================================================
--- branches/blender2.5/blender/source/blender/makesrna/RNA_types.h	2009-01-08 13:54:39 UTC (rev 18416)
+++ branches/blender2.5/blender/source/blender/makesrna/RNA_types.h	2009-01-08 13:57:29 UTC (rev 18417)
@@ -132,7 +132,8 @@
 	STRUCT_ID = 1,
 
 	/* internal flags */
-	STRUCT_RUNTIME = 2
+	STRUCT_RUNTIME = 2,
+	STRUCT_GENERATED = 4
 } StructFlag;
 
 typedef struct StructRNA StructRNA;

Modified: branches/blender2.5/blender/source/blender/makesrna/intern/CMakeLists.txt
===================================================================
--- branches/blender2.5/blender/source/blender/makesrna/intern/CMakeLists.txt	2009-01-08 13:54:39 UTC (rev 18416)
+++ branches/blender2.5/blender/source/blender/makesrna/intern/CMakeLists.txt	2009-01-08 13:57:29 UTC (rev 18417)
@@ -24,8 +24,7 @@
 #
 # ***** END GPL LICENSE BLOCK *****
 
-SET(SRC
-     makesrna.c
+SET(DEFSRC
      rna_action.c
      rna_actuator.c
      rna_armature.c
@@ -36,7 +35,6 @@
      rna_constraint.c
      rna_controller.c
      rna_curve.c
-     rna_define.c
      rna_fluidsim.c
      rna_group.c
      rna_ID.c
@@ -70,7 +68,58 @@
      rna_userdef.c
      rna_vfont.c
      rna_wm.c
-     rna_world.c
+     rna_world.c)
+
+SET(GENSRC
+     rna_action_gen.c
+     rna_actuator_gen.c
+     rna_armature_gen.c
+     rna_brush_gen.c
+     rna_camera_gen.c
+     rna_cloth_gen.c
+     rna_color_gen.c
+     rna_constraint_gen.c
+     rna_controller_gen.c
+     rna_curve_gen.c
+     rna_fluidsim_gen.c
+     rna_group_gen.c
+     rna_ID_gen.c
+     rna_image_gen.c
+     rna_ipo_gen.c
+     rna_key_gen.c
+     rna_lamp_gen.c
+     rna_lattice_gen.c
+     rna_main_gen.c
+     rna_material_gen.c
+     rna_mesh_gen.c
+     rna_meta_gen.c
+     rna_modifier_gen.c
+     rna_nodetree_gen.c
+     rna_object_gen.c
+     rna_object_force_gen.c
+     rna_packedfile_gen.c
+     rna_particle_gen.c
+     rna_pose_gen.c
+     rna_property_gen.c
+     rna_radio_gen.c
+     rna_rna_gen.c
+     rna_scene_gen.c
+     rna_screen_gen.c
+     rna_scriptlink_gen.c
+     rna_sensor_gen.c
+     rna_sequence_gen.c
+     rna_sound_gen.c
+     rna_text_gen.c
+     rna_texture_gen.c
+     rna_userdef_gen.c
+     rna_vfont_gen.c
+     rna_wm_gen.c
+     rna_world_gen.c)
+
+SET(SRC
+     makesrna.c
+     rna_define.c
+     ${DEFSRC}
      ../../../../intern/guardedalloc/intern/mallocn.c
      ../../../../intern/guardedalloc/intern/mmap_win.c)
 
@@ -81,15 +130,16 @@
 ADD_EXECUTABLE(makesrna ${SRC} ${INC_FILES})
 TARGET_LINK_LIBRARIES(makesrna bf_dna)
 
-# Output rna.c
+# Output rna_*_gen.c
 ADD_CUSTOM_COMMAND(
-  OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/rna.c
-  COMMAND ${CMAKE_BINARY_DIR}/bin/${CMAKE_CFG_INTDIR}/makesrna ${CMAKE_CURRENT_BINARY_DIR}/rna.c ${CMAKE_SOURCE_DIR}/source/blender/makesrna/
+  OUTPUT ${GENSRC}
+  COMMAND ${CMAKE_BINARY_DIR}/bin/${CMAKE_CFG_INTDIR}/makesrna ${CMAKE_CURRENT_BINARY_DIR}/ ${CMAKE_SOURCE_DIR}/source/blender/makesrna/
   DEPENDS makesrna
 )
 
 # Build bf_rna
-SET(SRC rna_access.c rna_dependency.c rna.c)
+SET(SRC rna_access.c rna_dependency.c ${GENSRC})
 BLENDERLIB(bf_rna "${SRC}" "${INC}")
 
 MESSAGE(STATUS "Configuring makesrna")
+

Modified: branches/blender2.5/blender/source/blender/makesrna/intern/Makefile
===================================================================
--- branches/blender2.5/blender/source/blender/makesrna/intern/Makefile	2009-01-08 13:54:39 UTC (rev 18416)
+++ branches/blender2.5/blender/source/blender/makesrna/intern/Makefile	2009-01-08 13:57:29 UTC (rev 18417)
@@ -24,8 +24,18 @@
 
 LIBNAME = rna
 DIR = $(OCGDIR)/blender/makesrna
-CSRCS = RNA.c $(wildcard rna_*.c)
 
+ALLRNA = $(wildcard rna_*.c)
+DEFRNA = $(filter-out %rna_define.c, $(filter-out %rna_dependency.c, $(filter-out %rna_access.c, $(ALLRNA))))
+
+GENSRCS = $(patsubst rna_%.c, rna_%_gen.c, $(DEFRNA))
+GENTARGET = $(patsubst %.c, $(DIR)/$(DEBUG_DIR)%.c, $(GENSRCS))
+
+MAKESRCS = $(DEFRNA) makesrna.c rna_define.c
+MAKEOBJS = $(patsubst %.c, $(DIR)/$(DEBUG_DIR)%.o, $(MAKESRCS))
+
+CSRCS = $(GENSRCS) rna_access.c rna_dependency.c
+
 include nan_compile.mk
 
 CFLAGS += $(LEVEL_1_C_WARNINGS)
@@ -53,8 +63,8 @@
 endif
 
 clean::
-	@$(RM) $(DIR)/makesrna* $(DIR)/RNA.c
-	@$(RM) $(DIR)/debug/makesrna* $(DIR)/debug/RNA.c
+	@$(RM) $(DIR)/makesrna* $(DIR)/rna*
+	@$(RM) $(DIR)/debug/makesrna* $(DIR)/debug/rna*
 
 # TODO include right .mk for ldflags
 
@@ -62,19 +72,20 @@
 # is done quite intentionally. If there is a bug in that lib, it needs
 # to be fixed by the module maintainer.
 
-RNAOBJS = $(filter-out %rna_dependency.o, $(filter-out %rna_access.o, $(filter-out %RNA.o, $(OBJS))))
-
-$(DIR)/$(DEBUG_DIR)makesrna: $(RNAOBJS) $(DIR)/$(DEBUG_DIR)makesrna.o $(OCGDIR)/blender/makesdna/$(DEBUG_DIR)libdna.a $(NAN_GUARDEDALLOC)/lib/libguardedalloc.a
+$(DIR)/$(DEBUG_DIR)makesrna: $(MAKEOBJS) $(OCGDIR)/blender/makesdna/$(DEBUG_DIR)libdna.a $(NAN_GUARDEDALLOC)/lib/libguardedalloc.a
 	$(CC) $(LDFLAGS) -o $@ $(WINLIBS) $^
 
-$(DIR)/$(DEBUG_DIR)RNA.c: $(DIR)/$(DEBUG_DIR)makesrna
+$(DIR)/$(DEBUG_DIR)rna_phony_gen.c: $(DIR)/$(DEBUG_DIR)makesrna
     ifeq ($(OS),windows)
 	$(SRCHOME)/tools/cygwin/cl_wrapper.pl - $(DIR)/$(DEBUG_DIR)makesrna \
-	    $(DIR)/$(DEBUG_DIR)RNA.c
+	    $(DIR)/$(DEBUG_DIR)
     else
-	$(DIR)/$(DEBUG_DIR)makesrna $(DIR)/$(DEBUG_DIR)RNA.c
+	$(DIR)/$(DEBUG_DIR)makesrna $(DIR)/$(DEBUG_DIR)
     endif
+	@touch $@
 
+$(GENTARGET): $(DIR)/$(DEBUG_DIR)rna_phony_gen.c
+
 $(DIR)/$(DEBUG_DIR)makesrna.o: makesrna.c $(wildcard rna_*.c)
 	$(CC) -c $(CFLAGS) $(CPPFLAGS) makesrna.c -o $@
 

Modified: branches/blender2.5/blender/source/blender/makesrna/intern/SConscript
===================================================================
--- branches/blender2.5/blender/source/blender/makesrna/intern/SConscript	2009-01-08 13:54:39 UTC (rev 18416)
+++ branches/blender2.5/blender/source/blender/makesrna/intern/SConscript	2009-01-08 13:57:29 UTC (rev 18417)
@@ -14,6 +14,12 @@
 source_files.remove('rna_access.c')
 source_files.remove('rna_dependency.c')
 
+generated_files = source_files[:]
+generated_files.remove('rna_define.c')
+generated_files.remove('makesrna.c')
+
+generated_files = [filename[:-2] + '_gen.c' for filename in generated_files]
+
 makesrna_tool = env.Clone()
 rna = env.Clone()
 makesrna_tool.Append(CCFLAGS = '-DBASE_HEADER="\\"source/blender/makesrna/\\"" ')
@@ -59,11 +65,19 @@
     makesrna = makesrna_tool.Program (target = targetpath, source = source_files, LIBS=['bf_guardedalloc', 'bf_dna'])
 
 rna_dict = rna.Dictionary()
-rna.Depends ('rna.c', makesrna)
+rna.Depends (generated_files, makesrna)
+
+# this seems bad, how to retrieve it from scons?
+build_dir = root_build_dir + '/source/blender/makesrna/intern/'
+
 if env['OURPLATFORM'] != 'linuxcross':
-    rna.Command ('rna.c', '', root_build_dir+os.sep+"makesrna $TARGET")
+    rna.Command (generated_files, '', root_build_dir+os.sep+"makesrna " + build_dir)
 else:
-    rna.Command ('rna.c', '', root_build_dir+os.sep+"makesrna.exe $TARGET")
-obj = ['intern/rna.c', 'intern/rna_access.c', 'intern/rna_dependency.c']
+    rna.Command (generated_files, '', root_build_dir+os.sep+"makesrna.exe "  + build_dir)
+
+obj = ['intern/rna_access.c', 'intern/rna_dependency.c']
+for generated_file in generated_files:
+	obj += ['intern/' + generated_file]
+
 Return ('obj')
 

Modified: branches/blender2.5/blender/source/blender/makesrna/intern/makesrna.c
===================================================================
--- branches/blender2.5/blender/source/blender/makesrna/intern/makesrna.c	2009-01-08 13:54:39 UTC (rev 18416)
+++ branches/blender2.5/blender/source/blender/makesrna/intern/makesrna.c	2009-01-08 13:57:29 UTC (rev 18417)
@@ -598,18 +598,6 @@
 	}
 }
 
-static void rna_auto_functions(FILE *f)
-{
-	StructDefRNA *ds;
-	PropertyDefRNA *dp;
-
-	fprintf(f, "/* Autogenerated Functions */\n\n");
-
-	for(ds=DefRNA.structs.first; ds; ds=ds->next)
-		for(dp=ds->properties.first; dp; dp=dp->next)
-			rna_def_property_funcs(f, dp);
-}
-
 static void rna_sort(BlenderRNA *brna)
 {
 	StructRNA *srna;
@@ -668,9 +656,14 @@
 	StructRNA *srna;
 
 	for(srna=brna->structs.first; srna; srna=srna->next)
-		fprintf(f, "StructRNA RNA_%s;\n", srna->identifier);
+		fprintf(f, "extern StructRNA RNA_%s;\n", srna->identifier);
 	fprintf(f, "\n");
+}
 
+static void rna_generate_blender(BlenderRNA *brna, FILE *f)
+{
+	StructRNA *srna;
+
 	fprintf(f, "BlenderRNA BLENDER_RNA = {");
 
 	srna= brna->structs.first;
@@ -957,18 +950,15 @@
 	{"rna_world.c", RNA_def_world},	
 	{NULL, NULL}};
 
-static int rna_preprocess(char *basedirectory, FILE *f)
+static void rna_generate(BlenderRNA *brna, char *basedirectory, FILE *f, char *filename)
 {
-	BlenderRNA *brna;
-	StructRNA *srna;
-	int i, status;
+	StructDefRNA *ds;
+	PropertyDefRNA *dp;
 	
 	fprintf(f, "\n/* Automatically generated struct definitions for the Data API.\n"
 	                "   Do not edit manually, changes will be overwritten */\n\n"
 	                "#define RNA_RUNTIME\n\n");
 
-	brna= RNA_create();
-
 	fprintf(f, "#include <float.h>\n");
 	fprintf(f, "#include <limits.h>\n");
 	fprintf(f, "#include <string.h>\n\n");
@@ -981,82 +971,119 @@
 	fprintf(f, "#include \"RNA_types.h\"\n");
 	fprintf(f, "#include \"rna_internal.h\"\n\n");
 
-	/* this is ugly, but we cannot have c files compiled for both
-	 * makesrna and blender with some build systems at the moment */
-	fprintf(f, "#include \"rna_define.c\"\n\n");
+	rna_generate_prototypes(brna, f);
 
-	for(i=0; PROCESS_ITEMS[i].filename; i++)
-		if(PROCESS_ITEMS[i].define)
+	fprintf(f, "#include \"%s\"\n\n", filename);
+
+	fprintf(f, "/* Autogenerated Functions */\n\n");
+
+	for(ds=DefRNA.structs.first; ds; ds=ds->next)
+		if(!filename || ds->filename == filename)
+			for(dp=ds->properties.first; dp; dp=dp->next)
+				rna_def_property_funcs(f, dp);
+
+	for(ds=DefRNA.structs.first; ds; ds=ds->next)
+		if(!filename || ds->filename == filename)
+			rna_generate_struct(brna, ds->srna, f);
+
+	if(strcmp(filename, "rna_ID.c") == 0) {
+		/* this is ugly, but we cannot have c files compiled for both
+		 * makesrna and blender with some build systems at the moment */
+		fprintf(f, "#include \"rna_define.c\"\n\n");
+
+		rna_generate_blender(brna, f);
+	}
+}
+
+static void make_bad_file(char *file)
+{
+	FILE *fp= fopen(file, "w");
+	fprintf(fp, "ERROR! Cannot make correct RNA file, STUPID!\n");
+	fclose(fp);
+}
+
+static int rna_preprocess(char *basedirectory, char *outfile)
+{

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list