v.util: accomodate reproducible build environments like guix, by not recompiling cmd/tools when mtime < 1024 (#7702)
							parent
							
								
									9f3dd6e18f
								
							
						
					
					
						commit
						64e7c54884
					
				| 
						 | 
					@ -179,7 +179,10 @@ pub fn should_recompile_tool(vexe string, tool_source string) bool {
 | 
				
			||||||
	if !os.exists(tool_exe) {
 | 
						if !os.exists(tool_exe) {
 | 
				
			||||||
		should_compile = true
 | 
							should_compile = true
 | 
				
			||||||
	} else {
 | 
						} else {
 | 
				
			||||||
		if os.file_last_mod_unix(tool_exe) <= os.file_last_mod_unix(vexe) {
 | 
							mtime_vexe := os.file_last_mod_unix(vexe)
 | 
				
			||||||
 | 
							mtime_tool_exe := os.file_last_mod_unix(tool_exe)
 | 
				
			||||||
 | 
							mtime_tool_source := os.file_last_mod_unix(tool_source)
 | 
				
			||||||
 | 
							if mtime_tool_exe <= mtime_vexe {
 | 
				
			||||||
			// v was recompiled, maybe after v up ...
 | 
								// v was recompiled, maybe after v up ...
 | 
				
			||||||
			// rebuild the tool too just in case
 | 
								// rebuild the tool too just in case
 | 
				
			||||||
			should_compile = true
 | 
								should_compile = true
 | 
				
			||||||
| 
						 | 
					@ -192,10 +195,19 @@ pub fn should_recompile_tool(vexe string, tool_source string) bool {
 | 
				
			||||||
				should_compile = false
 | 
									should_compile = false
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		if os.file_last_mod_unix(tool_exe) <= os.file_last_mod_unix(tool_source) {
 | 
							if mtime_tool_exe <= mtime_tool_source {
 | 
				
			||||||
			// the user changed the source code of the tool, or git updated it:
 | 
								// the user changed the source code of the tool, or git updated it:
 | 
				
			||||||
			should_compile = true
 | 
								should_compile = true
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
							// GNU Guix and possibly other environments, have bit for bit reproducibility in mind,
 | 
				
			||||||
 | 
							// including filesystem attributes like modification times, so they set the modification
 | 
				
			||||||
 | 
							// times of executables to a small number like 0, 1 etc. In this case, we should not
 | 
				
			||||||
 | 
							// recompile even if other heuristics say that we should. Users in such environments,
 | 
				
			||||||
 | 
							// have to explicitly do: `v cmd/tools/vfmt.v`, and/or install v from source, and not
 | 
				
			||||||
 | 
							// use the system packaged one, if they desire to develop v itself.
 | 
				
			||||||
 | 
							if mtime_vexe < 1024 && mtime_tool_exe < 1024 {
 | 
				
			||||||
 | 
								should_compile = false
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	return should_compile
 | 
						return should_compile
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue