[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Patches] menuconfig for EGLIBC
- To: "Joseph S. Myers" <joseph@xxxxxxxxxxxxxxxx>
- Subject: Re: [Patches] menuconfig for EGLIBC
- From: Steve Longerbeam <steve_longerbeam@xxxxxxxxxx>
- Date: Wed, 7 Dec 2011 10:22:09 -0800
On 12/05/2011 05:39 PM, Joseph S. Myers wrote:
Only a couple of comments on this patch:
In config-postproc.pl you call a subroutine with leading '&', but man
perlstyle advises "Call your subroutines as if they were functions or list
operators to avoid excessive ampersands and parentheses." - it's rarely
necessary to use the '&' in modern perl (as I recall, it was perl 4 that
required it).
It appears to be usual for makefiles to call perl scripts using $(PERL)
rather than directly.
attached is the updated patch to address above issues.
Steve
--
Steve Longerbeam | Senior Embedded Engineer, ESD Services
Mentor Embedded(tm) | 46871 Bayside Parkway, Fremont, CA 94538
P 510.354.5838 | M 408.410.2735
Nucleus(r) | Linux(r) | Android(tm) | Services | UI | Multi-OS
Index: libc/EGLIBC.cross-building
===================================================================
--- libc/EGLIBC.cross-building (revision 16130)
+++ libc/EGLIBC.cross-building (working copy)
@@ -243,9 +243,29 @@
> $src/libc/configure \
> --prefix=/usr \
> --with-headers=$sysroot/usr/include \
+ > --with-kconfig=$obj/linux/scripts/kconfig \
> --build=$build \
> --host=$target \
> --disable-profile --without-gd --without-cvs --enable-add-ons
+
+Note the additional '--with-kconfig' option. This tells EGLIBC where to
+find the host config tools used by the kernel 'make config' and 'make
+menuconfig'. These tools can be re-used by EGLIBC for its own 'make
+*config' support, which will create 'option-groups.config' for you.
+But first make sure those tools have been built by running some
+dummy 'make *config' calls in the kernel directory:
+
+ $ cd $obj/linux
+ $ PATH=$tools/bin:$PATH make config \
+ > ARCH=$linux_arch CROSS_COMPILE=$target- \
+ $ PATH=$tools/bin:$PATH make menuconfig \
+ > ARCH=$linux_arch CROSS_COMPILE=$target- \
+
+Now we can configure and build the full EGLIBC:
+
+ $ cd $obj/eglibc
+ $ PATH=$tools/bin:$PATH make defconfig
+ $ PATH=$tools/bin:$PATH make menuconfig
$ PATH=$tools/bin:$PATH make
$ PATH=$tools/bin:$PATH make install install_root=$sysroot
Index: libc/configure.in
===================================================================
--- libc/configure.in (revision 16130)
+++ libc/configure.in (working copy)
@@ -101,6 +101,16 @@
[sysheaders=$withval],
[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: libc/config.make.in
===================================================================
--- libc/config.make.in (revision 16130)
+++ libc/config.make.in (working copy)
@@ -44,6 +44,8 @@
c++-sysincludes = @CXX_SYSINCLUDES@
all-warnings = @all_warnings@
+kconfig_tools = @KCONFIG_TOOLS@
+
elf = @elf@
have-z-combreloc = @libc_cv_z_combreloc@
have-z-execstack = @libc_cv_z_execstack@
Index: libc/options-config/config-postproc.pl
===================================================================
--- libc/options-config/config-postproc.pl (revision 0)
+++ libc/options-config/config-postproc.pl (revision 0)
@@ -0,0 +1,54 @@
+#!/usr/bin/perl
+
+$usage = "usage: $0 <default config file> <config file>\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($_ ne $_[0], @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 (<DEFAULTS>) {
+ 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, 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 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) {
+ print "OPTION_$opt=n\n";
+}
Index: libc/options-config/config-preproc.pl
===================================================================
--- libc/options-config/config-preproc.pl (revision 0)
+++ libc/options-config/config-preproc.pl (revision 0)
@@ -0,0 +1,8 @@
+#!/usr/bin/perl
+
+if (@ARGV) {
+ while (<>) {
+ s/OPTION_/CONFIG_/g;
+ print;
+ }
+}
Index: libc/options-config/Makefile
===================================================================
--- libc/options-config/Makefile (revision 0)
+++ libc/options-config/Makefile (revision 0)
@@ -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: libc/option-groups.defaults
===================================================================
--- libc/option-groups.defaults (revision 16130)
+++ libc/option-groups.defaults (working copy)
@@ -8,41 +8,41 @@
# 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_LIBM_BIG = 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
+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_LIBM_BIG=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: libc/option-groups.def
===================================================================
--- libc/option-groups.def (revision 16130)
+++ libc/option-groups.def (working copy)
@@ -4,19 +4,19 @@
#
# An entry of the form:
#
-# config OPTION_GROUP_NAME
+# 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 OPTION_GROUP_NAME, with
+# 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' line, indicating which other options
+# 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.
#
@@ -41,9 +41,9 @@
# although this simply reestablishes the value already set by
# 'option-groups.defaults'.
-config OPTION_EGLIBC_ADVANCED_INET6
+config EGLIBC_ADVANCED_INET6
bool "IPv6 Advanced Sockets API support (RFC3542)"
- depends OPTION_EGLIBC_INET
+ depends on EGLIBC_INET
help
This option group includes the functions specified by RFC 3542,
"Advanced Sockets Application Program Interface (API) for
@@ -71,7 +71,7 @@
inet6_rth_segments
inet6_rth_space
-config OPTION_EGLIBC_BACKTRACE
+config EGLIBC_BACKTRACE
bool "Functions for producing backtraces"
help
This option group includes functions for producing a list of
@@ -85,7 +85,7 @@
backtrace_symbols
backtrace_symbols_fd
-config OPTION_EGLIBC_BIG_MACROS
+config EGLIBC_BIG_MACROS
bool "Use extensive inline code"
help
This option group specifies whether certain pieces of code
@@ -93,7 +93,7 @@
group is not selected, function calls will be used instead,
hence reducing the library footprint.
-config OPTION_EGLIBC_BSD
+config EGLIBC_BSD
bool "BSD-specific functions, and their compatibility stubs"
help
This option group includes functions specific to BSD kernels.
@@ -109,10 +109,9 @@
revoke
setlogin
-config OPTION_EGLIBC_CXX_TESTS
+config EGLIBC_CXX_TESTS
bool "Tests that link against the standard C++ library."
- depends OPTION_POSIX_WIDE_CHAR_DEVICE_IO
- depends OPTION_EGLIBC_LIBM
+ 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
@@ -121,23 +120,22 @@
run.
The standard C++ library depends on the math library 'libm' and
- the wide character I/O functions included in EGLIBC. If those
- option groups are disabled, this test must also be disabled.
+ the wide character I/O functions included in EGLIBC. So those
+ option groups must be enabled if this test is enabled.
-config OPTION_EGLIBC_CATGETS
+config EGLIBC_CATGETS
bool "Functions for accessing message catalogs"
- depends OPTION_EGLIBC_LOCALE_CODE
+ 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 OPTION_EGLIBC_LOCALE_CODE
- option group; if you disable that, you must also disable this.
+ This option group depends on the EGLIBC_LOCALE_CODE
+ option group.
-config OPTION_EGLIBC_CHARSETS
+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
@@ -198,16 +196,16 @@
WCHAR_T - EGLIBC's internal form (target-endian,
32-bit ISO 10646)
-config OPTION_EGLIBC_CRYPT
+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 OPTION_EGLIBC_CRYPT_UFC
+config EGLIBC_CRYPT_UFC
bool "Ultra fast `crypt' implementation"
- depends OPTION_EGLIBC_CRYPT
+ depends on EGLIBC_CRYPT
help
This option group provides ultra fast DES-based implementation of
the `crypt' function. When this option group is disabled,
@@ -216,7 +214,7 @@
errno to ENOSYS if /salt/ passed does not correspond to either MD5,
SHA-256 or SHA-512 algorithm.
-config OPTION_EGLIBC_DB_ALIASES
+config EGLIBC_DB_ALIASES
bool "Functions for accessing the mail aliases database"
help
This option group includues functions for looking up mail
@@ -233,7 +231,7 @@
When this option group is disabled, the NSS service libraries
also lack support for querying their mail alias tables.
-config OPTION_EGLIBC_ENVZ
+config EGLIBC_ENVZ
bool "Functions for handling envz-style environment vectors."
help
This option group contains functions for creating and operating
@@ -248,7 +246,7 @@
envz_entry envz_remove
envz_get envz_strip
-config OPTION_EGLIBC_FCVT
+config EGLIBC_FCVT
bool "Functions for converting floating-point numbers to strings"
help
This option group includes functions for converting
@@ -262,14 +260,14 @@
fcvt_r qfcvt_r
gcvt qgcvt
-config OPTION_EGLIBC_FMTMSG
+config EGLIBC_FMTMSG
bool "Functions for formatting messages"
help
This option group includes the following functions:
addseverity fmtmsg
-config OPTION_EGLIBC_FSTAB
+config EGLIBC_FSTAB
bool "Access functions for 'fstab'"
help
This option group includes functions for reading the mount
@@ -283,7 +281,7 @@
getfsent setfsent
getfsfile
-config OPTION_EGLIBC_FTRAVERSE
+config EGLIBC_FTRAVERSE
bool "Functions for traversing file hierarchies"
help
This option group includes functions for traversing file
@@ -297,9 +295,9 @@
fts_set nftw64
fts_close
-config OPTION_EGLIBC_GETLOGIN
+config EGLIBC_GETLOGIN
bool "The getlogin function"
- depends OPTION_EGLIBC_UTMP
+ depends on EGLIBC_UTMP
help
This function group includes the 'getlogin' and 'getlogin_r'
functions, which return the user name associated by the login
@@ -309,17 +307,17 @@
fall back on 'getlogin' to find the user's login name for tilde
expansion when the 'HOME' environment variable is not set.
-config OPTION_EGLIBC_IDN
+config EGLIBC_IDN
bool "International domain names support"
help
This option group includes the `libcidn' library which
provides support for international domain names.
-config OPTION_EGLIBC_INET
+config EGLIBC_INET
bool "Networking support"
help
This option group includes networking-specific functions and
- data. With OPTION_EGLIBC_INET disabled, the EGLIBC
+ data. With EGLIBC_INET disabled, the EGLIBC
installation and API changes as follows:
- The following libraries are not installed:
@@ -439,14 +437,14 @@
use Unix-domain sockets to communicate with the syslog daemon;
syslog is valuable in non-networked contexts.
-config OPTION_EGLIBC_INET_ANL
+config EGLIBC_INET_ANL
bool "Asynchronous name lookup"
- depends OPTION_EGLIBC_INET
+ depends on EGLIBC_INET
help
This option group includes the `libanl' library which
provides support for asynchronous name lookup.
-config OPTION_EGLIBC_LIBM
+config EGLIBC_LIBM
bool "libm (math library)"
help
This option group includes the 'libm' library, containing
@@ -464,8 +462,9 @@
group, you will not be able to build 'libstdc++' against the
resulting EGLIBC installation.
-config OPTION_EGLIBC_LIBM_BIG
+config EGLIBC_LIBM_BIG
bool "Math library size"
+ depends on EGLIBC_LIBM
help
This option group enables default configuration of the math library.
Not selecting this option group removes most of the extended and
@@ -477,7 +476,7 @@
This option group is useful for systems that do not rely on precise
floating point math.
-config OPTION_EGLIBC_LOCALES
+config EGLIBC_LOCALES
bool "Locale definitions"
help
This option group includes all locale definitions other than
@@ -485,17 +484,17 @@
only the "C" locale is supported.
-config OPTION_EGLIBC_LOCALE_CODE
+config EGLIBC_LOCALE_CODE
bool "Locale functions"
- depends OPTION_POSIX_C_LANG_WIDE_CHAR
+ depends on POSIX_C_LANG_WIDE_CHAR
help
This option group includes locale support functions, programs,
- and libraries. With OPTION_EGLIBC_LOCALE_FUNCTIONS disabled,
+ 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 OPTION_EGLIBC_LOCALE_CODE disabled, the following
+ With EGLIBC_LOCALE_CODE disabled, the following
functions are omitted from libc:
duplocale localeconv nl_langinfo rpmatch strfmon_l
@@ -504,46 +503,43 @@
Furthermore, only the LC_CTYPE and LC_TIME categories of the
standard "C" locale are available.
- The OPTION_EGLIBC_CATGETS option group depends on this option
- group; if you disable OPTION_EGLIBC_LOCALE_CODE, you must also
- disable OPTION_EGLIBC_CATGETS.
+ The EGLIBC_CATGETS option group depends on this option group.
-config OPTION_EGLIBC_MEMUSAGE
+
+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.
- OPTION_EGLIBC_MEMUSAGE_DEFAULT_BUFFER_SIZE
+ EGLIBC_MEMUSAGE_DEFAULT_BUFFER_SIZE
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. OPTION_EGLIBC_MEMUSAGE_DEFAULT_BUFFER_SIZE option
+ 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 OPTION_EGLIBC_NIS
+config EGLIBC_NIS
bool "Support for NIS, NIS+, and the special 'compat' services."
- depends OPTION_EGLIBC_INET
- depends OPTION_EGLIBC_SUNRPC
+ 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 OPTION_EGLIBC_INET option
+ This option group depends on the EGLIBC_INET option
group; you must enable that to enable this option group.
-config OPTION_EGLIBC_NSSWITCH
+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;
@@ -557,12 +553,12 @@
'option-groups.config' file must set the following two
variables:
- OPTION_EGLIBC_NSSWITCH_FIXED_CONFIG
+ EGLIBC_NSSWITCH_FIXED_CONFIG
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 OPTION_EGLIBC_NSSWITCH were enabled, and
+ 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
@@ -580,7 +576,7 @@
you will probably want to delete references to databases not
needed on your system.
- OPTION_EGLIBC_NSSWITCH_FIXED_FUNCTIONS
+ EGLIBC_NSSWITCH_FIXED_FUNCTIONS
The EGLIBC build process uses this file to decide which
functions to make available from which service libraries.
@@ -598,28 +594,28 @@
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 OPTION_EGLIBC_NSSWITCH_FIXED_CONFIG
+ 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.
+ 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 OPTION_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.
+ 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 OPTION_EGLIBC_RCMD
+config EGLIBC_RCMD
bool "Support for 'rcmd' and related library functions"
- depends OPTION_EGLIBC_INET
+ depends on EGLIBC_INET
help
This option group includes functions for running commands on
remote machines via the 'rsh' protocol, and doing authentication
@@ -635,7 +631,7 @@
rresvport ruserpass
rresvport_af
-config OPTION_EGLIBC_RTLD_DEBUG
+config EGLIBC_RTLD_DEBUG
bool "Runtime linker debug print outs"
help
This option group enables debug output of the runtime linker
@@ -646,7 +642,7 @@
the `ldd' utility which may also be used by the prelinker.
In particular, the `--unused' ldd option will not work correctly.
-config OPTION_EGLIBC_SPAWN
+config EGLIBC_SPAWN
bool "Support for POSIX posix_spawn functions"
help
This option group includes the POSIX functions for executing
@@ -682,7 +678,7 @@
disabled, those programs will only operate on uncompressed
charmap files.
-config OPTION_EGLIBC_STREAMS
+config EGLIBC_STREAMS
bool "Support for accessing STREAMS."
help
This option group includes functions for reading and writing
@@ -698,14 +694,14 @@
isastream fdetach
putmsg
-config OPTION_EGLIBC_SUNRPC
+config EGLIBC_SUNRPC
bool "Support for the Sun 'RPC' protocol."
- depends OPTION_EGLIBC_INET
+ depends on EGLIBC_INET
help
This option group includes support for the Sun RPC protocols,
including the 'rpcgen' and 'rpcinfo' programs.
-config OPTION_EGLIBC_UTMP
+config EGLIBC_UTMP
bool "Older access functions for 'utmp' login records"
help
This option group includes the older 'utent' family of
@@ -732,9 +728,9 @@
libutil.so (and libutil.a)
-config OPTION_EGLIBC_UTMPX
+config EGLIBC_UTMPX
bool "POSIX access functions for 'utmp' login records"
- depends OPTION_EGLIBC_UTMP
+ depends on EGLIBC_UTMP
help
This option group includes the POSIX functions for reading and
writing user login records in the 'utmp' file (usually
@@ -755,21 +751,21 @@
updwtmpx
utmpxname
-config OPTION_EGLIBC_WORDEXP
+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 OPTION_POSIX_C_LANG_WIDE_CHAR
+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
- OPTION_POSIX_WIDE_CHAR_DEVICE_IO option group.
+ POSIX_WIDE_CHAR_DEVICE_IO option group.
This option group includes the following functions:
@@ -791,14 +787,14 @@
mbrlen wcscoll wcstol
mbrtowc wcscpy wcstold
-config OPTION_POSIX_REGEXP
+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 OPTION_POSIX_REGEXP disabled, the following functions are
+ With POSIX_REGEXP disabled, the following functions are
omitted from libc:
re_comp re_max_failures regcomp
@@ -812,9 +808,9 @@
<regexp.h> header file, 'compile', 'step', and 'advance', is
omitted.
-config OPTION_POSIX_REGEXP_GLIBC
+config POSIX_REGEXP_GLIBC
bool "Regular expressions from GLIBC"
- depends OPTION_POSIX_REGEXP
+ depends on POSIX_REGEXP
help
This option group specifies which regular expression
library to use. The choice is between regex
@@ -823,9 +819,9 @@
optimized for speed; regex from libiberty is more than twice
as small while still is enough for most practical purposes.
-config OPTION_POSIX_WIDE_CHAR_DEVICE_IO
+config POSIX_WIDE_CHAR_DEVICE_IO
bool "Input and output functions for wide characters"
- depends OPTION_POSIX_C_LANG_WIDE_CHAR
+ depends on POSIX_C_LANG_WIDE_CHAR
help
This option group includes functions for reading and writing
wide characters to and from <stdio.h> streams.
Index: libc/Makefile
===================================================================
--- libc/Makefile (revision 16130)
+++ libc/Makefile (working copy)
@@ -26,6 +26,7 @@
include Makeconfig
+include options-config/Makefile
# This is the default target; it makes everything except the tests.
.PHONY: all
Index: libc/configure
===================================================================
--- libc/configure (revision 16130)
+++ libc/configure (working copy)
@@ -702,6 +702,7 @@
libc_cv_have_bash2
BASH_SHELL
libc_cv_gcc_static_libgcc
+KCONFIG_TOOLS
CXX_SYSINCLUDES
SYSINCLUDES
AUTOCONF
@@ -811,6 +812,7 @@
with_selinux
with_xcoff
with_headers
+with_kconfig
with_default_link
enable_sanity_checks
enable_check_abi
@@ -1515,6 +1517,9 @@
--with-xcoff if using the XCOFF object format
--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-pkgversion=PKG Use PKG in the version string in place of "EGLIBC"
--with-bugurl=URL Direct users to URL to report a bug
@@ -3605,7 +3610,15 @@
+# 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
withval=$with_default_link; use_default_link=$withval
Index: libc/EGLIBC.option-groups
===================================================================
--- libc/EGLIBC.option-groups (revision 16130)
+++ libc/EGLIBC.option-groups (working copy)
@@ -56,34 +56,10 @@
The Option Groups
-EGLIBC currently implements the following option groups, also
-documented in the file 'option-groups.def':
+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.
-OPTION_EGLIBC_CATGETS
- This option group includes functions for accessing message
- catalogs: catopen, catclose, and catgets.
-
-OPTION_EGLIBC_LOCALES
- This option group includes all locale definitions other than
- those for the "C" locale. If this option group is omitted, then
- only the "C" locale is supported.
-
-OPTION_EGLIBC_LIBM
- 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.
-
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
@@ -110,6 +86,18 @@
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.
@@ -132,22 +120,3 @@
We have used the system to subset some portions of EGLIBC's
functionality. It needs to be extended to cover more of the library.
-
-At the moment, EGLIBC performs no sanity checks on the contents of
-'option-groups.config'; if an option group's name is mistyped, the
-option group is silently included in the build. EGLIBC should check
-that all variables set in 'option-groups.config' are proper option
-group names, and that their values are appropriate.
-
-Some portions of EGLIBC depend on others; for example, the Sun Remote
-Procedure Call functions in 'sunrpc' depend on the networking
-functions in 'inet'. The sanity checking described above should check
-that the selection configuration satisfies dependencies within EGLIBC,
-and produce a legible error message if it does not. At the moment,
-inconsistent configurations produce link errors late in the build
-process.
-
-The Linux kernel's configuration system provides interactive
-interfaces for creating and modifying configuration files (which also
-perform the sanity checking and dependency tracking described above).
-EGLIBC should provide similar interfaces.
_______________________________________________
Patches mailing list
Patches@xxxxxxxxxx
http://eglibc.org/cgi-bin/mailman/listinfo/patches