Choose the input source file encoding in a locale-independent way.
authorLudovic Courtès <ludo@gnu.org>
Mon, 24 Jan 2011 20:44:44 +0000 (21:44 +0100)
committerLudovic Courtès <ludo@gnu.org>
Mon, 24 Jan 2011 20:44:44 +0000 (21:44 +0100)
This is so that compiling the same code on environments with different
locale settings yields the same result.

* module/system/base/compile.scm (compile-file): When ENC if #f, default
  to "UTF-8" instead of `(fluid-ref %default-port-encoding)'.

* doc/ref/api-evaluation.texi (Compilation): Document the default output
  file name and default source file encoding for `compile-file' and
  `guile-tools compile'.

doc/ref/api-evaluation.texi
module/system/base/compile.scm

index e20bad4..0a85ec9 100644 (file)
@@ -567,8 +567,9 @@ Add @var{dir} to the front of the module load path.
 
 @item -o @var{ofile}
 @itemx --output=@var{ofile}
-Write output bytecode to @var{ofile}.  By convention, bytecode file names end
-in @code{.go}.
+Write output bytecode to @var{ofile}.  By convention, bytecode file
+names end in @code{.go}.  When @option{-o} is omitted, the output file
+name is as for @code{compile-file} (see below).
 
 @item -W @var{warning}
 @itemx --warn=@var{warning}
@@ -589,6 +590,9 @@ Use @var{lang} as the target language of @var{file}.  If this option is omitted,
 
 @end table
 
+Each @var{file} is assumed to be UTF-8-encoded, unless it contains a
+coding declaration as recognized by @code{file-encoding}
+(@pxref{Character Encoding of Source Files}).
 @end deffn
 
 The compiler can also be invoked directly by Scheme code using the procedures
@@ -608,6 +612,9 @@ Compile the file named @var{file}.
 
 Output will be written to a file in the current directory whose name
 is computed as @code{(compiled-file-name @var{file})}.
+
+As with @command{guile-tools compile}, @var{file} is assumed to be
+UTF-8-encoded unless it contains a coding declaration.
 @end deffn
 
 @deffn {Scheme Procedure} compiled-file-name file
index 7c83fd7..35dc0b1 100644 (file)
@@ -1,6 +1,6 @@
 ;;; High-level compiler interface
 
-;; Copyright (C) 2001, 2009, 2010 Free Software Foundation, Inc.
+;; Copyright (C) 2001, 2009, 2010, 2011 Free Software Foundation, Inc.
 
 ;;; This library is free software; you can redistribute it and/or
 ;;; modify it under the terms of the GNU Lesser General Public
     (let* ((comp (or output-file (compiled-file-name file)))
            (in (open-input-file file))
            (enc (file-encoding in)))
-      (if enc
-          (set-port-encoding! in enc))
+      ;; Choose the input encoding deterministically.
+      (set-port-encoding! in (or enc "UTF-8"))
+
       (ensure-writable-dir (dirname comp))
       (call-with-output-file/atomic comp
         (lambda (port)