+ # Filename relative to the nit-compile folder
+ var filename: String
+
+ # The name of the target in the Makefile
+ # Usually the produced .o file
+ fun makefile_rule_name: String is abstract
+
+ # The content of the rule in the make
+ # Usually the one-line shell command after the tabulation
+ fun makefile_rule_content: String is abstract
+
+ fun compiles_to_o_file: Bool do return false
+
+ # Is `self` a Java file to include in the JAR archive?
+ fun add_to_jar: Bool do return false
+
+ # Additional libraries needed for the compilation
+ # Will be used with pkg-config
+ var pkgconfigs = new Array[String]
+end
+
+# An extern C file to compile
+class ExternCFile
+ super ExternFile
+
+ # Custom options for the C compiler (CFLAGS)
+ var cflags: String
+
+ redef fun hash do return filename.hash
+ redef fun ==(o) do return o isa ExternCFile and filename == o.filename
+
+ redef fun makefile_rule_name do
+ var basename = filename.basename(".c")
+ var res = "{basename}.extern.o"
+ return res