+
+
+$(SOURCE_DIR):
+ rm -rf $(SOURCE_DIR)
+ mkdir $(SOURCE_DIR)
+
+$(SOURCE_DIR)/firm_typedefs.h: $(FIRM_SOURCE_HEADERS)
+ mv firm_typedefs.h $@
+
+###############################################################################
+# Get all the necessary Firm headers.
+###############################################################################
+# Remove C preprocessor commands. Overwrite the header files.
+# This part should be removed if crecoder integrates the preprocessor.
+
+FIRM_SRC_HEADER=$(top_srcdir)/ir/$(filter %/$(notdir $@),$(FIRM_PATH_HEADERS))
+
+
+# recode: remove "a from C code...
+$(FIRM_SOURCE_DIR_HEADERS): $(SOURCE_DIR)
+ recode ISO-8859-1..ascii < $(FIRM_SRC_HEADER) > $(SOURCE_DIR)/$(notdir $@)
+ perl $(REMOVE_CPP_COMMANDS) $@
+
+# cp $(FIRM_SRC_HEADER) $(SOURCE_DIR)/$(notdir $@)
+# recode ISO-8859-1..ascii < $@ > $@.x
+# cp $@.x $@
+
+# generiert leere dateien ;-(
+# troff -a -C -z $(FIRM_SRC_HEADER) > $(SOURCE_DIR)/$(notdir $@)
+
+$(FIRM_HEADERS):$(FIRM_SOURCE_DIR_HEADERS) $(SOURCE_DIR)/firm_typedefs.h
+ gcc $(CPPFLAGS) -E -C -P $(SOURCE_DIR)/$@ -o $@
+
+###############################################################################
+# Call crecoder to construct from each header a .java file specifying the
+# java native interface. Further crecoder constructs an implementation of
+# the java native interface in C calling the real libfirm functions.
+# For a file "file.h" files "File.java" and "File.c" are generated.
+
+
+H_FROM_JAVA=$(subst .java,.h,$(shell echo $@|$(SHELL_TOLOWER)))
+
+%.java: $(FIRM_SOURCE_DIR_HEADERS) $(SOURCE_DIR)/firm_typedefs.h
+ gcc $(CPPFLAGS) -E -C -P $(SOURCE_DIR)/$(H_FROM_JAVA) -o $(H_FROM_JAVA)
+ env CLASSPATH=$(FIRM_JNI_TOOLS_DIR)/crecoder.jar:$$CLASSPATH java crecoder/tools/jniBuilder/BuildJNI $(H_FROM_JAVA);\
+ rm $(H_FROM_JAVA);
+# remove the patched header so that further compilation finds the proper firm headers