* libguile/bytevectors.c:
* libguile/eval.c:
* libguile/goops.c:
* libguile/i18n.c:
* libguile/load.c:
* libguile/memoize.c:
* libguile/modules.c:
* libguile/ports.c:
* libguile/print.c:
* libguile/procs.c:
* libguile/programs.c:
* libguile/read.c:
* libguile/script.c:
* libguile/srfi-14.c:
* libguile/stacks.c:
* libguile/strings.c:
* libguile/throw.c:
* libguile/vm.c: Use scm_from_latin1_symboln to make symbols from string
literals, because they aren't in the user's locale -- they are in
ASCII, and we can optimize this case.
* libguile/vm-i-loader.c: Also use scm_from_latin1_symboln when loading
narrow symbols.
There is an incorrect conditional compilation requirement that
<nl_types.h> be present for DAY_1 to be defined. This doesn't
agree with the LSB and causes make check to fail on Cygwin.
* libguile/i18n.c [HAVE_NL_TYPES_H]: modify conditional compilatiion
* libguile/Makefile.am (lib_LTLIBRARIES): Instead of just "libguile.la",
make "libguile-@EFFECTIVE_VERSION@.la". This allows multiple versions
of Guile to be installed at once. See
http://www106.pair.com/rhp/parallel.html for a rationale.
(libguile_@GUILE_EFFECTIVE_VERSION@_la_CFLAGS):
(libguile_@GUILE_EFFECTIVE_VERSION@_la_SOURCES):
(EXTRA_libguile_@GUILE_EFFECTIVE_VERSION@_la_SOURCES):
(libguile_@GUILE_EFFECTIVE_VERSION@_la_DEPENDENCIES):
(libguile_@GUILE_EFFECTIVE_VERSION@_la_LIBADD):
(libguile_@GUILE_EFFECTIVE_VERSION@_la_LDFLAGS): Fixup automake vars
to include the effective version.
(guile_LDADD): Fix up the spelling of libguile.
* libguile/bytevectors.c (scm_bootstrap_bytevectors):
* libguile/foreign.c (scm_register_foreign):
* libguile/i18n.c (scm_bootstrap_i18n):
* libguile/instructions.c (scm_bootstrap_instructions):
* libguile/objcodes.c (scm_bootstrap_objcodes):
* libguile/programs.c (scm_bootstrap_programs):
* libguile/vm.c (scm_bootstrap_vm): Register extensions using e.g.
"libguile-2.0" as the libname -- i.e., including the effective version
in the libname.
* module/ice-9/i18n.scm:
* module/rnrs/bytevector.scm:
* module/rnrs/io/ports.scm:
* module/system/foreign.scm:
* module/system/vm/instruction.scm:
* module/system/vm/objcode.scm:
* module/system/vm/program.scm:
* module/system/vm/vm.scm: When doing a load-extension for something in
Guile, use the effective version also.
* meta/guile-2.0-uninstalled.pc.in (Libs):
* meta/guile-2.0.pc.in (Libs): Use -lguile-@EFFECTIVE_VERSION@. This
change should mean that code built against Guile should not be
affected by the libguile rename.
* guile-readline/Makefile.am (libguilereadline_v_@LIBGUILEREADLINE_MAJOR@_la_LIBADD):
* srfi/Makefile.am
(libguile_srfi_srfi_1_v_@LIBGUILE_SRFI_SRFI_1_MAJOR@_la_LIBADD):
(libguile_srfi_srfi_4_v_@LIBGUILE_SRFI_SRFI_4_MAJOR@_la_LIBADD):
(libguile_srfi_srfi_13_14_v_@LIBGUILE_SRFI_SRFI_13_14_MAJOR@_la_LIBADD):
(libguile_srfi_srfi_60_v_@LIBGUILE_SRFI_SRFI_60_MAJOR@_la_LIBADD):
* test-suite/standalone/Makefile.am (test_num2integral_LDADD):
(test_round_LDADD):
(libtest_asmobs_la_LIBADD):
(libtest_ffi_la_LIBADD):
(test_list_LDADD):
(test_unwind_LDADD):
(test_conversion_LDADD):
(test_loose_ends_LDADD):
(test_scm_c_read_LDADD):
(test_scm_take_locale_symbol_LDADD):
(test_scm_take_u8vector_LDADD):
(libtest_extensions_la_LIBADD):
(test_with_guile_module_LDADD):
(test_scm_with_guile_LDADD): Fix up the spelling of libguile.la.
* configure.ac: Add check for `nl_item'.
* libguile/i18n.c: Separate check for `HAVE_LANGINFO_H' and
`HAVE_NL_TYPES_H'.
[!HAVE_NL_ITEM]: Define `nl_item'.
* doc/ref/api-data.texi (Characters): Documentation for `char-titlecase'.
* doc/ref/api-i18n.texi (Character Case Mapping): Documentation for
`char-locale-titlecase' and `string-locale-titlecase'.
* libguile/chars.c, libguile/chars.h (scm_char_titlecase, scm_c_titlecase): New
functions.
* libguile/i18n.c, libguile/i18n.h (chr_to_case, scm_char_locale_titlecase,
str_to_case, scm_string_locale_titlecase): New functions.
* libguile/i18n.c (scm_char_locale_downcase, scm_char_locale_upcase,
scm_string_locale_downcase, scm_string_locale_upcase): Refactor to share code
via chr_to_case and str_to_case, as appropriate.
* module/ice-9/i18n.scm (char-locale-title-case, string-locale-titlecase): New
functions.
* libguile/srfi-13.c (string_titlecase_x): Use uc_totitle instead of uc_toupper.
* test-suite/tests/chars.test: Tests for `char-titlecase'.
* test-suite/tests/i18n.test: Tests for `char-locale-titlecase' and
`string-locale-titlecase'.
* test-suite/tests/srfi-13.test: Tests for `string-titlecase'.
* libguile/i18n.c (scm_make_locale): Simplify global locale handling,
using duplocale(3) for all kinds of locales.
(scm_init_i18n): Comment on why we don't just use `LC_GLOBAL_LOCALE'
for `global_locale_smob'.
* m4/gnulib-cache.m4: Add `duplocale'.
The method used was not portable. However, the underlying problem
still exists: the uc_locale_language used by libunistring does not
work with thread-specific locale_t locales.
* libguile/i18n.c (locale_language): avoid unpacking semi-opaque type
locale_t.
* test-suite/tests/i18n.test: set Turkish string and char locale upcase
and downcase tests to throw untested
Strings returned by nl-langinfo were always being encoded using the
global setlocale and not the scm_t_locale passed to the function.
* libguile/i18n.c (scm_nl_langinfo): fix encoding of strings
Libunistring uses a function uc_locale_language to extract the
current language from the locale information. It does this by calling
setlocale. This makes incompatible with Guile functions that use the
locale_t thread-specific locale API, because the values returned by the
call to setlocale ignore the locale set by uselocale.
As a workaround, this patch extracts the language from the locale_t
structure's __names field.
A more complete solution is needed. Perhaps that solution would test
that the __names field exists in the configure step and revert to
!USE_GNU_LOCALE_API in that case.
* libguile/i18n.c (locale_language): new function that performs the
same job as uc_locale_language but is compatible with uselocale
(u32_locale_casecoll, u32_locale_tocase): replace uc_locale_language
with locale_language
* libguile/i18n.c (u32_locale_tocase, scm_char_locale_downcase)
(scm_char_locale_upcase, scm_string_locale_downcase)
(scm_string_locale_upcase): use the scm_t_uint32 type for buffers
that are used primarily for libunistring and not for Guile strings.
* libguile/i18n.c (u32_locale_tocase): new helper function
(scm_char_locale_downcase, scm_char_locale_upcase): add capability
for UCS-4 characters.
(scm_string_locale_downcase, scm_string_locale_upcase): modify for
the new scheme strings.
* libguile/i18n.c (RUN_IN_LOCALE_SECTION) [USE_GNU_LOCALE_API]: new
macro for this define. Should work the same as the !USE_GNU_LOCAL_API
version
(SCM_STRING_TO_U32_BUF, SCM_U32_BUF_FREE): helper macros
(compare_u32_strings, compare_u32_strings_ci): new functions that
compare scheme strings in the presence of the locale
(u32_locale_casecoll): new helper function for compare_u32_strings_ci
(compare_strings, compare_strings_ci): removed and replaced by
compare_u32_strings and compare_u32_strings_ci
(scm_string_locale_lt, scm_string_locale_gt, scm_string_locale_ci_lt)
(scm_string_locale_ci_gt, scm_string_locale_ci_eq): modified to
use new compare_u32_strings and compare_u32_strings_ci comparison
functions
(scm_char_locale_lt, scm_char_locale_gt, scm_char_locale_ci_lt)
(scm_char_locale_ci_gt, scm_char_locale_ci_eq): modified to use
new compare_u32_strings and compare_u32_strings_ci comparison
functions
* libguile/i18n.c (str_upcase, str_downcase, scm_char_locale_downcase,
scm_char_locale_upcase): Cast chars to `int' when invoking `toupper ()'
et al. to avoid "array subscript has type 'char'" on NetBSD.
Reported by Greg Toxel <gdt@ir.bbn.com>.
* posix.c (scm_init_posix): Add LC_PAPER, LC_NAME, LC_ADDRESS,
LC_TELEPHONE, LC_MEASUREMENT, LC_IDENTIFICATION.
* i18n.c (scm_i_to_lc_category): New name and export. Support all
LC categories.
* posix.c (s_scm_setlocale): Use it.
* i18n.h, i18n.c (scm_textdomain, scm_bindtextdomain,
scm_bind_textdomain_codeset): Make wrappers similar to C function
they wrap.
* i18n.h: New file.
* i18n.c: New file.
* gettext.h: New file, taken from GNU gettext.
* init.c: Include libguile/i18n.h.
(scm_init_guile_1): Add call to scm_init_i18n().
* Makefile.am (libguile_la_SOURCES): Add i18n.c.
(DOT_X_FILES): Add i18n.x.
(DOT_DOC_FILES): Add i18n.doc.
(libguile_la_LDFLAGS): Add @LTLIBINTL@.
(modinclude_HEADERS): Add i18n.h.