aboutsummaryrefslogtreecommitdiff
path: root/meta-linaro-integration/recipes-core/eglibc/eglibc-2.19/0001-eglibc-menuconfig-support.patch
blob: 4559a110fb96fbe960f364597c68f1b39d855478 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
Pulled from
http://www.eglibc.org/archives/patches/msg01042.html

Upstream-Status: Pending
Signed-off-by: Khem

Hi,

This patch adds 'make menuconfig' support to EGLIBC.


EGLIBC can re-use the Linux kernel kconfig host tools ('conf' and 'mconf') unmodified, by passing appropriate environment variables and with some pre- and post-processing on the input/output config files.

There are three new make targets supported, which all are defined in the new libc/options-config/Makefile, which is included by the top-level libc/Makefile:

- 'make defconfig'. This passes 'libc/option-groups.defaults' to 'conf' as a default config, and outputs 'option-groups.config' to the top-level build directory, which will be the same as the default config.

- 'make config'. This is the same line-oriented interface as in the Linux kernel. Input and output is 'option-groups.config' in the top-level build directory.

- 'make menuconfig'. This is the same menu-based interface as in the Linux kernel. Input and output is 'option-groups.config' in the top-level build directory.


Pre-Processing:


The Linux kernel kconfig tools expect a prefix of "CONFIG_" on all config option names, but EGLIBC expects a prefix of "OPTION_". The pre-processing script, libc/options-config/config-preproc.pl, simply replaces "CONFIG_ with "OPTION_" in the given config file. The libc/options-config/Makefile passes the script output to a temporary config file, which is then passed to 'conf' or 'mconf'.

Post-Processing (libc/options-config/config-postproc.pl):


- Disabled options are output as a comment line of the form "# CONFIG_FOO is not set". This needs to be changed to an explicit "CONFIG_FOO=n" in order to be compatible with 'option-groups.awk' which generates the option-groups.h header.

- "CONFIG_" prefix is changed back to "OPTION_".


- The kconfig tools will not output anything for options that depend on a parent option, when the parent option is disabled. This implicit disable must be converted to an explicit "CONFIG_FOO=n" in order to be compatible with the way EGLIBC overrides the default option settings in 'libc/option-groups.defaults' with those in 'option-groups.config'.


A new configure option, '--with-kconfig=<PATH>', tells EGLIBC where to find the pre-built 'conf' and 'mconf' host tools from Linux kernel builds.

libc/EGLIBC.cross-building is updated to include instructions for using '--with-kconfig' for the final EGLIBC build, and shows how and when to run 'make *config'.

libc/EGLIBC.option-groups is updated to include new information on the menuconfig support.

Thanks,

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.orig/EGLIBC.cross-building
+++ libc/EGLIBC.cross-building
@@ -243,9 +243,29 @@ full EGLIBC build:
     > $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.ac
===================================================================
--- libc.orig/configure.ac
+++ libc/configure.ac
@@ -127,6 +127,16 @@ AC_ARG_WITH([headers],
 	    [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: libc/config.make.in
===================================================================
--- libc.orig/config.make.in
+++ libc/config.make.in
@@ -45,6 +45,8 @@ sysincludes = @SYSINCLUDES@
 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: libc/options-config/config-postproc.pl
===================================================================
--- /dev/null
+++ libc/options-config/config-postproc.pl
@@ -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
===================================================================
--- /dev/null
+++ libc/options-config/config-preproc.pl
@@ -0,0 +1,8 @@
+#!/usr/bin/perl
+
+if (@ARGV) {
+    while (<>) {
+	s/OPTION_/CONFIG_/g;
+	print;
+    }
+}
Index: libc/options-config/Makefile
===================================================================
--- /dev/null
+++ libc/options-config/Makefile
@@ -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.def
===================================================================
--- libc.orig/option-groups.def
+++ libc/option-groups.def
@@ -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 @@ config OPTION_EGLIBC_ADVANCED_INET6
          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 @@ config OPTION_EGLIBC_BACKTRACE
          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 @@ config OPTION_EGLIBC_BIG_MACROS
        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 @@ config OPTION_EGLIBC_BSD
          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 @@ config OPTION_EGLIBC_CXX_TESTS
        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 @@ config OPTION_EGLIBC_CHARSETS
           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 @@ config OPTION_EGLIBC_CRYPT_UFC
        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 @@ config OPTION_EGLIBC_DB_ALIASES
        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 @@ config OPTION_EGLIBC_ENVZ
         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 @@ config OPTION_EGLIBC_FCVT
 	 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 @@ config OPTION_EGLIBC_FSTAB
          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 @@ config OPTION_EGLIBC_FTRAVERSE
 	 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 @@ config OPTION_EGLIBC_GETLOGIN
        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 @@ config OPTION_EGLIBC_INET
        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,7 +462,7 @@ config OPTION_EGLIBC_LIBM
        group, you will not be able to build 'libstdc++' against the
        resulting EGLIBC installation.
 
-config OPTION_EGLIBC_LOCALES
+config EGLIBC_LOCALES
    bool "Locale definitions"
    help
        This option group includes all locale definitions other than
@@ -472,17 +470,17 @@ config OPTION_EGLIBC_LOCALES
        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
@@ -491,46 +489,43 @@ config OPTION_EGLIBC_LOCALE_CODE
        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;
@@ -544,12 +539,12 @@ config OPTION_EGLIBC_NSSWITCH
        '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
@@ -567,7 +562,7 @@ config OPTION_EGLIBC_NSSWITCH
           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.
@@ -585,28 +580,28 @@ config OPTION_EGLIBC_NSSWITCH
           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.
-
-       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.
+          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 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
@@ -622,7 +617,7 @@ config OPTION_EGLIBC_RCMD
         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
@@ -633,7 +628,7 @@ config OPTION_EGLIBC_RTLD_DEBUG
       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
@@ -669,7 +664,7 @@ config OPTION_EGLIBC_SPAWN
       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
@@ -685,14 +680,14 @@ config OPTION_EGLIBC_STREAMS
         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
@@ -719,9 +714,9 @@ config OPTION_EGLIBC_UTMP
 
          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
@@ -742,21 +737,21 @@ config OPTION_EGLIBC_UTMPX
          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:
 
@@ -778,14 +773,14 @@ config OPTION_POSIX_C_LANG_WIDE_CHAR
           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
@@ -799,9 +794,9 @@ config OPTION_POSIX_REGEXP
         <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
@@ -810,9 +805,9 @@ config OPTION_POSIX_REGEXP_GLIBC
         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.orig/Makefile
+++ libc/Makefile
@@ -24,6 +24,7 @@ endif
 
 include Makeconfig
 
+include options-config/Makefile
 
 # This is the default target; it makes everything except the tests.
 .PHONY: all
Index: libc/configure
===================================================================
--- libc.orig/configure
+++ libc/configure
@@ -621,6 +621,7 @@ KSH
 libc_cv_have_bash2
 BASH_SHELL
 libc_cv_gcc_static_libgcc
+KCONFIG_TOOLS
 CXX_SYSINCLUDES
 SYSINCLUDES
 AUTOCONF
@@ -734,6 +735,7 @@ with_fp
 with_binutils
 with_selinux
 with_headers
+with_kconfig
 with_default_link
 enable_sanity_checks
 enable_shared
@@ -1438,6 +1440,9 @@ Optional Packages:
   --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
 
@@ -3401,6 +3406,14 @@ fi
 
 
 
+# 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: libc/EGLIBC.option-groups
===================================================================
--- libc.orig/EGLIBC.option-groups
+++ libc/EGLIBC.option-groups
@@ -56,33 +56,9 @@ disable option groups one by one, until
 
 The Option Groups
 
-EGLIBC currently implements the following option groups, also
-documented in the file 'option-groups.def':
-
-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.
+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
@@ -110,6 +86,18 @@ data, but include mathematical functions
    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 @@ under development.
 
 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.