contrib/jwrapper: rename `NitModule::value` to `name`
[nit.git] / src / c_tools.nit
index 5d9c634..b835f2a 100644 (file)
@@ -49,9 +49,9 @@ class CCompilationUnit
 
        fun add_local_function( efc : CFunction )
        do
-               body_decl.add( "{efc.signature};\n" )
-               body_impl.add( "\n" )
-               body_impl.add( efc.to_writer )
+               body_decl.add "static {efc.signature};\n"
+               body_impl.add "\n"
+               body_impl.add efc.to_writer
        end
 
        fun add_exported_function( efc : CFunction )
@@ -98,3 +98,55 @@ class CFunction
                return w
        end
 end
+
+# An extern file to compile
+class ExternFile
+       # The filename of the file
+       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
+
+       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
+
+       # Additional specific CC compiler -c flags
+       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
+       end
+
+       redef fun makefile_rule_content do
+               var ff = filename.basename("")
+               var o = makefile_rule_name
+               var pkg = ""
+               if not pkgconfigs.is_empty then
+                       pkg = "`pkg-config --cflags {pkgconfigs.join(" ")}`"
+               end
+               return "$(CC) $(CFLAGS) {self.cflags} {pkg} -c -o {o} {ff}"
+       end
+
+       redef fun compiles_to_o_file do return true
+end
+