mirror of
https://git.savannah.gnu.org/git/guile.git
synced 2025-06-10 14:00:21 +02:00
stamp .go with timestamp of .scm; a fresh go has same mtime of .scm
* libguile/load.c (compiled_is_fresh): Rename from compiled_is_newer. Check that the mtines of the .go and .scm match exactly, so we don't get fooled by rsync-like modifications of the filesystem. * module/system/base/compile.scm (call-with-output-file/atomic): Add optional arg, a reference file. If present we utime the output file to match the source file, before the rename. (compile-file): Stamp the .go file with the timestamp of the .scm.
This commit is contained in:
parent
822aacbcf4
commit
535fb833b3
2 changed files with 10 additions and 6 deletions
|
@ -556,7 +556,7 @@ SCM_DEFINE (scm_sys_search_load_path, "%search-load-path", 1, 0, 0,
|
|||
|
||||
|
||||
static int
|
||||
compiled_is_newer (SCM full_filename, SCM compiled_filename)
|
||||
compiled_is_fresh (SCM full_filename, SCM compiled_filename)
|
||||
{
|
||||
char *source, *compiled;
|
||||
struct stat stat_source, stat_compiled;
|
||||
|
@ -567,7 +567,7 @@ compiled_is_newer (SCM full_filename, SCM compiled_filename)
|
|||
|
||||
if (stat (source, &stat_source) == 0
|
||||
&& stat (compiled, &stat_compiled) == 0
|
||||
&& stat_source.st_mtime <= stat_compiled.st_mtime)
|
||||
&& stat_source.st_mtime == stat_compiled.st_mtime)
|
||||
{
|
||||
res = 1;
|
||||
}
|
||||
|
@ -707,7 +707,7 @@ SCM_DEFINE (scm_primitive_load_path, "primitive-load-path", 1, 1, 0,
|
|||
|
||||
if (scm_is_false (full_filename)
|
||||
|| (scm_is_true (compiled_filename)
|
||||
&& compiled_is_newer (full_filename, compiled_filename)))
|
||||
&& compiled_is_fresh (full_filename, compiled_filename)))
|
||||
return scm_load_compiled_with_vm (compiled_filename);
|
||||
|
||||
/* Perhaps there was the installed .go that was stale, but our fallback is
|
||||
|
@ -723,7 +723,7 @@ SCM_DEFINE (scm_primitive_load_path, "primitive-load-path", 1, 1, 0,
|
|||
full_filename,
|
||||
scm_car (*scm_loc_load_compiled_extensions)));
|
||||
if (scm_is_true (scm_stat (fallback, SCM_BOOL_F))
|
||||
&& compiled_is_newer (full_filename, fallback))
|
||||
&& compiled_is_fresh (full_filename, fallback))
|
||||
{
|
||||
scm_puts (";;; found fresh local cache at ", scm_current_error_port ());
|
||||
scm_display (fallback, scm_current_error_port ());
|
||||
|
|
|
@ -73,7 +73,7 @@
|
|||
thunk
|
||||
(lambda () #t))))
|
||||
|
||||
(define (call-with-output-file/atomic filename proc)
|
||||
(define* (call-with-output-file/atomic filename proc #:optional reference)
|
||||
(let* ((template (string-append filename ".XXXXXX"))
|
||||
(tmp (mkstemp! template)))
|
||||
(call-once
|
||||
|
@ -83,6 +83,9 @@
|
|||
(proc tmp)
|
||||
(chmod tmp (logand #o0666 (lognot (umask))))
|
||||
(close-port tmp)
|
||||
(if reference
|
||||
(let ((st (stat reference)))
|
||||
(utime template (stat:atime st) (stat:mtime st))))
|
||||
(rename-file template filename))
|
||||
(lambda args
|
||||
(delete-file template)))))))
|
||||
|
@ -145,7 +148,8 @@
|
|||
(lambda (port)
|
||||
((language-printer (ensure-language to))
|
||||
(read-and-compile in #:env env #:from from #:to to #:opts opts)
|
||||
port)))
|
||||
port))
|
||||
file)
|
||||
comp))
|
||||
|
||||
(define* (compile-and-load file #:key (from 'scheme) (to 'value) (opts '()))
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue