From: Ludovic Courtès Date: Mon, 24 Jan 2011 20:44:44 +0000 (+0100) Subject: Choose the input source file encoding in a locale-independent way. X-Git-Url: https://git.hcoop.net/bpt/guile.git/commitdiff_plain/eda06220952cc93e35711ede68ec800144aaf288 Choose the input source file encoding in a locale-independent way. 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'. --- diff --git a/doc/ref/api-evaluation.texi b/doc/ref/api-evaluation.texi index e20bad429..0a85ec98b 100644 --- a/doc/ref/api-evaluation.texi +++ b/doc/ref/api-evaluation.texi @@ -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 diff --git a/module/system/base/compile.scm b/module/system/base/compile.scm index 7c83fd7f5..35dc0b197 100644 --- a/module/system/base/compile.scm +++ b/module/system/base/compile.scm @@ -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 @@ -120,8 +120,9 @@ (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)