* Make the locale kit a part of libbe.
* Drop the LocaleBackend kludge used from within libbe (and from
other places, too) in order to access system catalog strings.
This is now done via gSystemCatalog, which is provided and initialized
by libbe.
* Drop all references to liblocale.so from all Jamfiles.
* Add legacy symlink liblocale.so in order to keep optional packages
that rely on it in a working state.
TODO: the documentation hasn't been updated.
* as pointed out by diver: libgutenberg has been configured to
expect its data files in /system/data, but we used to install them
into common.
This way, the Gutenberg printer add-on actually shows some printers.
* The pointer to the ICU converter that's kept in TLS needs to be
reset (to NULL) immediately after closing it, as opening a new
container may fail, leaving a dangling pointer to a now closed
container in the TLS value.
Fixes#8361 & the userland cause of #8430.
* instead of re-applying the fixed offset that had been set when the
Time preflet was used last, use the stored timezone name in
clockconfig in order to determine the current GMT-offset for that
timezone
* clockconfig now requires liblocale.so
* drop the offset field from the settings as it is no longer used,
clockconfig was the only client
* automatic whitespace cleanup
* Both Deskbar and Time are using BCalendarView, which in turn uses
DateTime, which uses strftime() to generate month/day names. Of
course, this doesn't work as intended unless the locale has been
initialized.
* add support for printing the time-related locale (which may contain
a '@strings=messages' suffix if required by locale configuration
* adjust cmdline params of /bin/locale to be a bit clearer (but keep
support for -c for compatibility)
* adjust /etc/profile to invoke /bin/locale accordingly
* yuck, glibc uses yet another version of mbstate_t (__c_mbstate_t),
adjusting this to match the other glibc-internal version (__mbstate_t)
fixes another crash triggered by fwide_test.
* instead of unification, we now keep both our and glibc's fields
separate in order to allow for both our code and glibc's to use
such a struct at the same time (independently)
* _IO_USER_BUF was being used to indicate a user-owned buffer without
taking into account that there are two of those: one for the normal
and another one for the wide version of a stream. Backport
_IO_FLAGS2_USER_WBUF from current glibc version to fix that.
* wcsftime invokes strftime and then converts the resulting string
internally, so it relies on the correct ctype locale being active
* minor style cleanup
* add Wcscoll() and Wcsxfrm() ICU locale backend
* provide implementations of wcscoll() and wcsxfrm() that are using
the respective methods of the locale backend
* don't try to compute the size of an array passed in as parameter,
but use end markers instead
* use fr_CA instead of fr_FR when testing reverse collation of secondary
differences (fr_FR doesn't do that by default anymore)
* Use TimeZone::SHORT specifier instead of SHORT_COMMONLY_USED, since
the former yields more appropriate (textual) values. Strangely enough,
it used to be the other way around, which is why we didn't used SHORT
in the past.
* Use TimeZone::SHORT specifier instead of SHORT_COMMONLY_USED, since
the former yields more appropriate (textual) values. Strangely enough,
it used to be the other way around, which is why we didn't used SHORT
in the past.
* Glibc declares and uses its own version of mbstate_t, which is
incompatibly with our own. Mix our own fields into glibc's
mbstate_t, such that the two structs are compatible.
* provide separate icu-devel packages for x86/gcc{2,4} and ppc, in
order to bypass problems with this package trying to make use of
the /boot/develop/abi/current symlink.
* make room in mbstate_t for containing an ICU-converter's state
(well, in fact the whole converter object)
* adjust libroot's locale add-on to clone converters into a given
mbstate_t directly
* adjust ICUThreadLocalStorageValue to contain the converter pointer
instead of a converter-ID (if the converter is related to an
mbstate_t, it points into the mbstate_t).
* adjust users of converters to directly use converter pointers
instead of ICUConverterRef
* drop now unused ICUConverterManager and ICUConverterRef
* update gcc4 optional package
This brings our multibyte implementation into a fully working state,
both non-ascii and non-8-bit characters can now be handled normally
in the Terminal, i.e. this finally fixes#6276.
N.B.: Since the size of mbstate_t has changed, everything (including
the compiler!) needs to be rebuilt.
* the reference to MB_CUR_MAX requires stdlib.h
* if an conversion error occurs, the returned src pointer must point to
the character that triggered the error
* src was sometimes accessed incorrectly (needs double dereference)
* the source pointers may only be adjusted in case there is the
destination pointer is not NULL
* add gnulib test for wcsrtombs()
* add gnulib tests for mbsnrtowcs() and wcsnrtombs(), both inactive
as the respective functions are not publically available (they are
part of the [CX] extended ISO-C standard which we do not yet support)
* Our mbstate_t just references a corresponding ICU converter, but
does not actually contain its state. So a mere copying of the mbstate
won't duplicate the converter's intrinsic state, which means that
restarting with the copied state won't work.
If have experimented with cloning the converter into the mbstate_t,
but I was unable to get that to work, either. Apparently, the state
of the converter isn't cloned (but just the converter's settings
and data).
* add MultibyteStringToWchar() to ICU locale backend
* implement mbsrtowcs() and mbsnrtowcs() on top of
MultibyteStringToWchar()
* drop respective glibc files
* instead of in /boot/home/config/settings/be, the compatibility
link has to live directly in the config folder, as otherwise
it doesn't help compatibility-wise at all ;-)
* uncomment the building of libroot_build.a again
* add function remapper to HOST_STATIC_LIBROOT
* drop TODO about the function remapper not working with the static
libroot
Ingo: please review - I think this should work, but I'm not so sure
where HOST_STATIC_LIBROOT should be in the list of libraries of its
only user (<build>bfs_fuse): where it is now or right at the end?
As it is now, the resulting binary still contains references to
host-libc-implementations of close() & others, which are triggered by
the other libs (like libfuse.so). If I put HOST_STATIC_LIBROOT right at
the end, those references are gone, though. But which is correct?
Bring the changes that aren't package management related and the ones
that are but don't take effect as long as they are ignored by the build
system into the master.
Summary of changes:
* Introduce private header <directories.h> with constants for a good
deal of paths that should usually be retrieved via find_directory().
* Replace hard-coded paths by using find_directory() or the
<directories.h> constants (e.g. in drivers and the kernel).
* Add find_directory() constants needed for package management.
* Add __HAIKU_ABI_NAME and B_HAIKU_ABI_NAME macros.
* src/apps/deskbar: BeMenu.* -> DeskbarMenu.*,
DeskBarUtils.* -> DeskbarUtils.*
* Change deskbar menu settings directory from ~/config/be to
~/config/settings/deskbar.
* Other smaller cleanups, changes, and fixes.
* this avoids spurious errno changes leaking into application code,
which could become confused - i.e. 'rm' on a gcc4 build would always
prompt for confirmation
I spend a couple of hours hunting down the behavioural difference
between gcc2- and gcc4-builds and it turns out that the reason for that
is that gcc4's libstdc++-code initializes its own locale data via the
POSIX calls, which trigger (correct) errno value changes, which were the
ones leaking into application code.
* add errno_private.h, which defines the __set_errno() macro with
and without tracing
* instead of setting errno manually, all libroot's code now invokes
__set_errno(), which makes it much easier to trace changes to errno
* redirect glibc's use of __set_errno() to our own version
* update copyrights of locale backend files
Multibyte-support has been rewritten to use ICU as backend.
While this does not necessarily work properly in every aspect
(e.g. the shell still has [different] problems with multibyte-
characters now), it does fix#6263 and #7700.
* Apparently caused by the fact that we no longer run fixincludes,
math.h is not being generated anymore. I haven't removed the rm
from the script in order to be compatible with older compilers.
* add implementations for the following multibyte-related
functions:
btwoc()
mblen()
mbrlen()
mbrtowc()
mbsinit()
mbtowc()
wcrtomb()
wcswidth()
wctob()
wctomb()
* the implementation of the above function live in a symbol
named __<name>, the above symbol names are defined as a weak
alias to the internal ones - TODO: we need to make sure to
only invoked the internal functions (i.e. prepended with __)
in order to avoid problems with symbol preemption.
* deactivate the limited mb implementation we provided before,
as well as respective stuff from glibc
* This doesn't necessarily belong here, but we're going to make use
of it in the next changeset. Additionally, this change to BeBuild.h
will trigger a rebuild of nearly all files, and applying it during
the multibyte-related work will skip another full rebuild ...
* add actual converter methods MultibyteToWchar() and WcharToMultibyte()
to locale backend and implement them in the ctype subpart
* add management code for maintaining converters referenced by mbstate_t
* the upcoming multibyte-implementation in libroot's ICU locale
backend is going to use this, so it's not good enough to provide
BReferenceable only in libbe.so