mirror of
				https://github.com/YosysHQ/yosys
				synced 2025-11-04 13:29:12 +00:00 
			
		
		
		
	escape spaces with backslash when writing dep file
filenames are sparated by spaces in the dep file. if a filename in the dep file contains spaces they must be escaped, otherwise the tool that reads the dep file will see multiple wrong filenames.
This commit is contained in:
		
							parent
							
								
									ea0e0722bb
								
							
						
					
					
						commit
						e531fb203a
					
				
					 3 changed files with 17 additions and 2 deletions
				
			
		| 
						 | 
					@ -529,13 +529,13 @@ int main(int argc, char **argv)
 | 
				
			||||||
			log_error("Can't open dependencies file for writing: %s\n", strerror(errno));
 | 
								log_error("Can't open dependencies file for writing: %s\n", strerror(errno));
 | 
				
			||||||
		bool first = true;
 | 
							bool first = true;
 | 
				
			||||||
		for (auto fn : yosys_output_files) {
 | 
							for (auto fn : yosys_output_files) {
 | 
				
			||||||
			fprintf(f, "%s%s", first ? "" : " ", fn.c_str());
 | 
								fprintf(f, "%s%s", first ? "" : " ", escape_filename_spaces (fn).c_str());
 | 
				
			||||||
			first = false;
 | 
								first = false;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		fprintf(f, ":");
 | 
							fprintf(f, ":");
 | 
				
			||||||
		for (auto fn : yosys_input_files) {
 | 
							for (auto fn : yosys_input_files) {
 | 
				
			||||||
			if (yosys_output_files.count(fn) == 0)
 | 
								if (yosys_output_files.count(fn) == 0)
 | 
				
			||||||
				fprintf(f, " %s", fn.c_str());
 | 
									fprintf(f, " %s", escape_filename_spaces (fn).c_str());
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		fprintf(f, "\n");
 | 
							fprintf(f, "\n");
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -482,6 +482,20 @@ void remove_directory(std::string dirname)
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					std::string escape_filename_spaces (const std::string& filename)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  std::string out;
 | 
				
			||||||
 | 
					  out.reserve (filename.size ());
 | 
				
			||||||
 | 
					  for (auto c : filename)
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    if (c == ' ')
 | 
				
			||||||
 | 
					      out += "\\ ";
 | 
				
			||||||
 | 
					    else
 | 
				
			||||||
 | 
					      out.push_back (c);
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  return out;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
int GetSize(RTLIL::Wire *wire)
 | 
					int GetSize(RTLIL::Wire *wire)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	return wire->width;
 | 
						return wire->width;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -257,6 +257,7 @@ std::string make_temp_dir(std::string template_str = "/tmp/yosys_XXXXXX");
 | 
				
			||||||
bool check_file_exists(std::string filename, bool is_exec = false);
 | 
					bool check_file_exists(std::string filename, bool is_exec = false);
 | 
				
			||||||
bool is_absolute_path(std::string filename);
 | 
					bool is_absolute_path(std::string filename);
 | 
				
			||||||
void remove_directory(std::string dirname);
 | 
					void remove_directory(std::string dirname);
 | 
				
			||||||
 | 
					std::string escape_filename_spaces (const std::string& filename);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
template<typename T> int GetSize(const T &obj) { return obj.size(); }
 | 
					template<typename T> int GetSize(const T &obj) { return obj.size(); }
 | 
				
			||||||
int GetSize(RTLIL::Wire *wire);
 | 
					int GetSize(RTLIL::Wire *wire);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue