Merge: doc: fixed some typos and other misc. corrections
[nit.git] / src / c_tools.nit
index e265a2e..61c1f9c 100644 (file)
@@ -47,33 +47,37 @@ class CCompilationUnit
        # files to compile TODO check is appropriate
        var files = new Array[String]
 
-       fun add_local_function( efc : CFunction )
+       # Add a `static` `c_function` to be strictly local to this unit
+       fun add_local_function(c_function: CFunction)
        do
-               body_decl.add( "{efc.signature};\n" )
-               body_impl.add( "\n" )
-               body_impl.add( efc.to_writer )
+               body_decl.add "static {c_function.signature};\n"
+               body_impl.add "\n"
+               body_impl.add c_function.to_writer
        end
 
-       fun add_exported_function( efc : CFunction )
+       # Add a public `c_function` accessible from outside this compilation unit
+       fun add_exported_function(c_function: CFunction)
        do
-               header_decl.add( "{efc.signature};\n" )
-               body_impl.add( "\n" )
-               body_impl.add( efc.to_writer )
+               body_decl.add "{c_function.signature};\n"
+               body_impl.add "\n"
+               body_impl.add c_function.to_writer
        end
 
-       fun compile_header_core( stream : OStream )
+       # Write the core of the header to `stream`
+       fun compile_header_core(stream: Writer)
        do
-               header_c_base.write_to( stream )
-               header_custom.write_to( stream )
-               header_c_types.write_to( stream )
-               header_decl.write_to( stream )
+               header_c_base.write_to stream
+               header_custom.write_to stream
+               header_c_types.write_to stream
+               header_decl.write_to stream
        end
 
-       fun compile_body_core( stream : OStream )
+       # Write the core of the body to `stream`
+       fun compile_body_core(stream: Writer)
        do
-               body_decl.write_to( stream )
-               body_custom.write_to( stream )
-               body_impl.write_to( stream )
+               body_decl.write_to stream
+               body_custom.write_to stream
+               body_impl.write_to stream
        end
 end
 
@@ -101,7 +105,8 @@ end
 
 # An extern file to compile
 class ExternFile
-       # The filename of the file
+
+       # Filename relative to the nit-compile folder
        var filename: String
 
        # The name of the target in the Makefile
@@ -114,14 +119,19 @@ class ExternFile
 
        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
 
-       # Additionnal specific CC compiler -c flags
+       # Custom options for the C compiler (CFLAGS)
        var cflags: String
 
        redef fun hash do return filename.hash
@@ -134,9 +144,13 @@ class ExternCFile
        end
 
        redef fun makefile_rule_content do
-               var ff = filename.basename("")
+               var ff = filename.basename
                var o = makefile_rule_name
-               return "$(CC) $(CFLAGS) {self.cflags} -c -o {o} {ff}"
+               var pkg = ""
+               if not pkgconfigs.is_empty then
+                       pkg = "`pkg-config --cflags {pkgconfigs.join(" ")}`"
+               end
+               return "$(CC) $(CFLAGS) -Wall -Wno-unused-function {self.cflags} {pkg} -c -o {o} {ff}"
        end
 
        redef fun compiles_to_o_file do return true