]> git.ipfire.org Git - thirdparty/vala.git/commitdiff
vala: Keep depfile empty if no dependencies were written
authorVal Och <v19930312@gmail.com>
Sat, 2 Dec 2023 02:13:43 +0000 (02:13 +0000)
committerRico Tzschichholz <ricotz@ubuntu.com>
Sun, 28 Jan 2024 15:08:08 +0000 (16:08 +0100)
vala/valacodecontext.vala

index 0ac4bbdf8162abfc1e9b6a56fe5cbe969f8e28fe..5e6775846ddf2b677d34ad3cfbfc7f822d3c468b 100644 (file)
@@ -754,7 +754,10 @@ public class Vala.CodeContext {
                return null;
        }
 
-       public void write_dependencies (string filename) {
+       /*
+        * Create make-style depfile for use by build systems.
+        */
+       void write_depfile (string filename, List<string> deps) {
                var stream = FileStream.open (filename, "w");
 
                if (stream == null) {
@@ -762,36 +765,41 @@ public class Vala.CodeContext {
                        return;
                }
 
-               stream.printf ("%s:", filename);
+               bool first = true;
+               foreach (var dep in deps) {
+                       if (first) {
+                               first = false;
+                               stream.printf ("%s: ", filename);
+                       } else {
+                               stream.puts (" \\\n\t");
+                       }
+                       stream.printf ("%s", dep);
+               }
+               // Don't write newlines to otherwise empty files to work around
+               // https://github.com/ninja-build/ninja/issues/2357
+               if (!first) {
+                       stream.puts ("\n\n");
+               }
+       }
+
+       public void write_dependencies (string filename) {
+               List<string> fastvapi_files = new ArrayList<string> (str_equal);
                foreach (var src in source_files) {
                        if (src.file_type == SourceFileType.FAST && src.used) {
-                               stream.printf (" %s", src.filename);
+                               fastvapi_files.add (src.filename);
                        }
                }
-               stream.printf ("\n\n");
+               write_depfile (filename, fastvapi_files);
        }
 
        public void write_external_dependencies (string filename) {
-               var stream = FileStream.open (filename, "w");
-
-               if (stream == null) {
-                       Report.error (null, "unable to open `%s' for writing", filename);
-                       return;
-               }
-
-               bool first = true;
+               List<string> external_files = new ArrayList<string> (str_equal);
                foreach (var src in source_files) {
                        if (src.file_type != SourceFileType.SOURCE && src.used) {
-                               if (first) {
-                                       first = false;
-                                       stream.printf ("%s: ", filename);
-                               } else {
-                                       stream.puts (" \\\n\t");
-                               }
-                               stream.printf ("%s", src.filename);
+                               external_files.add (src.filename);
                        }
                }
-               stream.puts ("\n\n");
+               write_depfile (filename, external_files);
        }
 
        private static bool ends_with_dir_separator (string s) {