# uClibc second-part option

if THREADS_LT

choice
    bool
    prompt "Linuxthread implementation: "
    default LIBC_UCLIBC_LNXTHRD_OLD

config LIBC_UCLIBC_LNXTHRD_OLD
    bool
    prompt "old/stable"
    help
      From the uClibc config option help:
        There are two versions of linuxthreads.  The older (stable) version
        has been in uClibc for quite a long time but hasn't seen too many
        updates other than bugfixes.

config LIBC_UCLIBC_LNXTHRD_NEW
    bool
    prompt "new"
    help
      From the uClibc config option help:
        The new version has not been tested much, and lacks ports for arches
        which glibc does not support (like bfin/frv/etc...), but is based on
        the latest code from glibc, so it may be the only choice for the
        newer ports (like alpha/amd64/64bit arches and hppa).

endchoice

endif # THREADS_LT

config LIBC_UCLIBC_LNXTHRD
    string
    default ""      if THREADS_NONE
    default ""      if THREADS_NATIVE
    default "old"   if LIBC_UCLIBC_LNXTHRD_OLD
    default "new"   if LIBC_UCLIBC_LNXTHRD_NEW

config LIBC_UCLIBC_LOCALES
    bool
    select LIBC_UCLIBC_WCHAR
    prompt "Add support for locales"
    help
      Say y if you want uClibc to support localisation.

      Note that seems to be broken on recent uClibc releases.

config LIBC_UCLIBC_LOCALES_PREGEN_DATA
    bool
    prompt "Use pregen locales"
    depends on LIBC_UCLIBC_LOCALES
    default y
    help
      If you see issues with using pre-generated locales data,
      you can try switching this off.

      If so, please report the issue, so we can default this
      to off if too many people complain.

config LIBC_UCLIBC_WCHAR
    bool
    prompt "Add support for WCHAR"
    help
      Say y if you want uClibc to support WCHAR.

      Maybe this is needed, if you're building a C++-Compiler

config LIBC_UCLIBC_FENV
    bool
    prompt "Add support for fenv.h"
    default y if ARCH_x86
    help
      fenv.h provides functions to control the floating point environment,
      such as rounding mode, exceptions...

      For some architectures, fenv.h is incomplete, so is not installed
      by default. x86 is known to have a rather complete fenv.h, so it is
      installed by default only for x86.

      If you need fenv.h on other architectures, say 'y' here, but you may
      encounter some issues.
