[vala/0.10-parallel: 33/46] valac: Output make-style dependency file
- From: Jürg Billeter <juergbi src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [vala/0.10-parallel: 33/46] valac: Output make-style dependency file
- Date: Fri, 10 Sep 2010 16:16:40 +0000 (UTC)
commit 3e4ded83880a113d9ecee86ae84d5bff6003c0e2
Author: Ryan Lortie <desrt desrt ca>
Date: Wed Aug 25 16:10:30 2010 +0200
valac: Output make-style dependency file
Add a --deps= option to the compiler to write out a make-style
dependency file. The name of the target used is the name of the
dependency file itself.
This lets the dependency file serve as a stamp for the C file (which may
or may not be touched depending if it was changed). The dependency
output is always touched.
compiler/valacompiler.vala | 6 ++++++
vala/valacodecontext.vala | 17 +++++++++++++++++
vala/valasourcefile.vala | 6 ++++++
vala/valasymbol.vala | 11 ++++++++++-
vala/valasymbolresolver.vala | 2 ++
5 files changed, 41 insertions(+), 1 deletions(-)
---
diff --git a/compiler/valacompiler.vala b/compiler/valacompiler.vala
index bedfb86..39a71bf 100644
--- a/compiler/valacompiler.vala
+++ b/compiler/valacompiler.vala
@@ -76,6 +76,7 @@ class Vala.Compiler {
static bool enable_version_header;
static bool disable_version_header;
static bool fatal_warnings;
+ static string dependencies;
static string entry_point;
@@ -101,6 +102,7 @@ class Vala.Compiler {
{ "internal-vapi", 0, 0, OptionArg.FILENAME, ref internal_vapi_filename, "Output vapi with internal api", "FILE" },
{ "fast-vapi", 0, 0, OptionArg.STRING, ref fast_vapi_filename, "Output vapi without performing symbol resolution", null },
{ "use-fast-vapi", 0, 0, OptionArg.STRING_ARRAY, ref fast_vapis, "Use --fast-vapi output during this compile", null },
+ { "deps", 0, 0, OptionArg.STRING, ref dependencies, "Write make-style dependency information to this file", null },
{ "symbols", 0, 0, OptionArg.FILENAME, ref symbols_filename, "Output symbols file", "FILE" },
{ "compile", 'c', 0, OptionArg.NONE, ref compile_only, "Compile but do not link", null },
{ "output", 'o', 0, OptionArg.FILENAME, ref output, "Place output in file FILE", "FILE" },
@@ -545,6 +547,10 @@ class Vala.Compiler {
internal_vapi_filename = null;
}
+ if (dependencies != null) {
+ context.write_dependencies (dependencies);
+ }
+
if (!ccode_only) {
var ccompiler = new CCodeCompiler ();
if (cc_command == null && Environment.get_variable ("CC") != null) {
diff --git a/vala/valacodecontext.vala b/vala/valacodecontext.vala
index 476142c..38e01e3 100644
--- a/vala/valacodecontext.vala
+++ b/vala/valacodecontext.vala
@@ -362,4 +362,21 @@ public class Vala.CodeContext {
return null;
}
+
+ public void write_dependencies (string filename) {
+ var stream = FileStream.open (filename, "w");
+
+ if (stream == null) {
+ Report.error (null, "unable to open `%s' for writing".printf (filename));
+ return;
+ }
+
+ stream.printf ("%s:", filename);
+ foreach (var src in source_files) {
+ if (src.file_type == SourceFileType.FAST && src.used) {
+ stream.printf (" %s", src.filename);
+ }
+ }
+ stream.printf ("\n\n");
+ }
}
diff --git a/vala/valasourcefile.vala b/vala/valasourcefile.vala
index 15c3a6b..28397cf 100644
--- a/vala/valasourcefile.vala
+++ b/vala/valasourcefile.vala
@@ -67,6 +67,12 @@ public class Vala.SourceFile {
}
}
+ /**
+ * If the file has been used (ie: if anything in the file has
+ * been found by symbol resolution).
+ */
+ public bool used { get; set; }
+
private ArrayList<Comment> comments = new ArrayList<Comment> ();
public List<UsingDirective> current_using_directives { get; set; default = new ArrayList<UsingDirective> (); }
diff --git a/vala/valasymbol.vala b/vala/valasymbol.vala
index e6e0137..ad70f35 100644
--- a/vala/valasymbol.vala
+++ b/vala/valasymbol.vala
@@ -85,7 +85,16 @@ public abstract class Vala.Symbol : CodeNode {
/**
* Specifies whether this symbol has been accessed.
*/
- public bool used { get; set; }
+ public bool used {
+ get { return _used; }
+ set {
+ _used = value;
+ if (_used && source_reference != null) {
+ source_reference.file.used = true;
+ }
+ }
+ }
+ bool _used;
/**
* Specifies the accessibility of this symbol. Public accessibility
diff --git a/vala/valasymbolresolver.vala b/vala/valasymbolresolver.vala
index 026d6ea..ef61c36 100644
--- a/vala/valasymbolresolver.vala
+++ b/vala/valasymbolresolver.vala
@@ -271,6 +271,7 @@ public class Vala.SymbolResolver : CodeVisitor {
Report.error (unresolved_symbol.inner.source_reference, "The symbol `%s' could not be found".printf (unresolved_symbol.inner.name));
return null;
}
+ parent_symbol.used = true;
return parent_symbol.scope.lookup (unresolved_symbol.name);
}
@@ -354,6 +355,7 @@ public class Vala.SymbolResolver : CodeVisitor {
type.source_reference = unresolved_type.source_reference;
type.value_owned = unresolved_type.value_owned;
+ sym.used = true;
if (type is GenericType) {
// type parameters are always considered nullable
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]