guile-commits
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Guile-commits] GNU Guile branch, stable-2.0, updated. v2.0.1-143-g6934d


From: Andy Wingo
Subject: [Guile-commits] GNU Guile branch, stable-2.0, updated. v2.0.1-143-g6934d9e
Date: Thu, 30 Jun 2011 14:07:29 +0000

This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "GNU Guile".

http://git.savannah.gnu.org/cgit/guile.git/commit/?id=6934d9e75fde9c880b39faa19237b041495c8531

The branch, stable-2.0 has been updated
       via  6934d9e75fde9c880b39faa19237b041495c8531 (commit)
      from  94906b754120343f1e767d2feadc2be5666c70ed (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
commit 6934d9e75fde9c880b39faa19237b041495c8531
Author: Andy Wingo <address@hidden>
Date:   Thu Jun 30 16:07:17 2011 +0200

    fix generation of auto-compiled file names on mingw systems
    
    * libguile/load.c (canonical_to_suffix, scm_primitive_load_path):
    * module/ice-9/boot-9.scm (load-in-vicinity):
    * module/system/base/compile.scm (compiled-file-name): If the canonical
      path of a file is a DOS-style path with a drive letter, turn it into a
      path suffix it by removing the colon and prefixing a "/".
    
    Inspired by a patch from Jan Nieuwenhuizen.

-----------------------------------------------------------------------

Summary of changes:
 libguile/load.c                |   20 ++++++++++++++++++--
 module/ice-9/boot-9.scm        |   14 ++++++++++++--
 module/system/base/compile.scm |   14 +++++++++++---
 3 files changed, 41 insertions(+), 7 deletions(-)

diff --git a/libguile/load.c b/libguile/load.c
index 3b6ba2b..91309bb 100644
--- a/libguile/load.c
+++ b/libguile/load.c
@@ -793,6 +793,22 @@ scm_try_auto_compile (SCM source)
                       NULL, NULL);
 }
 
+/* See also (system base compile):compiled-file-name. */
+static SCM
+canonical_to_suffix (SCM canon)
+{
+  size_t len = scm_c_string_length (canon);
+  
+  if (len > 1 && scm_is_eq (scm_c_string_ref (canon, 0), SCM_MAKE_CHAR ('/')))
+    return canon;
+  else if (len > 2 && scm_is_eq (scm_c_string_ref (canon, 1), SCM_MAKE_CHAR 
(':')))
+    return scm_string_append (scm_list_3 (scm_from_latin1_string ("/"),
+                                          scm_c_substring (canon, 0, 1),
+                                          scm_c_substring (canon, 2, len)));
+  else
+    return canon;
+}
+
 SCM_DEFINE (scm_primitive_load_path, "primitive-load-path", 0, 0, 1,
            (SCM args),
            "Search @var{%load-path} for the file named @var{filename} and\n"
@@ -857,7 +873,7 @@ SCM_DEFINE (scm_primitive_load_path, "primitive-load-path", 
0, 0, 1,
     {
       SCM fallback = scm_string_append
         (scm_list_3 (*scm_loc_compile_fallback_path,
-                     full_filename,
+                     canonical_to_suffix (full_filename),
                      scm_car (*scm_loc_load_compiled_extensions)));
       if (scm_is_true (scm_stat (fallback, SCM_BOOL_F)))
         {
@@ -895,7 +911,7 @@ SCM_DEFINE (scm_primitive_load_path, "primitive-load-path", 
0, 0, 1,
     {
       SCM fallback = scm_string_append
         (scm_list_3 (*scm_loc_compile_fallback_path,
-                     full_filename,
+                     canonical_to_suffix (full_filename),
                      scm_car (*scm_loc_load_compiled_extensions)));
       if (scm_is_true (scm_stat (fallback, SCM_BOOL_F))
           && compiled_is_fresh (full_filename, fallback))
diff --git a/module/ice-9/boot-9.scm b/module/ice-9/boot-9.scm
index 24f63f5..1ddb0ff 100644
--- a/module/ice-9/boot-9.scm
+++ b/module/ice-9/boot-9.scm
@@ -3450,6 +3450,15 @@ module '(ice-9 q) '(make-q q-length))}."
   '(#:warnings (unbound-variable arity-mismatch format)))
 
 (define* (load-in-vicinity dir path #:optional reader)
+  (define (canonical->suffix canon)
+    (cond
+     ((string-prefix? "/" canon) canon)
+     ((and (> (string-length canon) 2)
+           (eqv? (string-ref canon 1) #\:))
+      ;; Paths like C:... transform to /C...
+      (string-append "/" (substring canon 0 1) (substring canon 2)))
+     (else canon)))
+
   ;; Returns the .go file corresponding to `name'. Does not search load
   ;; paths, only the fallback path. If the .go file is missing or out of
   ;; date, and auto-compilation is enabled, will try auto-compilation, just
@@ -3461,11 +3470,12 @@ module '(ice-9 q) '(make-q q-length))}."
   ;; partially duplicates functionality from (system base compile).
   ;;
   (define (compiled-file-name canon-path)
+    ;; FIXME: would probably be better just to append SHA1(canon-path)
+    ;; to the %compile-fallback-path, to avoid deep directory stats.
     (and %compile-fallback-path
          (string-append
           %compile-fallback-path
-          ;; no need for '/' separator here, canon-path is absolute
-          canon-path
+          (canonical->suffix canon-path)
           (cond ((or (null? %load-compiled-extensions)
                      (string-null? (car %load-compiled-extensions)))
                  (warn "invalid %load-compiled-extensions"
diff --git a/module/system/base/compile.scm b/module/system/base/compile.scm
index 1b6e73f..9439990 100644
--- a/module/system/base/compile.scm
+++ b/module/system/base/compile.scm
@@ -103,6 +103,16 @@
 ;;;
 ;;; See also boot-9.scm:load.
 (define (compiled-file-name file)
+  ;; FIXME: would probably be better just to append SHA1(canon-path)
+  ;; to the %compile-fallback-path, to avoid deep directory stats.
+  (define (canonical->suffix canon)
+    (cond
+     ((string-prefix? "/" canon) canon)
+     ((and (> (string-length canon) 2)
+           (eqv? (string-ref canon 1) #\:))
+      ;; Paths like C:... transform to /C...
+      (string-append "/" (substring canon 0 1) (substring canon 2)))
+     (else canon)))
   (define (compiled-extension)
     (cond ((or (null? %load-compiled-extensions)
                (string-null? (car %load-compiled-extensions)))
@@ -113,9 +123,7 @@
   (and %compile-fallback-path
        (let ((f (string-append
                  %compile-fallback-path
-                 ;; no need for '/' separator here, canonicalize-path
-                 ;; will give us an absolute path
-                 (canonicalize-path file)
+                 (canonical->suffix (canonicalize-path file))
                  (compiled-extension))))
          (and (false-if-exception (ensure-writable-dir (dirname f)))
               f))))


hooks/post-receive
-- 
GNU Guile



reply via email to

[Prev in Thread] Current Thread [Next in Thread]