Eglibc option group infrastructure Upstream-Status: Pending Index: git/option-groups.def =================================================================== --- /dev/null 1970-01-01 00:00:00.000000000 +0000 +++ git/option-groups.def 2014-08-27 07:26:51.652070587 +0000 @@ -0,0 +1,868 @@ +# This file documents the option groups EGLIBC currently supports, in +# a format akin to the Linux Kconfig system's. The syntax may change +# over time. +# +# An entry of the form: +# +# config GROUP_NAME +# bool "one-line explanation of what this option group controls" +# help +# Multi-line help explaining the option group's meaning in +# some detail, terminated by indentation level. +# +# defines an option group whose variable is GROUP_NAME, with +# meaningful values 'y' (enabled) and 'n' (disabled). The +# documentation is formatted to be consumed by some sort of +# interactive configuration interface, but EGLIBC doesn't have such an +# interface yet. +# +# An option may have a 'depends on' line, indicating which other options +# must also be enabled if this option is. At present, EGLIBC doesn't +# check that these dependencies are satisfied. +# +# Option group variables get their default values from the file +# 'option-groups.defaults', in the top directory of the EGLIBC source +# tree. By default, all EGLIBC option groups are enabled --- their +# variables are set to 'y'. +# +# After including 'option-groups.defaults', the EGLIBC make machinery +# includes the file 'option-groups.config' from the top of the build +# tree, if it is present. Developers can place assignments to option +# group variables in that file to override the defaults. For example, +# to disable an option group, place a line of the form: +# +# OPTION_GROUP_NAME = n +# +# in 'option-groups.config' at the top of your build tree. To +# explicitly enable an option group, you may also write: +# +# OPTION_GROUP_NAME = y +# +# although this simply reestablishes the value already set by +# 'option-groups.defaults'. + +config EGLIBC_ADVANCED_INET6 + bool "IPv6 Advanced Sockets API support (RFC3542)" + depends on EGLIBC_INET + help + This option group includes the functions specified by RFC 3542, + "Advanced Sockets Application Program Interface (API) for + IPv6". + + This option group includes the following functions: + + inet6_opt_append + inet6_opt_find + inet6_opt_finish + inet6_opt_get_val + inet6_opt_init + inet6_option_alloc + inet6_option_append + inet6_option_find + inet6_option_init + inet6_option_next + inet6_option_space + inet6_opt_next + inet6_opt_set_val + inet6_rth_add + inet6_rth_getaddr + inet6_rth_init + inet6_rth_reverse + inet6_rth_segments + inet6_rth_space + +config EGLIBC_BACKTRACE + bool "Functions for producing backtraces" + help + This option group includes functions for producing a list of + the function calls that are currently active in a thread, from + within the thread itself. These functions are often used + within signal handlers, to produce diagnostic output. + + This option group includes the following functions: + + backtrace + backtrace_symbols + backtrace_symbols_fd + +config EGLIBC_BIG_MACROS + bool "Use extensive inline code" + help + This option group specifies whether certain pieces of code + should be inlined to achieve maximum speed. If this option + group is not selected, function calls will be used instead, + hence reducing the library footprint. + +config EGLIBC_BSD + bool "BSD-specific functions, and their compatibility stubs" + help + This option group includes functions specific to BSD kernels. + A number of these functions have stub versions that are also + included in libraries built for non-BSD systems for + compatibility. + + This option group includes the following functions: + + chflags + fchflags + lchmod + revoke + setlogin + +config EGLIBC_CXX_TESTS + bool "Tests that link against the standard C++ library." + depends on POSIX_WIDE_CHAR_DEVICE_IO && EGLIBC_LIBM + help + This option group does not include any C library functions; + instead, it controls which EGLIBC tests an ordinary 'make + tests' runs. With this group disabled, tests that would + normally link against the standard C++ library are not + run. + + The standard C++ library depends on the math library 'libm' and + the wide character I/O functions included in EGLIBC. So those + option groups must be enabled if this test is enabled. + +config EGLIBC_CATGETS + bool "Functions for accessing message catalogs" + depends on EGLIBC_LOCALE_CODE + help + This option group includes functions for accessing message + catalogs: catopen, catclose, and catgets. + + This option group depends on the EGLIBC_LOCALE_CODE + option group. + +config EGLIBC_CHARSETS + bool "iconv/gconv character set conversion libraries" + help + This option group includes support for character sets other + than ASCII (ANSI_X3.4-1968) and Unicode and ISO-10646 in their + various encodings. This affects both the character sets + supported by the wide and multibyte character functions, and + those supported by the 'iconv' functions. + + With this option group disabled, EGLIBC supports only the + following character sets: + + ANSI_X3.4 - ASCII + ANSI_X3.4-1968 + ANSI_X3.4-1986 + ASCII + CP367 + CSASCII + IBM367 + ISO-IR-6 + ISO646-US + ISO_646.IRV:1991 + OSF00010020 + US + US-ASCII + + 10646-1:1993 - ISO 10646, in big-endian UCS4 form + 10646-1:1993/UCS4 + CSUCS4 + ISO-10646 + ISO-10646/UCS4 + OSF00010104 + OSF00010105 + OSF00010106 + UCS-4 + UCS-4BE + UCS4 + + UCS-4LE - ISO 10646, in little-endian UCS4 form + + ISO-10646/UTF-8 - ISO 10646, in UTF-8 form + ISO-10646/UTF8 + ISO-IR-193 + OSF05010001 + UTF-8 + UTF8 + + ISO-10646/UCS2 - ISO 10646, in target-endian UCS2 form + OSF00010100 + OSF00010101 + OSF00010102 + UCS-2 + UCS2 + + UCS-2BE - ISO 10646, in big-endian UCS2 form + UNICODEBIG + + UCS-2LE - ISO 10646, in little-endian UCS2 form + UNICODELITTLE + + WCHAR_T - EGLIBC's internal form (target-endian, + 32-bit ISO 10646) + +config EGLIBC_CRYPT + bool "Encryption library" + help + This option group includes the `libcrypt' library which + provides functions for one-way encryption. Supported + encryption algorithms include MD5, SHA-256, SHA-512 and DES. + +config EGLIBC_CRYPT_UFC + bool "Ultra fast `crypt' implementation" + depends on EGLIBC_CRYPT + help + This option group provides ultra fast DES-based implementation of + the `crypt' function. When this option group is disabled, + (a) the library will not provide the setkey[_r] and encrypt[_r] + functions and (b) the crypt[_r] function will return NULL and set the + errno to ENOSYS if /salt/ passed does not correspond to either MD5, + SHA-256 or SHA-512 algorithm. + +config EGLIBC_DB_ALIASES + bool "Functions for accessing the mail aliases database" + help + This option group includues functions for looking up mail + aliases in '/etc/aliases' or using nsswitch. It includes the + following functions: + + endaliasent + getaliasbyname + getaliasbyname_r + getaliasent + getaliasent_r + setaliasent + + When this option group is disabled, the NSS service libraries + also lack support for querying their mail alias tables. + +config EGLIBC_ENVZ + bool "Functions for handling envz-style environment vectors." + help + This option group contains functions for creating and operating + on envz vectors. An "envz vector" is a vector of strings in a + contiguous block of memory, where each element is a name-value + pair, and elements are separated from their neighbors by null + characters. + + This option group includes the following functions: + + envz_add envz_merge + envz_entry envz_remove + envz_get envz_strip + +config EGLIBC_FCVT + bool "Functions for converting floating-point numbers to strings" + help + This option group includes functions for converting + floating-point numbers to strings. + + This option group includes the following functions: + + ecvt qecvt + ecvt_r qecvt_r + fcvt qfcvt + fcvt_r qfcvt_r + gcvt qgcvt + +config EGLIBC_FMTMSG + bool "Functions for formatting messages" + help + This option group includes the following functions: + + addseverity fmtmsg + +config EGLIBC_FSTAB + bool "Access functions for 'fstab'" + help + This option group includes functions for reading the mount + point specification table, '/etc/fstab'. These functions are + not included in the POSIX standard, which provides the + 'getmntent' family of functions instead. + + This option group includes the following functions: + + endfsent getfsspec + getfsent setfsent + getfsfile + +config EGLIBC_FTRAVERSE + bool "Functions for traversing file hierarchies" + help + This option group includes functions for traversing file + UNIX file hierachies. + + This option group includes the following functions: + + fts_open ftw + fts_read nftw + fts_children ftw64 + fts_set nftw64 + fts_close + +config EGLIBC_GETLOGIN + bool "The getlogin function" + depends on EGLIBC_UTMP + help + This function group includes the 'getlogin' and 'getlogin_r' + functions, which return the user name associated by the login + activity with the current process's controlling terminal. + + With this option group disabled, the 'glob' function will not + fall back on 'getlogin' to find the user's login name for tilde + expansion when the 'HOME' environment variable is not set. + +config EGLIBC_IDN + bool "International domain names support" + help + This option group includes the `libcidn' library which + provides support for international domain names. + +config EGLIBC_INET + bool "Networking support" + help + This option group includes networking-specific functions and + data. With EGLIBC_INET disabled, the EGLIBC + installation and API changes as follows: + + - The following libraries are not installed: + + libnsl + libnss_compat + libnss_dns + libnss_hesiod + libnss_nis + libnss_nisplus + libresolv + + - The following functions and variables are omitted from libc: + + authdes_create hstrerror svc_fdset + authdes_getucred htonl svc_getreq + authdes_pk_create htons svc_getreq_common + authnone_create if_freenameindex svc_getreq_poll + authunix_create if_indextoname svc_getreqset + authunix_create_default if_nameindex svc_max_pollfd + bindresvport if_nametoindex svc_pollfd + callrpc in6addr_any svcraw_create + cbc_crypt in6addr_loopback svc_register + clnt_broadcast inet6_opt_append svc_run + clnt_create inet6_opt_find svc_sendreply + clnt_pcreateerror inet6_opt_finish svctcp_create + clnt_perrno inet6_opt_get_val svcudp_bufcreate + clnt_perror inet6_opt_init svcudp_create + clntraw_create inet6_option_alloc svcudp_enablecache + clnt_spcreateerror inet6_option_append svcunix_create + clnt_sperrno inet6_option_find svcunixfd_create + clnt_sperror inet6_option_init svc_unregister + clnttcp_create inet6_option_next user2netname + clntudp_bufcreate inet6_option_space xdecrypt + clntudp_create inet6_opt_next xdr_accepted_reply + clntunix_create inet6_opt_set_val xdr_array + des_setparity inet6_rth_add xdr_authdes_cred + ecb_crypt inet6_rth_getaddr xdr_authdes_verf + endaliasent inet6_rth_init xdr_authunix_parms + endhostent inet6_rth_reverse xdr_bool + endnetent inet6_rth_segments xdr_bytes + endnetgrent inet6_rth_space xdr_callhdr + endprotoent inet_addr xdr_callmsg + endrpcent inet_aton xdr_char + endservent inet_lnaof xdr_cryptkeyarg + ether_aton inet_makeaddr xdr_cryptkeyarg2 + ether_aton_r inet_netof xdr_cryptkeyres + ether_hostton inet_network xdr_des_block + ether_line inet_nsap_addr xdr_double + ether_ntoa inet_nsap_ntoa xdr_enum + ether_ntoa_r inet_ntoa xdr_float + ether_ntohost inet_ntop xdr_free + freeaddrinfo inet_pton xdr_getcredres + freeifaddrs innetgr xdr_hyper + gai_strerror iruserok xdr_int + getaddrinfo iruserok_af xdr_int16_t + getaliasbyname key_decryptsession xdr_int32_t + getaliasbyname_r key_decryptsession_pk xdr_int64_t + getaliasent key_encryptsession xdr_int8_t + getaliasent_r key_encryptsession_pk xdr_keybuf + gethostbyaddr key_gendes xdr_key_netstarg + gethostbyaddr_r key_get_conv xdr_key_netstres + gethostbyname key_secretkey_is_set xdr_keystatus + gethostbyname2 key_setnet xdr_long + gethostbyname2_r key_setsecret xdr_longlong_t + gethostbyname_r netname2host xdrmem_create + gethostent netname2user xdr_netnamestr + gethostent_r ntohl xdr_netobj + getifaddrs ntohs xdr_opaque + getipv4sourcefilter passwd2des xdr_opaque_auth + get_myaddress pmap_getmaps xdr_pmap + getnameinfo pmap_getport xdr_pmaplist + getnetbyaddr pmap_rmtcall xdr_pointer + getnetbyaddr_r pmap_set xdr_quad_t + getnetbyname pmap_unset xdrrec_create + getnetbyname_r rcmd xdrrec_endofrecord + getnetent rcmd_af xdrrec_eof + getnetent_r registerrpc xdrrec_skiprecord + getnetgrent res_init xdr_reference + getnetgrent_r rexec xdr_rejected_reply + getnetname rexec_af xdr_replymsg + getprotobyname rexecoptions xdr_rmtcall_args + getprotobyname_r rpc_createerr xdr_rmtcallres + getprotobynumber rresvport xdr_short + getprotobynumber_r rresvport_af xdr_sizeof + getprotoent rtime xdrstdio_create + getprotoent_r ruserok xdr_string + getpublickey ruserok_af xdr_u_char + getrpcbyname ruserpass xdr_u_hyper + getrpcbyname_r setaliasent xdr_u_int + getrpcbynumber sethostent xdr_uint16_t + getrpcbynumber_r setipv4sourcefilter xdr_uint32_t + getrpcent setnetent xdr_uint64_t + getrpcent_r setnetgrent xdr_uint8_t + getrpcport setprotoent xdr_u_long + getsecretkey setrpcent xdr_u_longlong_t + getservbyname setservent xdr_union + getservbyname_r setsourcefilter xdr_unixcred + getservbyport svcauthdes_stats xdr_u_quad_t + getservbyport_r svcerr_auth xdr_u_short + getservent svcerr_decode xdr_vector + getservent_r svcerr_noproc xdr_void + getsourcefilter svcerr_noprog xdr_wrapstring + h_errlist svcerr_progvers xencrypt + h_errno svcerr_systemerr xprt_register + herror svcerr_weakauth xprt_unregister + h_nerr svc_exit + host2netname svcfd_create + + - The rpcgen, nscd, and rpcinfo commands are not installed. + + - The 'rpc' file (a text file listing RPC services) is not installed. + + Socket-related system calls do not fall in this option group, + because many are also used for other inter-process + communication mechanisms. For example, the 'syslog' routines + use Unix-domain sockets to communicate with the syslog daemon; + syslog is valuable in non-networked contexts. + +config EGLIBC_INET_ANL + bool "Asynchronous name lookup" + depends on EGLIBC_INET + help + This option group includes the `libanl' library which + provides support for asynchronous name lookup. + +config EGLIBC_LIBM + bool "libm (math library)" + help + This option group includes the 'libm' library, containing + mathematical functions. If this option group is omitted, then + an EGLIBC installation does not include shared or unshared versions + of the math library. + + Note that this does not remove all floating-point related + functionality from EGLIBC; for example, 'printf' and 'scanf' + can still print and read floating-point values with this option + group disabled. + + Note that the ISO Standard C++ library 'libstdc++' depends on + EGLIBC's math library 'libm'. If you disable this option + group, you will not be able to build 'libstdc++' against the + resulting EGLIBC installation. + +config EGLIBC_LOCALES + bool "Locale definitions" + help + This option group includes all locale definitions other than + that for the "C" locale. If this option group is omitted, then + only the "C" locale is supported. + + +config EGLIBC_LOCALE_CODE + bool "Locale functions" + depends on POSIX_C_LANG_WIDE_CHAR + help + This option group includes locale support functions, programs, + and libraries. With EGLIBC_LOCALE_CODE disabled, + EGLIBC supports only the 'C' locale (also known as 'POSIX'), + and ignores the settings of the 'LANG' and 'LC_*' environment + variables. + + With EGLIBC_LOCALE_CODE disabled, the following + functions are omitted from libc: + + duplocale localeconv nl_langinfo rpmatch strfmon_l + freelocale newlocale nl_langinfo_l strfmon uselocale + + Furthermore, only the LC_CTYPE and LC_TIME categories of the + standard "C" locale are available. + + The EGLIBC_CATGETS option group depends on this option group. + + +config EGLIBC_MEMUSAGE + bool "Memory profiling library" + help + This option group includes the `libmemusage' library and + the `memusage' and `memusagestat' utilities. + These components provide memory profiling functions. + +config EGLIBC_MEMUSAGE_DEFAULT_BUFFER_SIZE + int "Memory profiling library buffer size" + depends on EGLIBC_MEMUSAGE + default "32768" + help + Libmemusage library buffers the profiling data in memory + before writing it out to disk. By default, the library + allocates 1.5M buffer, which can be substantial for some + systems. EGLIBC_MEMUSAGE_DEFAULT_BUFFER_SIZE option + allows to change the default buffer size. It specifies + the number of entries the buffer should have. + On most architectures one buffer entry amounts to 48 bytes, + so setting this option to the value of 512 will reduce the size of + the memory buffer to 24K. + +config EGLIBC_NIS + bool "Support for NIS, NIS+, and the special 'compat' services." + depends on EGLIBC_INET && EGLIBC_SUNRPC + help + This option group includes the NIS, NIS+, and 'compat' Name + Service Switch service libraries. When it is disabled, those + services libraries are not installed; you should remove any + references to them from your 'nsswitch.conf' file. + + This option group depends on the EGLIBC_INET option + group; you must enable that to enable this option group. + +config EGLIBC_NSSWITCH + bool "Name service switch (nsswitch) support" + help + This option group includes support for the 'nsswitch' facility. + With this option group enabled, all EGLIBC functions for + accessing various system databases (passwords and groups; + networking; aliases; public keys; and so on) consult the + '/etc/nsswitch.conf' configuration file to decide how to handle + queries. + + With this option group disabled, EGLIBC uses a fixed list of + services to satisfy queries on each database, as requested by + configuration files specified when EGLIBC is built. Your + 'option-groups.config' file must set the following two + variables: + +config EGLIBC_NSSWITCH_FIXED_CONFIG + string "Nsswitch fixed config filename" + depends on !EGLIBC_NSSWITCH + default "" + help + Set this to the name of a file whose contents observe the + same syntax as an ordinary '/etc/nsswitch.conf' file. The + EGLIBC build process parses this file just as EGLIBC would + at run time if EGLIBC_NSSWITCH were enabled, and + produces a C library that uses the nsswitch service + libraries to search for database entries as this file + specifies, instead of consulting '/etc/nsswitch.conf' at run + time. + + This should be an absolute filename. The EGLIBC build + process may use it from several different working + directories. It may include references to Makefile + variables like 'common-objpfx' (the top of the build tree, + with a trailing slash), or '..' (the top of the source tree, + with a trailing slash). + + The EGLIBC source tree includes a sample configuration file + named 'nss/fixed-nsswitch.conf'; for simple configurations, + you will probably want to delete references to databases not + needed on your system. + +config EGLIBC_NSSWITCH_FIXED_FUNCTIONS + string "Nsswitch fixed functions filename" + depends on !EGLIBC_NSSWITCH + default "" + help + The EGLIBC build process uses this file to decide which + functions to make available from which service libraries. + The file 'nss/fixed-nsswitch.functions' serves as a sample + configuration file for this setting, and explains its syntax + and meaning in more detail. + + This should be an absolute file name. The EGLIBC build + process may use it from several different working + directories. It may include references to Makefile + variables like 'common-objpfx' (the top of the build tree, + with a trailing slash), or '..' (the top of the source tree, + with a trailing slash). + + Be sure to mention each function in each service you wish to + use. If you do not mention a service's function here, the + EGLIBC database access functions will not find it, even if + it is listed in the EGLIBC_NSSWITCH_FIXED_CONFIG + file. + + In this arrangement, EGLIBC will not use the 'dlopen' and + 'dlsym' functions to find database access functions. Instead, + libc hard-codes references to the service libraries' database + access functions. You must explicitly link your program + against the name service libraries (those whose names start + with 'libnss_', in the sysroot's '/lib' directory) whose + functions you intend to use. This arrangement helps + system-wide static analysis tools decide which functions a + system actually uses. + + Note that some nsswitch service libraries require other option + groups to be enabled; for example, the EGLIBC_INET + option group must be enabled to use the 'libnss_dns.so.2' + service library, which uses the Domain Name System network + protocol to answer queries. + +config EGLIBC_RCMD + bool "Support for 'rcmd' and related library functions" + depends on EGLIBC_INET + help + This option group includes functions for running commands on + remote machines via the 'rsh' protocol, and doing authentication + related to those functions. This also includes functions that + use the 'rexec' protocol. + + This option group includes the following functions: + + rcmd ruserok + rcmd_af ruserok_af + rexec iruserok + rexec_af iruserok_af + rresvport ruserpass + rresvport_af + +config EGLIBC_RTLD_DEBUG + bool "Runtime linker debug print outs" + help + This option group enables debug output of the runtime linker + which is activated via LD_DEBUG and LD_TRACE_PRELINKING + environment variables. Disabling this option group yields + a smaller runtime linker binary. + BEWARE: Disabling this option group is likely to break + the `ldd' utility which may also be used by the prelinker. + In particular, the `--unused' ldd option will not work correctly. + +config EGLIBC_SPAWN + bool "Support for POSIX posix_spawn functions" + help + This option group includes the POSIX functions for executing + programs in child processes without using 'fork' or 'vfork'. + + This option group includes the following functions: + + posix_spawn + posix_spawnattr_destroy + posix_spawnattr_getflags + posix_spawnattr_getpgroup + posix_spawnattr_getschedparam + posix_spawnattr_getschedpolicy + posix_spawnattr_getsigdefault + posix_spawnattr_getsigmask + posix_spawnattr_init + posix_spawnattr_setflags + posix_spawnattr_setpgroup + posix_spawnattr_setschedparam + posix_spawnattr_setschedpolicy + posix_spawnattr_setsigdefault + posix_spawnattr_setsigmask + posix_spawn_file_actions_addclose + posix_spawn_file_actions_adddup2 + posix_spawn_file_actions_addopen + posix_spawn_file_actions_destroy + posix_spawn_file_actions_init + posix_spawnp + + This option group also provides the ability for the iconv, + localedef, and locale programs to operate transparently on + compressed charset definitions. When this option group is + disabled, those programs will only operate on uncompressed + charmap files. + +config EGLIBC_STREAMS + bool "Support for accessing STREAMS." + help + This option group includes functions for reading and writing + messages to and from STREAMS. The STREAMS interface provides a + uniform mechanism for implementing networking services and other + character-based I/O. (STREAMS are not to be confused with + FILE objects, also called 'streams'.) + + This option group includes the following functions: + + getmsg putpmsg + getpmsg fattach + isastream fdetach + putmsg + +config EGLIBC_SUNRPC + bool "Support for the Sun 'RPC' protocol." + depends on EGLIBC_INET + help + This option group includes support for the Sun RPC protocols, + including the 'rpcgen' and 'rpcinfo' programs. + +config EGLIBC_UTMP + bool "Older access functions for 'utmp' login records" + help + This option group includes the older 'utent' family of + functions for accessing user login records in the 'utmp' file. + POSIX omits these functions in favor of the 'utxent' family, + and they are obsolete on systems other than Linux. + + This option group includes the following functions: + + endutent + getutent + getutent_r + getutid + getutid_r + getutline + getutline_r + logwtmp + pututline + setutent + updwtmp + utmpname + + This option group includes the following libraries: + + libutil.so (and libutil.a) + +config EGLIBC_UTMPX + bool "POSIX access functions for 'utmp' login records" + depends on EGLIBC_UTMP + help + This option group includes the POSIX functions for reading and + writing user login records in the 'utmp' file (usually + '/var/run/utmp'). The POSIX functions operate on 'struct + utmpx' structures, as opposed to the family of older 'utent' + functions, which operate on 'struct utmp' structures. + + This option group includes the following functions: + + endutxent + getutmp + getutmpx + getutxent + getutxid + getutxline + pututxline + setutxent + updwtmpx + utmpxname + +config EGLIBC_WORDEXP + bool "Shell-style word expansion" + help + This option group includes the 'wordexp' function for + performing word expansion in the manner of the shell, and the + accompanying 'wordfree' function. + +config POSIX_C_LANG_WIDE_CHAR + bool "ISO C library wide character functions, excluding I/O" + help + This option group includes the functions defined by the ISO C + standard for working with wide and multibyte characters in + memory. Functions for reading and writing wide and multibyte + characters from and to files call in the + POSIX_WIDE_CHAR_DEVICE_IO option group. + + This option group includes the following functions: + + btowc mbsinit wcscspn wcstoll + iswalnum mbsrtowcs wcsftime wcstombs + iswalpha mbstowcs wcslen wcstoul + iswblank mbtowc wcsncat wcstoull + iswcntrl swprintf wcsncmp wcstoumax + iswctype swscanf wcsncpy wcsxfrm + iswdigit towctrans wcspbrk wctob + iswgraph towlower wcsrchr wctomb + iswlower towupper wcsrtombs wctrans + iswprint vswprintf wcsspn wctype + iswpunct vswscanf wcsstr wmemchr + iswspace wcrtomb wcstod wmemcmp + iswupper wcscat wcstof wmemcpy + iswxdigit wcschr wcstoimax wmemmove + mblen wcscmp wcstok wmemset + mbrlen wcscoll wcstol + mbrtowc wcscpy wcstold + +config POSIX_REGEXP + bool "Regular expressions" + help + This option group includes the POSIX regular expression + functions, and the associated non-POSIX extensions and + compatibility functions. + + With POSIX_REGEXP disabled, the following functions are + omitted from libc: + + re_comp re_max_failures regcomp + re_compile_fastmap re_search regerror + re_compile_pattern re_search_2 regexec + re_exec re_set_registers regfree + re_match re_set_syntax rpmatch + re_match_2 re_syntax_options + + Furthermore, the compatibility regexp interface defined in the + header file, 'compile', 'step', and 'advance', is + omitted. + +config POSIX_REGEXP_GLIBC + bool "Regular expressions from GLIBC" + depends on POSIX_REGEXP + help + This option group specifies which regular expression + library to use. The choice is between regex + implementation from GLIBC and regex implementation from + libiberty. The GLIBC variant is fully POSIX conformant and + optimized for speed; regex from libiberty is more than twice + as small while still is enough for most practical purposes. + +config POSIX_WIDE_CHAR_DEVICE_IO + bool "Input and output functions for wide characters" + depends on POSIX_C_LANG_WIDE_CHAR + help + This option group includes functions for reading and writing + wide characters to and from streams. + + This option group includes the following functions: + + fgetwc fwprintf putwchar vwscanf + fgetws fwscanf ungetwc wprintf + fputwc getwc vfwprintf wscanf + fputws getwchar vfwscanf + fwide putwc vwprintf + + This option group further includes the following unlocked + variants of the above functions: + + fgetwc_unlocked getwc_unlocked + fgetws_unlocked getwchar_unlocked + fputwc_unlocked putwc_unlocked + fputws_unlocked putwchar_unlocked + + Note that the GNU standard C++ library, 'libstdc++.so', uses + some of these functions; you will not be able to link or run + C++ programs if you disable this option group. + + This option group also affects the behavior of the following + functions: + + fdopen + fopen + fopen64 + freopen + freopen64 + + These functions all take an OPENTYPE parameter which may + contain a string of the form ",ccs=CHARSET", indicating that + the underlying file uses the character set named CHARSET. + This produces a wide-oriented stream, which is only useful + when the functions included in this option group are present. + If the user attempts to open a file specifying a character set + in the OPENTYPE parameter, and EGLIBC was built with this + option group disabled, the function returns NULL, and sets + errno to EINVAL. + + +# This helps Emacs users browse this file using the page motion commands +# and commands like 'pages-directory'. +# Local Variables: +# page-delimiter: "^config\\s-" +# End: Index: git/option-groups.mak =================================================================== --- /dev/null 1970-01-01 00:00:00.000000000 +0000 +++ git/option-groups.mak 2014-08-27 07:26:51.652070587 +0000 @@ -0,0 +1,41 @@ +# Setup file for subdirectory Makefiles that define EGLIBC option groups. + +# EGLIBC shouldn't need to override this. However, the +# cross-build-friendly localedef includes this makefile to get option +# group variable definitions; it uses a single build tree for all the +# multilibs, and needs to be able to specify a different option group +# configuration file for each multilib. +option_group_config_file ?= $(objdir)/option-groups.config + +# Read the default settings for all options. +# We're included before ../Rules, so we can't assume $(..) is set. +include $(firstword $(..) ../)option-groups.defaults + +# Read the developer's option group selections, overriding the +# defaults from option-groups.defaults. +-include $(option_group_config_file) + +# $(call option-disabled, VAR) is 'y' if VAR is not 'y', or 'n' otherwise. +# VAR should be a variable name, not a variable reference; this is +# less general, but more terse for the intended use. +# You can use it to add a file to a list if an option group is +# disabled, like this: +# routines-$(call option-disabled, OPTION_POSIX_C_LANG_WIDE_CHAR) += ... +define option-disabled +$(firstword $(subst y,n,$(filter y,$($(strip $(1))))) y) +endef + +# Establish 'routines-y', etc. as simply-expanded variables. +aux-y := +extra-libs-others-y := +extra-libs-y := +extra-objs-y := +install-bin-y := +install-others-y := +install-sbin-y := +others-y := +others-pie-y := +routines-y := +test-srcs-y := +tests-y := +xtests-y := Index: git/option-groups.defaults =================================================================== --- /dev/null 1970-01-01 00:00:00.000000000 +0000 +++ git/option-groups.defaults 2014-08-27 07:24:41.652070587 +0000 @@ -0,0 +1,47 @@ +# This file sets default values for all option group variables +# mentioned in option-groups.def; see that file for a description of +# each option group. +# +# Subdirectory makefiles include this file before including the user's +# settings from option-groups.config at the top of the build tree; +# that file need only refer to those options whose default settings +# are to be changed. +# +# By default, all option groups are enabled. +OPTION_EGLIBC_ADVANCED_INET6 = y +OPTION_EGLIBC_BACKTRACE = y +OPTION_EGLIBC_BIG_MACROS = y +OPTION_EGLIBC_BSD = y +OPTION_EGLIBC_CXX_TESTS = y +OPTION_EGLIBC_CATGETS = y +OPTION_EGLIBC_CHARSETS = y +OPTION_EGLIBC_CRYPT = y +OPTION_EGLIBC_CRYPT_UFC = y +OPTION_EGLIBC_DB_ALIASES = y +OPTION_EGLIBC_ENVZ = y +OPTION_EGLIBC_FCVT = y +OPTION_EGLIBC_FMTMSG = y +OPTION_EGLIBC_FSTAB = y +OPTION_EGLIBC_FTRAVERSE = y +OPTION_EGLIBC_GETLOGIN = y +OPTION_EGLIBC_IDN = y +OPTION_EGLIBC_INET = y +OPTION_EGLIBC_INET_ANL = y +OPTION_EGLIBC_LIBM = y +OPTION_EGLIBC_LOCALES = y +OPTION_EGLIBC_LOCALE_CODE = y +OPTION_EGLIBC_MEMUSAGE = y +OPTION_EGLIBC_NIS = y +OPTION_EGLIBC_NSSWITCH = y +OPTION_EGLIBC_RCMD = y +OPTION_EGLIBC_RTLD_DEBUG = y +OPTION_EGLIBC_SPAWN = y +OPTION_EGLIBC_STREAMS = y +OPTION_EGLIBC_SUNRPC = y +OPTION_EGLIBC_UTMP = y +OPTION_EGLIBC_UTMPX = y +OPTION_EGLIBC_WORDEXP = y +OPTION_POSIX_C_LANG_WIDE_CHAR = y +OPTION_POSIX_REGEXP = y +OPTION_POSIX_REGEXP_GLIBC = y +OPTION_POSIX_WIDE_CHAR_DEVICE_IO = y Index: git/Makefile =================================================================== --- git.orig/Makefile 2014-08-27 07:24:37.540070587 +0000 +++ git/Makefile 2014-08-27 07:24:41.656070587 +0000 @@ -24,6 +24,7 @@ include Makeconfig +include options-config/Makefile # This is the default target; it makes everything except the tests. .PHONY: all Index: git/EGLIBC.option-groups =================================================================== --- /dev/null 1970-01-01 00:00:00.000000000 +0000 +++ git/EGLIBC.option-groups 2014-08-27 07:24:41.656070587 +0000 @@ -0,0 +1,122 @@ + -*- mode: text -*- + + The EGLIBC Component Configuration System + Jim Blandy + +Introduction + +The GNU C library (GLIBC) provides a broad range of functionality, +ranging from internationalization support to transcendental +mathematical functions. Its website boasts that "nearly all known and +useful functions from any other C library are available." This +exhaustive approach has been one of GLIBC's strengths on desktop and +server systems, but it has also given GLIBC a large footprint, both in +memory and on disk, making it a challenge to use in embedded systems +with limited resources. + +The Embedded GNU C library (EGLIBC) is a variant of the GNU C library +designed to work well on embedded systems. In particular, EGLIBC's +component configuration system allows embedded developers to build +customized versions of the library that include only the features +their application uses, reducing its space requirements. + +EGLIBC's component configuration system categorizes the library's +functions into "option groups", and allows you to include or exclude +option groups individually. Some option groups depend on others; +EGLIBC tracks these relationships, and ensures that the selected +configuration yields a functioning library. + + +Consistent and Predictable Behavior + +A flexible configuration system is a mixed blessing: if the options +offered are poorly designed, it can be hard to see which choices will +have the desired effects, and choices with obscure consequences can +make debugging difficult. EGLIBC's configuration follows some general +principles to reduce these risks: + +- EGLIBC has a single default configuration for each target + architecture. + +- In the default configuration, all option groups are enabled, and + EGLIBC is upwardly API- and ABI-compatible with GLIBC. + +- As much as possible, configurations only affect what functions are + present, not how they behave. If the system works with an option + group disabled, it will still work with it enabled. + +- As much as possible, configurations only select option groups --- + they do not describe characteristics of the target architecture. + +These rules mean that you have a simple debugging strategy available +if you suspect that your EGLIBC configuration might be the source of a +problem: fall back to the default configuration, re-test, and then +disable option groups one by one, until the problem reappears. + + +The Option Groups + +To see the current full list of implemented option groups, refer to the +file 'option-groups.def' at the top of the source tree, or run +'make menuconfig' from the top-level build directory. + +The POSIX.1-2001 specification includes a suggested partition of all +the functions in the POSIX C API into option groups: math functions +like 'sin' and 'cos'; networking functions like 'socket' and +'connect'; and so on. EGLIBC could use this partitioning as the basis +for future option groups. + + +Implementation + +The EGLIBC component configuration system resembles the approach used +by the Linux kernel to select device drivers, network protocols, and +other features. A file named 'option-groups.config' in the top-level +build directory contains assignments to Make variables, each of which +enables or disables a particular option group. If the variable's +value is set to 'y', then the option group is enabled; if it set to +anything else, the option group is omitted. The file +'option-groups.defaults', at the top of the source tree, establishes +default values for all variables; all option groups are enabled by +default. + +For example, the following 'option-groups.config' would omit locale +data, but include mathematical functions, and everything else: + + OPTION_EGLIBC_LOCALES = n + OPTION_EGLIBC_LIBM = y + +Like the Linux kernel, EGLIBC supports a similar set of '*config' make +targets to make it easier to create 'option-groups.config', with all +dependencies between option groups automatically satisfied. Run +'make help' to see the list of supported make config targets. For +example, 'make menuconfig' will update the current config utilising a +menu based program. + +The option group names and their type (boolean, int, hex, string), help +description, and dependencies with other option groups, are described by +'option-groups.def' at the top of the source tree, analogous to the +'Kconfig' files in the Linux kernel. + +In general, each option group variable controls whether a given set of +object files in EGLIBC is compiled and included in the final +libraries, or omitted from the build. + +Each subdirectory's Makefile categorizes its routines, libraries, and +executables by option group. For example, EGLIBC's 'math/Makefile' +places the 'libm' library in the OPTION_EGLIBC_LIBM group as follows: + + extra-libs-$(OPTION_EGLIBC_LIBM) := libm + +Finally, common code in 'Makerules' cites the value of the variable +'extra-libs-y', selecting only those libraries that belong to enabled +option groups to be built. + + +Current Status and Future Directions + +The EGLIBC component configuration system described here is still +under development. + +We have used the system to subset some portions of EGLIBC's +Index: libc/configure.ac Index: git/configure.ac =================================================================== --- git.orig/configure.ac 2014-08-27 07:24:41.196070587 +0000 +++ git/configure.ac 2014-08-27 07:24:41.656070587 +0000 @@ -127,6 +127,16 @@ [sysheaders='']) AC_SUBST(sysheaders) +AC_ARG_WITH([kconfig], + AC_HELP_STRING([--with-kconfig=PATH], + [location of kconfig tools to use (from Linux + kernel builds) to re-use for configuring EGLIBC + option groups]), + [KCONFIG_TOOLS=$withval], + [KCONFIG_TOOLS='']) +AC_SUBST(KCONFIG_TOOLS) + + AC_SUBST(use_default_link) AC_ARG_WITH([default-link], AC_HELP_STRING([--with-default-link], Index: git/config.make.in =================================================================== --- git.orig/config.make.in 2014-08-27 07:24:37.560070587 +0000 +++ git/config.make.in 2014-08-27 07:24:41.656070587 +0000 @@ -46,6 +46,8 @@ c++-sysincludes = @CXX_SYSINCLUDES@ all-warnings = @all_warnings@ +kconfig_tools = @KCONFIG_TOOLS@ + have-z-combreloc = @libc_cv_z_combreloc@ have-z-execstack = @libc_cv_z_execstack@ have-Bgroup = @libc_cv_Bgroup@ Index: git/configure =================================================================== --- git.orig/configure 2014-08-27 07:24:41.192070587 +0000 +++ git/configure 2014-08-27 07:24:41.660070587 +0000 @@ -619,6 +619,7 @@ PERL BASH_SHELL libc_cv_gcc_static_libgcc +KCONFIG_TOOLS CXX_SYSINCLUDES SYSINCLUDES AUTOCONF @@ -733,6 +734,7 @@ with_binutils with_selinux with_headers +with_kconfig with_default_link enable_sanity_checks enable_shared @@ -1437,6 +1439,9 @@ --with-selinux if building with SELinux support --with-headers=PATH location of system headers to use (for example /usr/src/linux/include) [default=compiler default] + --with-kconfig=PATH location of kconfig tools to use (from Linux kernel + builds) to re-use for configuring EGLIBC option + groups --with-default-link do not use explicit linker scripts --with-cpu=CPU select code for CPU variant @@ -3400,6 +3405,14 @@ +# Check whether --with-kconfig was given. +if test "${with_kconfig+set}" = set; then + withval=$with_kconfig; KCONFIG_TOOLS=$withval +else + KCONFIG_TOOLS='' +fi + + # Check whether --with-default-link was given. if test "${with_default_link+set}" = set; then : Index: git/options-config/Makefile =================================================================== --- /dev/null 1970-01-01 00:00:00.000000000 +0000 +++ git/options-config/Makefile 2014-08-27 07:24:41.652070587 +0000 @@ -0,0 +1,55 @@ +# =========================================================================== +# EGLIBC option-groups configuration targets +# These targets are included from top-level makefile + +ifneq ($(kconfig_tools),) +ifneq (no,$(PERL)) + +ocdir := options-config + +OconfigDefaults := option-groups.defaults +OconfigDefaults_tmp := $(common-objpfx).tmp.defconfig +OconfigDef := option-groups.def +Oconfig := $(common-objpfx)option-groups.config +Oconfig_tmp := $(common-objpfx).tmp.config + +conf := $(kconfig_tools)/conf +mconf := $(kconfig_tools)/mconf + +preproc := $(PERL) $(ocdir)/config-preproc.pl +postproc := $(PERL) $(ocdir)/config-postproc.pl + +PHONY += defconfig config menuconfig + +defconfig: $(conf) $(OconfigDefaults) $(OconfigDef) + rm -f $(OconfigDefaults_tmp) + rm -f $(Oconfig_tmp) + $(preproc) $(OconfigDefaults) > $(OconfigDefaults_tmp) + KCONFIG_CONFIG=$(Oconfig_tmp) $< --defconfig=$(OconfigDefaults_tmp) \ + $(OconfigDef) + $(postproc) $(OconfigDefaults) $(Oconfig_tmp) > $(Oconfig) + rm $(Oconfig_tmp) + rm $(OconfigDefaults_tmp) + +config: $(conf) $(OconfigDefaults) $(OconfigDef) + rm -f $(Oconfig_tmp) + $(preproc) $(wildcard $(Oconfig)) > $(Oconfig_tmp) + KCONFIG_CONFIG=$(Oconfig_tmp) $< --oldaskconfig $(OconfigDef) + $(postproc) $(OconfigDefaults) $(Oconfig_tmp) > $(Oconfig) + rm $(Oconfig_tmp) + +menuconfig: $(mconf) $(OconfigDefaults) $(OconfigDef) + rm -f $(Oconfig_tmp) + $(preproc) $(wildcard $(Oconfig)) > $(Oconfig_tmp) + KCONFIG_CONFIG=$(Oconfig_tmp) $< $(OconfigDef) + $(postproc) $(OconfigDefaults) $(Oconfig_tmp) > $(Oconfig) + rm $(Oconfig_tmp) + +# Help text used by make help +help: + @echo ' defconfig - New config with default from default config' + @echo ' config - Update current config utilising a line-oriented program' + @echo ' menuconfig - Update current config utilising a menu based program' + +endif +endif Index: git/options-config/config-postproc.pl =================================================================== --- /dev/null 1970-01-01 00:00:00.000000000 +0000 +++ git/options-config/config-postproc.pl 2014-08-27 07:24:41.652070587 +0000 @@ -0,0 +1,58 @@ +#!/usr/bin/perl + +$usage = "usage: $0 \n"; + +die "$usage" unless @ARGV; +$defaults = shift @ARGV; +die "$usage" unless @ARGV; +die "Could not open $ARGV[0]" unless -T $ARGV[0]; + +sub yank { + @option = grep(!($_ =~ /$_[0]\s*=/), @option); +} + +open(DEFAULTS, $defaults) || die "Could not open $defaults\n"; + +# get the full list of available options using the default config file +$i = 0; +while () { + if (/^\s*OPTION_(\w+\s*=.*$)/) { + $option[$i++] = $1; + } +} + +# now go through the config file, making the necessary changes +while (<>) { + if (/Linux Kernel Configuration/) { + # change title + s/Linux Kernel/Option Groups/; + print; + } elsif (/^\s*CONFIG_(\w+)\s*=/) { + # this is an explicit option set line, change CONFIG_ to OPTION_ + # before printing and remove this option from option list + $opt = $1; + yank($opt); + s/CONFIG_/OPTION_/g; + print; + } elsif (/^\s*#\s+CONFIG_(\w+) is not set/) { + # this is a comment line for an unset boolean option, change CONFIG_ + # to OPTION_, remove this option from option list, and convert to + # explicit OPTION_FOO=n + $opt = $1; + yank($opt); + s/CONFIG_/OPTION_/g; + print "OPTION_$opt=n\n"; + } else { + print; + } +} + +# any boolean options left in @options, are options that were not mentioned in +# the config file, and implicitly that means the option must be set =n, +# so do that here. +foreach $opt (@option) { + if ($opt =~ /=\s*[yn]/) { + $opt =~ s/=\s*[yn]/=n/; + print "OPTION_$opt\n"; + } +} Index: git/options-config/config-preproc.pl =================================================================== --- /dev/null 1970-01-01 00:00:00.000000000 +0000 +++ git/options-config/config-preproc.pl 2014-08-27 07:24:41.652070587 +0000 @@ -0,0 +1,8 @@ +#!/usr/bin/perl + +if (@ARGV) { + while (<>) { + s/OPTION_/CONFIG_/g; + print; + } +} Index: git/scripts/option-groups.awk =================================================================== --- /dev/null 1970-01-01 00:00:00.000000000 +0000 +++ git/scripts/option-groups.awk 2014-08-27 07:26:51.652070587 +0000 @@ -0,0 +1,63 @@ +# option-groups.awk --- generate option group header file +# Given input files containing makefile-style assignments to variables, +# print out a header file that #defines an appropriate preprocessor +# symbol for each variable left set to 'y'. + +BEGIN { FS="=" } + +# Trim spaces. +{ gsub (/[[:blank:]]/, "") } + +# Skip comments. +/^#/ { next } + +# Process assignments. +NF == 2 { + vars[$1] = $2 +} + +# Print final values. +END { + print "/* This file is automatically generated by scripts/option-groups.awk" + print " in the EGLIBC source tree." + print "" + print " It defines macros that indicate which EGLIBC option groups were" + print " configured in 'option-groups.config' when this C library was" + print " built. For each option group named OPTION_foo, it #defines" + print " __OPTION_foo to be 1 if the group is enabled, or #defines that" + print " symbol to be 0 if the group is disabled. */" + print "" + print "#ifndef __GNU_OPTION_GROUPS_H" + print "#define __GNU_OPTION_GROUPS_H" + print "" + + # Produce a sorted list of variable names. + i=0 + for (var in vars) + names[i++] = var + n = asort (names) + + for (i = 1; i <= n; i++) + { + var = names[i] + if (var ~ /^OPTION_/) + { + if (vars[var] == "y") + print "#define __" var " 1" + else if (vars[var] == "n") + print "#define __" var " 0" + else if (vars[var] ~ /^[0-9]+/ || + vars[var] ~ /^0x[0-9aAbBcCdDeEfF]+/ || + vars[var] ~ /^\"/) + print "#define __" var " " vars[var] + else + print "/* #undef __" var " */" + # Ignore variables that don't have boolean, int, hex, or + # string values. Ideally, this would be driven by the types + # given in option-groups.def. + } + } + + print "" + print "#endif /* __GNU_OPTION_GROUPS_H */" +}