# uClibc second-part option

if THREADS_LINUXTHREADS

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_LINUXTHREADS

config LIBC_UCLIBC_LNXTHRD
    string
    default ""      if THREADS_NONE
    default ""      if THREADS_NPTL
    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
